過濾器是一個服務(wù)器端的組件,它可以截取用戶端的請求與相應(yīng)信息,并對這些信息過濾。
工作原理
過濾器的工作原理
生命周期
過濾器的生命周期
- init() 過濾器的初始化方法,Web容器創(chuàng)建過濾器實例后將調(diào)用這個方法。這個方法中可以讀取web.xml文件中過濾器的參數(shù)。
- doFilter() 完成實際的過濾操作。過濾器的核心方法。當(dāng)用戶請求訪問與過濾器關(guān)聯(lián)的URL時,Web容器將先調(diào)用過濾器的doFilter方法。FilterChain參數(shù)可以調(diào)用chain.doFilter方法,將請求傳給下一個過濾器(或目標(biāo)資源),或利用轉(zhuǎn)發(fā)、重定向?qū)⒄埱筠D(zhuǎn)發(fā)到其他資源。
- destroy() web容器在銷毀過濾器實例前調(diào)用該方法。在這個方法中可以釋放過濾器占用的資源。(大多數(shù)情況用不到)
配置
注解 @WebFilter
過濾器注解(實用注解則不需要配置xml)
//過濾所有頁面
@WebFilter(filterName = "Filter",urlPatterns = "/*")
//過濾所有頁面的error
@WebFilter(filterName = "ErrorFilter",urlPatterns = "/error.jsp",dispatcherTypes = DispatcherType.ERROR)
@WebFilter常用屬性
【實例】
@WebFilter(filterName = "AsynFilter",value = {"/error.jsp"},dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.ASYNC})
xml配置
過濾器web.xml配置
【實例】
@WebFilter(filterName = "Filter",urlPatterns = "/*")
public class Filter implements javax.servlet.Filter {
public void destroy() {
System.out.println("destroy.......................................");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("start-----------------------------------doFilter");
chain.doFilter(req, resp);
System.out.println("end-------------------------------------doFilter");
}
public void init(FilterConfig config) throws ServletException {
System.out.println("init--------------------------------------------filter");
}
}
過濾器鏈
服務(wù)器會按照web.xml中過濾器定義的先后順序組裝成一條鏈
過濾器鏈執(zhí)行過程
注解filter執(zhí)行順序:根據(jù)filter類名的字母順序確定
xml配置filter執(zhí)行順序:通過每個filter-mapping在web.xml中出現(xiàn)的先后順序來確定
過濾器分類
過濾器分類
錯誤頁面引導(dǎo)
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
過濾器應(yīng)用場景
- 對用戶請求進(jìn)行統(tǒng)一認(rèn)證
- 編碼轉(zhuǎn)換
- 對用戶發(fā)送的數(shù)據(jù)進(jìn)行過濾替換
- 轉(zhuǎn)換圖像格式
- 對響應(yīng)的內(nèi)容進(jìn)行壓縮
- 對數(shù)據(jù)進(jìn)行加密解密
【過濾器登錄校驗案例】登錄案例,慕課網(wǎng)視頻
【過濾器編碼轉(zhuǎn)換案例】編碼轉(zhuǎn)換案例,慕課網(wǎng)視頻