Interceptor接口
每个拦截器都实现com.opensymphony.xwork2.interceptor.Interceptor接口。
init:该方法在拦截器被创建后立即调用,在生命周期里只调用一次。
intercept:每拦截一个请求,该方法调用一次。
destroy:该方法将在拦截器被销毁之前调用,生命周期中也只被调用一次。
AbstractInterceptor类实现了Interceptor类,但是init和destroy是空白实现,intercept是抽象方法。
拦截器类
注意:如果不执行invoke方法,那么后续拦截器及Action就不会执行,会根据该拦截器result返回页面。在权限验证或者登陆验证时可使用这种方式。
public class MyInterceptor extends AbstractInterceptor {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("before invocation.invoke");
String result=invocation.invoke();
System.out.println("after invocation.invoke");
return result;
}
}
struts.xml配置
<struts>
<!-- 配置国际化资源文件 -->
<constant name="struts.custom.i18n.resources" value="i18n"></constant>
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="hello" class="com.hcx.app.MyInterceptor"></interceptor>
</interceptors>
<action name="testToken" class="com.hcx.app.TokenAction">
<interceptor-ref name="hello"></interceptor-ref>
<interceptor-ref name="token" />
<interceptor-ref name="defaultStack" />
<result>/success.jsp</result>
<result name="invalid.token">/token-err.jsp</result>
</action>
</package>
</struts>