Filter過濾器
1.什麼是Filter(過濾器)?
2.編寫Filter
3.Filter生命週期
4.多個Filter執行順序
5.FilterConfig物件
#什麼是Filter(過濾器)?
Filter過濾器是servlet中提供的一個介面,用來攔截請求和響應,從而實現一些特殊處理
#編寫Filter
只需要實現javax.servlet.Filter 介面即可
package com.mike; import javax.servlet.*; import java.io.IOException; /** * @author mike * @date 2020-11-21 * @desc 實現一個Filter類 */ public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig)throws ServletException{ System.out.println("Filter初始化"); } @Override public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain)throws ServletException, IOException{ request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); System.out.println("攔截前"); //在過濾前設定請求和響應編碼 filterChain.doFilter(request,response); System.out.println("攔截後"); } }
在web.xml中配置過濾器規則
<!--配置過濾器--> <filter> <filter-name>MyFilter</filter-name> <filter-class>com.mike.MyFilter</filter-class> </filter> <!--對映過濾器--> <filter-mapping> <filter-name>MyFilter</filter-name> <!--/* 表示攔截所有請求--> <url-pattern>/*</url-pattern> </filter-mapping>
隨便訪問一個servlet,如http://localhost:8080/helloServlet 觀察輸出資訊
#Filter生命週期
在Filter介面中定義了三個方法
package javax.servlet; import java.io.IOException; public interface Filter { void init(FilterConfig var1) throws ServletException; void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException; void destroy(); }
對於這三個方法的介紹:
init(FilterConfig var1):表示Filter物件的初始化方法,在Filter物件建立時執行(只執行一次),並且傳入一個FilterConfig型別的引數,該引數封裝了Filter的
doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3):表示Filter執行過濾的核心方法,如果某資源在已經被配置到這個Filter進行過濾的話,那麼每次訪問這個資源都會執行doFilter方法,注意 這裡的request和response沒有http需要強制轉換。
destory():表示Filter銷燬方法,當Filter物件銷燬時執行該方法(僅執行一次)。
#多個Filter執行順序
編寫多個Filter可以組成Filter鏈條,web容器會按照一定的順序執行。當在web.xml中定義Filter規則時,容器會按照