過濾器Filter
1.filter的簡介
filter是對用戶端通路資源的過濾,符合條件放行,不符合條件不放行,并且可以對目 标資源通路前後進行邏輯處理
2.快速入門
步驟:
1)編寫一個過濾器的類實作Filter接口
2)實作接口中尚未實作的方法(着重實作doFilter方法)
3)在web.xml中進行配置(主要是配置要對哪些資源進行過濾)
- EncodingFilter 類
package com.ithiema.web.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class EncodingFilter implements Filter{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//request.setCharacterEncoding("UTF-8");
//在傳遞request之前對request的getParameter方法進行增強
/*
* 裝飾者模式(包裝)
*
* 1、增強類與被增強的類要實作統一接口
* 2、在增強類中傳入被增強的類
* 3、需要增強的方法重寫 不需要增強的方法調用被增強對象的
*
*/
//被增強的對象
HttpServletRequest req = (HttpServletRequest) request;
//增強對象
EnhanceRequest enhanceRequest = new EnhanceRequest(req);
chain.doFilter(enhanceRequest, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
class EnhanceRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public EnhanceRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
//對getParaameter增強
@Override
public String getParameter(String name) {
String parameter = request.getParameter(name);//亂碼
try {
parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return parameter;
}
}
3.Filter的API詳解
(1)filter生命周期及其與生命周期相關的方法
Filter接口有三個方法,并且這個三個都是與Filter的生命相關的方法
1.init(Filterconfig):代表filter對象初始化方法 filter對象建立時執行

2.doFilter(ServletRequest,ServletResponse,FilterCha):代表filter執行過濾的核心方法,如果某資源在已經被配置到這個filter進行過濾的話,那麼每次通路這個資源都會執行doFilter方法
3.destory():代表是filter銷毀方法 當filter對象銷毀時執行該方法
Filter對象的生命周期:
Filter何時建立:伺服器啟動時就建立該filter對象
Filter何時銷毀:伺服器關閉時filter銷毀
(2)Filter的AP詳解
1)init(FilterConfig)
其中參數config代表 該Filter對象的配置資訊的對象,内部封裝是該filter的配置資訊。
2)destory()方法
filter對象銷毀時執行
3)doFilter方法
doFilter(ServletRequest,ServletResponse,FilterChain)
其中的參數:
ServletRequest/ServletResponse:每次在執行doFilter方法時 web容器負責建立一個request和一個response對象作為doFilter的參數傳遞進來。該request個該response就是在通路目标資源的service方法時的request和response。
FilterChain:過濾器鍊對象,通過該對象的doFilter方法可以放行該請求
4.Filter的配置
url-pattern配置時
1)完全比對 /sertvle1
2)目錄比對 /aaa/bbb/* ----最多的
/user/:通路前台的資源進入此過濾器
/admin/:通路背景的資源時執行此過濾器
3)擴充名比對 *.abc *.jsp
注意:url-pattern可以使用servlet-name替代,也可以混用
dispatcher:通路的方式(了解)
REQUEST:預設值,代表直接通路某個資源時執行filter
FORWARD:轉發時才執行filter
INCLUDE: 包含資源時執行filter
ERROR:發生錯誤時 進行跳轉是執行filter
總結Filter的作用?
1)公共代碼的提取
2)可以對request和response中的方法進行增強(裝飾者模式/動态代理)
3)進行權限控制