一、Filter簡介
Filter也稱之為過濾器,它是Servlet技術中最激動人心的技術,Web開發人員通過Filter技術,對Web伺服器管理的所有Web資源:例如Jsp,Servlet,靜态圖檔檔案或靜态HTML檔案等進行攔截,進而實作一些特殊的功能。例如實作URL級别的權限通路控制、過濾敏感詞彙、自動登入、壓縮響應資訊等一些進階功能。
Servlet
API中提供了一個Filter接口,開發Web應用時,如果編寫的Java類實作了這個接口,則把這個Java類稱之為過濾器Filter。通過Filter技術,開發人員可以實作使用者在通路某個目标資源之前,對通路的請求和響應進行攔截,如下所示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL3QjM5ADN3IjM0kTMzITOwgTMwIzLcVDM0EDMy8CXvZmbp9CXt92YuUGZvNWatFWbuU2Zh1Wavw1LcpDc0RHaiojIsJye.png)
二、Filter開發步驟
1、編寫Java類實作Filter接口,并實作doFilter方法。
2、在Web.xml檔案中使用<filter>和<filter-mapping>元素對編寫的Filter類進行注冊,并設定它所能攔截的資源。
三、Filter鍊
1、在一個Web應用中,可以開發編寫多個Filter,這些Filter組合起來稱之為Filter鍊。
2、Web伺服器根據Filter在web.xml檔案中的注冊順序,決定先調用哪個Filter,當第一個Filter的doFilter方法被調用時,web伺服器會建立一個代表Filter的FilterChain對象傳遞給該方法。在doFilter方法中,開發人員如果調用了FilterChain對象的doFilter方法,則web伺服器會檢查FilterChain對象中是否還有Filter,如果有,則調用第2個Filter,如果沒有,則調用目标資源。
四、過濾器生命周期
空參構造() 1次
init() 1次
doFilter(請求,響應,過濾器鍊) N次,與請求次數有關
destory() 1次
Filter是一個單例
五、使用Filter讀取配置檔案資訊
1、web.xml
2、FilterDemo4.java
五、Filter應用
1、統一Post請求中文字元編碼的過濾器。(通過配置參數encoding指明使用何種字元編碼,以處理表單form請求參數的中文問題)
(1)web.xml
(2)FilterDemo5.java
2、禁止浏覽器緩存所有動态頁面的過濾器
(1)web.xml
(2)FilterDemo6.java