1. 程式人生 > >struts2中如何定義攔截器

struts2中如何定義攔截器

struts2自定義攔截器的操作步驟

一. 所有的攔截器都需要實現Interceptor介面或者繼承Interceptor介面的擴充套件實現類(AbstractInterceptor)

二, 要重寫init()、intercept()、destroy()方法

1. init()是在struts2框架執行時執行,在攔截器的生命週期中只執行一次,可以做必要的內容的初始化工作

2. intercept(),是每一次請求就執行一次,做相關處理工作。

(1).intercept()方法接收一個ActionInvocation介面的例項

(2).通過這個介面的例項,可以獲取以下內容

動作類的物件
System.out.println("invocation.getAction() : "+invocation.getAction());

與invocation.getAction()方法獲取的是同一的物件
System.out.println("invocation.getProxy().getAction() : "+invocation.getProxy().getAction());

自定義配置檔案中的action標籤的name屬性的值
System.out.println("invocation.getProxy().getActionName() : "+invocation.getProxy().getActionName())

對應動作類指定要執行的方法名
System.out.println("invocation.getProxy().getMethod() : "+invocation.getProxy().getMethod());

自定義配置檔案中的package標籤的namespace屬性的值
System.out.println("invocation.getProxy().getNamespace() : "+invocation.getProxy().getNamespace());

(3)destroy()是在攔截器銷燬前執行,在攔截器的宣告週期中只執行一次。

        3.在struts.xml配置檔案中,進行註冊

在配置檔案中的package標籤下,進行相關配置:

<interceptors>
<!-- 宣告自定義的攔截器 -->
<interceptor name="expessionInterceptor" class="cn.itcast.aop.ExpessionInterceptor" />

<!-- 宣告自定義攔截器棧 -->
<interceptor-stack name="expessionStack">
               <interceptor-ref name="defaultStack"/>
                
                <!-- 配置使用自定義攔截器 -->
                <interceptor-ref name="expessionInterceptor"/>
                
           </interceptor-stack>
</interceptors>

<!-- 配置修改struts2框架執行時,預設執行的是自定義攔截器棧 -->
<default-interceptor-ref name="expessionStack" />