struts2框架之自定義攔截器和配置
阿新 • • 發佈:2018-12-12
struts框架中也存在攔截器,只不過系統自動呼叫。框架自帶的攔截器的配置檔案所在的位置為:
java Resources--->Libraries--->struts2-core-2.3.36.jar(核心包)--->struts-default.xml
這個配置檔案中放置的是框架所有的攔截器,攔截器放置在攔截器棧中<interceptor-stack>。在配置檔案中有一個基本攔截器棧,我們如果需要使用攔截器的時候,呼叫基本攔截器就可以了。
如果我們想要實現自己定義的功能,就需要自定義攔截器:
1. 編寫攔截器,需要實現Interceptor介面,實現介面中的三個方法
import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{ @Override public void destroy() { } @Override public void init() { } @Override publicString intercept(ActionInvocation invocation) throws Exception { System.out.println("加密"); //放行 invocation.invoke();//放行讓請求的功能執行 System.out.println("解密"); return null; } }
2. 需要在struts.xml中進行攔截器的配置,配置一共有兩種方式:
(1)第一種方式:定義攔截器。在action中要引用攔截器:只要是引用自己的攔截器,預設棧的攔截器就不執行了,必須要手動引入預設棧 。
(2)第二種方式:定義攔截器棧。將兩個攔截器定義在一個棧中,所以在action標籤中引用 攔截器的時候,只用引入攔截器棧名就可以了。
<package name="default" namespace="/" extends="struts-default"> <!-- 第一種配置方式 :定義了攔截器--> <!-- <interceptors> --> <!-- <interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor> --> <!-- </interceptors> --> <!-- 第二種配置方式:定義攔截器棧 --> <interceptors> <interceptor name="MyInterceptor" class="com.huida.interceptor.MyInterceptor"></interceptor> <!-- 定義攔截器棧 --> <interceptor-stack name="myStack"> <interceptor-ref name="MyInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <action name="demo3Action_*" class="com.huida.action.Demo3Action" method="{1}"><!-- 萬用字元的方式 --> <!-- <interceptor-ref name="MyInterceptor"></interceptor-ref> --><!-- 這樣訪問demo的時候就會經過攔截器,這樣系統的攔截器就不執行了 --> <!-- <interceptor-ref name="defaultStack"></interceptor-ref> --><!-- 執行系統的攔截器,保證系統的完整性 --> <interceptor-ref name="myStack"></interceptor-ref><!--如果定義了攔截器棧,這裡就只用寫攔截器棧的名稱就可以了,因為攔截器把兩個攔截器定義為了一個--> <result name="success" >/suc.jsp</result> </action> </package>
啟動伺服器,在瀏覽器中輸入:http://localhost:8080/struts2_day02/demo3Action_save,在控制檯輸出: