顧名思義即過濾掉一些東西,好比咱們經歷的高考中考都是過濾器,他過濾掉一些在學習這一方面不是很好的人,而那些成績好的人則升入高中,大學。
java
可是java中的過濾器與生活中的過濾器的做用是相差無幾的,即按照制定的一些規則來控制一些對象web
過濾器是出於客戶端與服務器端之間的一道過濾網,在訪問資源以前,經過一系列的過濾器對請求
進行修改,判斷等。把不符合規則的請求在中途攔截或修改,攔截或修改響應瀏覽器
1.定義一個類實現接口Filter(java.servlet)服務器
import javax.servlet.*; import java.io.IOException; public class Filter1 implements javax.servlet.Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override public void destroy() { } }
1.init:在服務器啓動後,會建立Filter對象,而後調用init方法,只執行一次用於加載資源
2.doFilter:每一次請求被攔截都會執行
3.destory:在服務器關閉後,Filter對象會被銷燬,如何服務器對象正常關閉,destory方法會被執行一次
用於釋放資源app
2.複寫方法
3.設置攔截路徑
設置攔截路徑有兩種方法,一種是註解配置,一種是設置web.xml異步
註解配置:jsp
即加上一個@WebFilter("")ide
import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter("/*") public class Filter1 implements javax.servlet.Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { } @Override public void destroy() { } }
web.XML配置:學習
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter> <filter-name>demo1</filter-name> <filter-class>Filter1</filter-class> </filter> <filter-mapping> <filter-name>demo1</filter-name> //設置攔截路徑 <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
攔截路徑配置的講解
1.具體的資源路徑:/index.jsp 只有在訪問index.jsp這個資源的時候過濾器纔會被執行
2.攔截目錄:/user/* 訪問/user下的全部資源的時候過濾器纔會被執行
3.後綴名攔截:.jsp 訪問後綴名爲jsp的資源的時候,過濾器纔會被執行
4.攔截全部資源:/ 訪問全部資源,都會被攔截url
攔截方式的配置:
註解配置:
1.執行過濾器
2.執行放行後的資源
3.執行過濾器放行器代碼下邊的代碼
執行順序
若是有兩個過濾器:過濾器1和過濾器2
1. 過濾器1
2. 過濾器2
3. 資源執行
4. 過濾器2
5. 過濾器1
看圖按照從左到右的順序來看就好理解了
那麼有了多個過濾器以後又是怎麼來判斷那個過濾器先哪一個過濾器後的呢?
是隨機判斷的?
固然不是啦
1. 註解配置:
按照類名的字符串比較規則比較,值小的先執行