前言
拦截器是struts2中最重要的机制,动态的拦截action调用的对象昂,提供一种机制,可以使开发者定义action执行前后执行的代码。
拦截器的配置
定义TheIntercepter类,继承AbstractInterceptor抽象类,实现拦截方法,intercept, 可以执行一定的代码,在 invocation.invoke(); 前后,这个是action激活方法前后执行的代码。最后return result; 回到action中。代码展示
1拦截器类定义代码:package com.shengsiyuan.inerceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class TheInterceptor2 extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("interceptor2 before...");
String result = invocation.invoke();
System.out.println("interceptor2 after...");
return result;
}
}
2struts2 拦截器注册代码
<interceptors>
<interceptor name="theInterceptor1" class="com.shengsiyuan.inerceptor.TheInterceptor1">
<param name="test">shengsiyuan</param>
</interceptor>
<interceptor name="theInterceptor2" class="com.shengsiyuan.inerceptor.TheInterceptor2"></interceptor>
<interceptor name="theInterceptor3" class="com.shengsiyuan.inerceptor.TheInterceptor3"></interceptor>
<!-- <interceptor name="loginInterceptor" class="com.shengsiyuan.inerceptor.LoginInterceptor"></interceptor>
-->
<interceptor-stack name="mydefaultInterceptorStack">
<!--<interceptor-ref name="loginInterceptor"></interceptor-ref>
--><interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
3拦截器在action中应用代码
<action name="token" class="com.Test.Action.TokenAction">
<result name="success">/tokenSuccess.jsp</result>
<result name="invalid.token">/tokenFial.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
struts2的机制中,就是依靠拦截器实现这些功能的,内置的拦截器构成了
拦截器栈也就是 defaultStack; 因此我们需要手动引入默认的拦截器栈。
拦截方法
除了对action进行拦截之外,我们还可以对方法进行拦截。拦截器的定义,配置没有太多的不同,在action中定义拦截器时,有所区别
代码如下:
<action name="action1" class="com.Test.Action.action1" method="myExecute">
<result name="success" type="chain">
<param name="usernameAndPassword">${usernameAndPassword}</param>
</result>
<interceptor-ref name="theInterceptor3">
<param name="includeMethods">execute,myExecute</param>
<param name="execludeMethods"></param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
针对interceptor3我们设定其中的includeMethods 参数,里面放置了拦截的方法。