JSP基本知識點、Filter(過濾器)
在請求servlet時,先檢查請求是否符合要求,
與Servlet相似,它是由Servlet容器進行呼叫和執行
單例項,會出現執行緒問題
Filter(過濾器)
Filter 的基本功能是:
對 Servlet 容器呼叫 Servlet 的過程進行攔截,從而在 Servlet 進行響應處理的前後實現一些特殊的功能。
Servlet API中定義了三個介面實現類:Filter 、FilterChain、FilterConfig
Filter程式是一個實現Filter介面的實現類,與Servlet程式相似,他由Servlet容器進行除錯和執行。
Filter需要在web.xml檔案中進行註冊和設定它所攔截的資源:Filter程式可以攔截Jsp,Servlet,靜態圖片和靜態html檔案。
Filter的攔截過程
Filter的過濾過程
Filter的基本工作原理
當在 web.xml 中註冊了一個 Filter 來對某個 Servlet 程式進行攔截處理時,這個 Filter 就成了 Servlet 容器與該 Servlet 程式的通訊線路上的一道關卡,該 Filter 可以對 Servlet 容器傳送給 Servlet 程式的請求和 Servlet 程式回送給 Servlet 容器的響應進行攔截,可以決定是否將請求繼續傳遞給 Servlet 程式,以及對請求和響應資訊是否進行修改。
在一個 web 應用程式中可以註冊多個 Filter 程式,每個 Filter
若有多個 Filter 程式對某個 Servlet 程式的訪問過程進行攔截,當針對該 Servlet 的訪問請求到達時,web 容器將把這多個 Filter 程式組合成一個 Filter 鏈(過濾器鏈)。Filter 鏈中各個 Filter 的攔截順序與它們在應用程式的web.xml 中對映的順序一致。
Filter介面
過濾器的部署
在實現一個過濾器後,需要在 web.xml 中進行註冊和設定它所能攔截的資源。這可以通過<filter>和<filter-mapping>元素來完成的。
<filter> 元素(註冊Filter)
<filter>
<filter-name>testFitler</filter-name>
<filter-class>org.test.TestFiter</filter-class>
<init-param>
<param-name>word_file</param-name>
<param-value>/WEB-INF/word.txt</param-value>
</init-param>
</filter>
對映Filter
在同一個 web.xml 檔案中可以為同一個 Filter 設定多個對映。
若一個 Filter 鏈中多次出現了同一個 Filter 程式,這個 Filter 程式的攔截處理過程將被多次執行