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" />