Struts2拦截器栈的例子 - Struts2教程

很多时候,相同的一组拦截器可以适用于不同的动作类,例如,

<package name="default" namespace="/" extends="struts-default">

    <action name="checkInAction" 
    class="com.yiibai.common.action.CheckInAction" >
    <interceptor-ref name="timer"/>
        <interceptor-ref name="logger"/>
    <interceptor-ref name="defaultStack" />
    <result name="success">/pages/checkIn.jsp</result>
    </action>

    <action name="checkOutAction" 
    class="com.yiibai.common.action.CheckOutAction" >
    <interceptor-ref name="timer"/>
        <interceptor-ref name="logger"/>
    <interceptor-ref name="defaultStack" />
    <result name="success">/pages/checkOut.jsp</result>
    </action>

</package>

在上述情况下,它有许多重复工作以及不能重复使用。

幸运的是,在Struts 2自带的拦截器栈,使开发人员建立一组拦截到一个单元名为“栈名字”, 和可以通过“栈名字”引用操作它。

最佳做法建议组合相同的一组拦截器到一个拦截器栈摆脱重复的工作,并增加了项目的可重用性。

<package name="default" namespace="/" extends="struts-default">

     <interceptors>
           <interceptor-stack name="defaultStackWithLog">
             <interceptor-ref name="timer"/>
             <interceptor-ref name="logger"/>
         <interceptor-ref name="defaultStack" />
        </interceptor-stack>
    </interceptors>

    <action name="checkInAction" 
    class="com.yiibai.common.action.CheckInAction" >
    <interceptor-ref name="defaultStackWithLog"/>
    <result name="success">/pages/checkIn.jsp</result>
    </action>

    <action name="checkOutAction" 
    class="com.yiibai.common.action.CheckOutAction" >
    <interceptor-ref name="defaultStackWithLog"/>
    <result name="success">/pages/checkOut.jsp</result>
    </action>

</package>

在上面的例子更新,声明一个拦截器栈,命名为“defaultStackWithLog”其中包括“timer“, “logger” 和 “defaultStack” 拦截器,并且它通过“interceptor-ref”元素引用一个正常的拦截器。

参考

  1. Struts2拦截器文档