最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的Filter過濾器詳解

 更新時間:2023年08月12日 10:14:40   作者:dbligf6561  
這篇文章主要介紹了Spring中的Filter過濾器詳解,Filter 程序是一個實現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進行調(diào)用和執(zhí)行的,需要的朋友可以參考下

一、Filter基本工作原理

1、Filter 程序是一個實現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進行調(diào)用和執(zhí)行的。

2、當在 web.xml 注冊了一個 Filter 來對某個 Servlet 程序進行攔截處理時,它可以決定是否將請求繼續(xù)傳遞給 Servlet 程序,以及對請求和響應(yīng)消息是否進行修改。

3、當 Servlet 容器開始調(diào)用某個 Servlet 程序時,如果發(fā)現(xiàn)已經(jīng)注冊了一個 Filter 程序來對該 Servlet 進行攔截,那么容器不再直接調(diào)用 Servlet 的 service 方法,而是調(diào)用 Filter 的 doFilter 方法,再由 doFilter 方法決定是否去激活 service 方法。

4、但在 Filter.doFilter 方法中不能直接調(diào)用 Servlet 的 service 方法,而是調(diào)用 FilterChain.doFilter 方法來激活目標 Servlet 的 service 方法,F(xiàn)ilterChain 對象時通過 Filter.doFilter 方法的參數(shù)傳遞進來的。

5、只要在 Filter.doFilter 方法中調(diào)用 FilterChain.doFilter 方法的語句前后增加某些程序代碼,這樣就可以在 Servlet 進行響應(yīng)前后實現(xiàn)某些特殊功能。

6、如果在 Filter.doFilter 方法中沒有調(diào)用 FilterChain.doFilter 方法,則目標 Servlet 的 service 方法不會被執(zhí)行,這樣通過 Filter 就可以阻止某些非法的訪問請求。

二、Filter鏈

1、在一個 Web 應(yīng)用程序中可以注冊多個 Filter 程序,每個 Filter 程序都可以對一個或一組 Servlet 程序進行攔截。如果有多個 Filter 程序都可以對某個 Servlet 程序的訪問過程進行攔截,當針對該 Servlet 的訪問請求到達時,Web 容器將把這多個 Filter 程序組合成一個 Filter 鏈(也叫過濾器鏈)。

2、Filter 鏈中的各個 Filter 的攔截順序與它們在 web.xml 文件中的映射順序一致,上一個 Filter.doFilter 方法中調(diào)用 FilterChain.doFilter 方法將激活下一個 Filter的doFilter 方法,最后一個 Filter.doFilter 方法中調(diào)用的 FilterChain.doFilter 方法將激活目標 Servlet的service 方法。

3、只要 Filter 鏈中任意一個 Filter 沒有調(diào)用 FilterChain.doFilter 方法,則目標 Servlet 的 service 方法都不會被執(zhí)行。

三、Filter接口

一個 Filter 程序就是一個 Java 類,這個類必須實現(xiàn) Filter 接口。javax.servlet.Filter 接口中定義了三個方法:init、doFilter、destory。

1、init 方法

(1)在 Web 應(yīng)用程序啟動時,Web 服務(wù)器(Web 容器)將根據(jù)其 web.xml 文件的配置信息來創(chuàng)建每個注冊的 Filter 的實例對象,并將其保存在內(nèi)存中。

(2)Web 容器創(chuàng)建 Filter 的實例對象后,將立即調(diào)用該 Filter 對象的 init 方法。init 方法在 Filter 生命周期中僅被執(zhí)行一次,Web 容器在調(diào)用 init 方法時,會傳遞一個包含 Filter 的配置和運行環(huán)境信息的 FilterConfig 對象。

public voic init(FilterConfig filterConfig) throws ServletException

(3)開發(fā)人員可以在 init 方法中完成與構(gòu)造方法類似的初始化功能,要注意的是:如果初始化代碼要使用到 FilterConfig 對象,這些代碼只能在 init 方法中編寫,而不能在構(gòu)造方法中編寫(尚未調(diào)用 init 方法,即并沒有創(chuàng)建 FilterConfig 對象,要使用它則必然出錯)。

2、doFilter 方法

當一個 Filter 對象能夠攔截訪問請求時,Servlet 容器將調(diào)用 Filter 對象的 doFilter 方法。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException.ServletException

其中,參數(shù) request 和 response 為 Web 容器或 Filter 鏈中上一個 Filter 傳遞過來的請求和響應(yīng)對象;參數(shù) chain 為代表當前 Filter 鏈的對象。

3、destroy 方法

該方法在 Web 容器卸載 Filter 對象之前被調(diào)用,也僅執(zhí)行一次。

可以完成與 init 方法相反的功能,釋放被該 Filter 對象打開的資源

例如:關(guān)閉數(shù)據(jù)庫連接和 IO 流。

四、FilterChain接口

該接口用于定義一個 Filter 鏈的對象應(yīng)該對外提供的方法,這個接口只定義了一個 doFilter 方法。

public void doFilter(ServletRequest request, ServletResponse response) throws java.io.IOException.ServletException

FilterChain 接口的 doFilter 方法用于通知 Web 容器把請求交給 Filter 鏈中的下一個 Filter 去處理

如果當前調(diào)用此方法的 Filter 對象是Filter 鏈中的最后一個 Filter,那么將把請求交給目標 Servlet 程序去處理。

五、FilterConfig 接口

1、與普通的 Servlet 程序一樣,F(xiàn)ilter 程序也很可能需要訪問 Servlet 容器。Servlet 規(guī)范將代表 ServletContext 對象和 Filter 的配置參數(shù)信息都封裝到一個稱為 FilterConfig 的對象中。

2、FilterConfig 接口則用于定義 FilterConfig 對象應(yīng)該對外提供的方法,以便在 Filter 程序中可以調(diào)用這些方法來獲取 ServletContext 對象,以及獲取在 web.xml 文件中為 Filter 設(shè)置的友好名稱和初始化參數(shù)。

3、FilterConfig接口定義的各個方法:

  • getFilterName 方法,返回 <filter-name> 元素的設(shè)置值。
  • getServletContext 方法,返回 FilterConfig 對象中所包裝的 ServletContext 對象的引用。
  • getInitParameter 方法,用于返回在 web.xml 文件中為 Filter 所設(shè)置的某個名稱的初始化的參數(shù)值。
  • getInitParameterNames 方法,返回一個 Enumeration 集合對象。

到此這篇關(guān)于Spring中的Filter過濾器詳解的文章就介紹到這了,更多相關(guān)Spring的Filter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理

    mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理

    本文主要介紹了mybatis-plus @DS實現(xiàn)動態(tài)切換數(shù)據(jù)源原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • Java程序數(shù)據(jù)庫連接滿問題的排查指南

    Java程序數(shù)據(jù)庫連接滿問題的排查指南

    這篇文章主要介紹了Java應(yīng)用數(shù)據(jù)庫連接滿問題的識別、診斷、原因排查及解決方案,提出通過監(jiān)控、代碼優(yōu)化、配置調(diào)整和預(yù)防措施,結(jié)合Arthas等工具,有效應(yīng)對和預(yù)防該問題,需要的朋友可以參考下
    2025-07-07
  • SpringBoot使用Feign調(diào)用其他服務(wù)接口

    SpringBoot使用Feign調(diào)用其他服務(wù)接口

    這篇文章主要介紹了SpringBoot使用Feign調(diào)用其他服務(wù)接口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 淺談Java中幾個常用集合添加元素的效率

    淺談Java中幾個常用集合添加元素的效率

    下面小編就為大家?guī)硪黄獪\談Java中幾個常用集合添加元素的效率。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • java單例五種實現(xiàn)模式解析

    java單例五種實現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實現(xiàn)模式解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Java基礎(chǔ)之final關(guān)鍵字作用案例

    Java基礎(chǔ)之final關(guān)鍵字作用案例

    這篇文章主要介紹了Java基礎(chǔ)之final關(guān)鍵字作用案例,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • MybatisPlus插件自動維護更新和創(chuàng)建時間方式

    MybatisPlus插件自動維護更新和創(chuàng)建時間方式

    這篇文章主要介紹了MybatisPlus插件自動維護更新和創(chuàng)建時間方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • springboot中通過lua腳本來獲取序列號的方法

    springboot中通過lua腳本來獲取序列號的方法

    這篇文章主要介紹了springboot中通過lua腳本來獲取序列號的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • java實現(xiàn)簡單掃雷游戲

    java實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 枚舉java語言中的修飾符組合的實例代碼

    枚舉java語言中的修飾符組合的實例代碼

    這篇文章主要介紹了枚舉java語言中的修飾符組合,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07

最新評論

女性| 平顺县| 井冈山市| 抚州市| 铁力市| 隆昌县| 鸡东县| 新干县| 安仁县| 来宾市| 福州市| 云和县| 进贤县| 军事| 内丘县| 伊宁市| 广河县| 大足县| 宁明县| 翁牛特旗| 泗阳县| 竹北市| 龙里县| 平和县| 出国| 蒙阴县| 托里县| 宜昌市| 娱乐| 吴忠市| 南雄市| 泗洪县| 和平县| 抚顺市| 栖霞市| 甘德县| 广南县| 开鲁县| 安福县| 孟州市| 景洪市|