1. 程式人生 > >Struts2第四天:Struts2的攔截器和標籤庫

Struts2第四天:Struts2的攔截器和標籤庫

目錄

1.Struts2的攔截器(******)

1.1什麼是攔截器

1.2Struts2的執行流程

1.3攔截器入門:

1.3.1編寫攔截器類

1.3.2對攔截器進行配置

2.Struts2的標籤庫

2.1通用標籤庫

2.2判斷標籤

2.3遍歷標籤

2.2UI標籤庫(方便資料回顯)


 

1.Struts2的攔截器(******)

1.1什麼是攔截器

  • Interceptor:攔截器,起到攔截Action的作用。
    • Filter:過濾器,過濾從客戶端向伺服器傳送的請求。
    • Interceptor:攔截器,攔截是客戶端對Action的訪問。更細粒度化的攔截。(攔截Action中的具體的方法)。
  • Struts2框架核心的功能都是依賴攔截器實現。

1.2Struts2的執行流程

客戶端向伺服器傳送一個Action的請求,執行核心過濾器(doFilter)方法。在這個方法中,呼叫executeAction()方法,在這個方法內部呼叫dispatcher.serviceAction();在這個方法內部建立一個Action代理,最終執行的是Action代理中的execute(),在代理中執行的execute方法中呼叫ActionInvocation的invoke方法。在這個方法內部遞迴執行一組攔截器(完成部分功能),如果沒有下一個攔截器,就會執行目標Action,根據Action的返回的結果進行頁面跳轉。

1.3攔截器入門:

1.3.1編寫攔截器類

  1. 編寫一個類實現Interceptor介面或者繼承AbstractInterceptor類。
/**  

*   

* 專案名稱:Struts2day04  

* 類名稱:InterceptorDemo1  

* 類描述:攔截器入門  

* 建立人:yangyangyang  

* 建立時間:2018年12月1日 上午11:32:47  

* 修改人:yangyangyang  

* 修改時間:2018年12月1日 上午11:32:47  

* 修改備註:  

* @version   

*   

*/



public class InterceptorDemo1 extends AbstractInterceptor {



      /* (non-Javadoc)

       * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)

       */

      @Override

      public String intercept(ActionInvocation invocation) throws Exception {

           System.out.println("攔截器1執行了。。。。");

           String object=invocation.invoke();

           System.out.println("攔截器1執行結束。。。。");

           return object;

      }



}

1.3.2對攔截器進行配置

  1. 第一種定義攔截器進行配置
<package name="demo1" extends="struts-default" namespace="/">

        <!-- 定義攔截器 -->

        <interceptors>

               <interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>

               <interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>

        </interceptors>

       

        <action name="actionDemo1" class="com.albertyy.action.ActionDemo1">

              <result>/demo1/demo1.jsp</result>

             

              <!-- 引入攔截器(一旦引入自定義攔截器,預設攔截器棧的攔截器就不執行了) -->

               <interceptor-ref name="defaultStack"></interceptor-ref>

               <interceptor-ref name="InterceptorDemo1"></interceptor-ref>

               <interceptor-ref name="InterceptorDemo2"></interceptor-ref>

        </action>

    </package>
  1. 第二種定義一個攔截器棧的方式

<package name="demo1" extends="struts-default" namespace="/">

        <!-- 定義攔截器 -->

        <interceptors>

               <interceptor name="InterceptorDemo1" class="com.albertyy.interceptor.InterceptorDemo1"></interceptor>

               <interceptor name="InterceptorDemo2" class="com.albertyy.interceptor.InterceptorDemo2"></interceptor>

               <!-- 定義攔截器棧 -->

              <interceptor-stack name="myStack">

                    <interceptor-ref name="defaultStack"></interceptor-ref>

                     <interceptor-ref name="InterceptorDemo1"></interceptor-ref>

                     <interceptor-ref name="InterceptorDemo2"></interceptor-ref>

              </interceptor-stack>

        </interceptors>

       

       

        <action name="actionDemo1" class="com.albertyy.action.ActionDemo1">

              <result>/demo1/demo1.jsp</result>

             

              <!-- 引入攔截器(一旦引入自定義攔截器,預設攔截器棧的攔截器就不執行了) -->

              <interceptor-ref name="myStack"></interceptor-ref>

        </action>

    </package>

2.Struts2的標籤庫

2.1通用標籤庫

2.2判斷標籤

  1. <s:if>、<s:elseif>、<s:else>
<body>

<s:set var="i" value="5" scope="request"/>

<s:if test="#request.i>3">

      i 大於 3

</s:if>

<s:elseif test="#request.i<3">

      i 小於 3

</s:elseif>

<s:else>

      i 等於 3

</s:else>

</body>

2.3遍歷標籤

  1. <s:iterator>


 

<body>

<s:iterator var="i" value="{'aa','bb','cc'}">

      <s:property value="#i"/>

</s:iterator>

<hr/>

<s:iterator var="entry" value="#{'aaa':'111','bbb':'222','ccc':'333'}">

      <s:property value="#entry.key"/>--<s:property value="#entry.value"/>

</s:iterator>

<hr/>

<s:iterator var="i" begin="1" end="10" step="1">

      <s:property value="#i"/>

</s:iterator>

<hr/>

<s:iterator var="i" begin="100" end="300" step="5" status="status">

      <s:if test="#status.count % 3 == 0">

           <font color="red"><s:property value="#i"/></font>

      </s:if>

      <s:else>

           <s:property value="#i"/>

      </s:else>

</s:iterator>

</body>

  • 其他常用的標籤
    • <s:property/>
    • <s:debug/>
    • <s:date />----在頁面上進行日期格式化。

 

2.2UI標籤庫(方便資料回顯)


 

<body>

<h1>UI標籤</h1>

<h3>傳統的表單</h3>

<form action="${ pageContext.request.contextPath }/uiAction.action" method="post">

      <input type="hidden" name="id"/>

      使用者名稱:<input type="text" name="name"/><br/>

      密碼:<input type="password" name="password"><br/>

      年齡:<input type="text" name="age"><br/>

      性別:<input type="radio" name="sex" value="男">男

      <input type="radio" name="sex" value="女">女<br/>

      籍貫:<select name="city">

           <option value="">-請選擇-</option>

           <option value="北京">北京</option>

           <option value="上海">上海</option>

           <option value="深圳">深圳</option>

           <option value="韓國">韓國</option>

      </select><br/>

      愛好:<input type="checkbox" name="hobby" value="basketball"/>籃球

      <input type="checkbox" name="hobby" value="football"/>足球

      <input type="checkbox" name="hobby" value="volleyball"/>排球

      <input type="checkbox" name="hobby" value="pingpang"/>乒乓球<br/>

      介紹:<textarea name="info" cols="8" rows="2"></textarea><br/>

      <input type="submit" value="提交"/>

</form>



<s:debug></s:debug>

<h3>UI標籤的表單</h3>

<s:form action="uiAction" namespace="/" method="post" >

      <s:hidden name="id" />

      <s:textfield name="name" label="使用者名稱"/>

      <s:password name="password" label="密碼" showPassword="true"/>

      <s:textfield name="age" label="年齡"/>

      <s:radio list="{'男','女'}" name="sex" label="性別"/>

      <s:select list="{'北京','上海','深圳','韓國'}" name="city" label="籍貫" headerKey="" headerValue="-請選擇-"/>

      <s:checkboxlist list="#{'basketball':'籃球','football':'足球','volleyball':'排球','pingpang':'乒乓球'}" name="hobby" label="愛好"/>

      <s:textarea name="info" cols="8" rows="2" label="介紹" ></s:textarea>

      <s:submit value="提交"/>

</s:form>

</body>

 

原始碼:連結: https://pan.baidu.com/s/152UdVQAfPprTOUvP6ZzDrQ 提取碼: vx6e 複製這段內容後開啟百度網盤手機App,操作更方便哦

總結

  • Struts2的攔截器
    • Struts2的攔截器概念
      • 攔截器:攔截對Action的訪問,攔截到Action的具體的方法。
    • Struts2的執行流程
      • 請求-à核心過濾器à建立ActionProxy,呼叫proxy.execute方法。在這個內部àActionInvocation.invoke()在這個方法內部,遞迴執行一組攔截器àActionàResultà攔截器後面的程式碼
    • Struts2的攔截器
    • CRM的登入案例:
      • 許可權攔截器
  • Struts2的標籤庫
    • 通用標籤
      • if、elseif、else、iterator、property、date、debug
    • UI標籤(資料回顯)
      • 表單標籤: