2020.12.15 過濾器Filter
阿新 • • 發佈:2020-12-19
功能
1、⽤來攔截傳⼊的請求和傳出的響應。
2、修改或以某種⽅式處理正在客戶端和服務端之間交換的資料流。
與使⽤ Servlet 類似,Filter 是 Java WEB 提供的⼀個接⼝,開發者只需要⾃定義⼀個類並且實現該接⼝即可。
package com.southwind.filter; import javax.servlet.*; import java.io.IOException; public class CharacterFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletRequest.setCharacterEncoding("UTF-8"); filterChain.doFilter(servletRequest,servletResponse); } }
web.xml中配置Filter
<filter> <filter-name>charcater</filter-name> <filter-class>com.southwind.filter.CharacterFilter</filter-class> </filter> <filter-mapping> <filter-name>charcater</filter-name> <url-pattern>/login</url-pattern> <url-pattern>/test</url-pattern> </filter-mapping>
注意:doFilter方法中處理完業務邏輯之後,必須新增
filterChain.doFilter(servletRequest, servletResponse);
否則請求/響應無法向後傳遞,一直停留在過濾器中。
Filter的宣告週期
當 Tomcat 啟動時,通過反射機制調⽤ Filter 的⽆參建構函式建立例項化物件,同時調⽤ init ⽅法實現 初始化,doFilter ⽅法調⽤多次,當 Tomcat 服務關閉的時候,調⽤ destory 來銷燬 Filter 物件。
⽆參建構函式:只調⽤⼀次,當 Tomcat 啟動時調⽤(Filter ⼀定要進⾏配置)
init ⽅法:只調⽤⼀次,當 Filter 的例項化物件建立完成之後調⽤
doFilter:調⽤多次,訪問 Filter 的業務邏輯都寫在 Filter 中
destory:只調⽤⼀次,Tomcat 關閉時調⽤。 同時配置多個 Filter,Filter 的調⽤順序是由 web.xml 中的配置順序來決定的,寫在上⾯的配置先呼叫,因為 web.xml 是從上到下順序讀取的。