posts - 22, comments - 32, trackbacks - 0, articles - 73
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          struts2攔截器配置詳解

          Posted on 2009-10-12 22:41 為自己代言 閱讀(33101) 評論(6)  編輯  收藏
           

          Struts2 攔截器詳細配置過程

          1:所有攔截器的超級接口Interceptor ,Action去實現這個接口;

           Interceptor 它其中有三個方法(init(),destroy() ,interceptor()):

                Init()方法:在服務器起動的時候加載一次,并且只加載一次;

                Destroy()方法:當攔截器銷毀時執行的方法;

                Interceptor()方法:其中里邊有一個參數invocation

          public String intercept(ActionInvocation invocation) throws xception {

                 System.out.println("interceptor!!");

                 String result=invocation.invoke();

                 return result;

              }

          Invocation.invoke()是如果只有一個攔截器執行完這個方法后,會返回給視圖,如果有多個攔截器,它順序的執行完所有的攔截器,才返回給視圖.

          2:可以在系統初始化中給攔截器指定默認的參數(也包括了定義攔截器方式)如下:

              在攔截器類中把hello當做屬性set/get方式注入到攔截器類中;

                <interceptors>

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

                     <interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor">

                        <!-- 指定系統初始化給攔截器的參數 -->

                        <param name="hello">張釗釗</param>

                     </interceptor>

                     <!-- 加到自己設置的攔截器棧里邊去 -->

                     <interceptor-stack name="myStack">

                        <interceptor-ref name="myInterceptor">

                        </interceptor-ref>

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

                     </interceptor-stack>

                 </interceptors>

                 <!-- 改變系統默認的攔截器,改成自己的默認攔截器,并且一個系統只能有一個默認的攔截器,這樣這個攔截器棧會默認應用到所有的Action上去 -->

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

                 </default-interceptor-ref>

                 也可以在使用攔截器的時候給它設置參數:

                 就是在一個action reslut下面配置上如下:

              <action name="register"

                     class="com.zzz.struts2.action.RegisterAction">

                     <result name="success">/success.jsp</result>

                     <!-- result 它其中還有一個信息轉發類型 type=""記住,如果不轉向JSP,轉向圖表,可以改變type="" -->

                     <result name="input">/register.jsp</result>

                    

                     <interceptor-ref name="myInterceptor">

                        <param name="hello">welcome</param>

                     </interceptor-ref>

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

                 </action>

          2.攔截器,攔截器棧和默認的攔截器之間的關系

          1:攔截器和攔截器棧是一個級別的,也就是說一個攔截器棧中包括許多攔截器, 一個攔截器棧中還可以包括許多攔截器棧,配置如下方式:

          <interceptors>

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

                     <interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor">

                        <!-- 指定系統初始化給攔截器的參數 -->

                        <param name="hello">張釗釗</param>

                     </interceptor>

                     <!-- 加到自己設置的攔截器棧里邊去 -->

                     <interceptor-stack name="myStack">

                        <interceptor-ref name="myInterceptor">

                        </interceptor-ref>

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

                     </interceptor-stack>

                 </interceptors>

          攔截器的使用:1.先定義;2.在引用使用;

          <interceptor name="myInterceptor" class="com.zzz.struts2.interceptor.MyInterceptor">

          <interceptor-ref name="myInterceptor">

                        </interceptor-ref>

           2:struts2中有一個系統默認的攔截器棧是 defaultStack,如果你手動引用自己的攔截器,系統默認的攔截器棧將不起作用;這樣必需手動引入系統的攔截器棧<interceptor-ref name="defaultStack">

                        </interceptor-ref>

          如果想改變系統默認的攔截器棧,可以這樣配置:

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

          </default-interceptor-ref>其中myStack是自己定義的攔截器棧名字;

          如果攔截器棧中有多個攔截器,在執行action之前的順序跟配置攔截器的順序一致,而在action之后執行的順序是相反的;

           

          3:抽象的攔截器類AbstractInterceptor

          1:Interceptor這個超級攔截器接口,有三方法需要實現,但是如果不想使用init();

              destroy()方法,可以去繼承這個抽象攔截器類;

          它的使用跟上邊的沒有什么區別;

           

          4:方法過濾攔截器MethodFilterInterceptor

          1:上邊的攔截器都要是針對整個action,如果針對某個方法進行攔截可以去繼承這個類;

          它的使用跟上邊的使用方法差不多,只是需要要配置它對那個方法進行攔截,方法過濾攔截器最好不要配置到自己設置默認的攔截器棧里邊,自己手動配置.

          interceptor-ref name="myInterceptor3">

                        <param name="includeMethods">execute</param>

                        <param name="excludeMethods">execute</param>

                     </interceptor-ref>

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

          其中includeMethods ,excludeMethods是固定寫法: includeMethods 包含攔截那些方法,多個方法需要用”,”隔開; excludeMehtods是排除攔截的那些方法;

          5:鑒聽器PreResultListener接口

          1:它的鑒聽點在攔截器執行完某個action方法后,在渲染視圖之前做一些事情;讓某個類去實現這個接口;

          然后向需要它的攔截器中注冊進去如下代碼:

          publicclass MyInterceptor3 extends MethodFilterInterceptor {

              privatestaticfinallongserialVersionUID = 3756655410194005443L;

              @Override

              protected String doIntercept(ActionInvocation invocation) throws Exception {

                 //把鑒聽器注冊到攔截中去;

                 invocation.addPreResultListener(new MyListener());

                 System.out.println("my Interceptor3");

                 String result=arg0.invoke();

                 System.out.println("my interceptor3 finshed!");

                 return result;

              }

          }


          評論

          # re: struts2攔截器配置詳解  回復  更多評論   

          2009-10-13 21:29 by Text
          good...

          # re: struts2攔截器配置詳解  回復  更多評論   

          2009-10-14 17:39 by www.lovowang.cn
          受到了瘋狂的

          # re: struts2攔截器配置詳解  回復  更多評論   

          2009-10-14 17:40 by 伊莎貝兒
          放量控股的風格

          # re: struts2攔截器配置詳解gggggg  回復  更多評論   

          2010-08-13 17:56 by kj
          mmnj.,mn

          # re: struts2攔截器配置詳解  回復  更多評論   

          2016-02-26 10:22 by q
          為薔薇薔薇

          # re: struts2攔截器配置詳解  回復  更多評論   

          2016-02-26 10:22 by qm
          qweqweqw

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 年辖:市辖区| 淳化县| 镇安县| 巴林右旗| 保山市| 兴安县| 苏州市| 宣化县| 闻喜县| 大邑县| 民丰县| 德兴市| 剑川县| 长武县| 富顺县| 榆中县| 和平县| 盐津县| 宣恩县| 铜梁县| 余庆县| 瑞昌市| 丰城市| 张家港市| 永州市| 沭阳县| 临西县| 秦安县| 黔西县| 南丰县| 长白| 赤水市| 汾西县| 正安县| 原平市| 永定县| 兴仁县| 长子县| 巨野县| 息烽县| 策勒县|