1. 過濾器簡介
定義:
過濾器是 一個服務器端的組件,它可以截取用戶端的請求與響應信息,並對這些信息過濾。
2.過濾器的工作原理和生命週期
2.1 過濾器的工作原理:
2.2 過濾器的生命週期:
其中:
(1)init()方法:過濾器的初始化方法,web容器創建過濾器實例後將調用這個方法。這個方法中可以讀取web.xml文件中過濾器參數。
(2)doFilter()方法:這個方法完成實際的過濾操作。這個地方是過濾器的核心方法。當用戶請求訪問與過濾器關聯的URL時,Web容器將先調用過濾器的doFilter方法。FilterChain參數可以調用chain.doFilter方法,將請求傳給下一個過濾器(或目標資源),或利用轉發、重定向將請求轉發到其他資源。
(3)destroy()方法:web容器在銷燬過濾器實例前調用該方法,在這個方法中可以釋放過濾器佔用的資源。(大多數情況下用不到)。
過濾器的配置
3. 過濾器鏈
服務器會按照web.xml中過濾器定義的先後順序組裝成一條鏈。
4. 過濾器分類
Serverlet2.5提供了四中類型過濾器:REQUEST、FORWARD、INCLUDE、ERROR。
(1)REQUEST:用戶直接訪問頁面時,Web容器將會調用過濾器。
(2)FORWARD:目標資源是通過RequestDispatcher的forward訪問時,該過濾器將被調用。
(3)INCLUDE:目標資源是通過RequestDispatcher的inlude方法調用時,過濾器將被調用。
(4)ERROR:目標資源是通過聲明式異常處理機制調用時,過濾器將被調用。
Servlet3.0 新增ASYNC過濾器,支持異步處理。
其中,@WebFilter用於將一個類聲明爲過濾器,該註解將會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署爲過濾器。
6. 過濾器在實際 項目中的應用場景
(1)對用戶請求進行統一認證。
(2)編碼轉換。
(3)對用戶發送的數據進行過濾替換。
(4)轉換圖像格式。
(5)對響應的內容進行壓縮。