JavaWeb之Filter過濾器

概念

1、JavaWeb 的一個重要組件,可以對發(fā)送到 Servlet 的請求進(jìn)行攔截,并對響應(yīng)也進(jìn)行攔截

2、Filter 是實(shí)現(xiàn)了 Filter 接口的 Java 類

3、Filter 需要在 web.xml 文件中進(jìn)行配置和映射

使用

1、創(chuàng)建一個實(shí)現(xiàn)類,并實(shí)現(xiàn)于?Filter 接口

2、在 web.xml 文件中配置并映射該?Filter

注:其中 <url-pattern> 指定該 Filter 準(zhǔn)備攔截哪些資源,或者從哪些 url 可以訪問該 Filter?

運(yùn)行后,控制臺第一次打印 init 方法,后面每次刷新都調(diào)用 doFilter 方法

Filter 相關(guān) API?

1、Filter 接口

⑴?public void init(FilterConfig filterConfig)?

該方法類似于 Servlet 的 init 方法,被創(chuàng)建時調(diào)用,且只被調(diào)用一次,該方法用于對當(dāng)前的 Filter 進(jìn)行初始化操作,F(xiàn)ilter 實(shí)例是單例的,其中參數(shù)?filterConfig 類似于 Servlet 的 ServletConfig 可以在 web.xml 文件中配置當(dāng)前 Filter 的初始化參數(shù)

⑵?public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)

真正的 Filter 的邏輯代碼都寫在該方法中,每次攔截都會調(diào)用該方法。filterChain:Filter 鏈,多個 Filter 可以構(gòu)成一個 Filter 鏈。

doFilter(ServletRequest servletRequest,ServletResponse servletResponse):把請求傳給 Filter 鏈的下一個 Filter,若當(dāng)前 Filter 是 Filter 鏈的最后一個 Filter,則把請求傳給目標(biāo) Servlet(或 JSP)

注:多個 Filter 攔截的順序和?<filter-mapping> 配置的順序有關(guān),靠前的先被調(diào)用

⑶ public void destroy()?

釋放當(dāng)前 Filter 所占用的資源,在 Filter 被銷毀之前被調(diào)用且只被調(diào)用一次

2、Filter 代碼執(zhí)行順序

Dispatcher?

指定過濾器所攔截的資源被 Servlet 容器調(diào)用的方式, 可以是 REQUEST,INCLUDE,F(xiàn)ORWARD 和 ERROR 之一,默認(rèn)為 REQUEST,同時可以設(shè)置多個 <dispatcher> 子元素用來指定 Filter 對資源的多種調(diào)用方式進(jìn)行攔截

REQUEST:當(dāng)用戶之間訪問頁面時,web 容器將會調(diào)用過濾器,如果目標(biāo)資源是通過 RequestDespatcher 的 include() 或 forward() 方法訪問時,那么該過濾器就不會被調(diào)用。

INCLUDE:如果目標(biāo)資源是通過?RequestDespatcher? 的 include() 方法訪問時,那么該過濾器將被調(diào)用,除此之外,該過濾器不會被調(diào)用。

FORWARD:如果目標(biāo)資源是通過?RequestDespatcher 的 forward() 方法訪問時,那么該過濾器將被調(diào)用,除此之外,該過濾器不會被調(diào)用。

ERROR:如果目標(biāo)資源時通過聲明式異常處理機(jī)制調(diào)用時,那么該過濾器將被調(diào)用。除此之外,過濾器不會被調(diào)用

配置方法如下:

使瀏覽器不緩存頁面的過濾器

在 doFilter 里面同時設(shè)置三種響應(yīng)頭:

1、response.setDataHeader("Expires",-1)

2、response.setHeader("Cache-Control","no-cache")

3、response.setHeader("Pragma","no-cache")

字符編碼過濾器

當(dāng)頁面?zhèn)髦党霈F(xiàn)中文亂碼時,可以通過對過濾器設(shè)置編碼來解決



以上為本人的一些學(xué)習(xí)筆記,如有出錯歡迎指正,陸續(xù)更新!??!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容