過濾器,剛看到這個概念的時候,讓小編想到剛剛給家裡買的淨水器,由于媽媽陪讀的地方水質比較差,是以就買了一個淨水器,那麼什麼是過濾器呢?結合我們生活中的知識,我們知道,過濾器是輸送媒體管道上不可缺少的一種裝置,通常安裝在減壓閥、洩壓閥、定水位閥 ,方工過濾器其它裝置的進口端裝置。過濾器有一定規格濾網的濾筒後,其雜質被阻擋,當需要清洗時,隻要将可拆卸的濾筒取出,處理後重新裝入即可,是以,使用維護極為友善。機緣巧合,在最近的項目中也遇見了過濾器Filter,今天這篇部落格,小編就主要簡單的介紹一下過濾器,希望對需要的小夥伴有幫助,還請小夥伴們多多指教哦`(*∩_∩*)′。
Filter簡介
Filter 技術是servlet 2.3 新增加的功能。servlet2.3是sun公司于2000年10月釋出的,它的開發者包括許多個人和公司團體,充分展現了sun公司所倡導的代碼開放性原則。在衆多參與者的共同努力下,servlet2.3比以往功能都強大了許多,而且性能也有了大幅提高。其中最重要的就是filter功能.它使使用者可以改變一個request和修改一個response. Filter 不是一個servlet,它不能産生一個response,它能夠在一個request到達servlet之前預處理request,也可以在response離開servlet時處理response.換種說法,filter其實是一個“servlet chaining“。
Filter 的基本功能是對 Servlet 容器調用 Servlet 的過程進行攔截,進而在 Servlet 進行響應處理的前後實作一些特殊的功能。 在 Servlet API 中定義了三個接口類來開供開發人員編寫 Filter 程式:Filter, FilterChain, FilterConfig Filter 程式是一個實作了 Filter 接口的 Java 類,與 Servlet 程式相似,它由 Servlet 容器進行調用和執行 Filter 程式需要在 web.xml 檔案中進行注冊和設定它所能攔截的資源:Filter 程式可以攔截 Jsp, Servlet, 靜态圖檔檔案和靜态 html 檔案。
Filter基本工作原理
當在 web.xml 中注冊了一個 Filter 來對某個 Servlet 程式進行攔截處理時,這個 Filter 就成了 Servlet 容器與該 Servlet 程式的通信線路上的一道關卡,該 Filter 可以對 Servlet 容器發送給 Servlet 程式的請求和 Servlet 程式回送給 Servlet 容器的相應進行攔截,可以決定是否将請求繼續傳遞給 Servlet 程式,以及對請求和相應資訊是否進行修改 在一個 web 應用程式中可以注冊多個 Filter 程式,每個 Filter 程式都可以對一個或一組 Servlet 程式進行攔截。 若有多個 Filter 程式對某個 Servlet 程式的通路過程進行攔截,當針對該 Servlet 的通路請求到達時,web 容器将把這多個 Filter 程式組合成一個 Filter 鍊(過濾器鍊)。Filter 鍊中各個 Filter 的攔截順序與它們在應用程式的 web.xml 中映射的順序一緻。
常用标簽說明
以小編最近項目中的filter為例,簡單介紹一下filter中常用的标簽,代碼如下所示:
下面簡單簡單說一下,在不同的情況下過濾器是如何進行請求的。
第一個例子
這種情況下,過濾器将會作用于直接從用戶端發過來的以/products/…開始的請求。因為這裡沒有制定任何的< dispatcher >元素,預設值是REQUEST。
第二個例子
這種情況下,如果請求是通過request dispatcher的include方法傳遞過來的對ProductServlet的請求,則要經過這個過濾器的過濾。其它的諸如從用戶端直接過來的對ProductServlet的請求等都不需要經過這個過濾器。
指定filter的比對方式有兩種方法:直接指定url-pattern和指定servlet,後者相當于把指定的servlet對應的url-pattern作為filter的比對模式,filter的路徑比對和servlet是一樣的,都遵循servlet規範中《SRV.11.2 Specification of Mappings》一節的說明。
第三個例子
在這種情況下,如果請求是以/products/…開頭的,并且是通過request dispatcher的forward方法傳遞過來或者直接從用戶端傳遞過來的,則必須經過這個過濾器。
Filter的應用
1、是浏覽器不緩存頁面的過濾器
有 3 個 HTTP 響應頭字段都可以禁止浏覽器緩存目前頁面,它們在 Servlet 中的示例代碼如下:
并不是所有的浏覽器都能完全支援上面的三個響應頭,是以最好是同時使用上面的三個響應頭。
2、字元編碼的過濾器
通過配置參數encoding緻命使用何種字元編碼,以處理HTml Form請求參數的中文問題。當然filter的應用并不僅僅隻有這些,小夥伴們還可以自己去發現哦`(*∩_∩*)′。
小編寄語:該博文,小編主要簡單的介紹了filter,從生活中入手,生活中的filter是什麼,相信小夥伴們都知道啦,進而映射到java中的filter,小編從filter的簡介、filter的工作原理、filter中常用的标簽以及filter的應用幾個方面進行了簡單的介紹。簡單的來說 當用戶端發出Web資源的請求時,Web伺服器根據應用程式配置檔案設定的過濾規則進行檢查,若客戶請求滿足過濾規則,則對客戶請求/響應進行攔截,對請求頭和請求資料進行檢查或改動,并依次通過過濾器鍊,最後把請求/響應交給請求的Web資源處理。請求資訊在過濾器鍊中可以被修改,也可以根據條件讓請求不發往資源處理器,并直接向客戶機發回一個響應。當資源處理器完成了對資源的處理後,響應資訊将逐級逆向傳回。同樣在這個過程中,使用者可以修改響應資訊,進而完成一定的任務。