当需要引用的拦截器过多时,可以把拦截器定义在一个拦截器栈里面,而在action中只引用这个拦截器栈,从而简化代码。拦截器栈可以引用另一个拦截器栈。
拦截器栈定义如下,而使用拦截器栈的语法与使用拦截器一致。
<package name="default" namespace="/" extends="struts-default">
<!-- 配置自定义拦截器 -->
<interceptors>
<interceptor name="myInterceptor" class="com.interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 在action中使用自定义拦截器 -->
<action name="login" class="com.action.LoginAction" method="login">
<result>/index.jsp</result>
<result name="invalid.token">/token.jsp</result>
<interceptor-ref name="myStack"></interceptor-ref>
<!-- interceptor-ref name="defaultStack"></interceptor-ref -->
</action>
</package>
如果拦截器栈是默认都要引用的,那么可以定义默认拦截器栈,这样没有显示引用拦截器的action,都会默认引用默认拦截器栈。实际上struts-default 已经定义了默认拦截器栈。
<package name="default" namespace="/" extends="struts-default">
<!-- 配置自定义拦截器 -->
<interceptors>
<interceptor name="myInterceptor" class="com.interceptor.MyInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="token"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 定义默认拦截器栈 -->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<!-- 在action中使用自定义拦截器 -->
<action name="login" class="com.action.LoginAction" method="login">
<result>/index.jsp</result>
<result name="invalid.token">/token.jsp</result>
<!-- interceptor-ref name="myStack"></interceptor-ref -->
<!-- interceptor-ref name="defaultStack"></interceptor-ref -->
</action>
</package>