Struts2攔截器棧的例子
很多時候,相同的一組攔截器可以適用於不同的動作類,例如,
<package name="default" namespace="/" extends="struts-default"> <action name="checkInAction" class="com.gitbook.netmon.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.gitbook.netmon.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.gitbook.netmon.action.CheckInAction" > <interceptor-ref name="defaultStackWithLog"/> <result name="success">/pages/checkIn.jsp</result> </action> <action name="checkOutAction" class="com.gitbook.netmon.action.CheckOutAction" > <interceptor-ref name="defaultStackWithLog"/> <result name="success">/pages/checkOut.jsp</result> </action> </package>
在上麵的例子更新,聲明一個攔截器棧,命名為“defaultStackWithLog”其中包括“timer“, “logger” 和 “defaultStack” 攔截器,並且它通過“interceptor-ref”元素引用一個正常的攔截器。