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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

过滤器跟拦截器的区别

發(fā)布時(shí)間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 过滤器跟拦截器的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、攔截器與過濾器的區(qū)別總結(jié)

1. 原理不同:攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)。

2. 依賴容器:攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

3. 作用范圍:攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

4. 訪問權(quán)限:攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

5. 作用次數(shù):在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次

核心區(qū)別是兩者關(guān)注點(diǎn)不一樣:過濾器關(guān)注web請求;攔截器關(guān)注方法調(diào)用。

什么是action?action可以理解為一次請求,在程序中初學(xué)者可以把它理解為一個(gè)后綴名為.action的請求路徑。
?

二、過濾器和攔截器執(zhí)行順序

????????容器初始化時(shí)執(zhí)行過濾器。過濾器之間執(zhí)行順序按注冊順序

????????攔截器是請求時(shí)出發(fā),容器初始化時(shí)不會(huì)被執(zhí)行。攔截器之間順序是按注冊順序

三、應(yīng)用場景總結(jié):

攔截器:

Controller日志打印、限流操作、訪問權(quán)限驗(yàn)證、統(tǒng)一參數(shù)校驗(yàn)、登錄

過濾器:

編碼過濾器、以及源碼中給出的應(yīng)用實(shí)例如下

1) Authentication Filters 鑒權(quán)

2) Logging and Auditing Filters 日志和審計(jì)

3) Image conversion Filters 圖像轉(zhuǎn)換

4) Data compression Filters 數(shù)據(jù)壓縮

5) Encryption Filters 加密

6) Tokenizing Filters 令牌

7) Filters that trigger resource access events 資源訪問事件觸發(fā)

8) XSL/T filters

9) Mime-type chain Filter

四、什么是攔截器

攔截器,在AOP(Aspect-Oriented Programming)中用于在某個(gè)方法或字段被訪問之前進(jìn)行攔截,然后在之前或之后加入某些操作。攔截是AOP的一種實(shí)現(xiàn)策略。

攔截器最早始于Struct2中,后面在SpringMVC也有大量運(yùn)用。在Webwork(即Structs2框架)文檔的解釋:攔截器是動(dòng)態(tài)攔截Action調(diào)用的對象。它提供了一種機(jī)制可以使開發(fā)者可以定義在一個(gè)action執(zhí)行的前后執(zhí)行的代碼,也可以在一個(gè)action執(zhí)行前阻止其執(zhí)行。同時(shí)也是提供了一種可以提取action中可重用的部分的方式。

談到攔截器,還有一個(gè)詞大家應(yīng)該知道——攔截器鏈(Interceptor Chain,在Struts 2中稱為攔截器棧Interceptor Stack)。攔截器鏈就是將攔截器按一定的順序聯(lián)結(jié)成一條鏈。在訪問被攔截的方法或字段時(shí),攔截器鏈中的攔截器就會(huì)按其之前定義的順序被調(diào)用。

五、攔截器的實(shí)現(xiàn)原理

大部分時(shí)候,攔截器方法都是通過代理的方式來調(diào)用的。Struts 2的攔截器實(shí)現(xiàn)相對簡單。當(dāng)請求到達(dá)Struts 2的ServletDispatcher時(shí),Struts 2會(huì)查找配置文件,并根據(jù)其配置實(shí)例化相對的攔截器對象,然后串成一個(gè)列表(list),最后一個(gè)一個(gè)地調(diào)用列表中的攔截器。

六、什么是過濾器

過濾器是一個(gè)程序,它先于與之相關(guān)的servlet或JSP頁面運(yùn)行在服務(wù)器上。過濾器可附加到一個(gè)或多個(gè)servlet或JSP頁面上,并且可以檢查進(jìn)入這些資源的請求信息。在這之后,過濾器可以作如下的選擇:

①以常規(guī)的方式調(diào)用資源(即調(diào)用servlet或JSP頁面)。

②利用修改過的請求信息調(diào)用資源。

③調(diào)用資源,但在發(fā)送響應(yīng)到客戶機(jī)前對其進(jìn)行修改。

④阻止該資源調(diào)用,代之以轉(zhuǎn)到其他的資源,返回一個(gè)特定的狀態(tài)代碼或生成替換輸出。

七、Servlet過濾器的基本原理

在Servlet作為過濾器使用時(shí),它可以對客戶的請求進(jìn)行處理。處理完成后,它會(huì)交給下一個(gè)過濾器處理,這樣,客戶的請求在過濾鏈里逐個(gè)處理,直到請求發(fā)送到目標(biāo)為止。例如,某網(wǎng)站里有提交“修改的注冊信息”的網(wǎng)頁,當(dāng)用戶填寫完修改信息并提交后,服務(wù)器在進(jìn)行處理時(shí)需要做兩項(xiàng)工作:判斷客戶端的會(huì)話是否有效;對提交的數(shù)據(jù)進(jìn)行統(tǒng)一編碼。這兩項(xiàng)工作可以在由兩個(gè)過濾器組成的過濾鏈里進(jìn)行處理。當(dāng)過濾器處理成功后,把提交的數(shù)據(jù)發(fā)送到最終目標(biāo);如果過濾器處理不成功,將把視圖派發(fā)到指定的錯(cuò)誤頁面。

總結(jié)

以上是生活随笔為你收集整理的过滤器跟拦截器的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。