1. 程式人生 > 實用技巧 >2020.12.15 過濾器Filter

2020.12.15 過濾器Filter

功能

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 是從上到下順序讀取的。