聊聊java過濾器是怎樣使用的?
過濾器的工作原理及生命周期
init():這是過濾器的初始化方法,web容器創建過濾器實例后將調用這個方法。這個方法中可以讀取web.xml文件中過濾器的參數。
doFilter():這個方法完成實際的過濾操作。這個地方是過濾器的核心方法。當用戶請求訪問與過濾器關聯的URL時,Web容器將先調用過濾器的doFilter方法。FilterChain參數可以調用chain.doFilter方法,將請求傳給下一個過濾器(或目標資源),或利用轉發,重定向將請求轉發到其他資源。
destroy():web容器在銷毀過濾器實例前調用該方法,在這個方法中可以釋放過濾器占用的資源。(大多數情況用不到)
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>FilterTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>com.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
過濾器鏈
過濾器1 ,過濾器2
若他們的url-pattern不一樣,則是互不干擾的兩個過濾器
若他們的url-parttern一樣,則形成了過濾器鏈
用戶請求——》過濾器1——》過濾器2——》過濾器3——》web資源
服務器會按照web.xml中過濾器定義的先后順序組裝成一條鏈
過濾器鏈執行過程
eg:
start----doFilter--FirstFilter
start---doFilter--SecondFilter
index.jsp
end---doFilter--SecondFilter
end------doFilter—FirstFilter
過濾器的分類
Servlet2.5
- Request:用戶直接訪問頁面時,web容器將會調用過濾器
- Forward:目標資源是通過RequestDispatcher的forward訪問時,該過濾器將被調用
- Include:目標資源是通過RequestDispatcher的include訪問時,該過濾器將被調用
- Error:目標資源時通過聲明式異常處理機制調用時,過濾器將被調用
Servlet3.0
ASYNC:支持異步處理
@WebFilter
@WebFilter用于將一個類聲明為過濾器,該注解會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為過濾器。
過濾器在實際項目中的應用場景
- 對用戶請求進行統一認證
- 編碼轉換
- 對用戶發送的數據進行過濾替換
- 轉換圖像格式
- 對響應的內容進行壓縮
共同學習,寫下你的評論
評論加載中...
相關文章推薦