Filter:過濾器
(Filter創建之後一定要記得在XML中修改URL,設定要過濾的對象。)
簡介:
程序的過濾器,過濾客戶端與服務器之間的請求和響應。
如:過濾字符集
Filter是web三大核心組件之一。
- Servlet:處理用戶請求
- Filter:過濾用戶請求&響應
- Listener:監聽器
web三大核心組件的共同點
- 實現某個接口
- 註冊
Filter生命週期
構造器
- 執行次數:執行一次
- 執行時機 :啓動服務器時執行
init()
- 執行次數:執行一次
- 執行時機 :啓動服務器時執行
doFilter()
- 執行次數:執行多次
- 執行時機 :每次過濾請求時執行
destroy()
- 執行次數:執行一次
- 執行時機 :關閉服務器時執行
Filter的工作原理
- 請求
- 執行過濾器中的doFilter(),執行放行前的代碼。
- 放行請求,執行處理請求代碼(Servlet)並做出響應。
- 執行過濾器中的doFilter(),執行放行後的代碼。
- 響應
多個Filter的執行流程
- 請求
- filter1放行前
- filter2放行前
- filter3放行前
- 處理請求,做出響應
- filter3放行後
- filter2放行後
- filter1放行後
- 響應
注意: filter的先後順序,由web.xml中url的順序決定。
Url的配置規則
1、精準配置:
<url-pattern>/UserServlet</url-pattern>
<servlet-name>UserServlet</servlet-name>
2、模糊配置:
包含 “*” 的配置,稱之爲模糊配置。
前置模糊:.jsp
後置模糊:/pages/user/
中間模糊 (沒有)
自定義HttpFilter
仿照HttpServlet : GenericServlet : Servlet
HttpFilter應包含以下幾步:
1、getXXX()
2、abstract doFilter()
3、overload doFilter()
public abstract class HttpFilter implements Filter {
private FilterConfig filterConfig;
public HttpFilter() {
// TODO Auto-generated constructor stub
}
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
doFilter(req, res, chain);
}
public abstract void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException;
public void init(FilterConfig fConfig) throws ServletException {
this.filterConfig = fConfig;
}
/**
* 獲取FilterConfig對象
* @return
*/
public FilterConfig getFilterConfig() {
return filterConfig;
}
}
Listener:監聽器
程序中:
- 監聽對象:ServletContext、HttpSession、ServletRequest等
- 監聽事件:對象創建、修改、刪除等
- 監聽結果:需求
- 監聽者:程序員自己創建