struts2——拦截器

来源:互联网 发布:淘宝怎么看海淘 编辑:程序博客网 时间:2024/04/30 01:45

1、自定义拦截器

  1. 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor或者是MethodFilterInterceptor)的类。
  2. struts.xml中注册上一步中定义的拦截器。
  3. 在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

2、AbstractInterceptor

AbstractInterceptor实现了init()和destory()的空实现。

package org.lazyzhong.test;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.opensymphony.xwork2.interceptor.PreResultListener;public class MyInterceptor extends AbstractInterceptor{private static final long serialVersionUID = 5955948189153971267L;private String mytmp; //拦截器的配置参数public String getMytmp() {return mytmp;}public void setMytmp(String mytmp) {this.mytmp = mytmp;}@Overridepublic String intercept(ActionInvocation arg0) throws Exception {arg0.addPreResultListener(new PreResultListener() {   //这个监听器在执行完action返回了一个值但还没渲染页面时触发public void beforeResult(ActionInvocation arg0, String arg1) {System.out.println(arg0.getResultCode());System.out.println(arg1);}});arg0.invoke();return null; //返回值的作用是根据返回值来渲染到对应的页面,但是只有在没有调用invoke()方法即没有执行action的情况下起作用。}}


3、Interceptor

public class MyInterceptor implements Interceptor{@Overridepublic void destroy() { //在拦截器被垃圾回收之前调用}@Overridepublic void init() { //在拦截器被创建之后,在action被调用之前创建}@Overridepublic String intercept(ActionInvocation arg0) throws Exception {return null;}}

4、MethodFilterInterceptor

public class MyInterceptor extends MethodFilterInterceptor{@Overrideprotected String doIntercept(ActionInvocation arg0) throws Exception {return null;}}


5、配置拦截器

  <!-- 在package元素中添加 -->  <interceptors>         <interceptor name="tmp" class="org.lazyzhong.test.MyInterceptor" /> //定义自己的拦截器类         <interceptor-stack name="myInterceptor"> //定义拦截器栈         <interceptor-ref name="tmp">         <param name="mytmp">lazyzhong</param>         </interceptor-ref>         <interceptor-ref name="defaultStack" />         </interceptor-stack>         </interceptors>                  <default-interceptor-ref name="myInterceptor" /> //设置成默认拦截器,默认对所有的action都有效,除非action另外配置了拦截器。                   //也可以在具体的action中指定使用的拦截器,注意最后一定要加上<interceptor-ref name="defaultStack" /> 这个默认的拦截器,否则会出错。         //可以通过<param>来给拦截器初始化参数。         //每个action都默认有excludeMethods includeMethods 参数,来表明要拦截哪些方法,不拦截哪些。多个方法名之间用“,”分隔。



原创粉丝点击