一、Filter簡介
Filter也稱之為過濾器,它是Servlet技術中最激動人心的技術之一,WEB開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp,
Servlet, 靜態圖片檔案或靜態html檔案等進行攔截,從而實現一些特殊的功能。例如實現URL層級的許可權存取控制、過濾禁用語、壓縮響應資訊等
一些進階功能。
Servlet API中提供了一個Filter介面,開發web應用時,如果編寫的Java類實現了這個介面,則把這個java類稱之為過濾器Filter。通過Filter
技術,開發人員可以實現使用者在訪問某個目標資源之前,對訪問的請求和響應進行攔截,Filter介面原始碼:
[java] view plain copy public abstract interface Filter{ public abstract void init(FilterConfig paramFilterConfig) throws ServletException; public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) throws IOException, ServletException; public abstract void destroy(); }
二、Filter是如何?攔截的。(Filter的工作原理)
Filter介面中有一個doFilter方法,當我們編寫好Filter,並配置對哪個web資源進行攔截後,WEB伺服器每次在調用web資源的service方法之前,
都會先調用一下filter的doFilter方法,因此,在該方法內編寫代碼可達到如下目的:
調用目標資源之前,讓一段代碼執行。
是否調用目標資源(即是否讓使用者訪問web資源)。
調用目標資源之後,讓一段代碼執行。
web伺服器在調用doFilter方法時,會傳遞一個filterChain對象進來,filterChain對象是filter介面中最重要的一個對象,它也提供了一個
doFilter方法,開發人員可以根據需求決定是否調用此方法,調用該方法,則web伺服器就會調用web資源的service方法,即web資源就會被訪問,
否則web資源不會被訪問。
三、Filter開發流程
3.1、Filter開發步驟
Filter開發分為2步:
* 編寫java類實現Filter介面,並實現其doFilter方法。
* 在web.xml 檔案中使用<filter>和<filter-mapping>元素對編寫的filter類進行註冊,並設定它所能攔截的資源。
過濾器範例:
[java] view plain copy import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * @author yangcq * @description 過濾器Filter的工作原理 */ public class FilterTest implements Filter{ public void destroy() { System.out.println("----Filter銷毀----"); } public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException { // 對request、response進行一些預先處理 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");