Java Filter過濾器(攔截路徑的配置+攔截方式的配置+生命週期+多個過濾器的前後執行順序)

Java Filter過濾器+Listen監聽器

啥是過濾器

顧名思義即過濾掉一些東西,好比咱們經歷的高考中考都是過濾器,他過濾掉一些在學習這一方面不是很好的人,而那些成績好的人則升入高中,大學。
在這裏插入圖片描述java

可是java中的過濾器與生活中的過濾器的做用是相差無幾的,即按照制定的一些規則來控制一些對象web

Filer的做用:

過濾器是出於客戶端與服務器端之間的一道過濾網,在訪問資源以前,經過一系列的過濾器對請求
進行修改,判斷等。把不符合規則的請求在中途攔截或修改,攔截或修改響應瀏覽器

在這裏插入圖片描述

如何建立使用一個Filter

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() {

    }
}

Filer的生命週期:

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

攔截方式的配置
註解配置:

  • 設置dispatcherTypes屬性
    1. REQUEST:默認值。瀏覽器直接請求資源
    2. FORWARD:轉發訪問資源
    3. INCLUDE:包含訪問資源
    4. ERROR:錯誤跳轉資源
    5. ASYNC:異步訪問資源
    web.xml配置
    * 設置 標籤便可

過濾器的執行流程:

1.執行過濾器
2.執行放行後的資源
3.執行過濾器放行器代碼下邊的代碼

過濾器鏈(配置多個過濾器)

執行順序
若是有兩個過濾器:過濾器1和過濾器2
1. 過濾器1
2. 過濾器2
3. 資源執行
4. 過濾器2
5. 過濾器1

看圖按照從左到右的順序來看就好理解了
在這裏插入圖片描述
那麼有了多個過濾器以後又是怎麼來判斷那個過濾器先哪一個過濾器後的呢?
是隨機判斷的?
在這裏插入圖片描述
固然不是啦

過濾器前後執行順序的判斷方法

1. 註解配置
按照類名的字符串比較規則比較,值小的先執行

  • 如: AFilter 和 BFilter,AFilter就先執行了。
    2. web.xml配置
    誰定義在上邊,誰先執行

以上就是Filter的一些基礎知識,寫做不易,請各位老鐵點個贊支持一下,以爲有幫助的也能夠收藏呀,我會常常更新文章,也能夠關注我呀

在這裏插入圖片描述

相關文章
相關標籤/搜索