日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2内置拦截器和自定义拦截器

發布時間:2023/12/4 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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内置拦截器和自定义拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。