Struts2拦截器笔记

 

拦截器的方法在xwork-2.0.4.jar

  下面com.opensymphony.xwork2.interceptorInterceptor.class

 

学习拦截器要注意struts2-core-2.0.11.jar下面的struts-default.xml

  定义了拦截器和默认的拦截器占(defaultStack) <default-interceptor-ref name="defaultStack"/>

 

如果在一个action中手动引用了任意一个拦截器那么默认的拦截器就不能引用到action中你必须手动引用

   如果在action中没有引用拦截器那么默认拦截器会自动引用

 

invoke()方法是如果还有下一个拦截器就调用下一个拦截器 如果没有就直接调用action()方法

 

拦截器的定义

<interceptors>

       <interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">

              定义赋值<param name="hello">world</param>

       </interceptor>

</interceptors>

拦截器的引用 一般都要手动引用默认的拦截器

<interceptor-ref name="myInterceptor">

       使用动态赋值<param name="hello">test</param>

</interceptor-ref>

使用时动态赋值会覆盖定义时候的赋值

 

 

拦截器占的定义和引用 拦截器占由拦截器和拦截器占组成

在这个拦截器占中引用了myInterceptor拦截器和默认的拦截器占

<interceptor-stack name="myStack">                

<!-- 拦截器的执行顺序:先配置的先执行 回来的时候是先配置的后执行

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

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

                           

-->                     

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

</interceptor-stack>

·························

·························

<interceptors>

                     <interceptor name="myInterceptor" class="com.test.interceptor.MyInterceptor">

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

                     </interceptor>

                    

                     <interceptor name="myInterceptor2" class="com.test.interceptor.MyInterceptor2">

                     </interceptor>

                    

                     <interceptor name="myInterceptor3" class="com.test.interceptor.MyInterceptor3">

                    

                     </interceptor>

 

拦截器占的定义和引用 拦截器占由拦截器和拦截器占组成

:在这个拦截器占中引用了myInterceptor拦截器和默认的拦截器占

 

                     <interceptor-stack name="myStack">

 

                     <!--  拦截器的执行顺序:先配置的先执行 回来的时候是先配置的后执行

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

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

                      -->                   

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

                           

                     </interceptor-stack>

              </interceptors>

myStack定义为默认的拦截器             

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

             

              <action name="register" class="com.test.action.RegisterAction" method="test">

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

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

                    

                     <interceptor-ref name="myInterceptor3">

方法拦截器会有excludeMethodsincludeMethods方法后者的优先级高于前者       

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

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

                     </interceptor-ref>

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

                    

              </action>

···········································

···········································             

定义默认的拦截器 那么这个拦截器会引用到所有的action

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

 

在多数情况下所有的拦截器都要继承Interceptor

public class MyInterceptor implements Interceptor

{

 

       private String hello;

      

       public String getHello()

       {

              return hello;

       }

 

       public void setHello(String hello)

       {

              this.hello = hello;

       }

 

       public void destroy()

       {

              System.out.println("destroy");

       }

 

       public void init()

       {

              System.out.println("init");

              System.out.println(hello);

       }

      

       public String intercept(ActionInvocation invocation) throws Exception

       {

              System.out.println("intercept");

             

              String result = invocation.invoke();

             

              System.out.println("finish");

             

              return result;

       }

 

}

 但有时也可以继承AbstractInterceptor这样就可以忽略init()destroy()

public class MyInterceptor2 extends AbstractInterceptor

{

 

       @Override

       public String intercept(ActionInvocation invocation) throws Exception

       {

              System.out.println("intercept2");

             

              String result = invocation.invoke();

             

              System.out.println("finish2");

             

              return result;

       }

 

}

 也有继承MethodFilterInterceptor方法过滤拦截器

public class MyInterceptor3 extends MethodFilterInterceptor

{

 

       @Override

       public void init()

       {

              System.out.println("init3");

       }

      

       @Override

       protected String doIntercept(ActionInvocation invocation) throws Exception

       {

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

 

              String result = invocation.invoke();

 

              return result;

       }

 

}

 

 

监听器一般都要实现PreResultListener

public class MyListener implements PreResultListener

{

 

    public void beforeResult(ActionInvocation invocation, String resultCode)

    {

       System.out.println("result : " + resultCode);

    }

}

监听器都是在完成execute()方法准备返回结果页面是调用

<global-results>

           <result name="login" type="redirect">/login2.jsp</result>

</global-results>

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值