Struts2内置拦截器和自定义拦截器
內置攔截器
Struts2中內置類許多的攔截器,它們提供了許多Struts2的核心功能和可選的高級特性。這些內置的攔截器在struts-default.xml中配置。只有配置了攔截器,攔截器才可以正常的工作和運行。Struts 2已經為您提供豐富多樣的,功能齊全的攔截器實現。大家可以至struts2的jar包內的struts-default.xml查看關于默認的攔截器與攔截器鏈的配置。內置攔截器雖然在struts2中都定義了,但是并不是都起作用的。因為并不是所有攔截器都被加到默認攔截器棧里了,只有被添加到默認攔截器棧里的攔截器才起作用,看一下被加到默認攔截器棧的攔截器都有那些:
定義自己的攔截器
雖然,Struts 2為我們提供如此豐富的攔截器實現,但是在某種情況下并不能滿足我們的需求,比如:訪問控制的時候,在用戶每次訪問某個action時,我們要去校驗用戶是否已經登入,如果沒有登入我們將在action執行之前就被攔截,此時我們就需要自定義攔截器;下面我們具體看一下,如何實現自定義攔截器。
1.實現攔截器類
所有的Struts 2的攔截器都直接或間接實現接口com.opensymphony.xwork2.interceptor.Interceptor。該接口提供了三
個方法:
1)???? void init();在該攔截器被初始化之后,在該攔截器執行攔截之前,系統回調該方法。對于每個攔截器而言,此方法只執行一次。
2)???? void destroy();該方法跟init()方法對應。在攔截器實例被銷毀之前,系統將回調該方法。
3)???? String intercept(ActionInvocation invocation) throws Exception;該方法是用戶需要實現的攔截動作。該方法會返回一個字符串作為邏輯視圖。
除此之外,繼承類com.opensymphony.xwork2.interceptor.AbstractInterceptor是更簡單的一種實現攔截器類的方式,因為此類提供了init()和destroy()方法的空實現,這樣我們只需要實現intercept方法。還有一種實現攔截器的方法是繼承MethodFilterInterceptor類,實現這個類可以實現局部攔截,即可以實現指定攔截某一個action的哪個方法,或者不攔截哪個方法
2.注冊自定義攔截器
自定義攔截器類實現了,現在就要在struts里注冊這個攔截器;
1).注冊攔截器,在struts.xml中的package中注冊攔截器
<interceptors> <!-- name:攔截器的名稱,class:自定義攔截器的類 --> <interceptor name="攔截器名稱" class="自定義攔截器的class路徑"/> </interceptors> 2).使用攔截器,在需要使用自定義攔截器的action中定義如下代碼
<action> <interceptor-ref name="攔截器名稱"/> </action> 注意:因為struts2的很多功能都是根據攔截器實現的;如果此處只使用自定義的攔截器時,將失去struts2的很多核心功能;所以需要定義一個攔截器棧(由一個或多個攔截器組成)
3) 攔截器棧
<interceptor-stack name="攔截器棧的名稱"> <!--需要注意的是:系統默認的攔截器棧應要放在前面,在加入自定義攔截器; --> <interceptor-ref name="defaultState"/> <interceptor-ref name="自定義攔截器的名稱"/> </interceptor-stack> 4) 在action中使用棧
<action> <interceptor-ref name="棧名稱或攔截器名稱"/>.......</action>
最后,大家一起來看一下攔截器與過濾器的區別:
攔截器和過濾器之間有很多相同之處,但是兩者之間存在根本的差別。其主要區別為以下幾點:
1)攔截器是基于JAVA反射機制的,而過濾器是基于函數回調的。
2)過濾器依賴于Servlet容器,而攔截器不依賴于Servlet容器
3)攔截器只能對Action請求起作用,而過濾器可以對幾乎所有的請求起作用。
4)攔截器可以訪問Action上下文、值棧里的對象,而過濾器不能
5)在Action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
?
部分轉載自網絡。
本文地址:http://www.blogfshare.com/myintercept.html
總結
以上是生活随笔為你收集整理的Struts2内置拦截器和自定义拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate懒加载
- 下一篇: WEB服务器 - Apache、Nngi