JavaWeb 核心技術之過濾器Filter
阿新 • • 發佈:2018-12-13
一、過濾器Filter
1.filter的簡介
filter是對客戶端訪問資源的過濾,符合條件放行,不符合條件不放行,並且可以對目標資源訪問前後進行邏輯處理
2.快速入門
步驟:
1)編寫一個過濾器類實現Filter介面
package com.ma.web.filter; import java.io.IOException; @javax.servlet.annotation.WebFilter(filterName = "QuickFilter") public class QuickFilter implements javax.servlet.Filter { public void destroy() { } public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException { System.out.println("Quick running..."); //放行請求 chain.doFilter(req, resp); } public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException { } }
2)實現介面尚未實現的方法(著重是doFilter方法)
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {
System.out.println("Quick running...");
//放行請求
chain.doFilter(req, resp);
}
3)在web.xml中進行配置(主要是配置對哪些資源進行過濾)
<filter>
<filter-name>QuickFilter</filter-name>
<filter-class>com.ma.web.filter.QuickFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>QuickFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
圖解
3.Filter的API詳解
1)filter生命週期及其與生命週期相關的方法
filter介面有三個方法,並且這三個方法都是與Filter的生命相關的方法。
init(FilterConfig filterConfig):代表filter物件初始化方法,物件建立時執行
//Filter建立的時候呼叫init方法
public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {
//1.獲取web.xml的filter的名稱
System.out.println(config.getFilterName());
//2.獲取filter的初始化引數
System.out.println(config.getInitParameter("aaa"));
//3.獲取ServletContext
System.out.println(config.getServletContext());
System.out.println("init...");
}
doFilter(ServletRequest request, ServletRespnse respnse, FilterCha cha):代表filter執行的核心方法,如果某資源已經配置到這個filter進行過濾的話,那麼每次訪問這個資源都會執行doFilter()方法
/**
*
* @param req 內部封裝的是客戶端http請求
* @param resp 代表響應
* @param chain 過濾器鏈物件
* @throws javax.servlet.ServletException
* @throws IOException
*/
//doFilter過濾器的核心方法
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException {
System.out.println("Quick01 running...");
//放行請求
chain.doFilter(req, resp);
}
destory():代表是filter銷燬方法,當filter銷燬時執行該方法
//Filter物件銷燬的時候執行destiny方法
public void destroy() {
System.out.println("destory...");
}
3.dispatcher:訪問的方式
REQUEST:預設值,代表直接訪問某個資源時執行filter
FORWARD:轉發時才執行filter
INCLUDE:包含資源時執行filter
ERROR:發生錯誤是,進行跳轉時候執行filter
4.總結filter作用:
1)公共程式碼的提取
2)可以對request和reponse中的方法進行增強(裝飾者模式或動態代理)
3)進行許可權管理
二、自動登入
三、全域性編碼修改