1. 程式人生 > >struts2框架之自定義攔截器和配置

struts2框架之自定義攔截器和配置

  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
    public
String 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,在控制檯輸出: