Struts2的拦截器: 一,拦截器的使用: 新建一个MyInterceptor拦截器类,实现com.opensymphony.xwork2.ActionInvocation接口中。 public class MyInterceptor implements Interceptor { /** * 由xml中可以提定Action中的参数值 */ private String myparam; public String getMyparam() { return myparam; } public void setMyparam(String myparam) { this.myparam = myparam; } public void destroy() { System.out.println("服务器关闭执行销毁操作!"); } public void init() { System.out.println("服务器启动时执行初始化操作!"); } public String intercept(ActionInvocation invocation) throws Exception { System.out.println(myparam); /** * 执行之前的操作 */ String result = invocation.invoke(); /** * 执行之后操作 */ return result; } } 二,在strust.xml中配置拦截器 ` <struts> <package name="mengya" extends="struts-default"> <!-- 拦截器在struts2中的配置 --> <interceptors> <interceptor name="myInterceptor" class="com.mengya.interceptor.MyInterceptor"> <!-- param可以没有,向拦截器中的属性赋值 --> <param name="myparam">mengya</param> </interceptor> <!-- 配置自己的拦截器栈 --> <interceptor-stack name="myStack"> <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 为该package指定一个默认的拦截器栈,这样就可以不用为每个action指定一拦截器栈 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <!-- 郑重说明 当某个action中引用了某了interceptor之后就替换了原用的一个默认interceptor 即defaultStack,页defaultStack包含了很多完成sturs2一些基本功能的拦截器。 故当某个action中引用了某了interceptor之后还要引用defaultStack这个拦截器栈。 --> <action name="login" class="com.mengya.action.LoginAction"> <result name="success">/show.jsp</result> <result name="input">/index.jsp</result> <!-- <interceptor-ref name="myInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> --> <!-- 也可以在action中引用自己的拦截器栈 --> <!-- <interceptor-ref name="myStack"></interceptor-ref> --> </action> </package> </struts> 三,对于Struts2中拦截器栈里的拦载器执行的顺序: Struts2中的拦截器中的拦截器最上面的最先执行,即进入拦截器的顺序是按照拦截栈中配置的顺序,出拦截器 是先配置的后执行,即与进入拦载器的顺序相反。 四,Struts2的拦截器除了实现ActionInvocation接口外还可以继承com.opensymphony.xwork2.interceptor.AbstractInterceptor AbstractInterceptor抽象器实现了ActionInvocation接口,空实现了init和destroy方法。因此继承了AbstractInterceptor类我们只需重写它的intercept即可。 五, Struts2的方法过滤拦截器: 1,继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor类重写doIntercept方法 2,方法过滤拦截器的配置: <interceptors> <!-- 声明方法过滤拦截器 --> <interceptor name="myMethodFilterInterceptor" class="com.mengya.interceptor.MyMethodFilterInterceptor"></interceptor> </interceptors> <!-- 在action配置方法过滤拦截器 --> <action name="login" class="com.mengya.action.LoginAction"> <result name="success">/show.jsp</result> <result name="input">/index.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="myMethodFilterInterceptor"> <!-- 不拦截的方法,即,号隔开 --> <param name="excludeMethods">execute,test</param> <!-- 要拦截的方法,即,号隔开 --> <param name="includeMethods">execute</param> </interceptor-ref> </action> 3,说明:若某个方法同时出现在excludeMethods(不拦截的方法)和includeMethods(要拦截的方法)当中时 那么这个方法会被拦截。除它情况下excludeMethods里面的方法不拦截,includeMethods里面的方法会被拦截。
相关资源:Struts2拦截器Interceptor的原理与配置实例详解