Servlet 過濾器能夠動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息java
在客戶端的請求訪問後端資源以前,攔截這些請求。 web
在服務器的響應發送回客戶端以前,處理這些響應。後端
過濾器是一個實現了 javax.servlet.Filter 接口的 Java 類。javax.servlet.Filter 接口定義了三個方法:服務器
方法 & 描述url
public void doFilter (ServletRequest, ServletResponse, FilterChain)spa
該方法完成實際的過濾操做,當客戶端請求方法與過濾器設置匹配的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain用戶訪問後續過濾器。code
public void init(FilterConfig filterConfig)xml
web 應用程序啓動時,web 服務器將建立Filter 的實例對象,並調用其init方法,讀取web.xml配置,完成對象的初始化功能,從而爲後續的用戶請求做好攔截的準備工做(filter對象只會建立一次,init方法也只會執行一次)。開發人員經過init方法的參數,可得到表明當前filter配置信息的FilterConfig對象。對象
public void destroy()blog
Servlet容器在銷燬過濾器實例前調用該方法,在該方法中釋放Servlet過濾器佔用的資源。
過濾器流程:
請求 ----> 匹配過濾器 -->doFilter() ---> servlet響應前的過濾 chain鏈(servlet響應) --->servlet的響應後的過濾
註解方式配置:
@WebFilter(filterName = "loginFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "loginUI", value = "/home/loginUI"), @WebInitParam(name = "loginProcess", value = "home/login"), @WebInitParam(name = "encoding", value = "utf-8") })
web.xml 文件配置以下:
<filter> <filter-name>LogFilter</filter-name> <filter-class>com.sxt.test.LogFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>sxt教程</param-value> </init-param> </filter>