<!-- 定義攔截器棧 --> <interceptor-stack name="basicStack">
<!-- 指定引用的攔截器 --> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> </interceptor-stack> </interceptors>
<!-- 定義默認的攔截器引用 --> <default-interceptor-ref name="defaultStack"/>
提示: 攔截器棧有多個<interceptor-ref>,誰在前,誰先起作用 攔截器起作用的順序:先<action>, 再本包,再父包
4. 攔截器的配置【自定義】 <interceptor .../> <interceptor-ref ...>
5. 自定義攔截器 方法1: 實現Interceptor接口 該接口提供了3個方法,1) void init(),該攔截器被初始化之后,在攔截器執行攔截之前,系統回調該方法。2) void destroy() ,在攔截器實例被銷毀之前。 3) String intercept(ActionInvocation ai) throws Exception: 用戶需要實現的攔截器動作。 提示: ActionInvocatio 代表當前action 執行的狀態
方法2: 繼承AbstractInterceptor 抽象類【推薦使用該方法】 該類提供了 init() 和 destroy()方法的空實現; 只需要實現intercept()方法即可
方法3:繼承MethodFilterInterceptor類: 指定攔截的方法; 指定不攔截的方法
--------------
步驟:1) 繼承AbstractInterceptor實現攔截器類 2) struts.xml中定義攔截器 <interceptor name="..." class="..." /> 3) <action> 引用攔截器 單獨引用: 引用自定義和默認攔截器 攔截棧引用: 定義攔截器棧包含自定義和默認攔截器
6. 攔截器與過濾器 相似點: 功能相似; 原理相似;方法類似; 不同點:內容不同,攔截器用于攔截對Action請求,而過濾器幾乎可以過濾所有的內容 攔截器中可以獲取Action的當前執行狀態,而過濾器不可以 過濾器是Servlet中概念,在Web.xml中配置; 攔截器是struts/webWork中概念,在struts.xml中配置。