配置檔案struts.xml中如何定義攔截器。
Action配置中攔截器參數定義和注意點。
攔截器參數的設定和配置修改過程。
示範代碼
Java代碼

- <!-------------------------------檔案名:ExampleInterceptor.java------------------------->
- import com.opensymphony.xwork2.ActionInvocation;
- import com.opensymphony.xwork2.interceptor.Interceptor;
- public class ExampleInterceptor implements Interceptor {
- //設定新參數
- private String newParam;
- public String getNewParam() {
- return newParam;
- }
- public void setNewParam(String newParam) {
- this.newParam = newParam;
- }
- public void destroy() {
- System.out.println("end doing...");
- }
- //攔截器初始方法
- public void init() {
- System.out.println("start doing...");
- System.out.println("newParam is:"+newParam);
- }
- //攔截器攔截方法
- public String intercept(ActionInvocation arg0) throws Exception {
- System.out.println("start invoking...");
- String result = arg0.invoke();
- System.out.println("end invoking...");
- return result;
- }
- }
<!-------------------------------檔案名:ExampleInterceptor.java------------------------->
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class ExampleInterceptor implements Interceptor {
//設定新參數
private String newParam;
public String getNewParam() {
return newParam;
}
public void setNewParam(String newParam) {
this.newParam = newParam;
}
public void destroy() {
System.out.println("end doing...");
}
//攔截器初始方法
public void init() {
System.out.println("start doing...");
System.out.println("newParam is:"+newParam);
}
//攔截器攔截方法
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("start invoking...");
String result = arg0.invoke();
System.out.println("end invoking...");
return result;
}
}
攔截器映射配置。
Java代碼

- <!-------------------------------------檔案名:struts.xml----------------------->
- <!-- 攔截器配置定義 -->
- <interceptors>
- <interceptor name="example"
- class="com.example.struts.interceptor.ExampleInterceptor">
- <!-- 參數設定 -->
- <param name="newParam">test</param>
- </interceptor>
- </interceptors>
- <!-- Action名字,類以及導航頁面定義 -->
- <!-- 通過Action類處理才導航的的Action定義 -->
- <action name="Login"
- class="com.example.struts.action.LoginAction" >
- <result name="input">/jsp/login.jsp</result>
- <result name="success">/jsp/success.jsp</result>
- <!-- Action中攔截器定義 -->
- <interceptor-ref name="example">
- <!-- 改變攔截器參數值 -->
- <param name="newParam">example</param>
- </interceptor-ref>
- </action>
<!-------------------------------------檔案名:struts.xml----------------------->
<!-- 攔截器配置定義 -->
<interceptors>
<interceptor name="example"
class="com.example.struts.interceptor.ExampleInterceptor">
<!-- 參數設定 -->
<param name="newParam">test</param>
</interceptor>
</interceptors>
<!-- Action名字,類以及導航頁面定義 -->
<!-- 通過Action類處理才導航的的Action定義 -->
<action name="Login"
class="com.example.struts.action.LoginAction" >
<result name="input">/jsp/login.jsp</result>
<result name="success">/jsp/success.jsp</result>
<!-- Action中攔截器定義 -->
<interceptor-ref name="example">
<!-- 改變攔截器參數值 -->
<param name="newParam">example</param>
</interceptor-ref>
</action>
執行效果如圖4.2所示。
圖4.2 執行攔截器後效果
參數值顯示如圖4.3所示。
圖4.3 newParam參數值顯示圖
代碼解釋
(1)先看struts.xml檔案,在檔案開始以<interceptors>開頭,</interceptors>結尾形式定義了攔截器,該攔截器命名為example,映射的類檔案路徑寫在class屬性中。在<Action>中<result>标簽後,可以定義隻在該Action執行時候會攔截的攔截器定義,其實就是調用在<Action>前定義的example攔截器。并且還可以以<param>标簽定義攔截器屬性。
(2)<param>标簽定義攔截器屬性,或者稱為參數。param其實就是英語中參數縮寫形式。name是參數名,而在<param></param>間的内容就是該定義的參數值。
注意:如果在<Action>中和<Action>外都定義<param>的值,比如在本執行個體中<Action>中newParam值為“example”,<Action>外newParam值為“test”。而在運作時候顯示的還是<Action>中的參數值,即“example”。顯示如圖4.3。可以了解為屏蔽了<Action>外參數值,是以如果定義多個Action,每個Action都調用了example攔截器,則都可以自定義自己的newParam的值了。如果不定義的話,那顯示的就是“test”,否則就是各自定義的newParam值。
(3)再來看看ExampleInterceptor類代碼,newParam是它的一個私有變量屬性,有自己的setter、getter方法。而且它擴充了Interceptor接口,該接口是Struts2的類庫中自帶的接口類。重寫interceptor方法,用invoke方法執行Action,在Action前後執行兩個列印方法。