大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 一文讀懂Filter使用方法

一文讀懂Filter使用方法

更新時間:2021-11-15 10:43:43 來源:動力節點 瀏覽908次

Javaweb中的過濾器可以攔截所有訪問web資源的請求或響應操作。

當然,我們使用過濾器也是為了處理訪問Servlet的數據。

首先我們來看一下Filter的用法。

    1.創建一個類實現Filter接口
    2.重寫接口中方法  doFilter方法是真正過濾的。
    3.在web.xml文件中配置

下面是實現Filter接口的類

public class TestFilter1 implements Filter{
    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        //請求過濾
        System.out.println("我是filter");
        chain.doFilter(request, response);
        //響應過濾
        System.out.println("響應過濾 ");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

接下來我們需要重寫接口中方法。

第三步呢就是我們需要在web.xml中配置過濾器的路徑。

  <filter>
    <filter-name>TestFilter1</filter-name>
    <filter-class>com.daliyuan.filter.TestFilter1</filter-class>
  </filter>
<filter-mapping>
        <filter-name>TestFilter1</filter-name>
        <url-pattern>/*</url-pattern>
  </filter-mapping>

url-pattern中的內容也就是我們需要寫的過濾地址。/*指的是過濾所有頁面。

還有就是我們可以寫確定的訪問地址,比如servlet/Servlet1,這樣的話我們指明確的過濾訪問Servlet1的數據.

還有就是過濾路徑格式是*.name,那么我們就可以過濾所有含有.name結尾的地址了。 格式跟servlet的url地址格式是一樣的。

還有一種格式

<servlet-name>Servlet1</servlet-name>

它是對指定的servlet名稱的servlet進行攔截的。

對于實現的接口的方法,我們下面再來具體看一下。

首先要注意到的就是doFilter方法中的chain參數。 chain的方法doFilter(request, response),它實現的功能就是繼續執行下面的過濾器。

FilterChain 是 servlet 容器為開發人員提供的對象,它提供了對某一資源的已過濾請求調用鏈的視圖。過濾器使用 FilterChain 調用鏈中的下一個過濾器,如果調用的過濾器是鏈中的最后一個過濾器,則調用鏈末尾的資源。

問題:怎樣可以形成一個Filter鏈?
    只要多個Filter對同一個資源進行攔截就可以形成Filter鏈
問題:怎樣確定Filter的執行順序?
    由<filter-mapping>來確定,也就是xml配置文件的順序。

我們來看一下下面的代碼。

System.out.println("我是過濾器2.....請求");
chain.doFilter(request, response);//去執行下一個過濾器
System.out.println("我是過濾器2.....響應");
----------------------------------------------------
System.out.println("我是過濾器3。。。。。 請求");
chain.doFilter(request, response);//去執行index.jsp
System.out.println("我是過濾器3。。。。。 響應");

例如,這里的兩個過濾器形成了Filter鏈,那么就先執行過濾器2然后過濾器3的請求代碼。

等請求的頁面響應時,是先返回到響應3然后到達響應2

還有一點,我們可能注意到了過濾器中的init方法和destroy方法。

public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=========初始化.....");
    }
public void destroy() {
        System.out.println("=========銷毀了.....");
    }

過濾器在服務器啟動加載的時候就創建了,在服務器關閉的時候銷毀。

Servlet生命周期:
實例化 --》 初始化 --》 服務 --》 銷毀
?當服務器啟動,會創建Filter對象,并調用init方法,只調用一次.
?當訪問資源時,路徑與Filter的攔截路徑匹配,會執行Filter中的doFilter方法,這個方法是真正攔截操作的方法.
?當服務器關閉時,會調用Filter的destroy方法來進行銷毀操作.

我們繼續Filter。

下面我們要看的這個是FilterConfig。這個重要性應該一般。

在Filter的init方法上有一個參數,類型就是FilterConfig.

FilterConfig它是Filter的配置對象,它可以完成下列功能

1.獲取Filter名稱

2.獲取Filter初始化參數

3.獲取ServletContext對象。

我們獲取到的數據是從配置文件獲取的

 <filter>
        <filter-name>TestFilter5</filter-name>
        <filter-class>com.qianfeng.filter.TestFilter5</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
  </filter>

然后呢,FilterConfig是這么用的。

private FilterConfig filterConfig;
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        String encode = filterConfig.getInitParameter("encoding");
        //request.setCharacterEncoding(encode);
        System.out.println(encode);
        chain.doFilter(request, response);
    }

GO ON 過濾器。

<dispatcher>

可以取的值有 REQUEST FORWARD ERROR INCLUDE

它的作用是:當以什么方式去訪問web資源時,進行攔截操作.

1.REQUEST 當是從瀏覽器直接訪問資源,或是重定向到某個資源時進行攔截方式配置的 它也是默認值

2.FORWARD 它描述的是請求轉發的攔截方式配置

3.ERROR 如果目標資源是通過聲明式異常處理機制調用時,那么該過濾器將被調用。除此之外,過濾器不會被調用。

4.INCLUDE 如果目標資源是通過RequestDispatcher的include()方法訪問時,那么該過濾器將被調用。除此之外,該過濾器不會被調用

<filter-mapping>
        <filter-name>TestFilter6</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

這個是什么用呢。

之前我們每說過,比如當我們訪問一個Servlet1時,Servlet1中有跳轉,這時候我們之前的過濾器就不能發揮作用了。

那么就需要修改過濾器的配置了。

這是我們就需要設置dispatcher屬性了。

上面也具體說明了,有四種取值。

這是我們再用resquest和response跳轉的時候,我們的過濾器就可以攔截了。

Fliter過濾器就說這么多了。

通過上述相信大家對Filter使用方法已經有所了解,大家如果想了解更多相關知識,可以關注一下動力節點的Filter教程,里面的內容通俗易懂,由淺到深,適合小白學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久精品国产亚洲麻豆小说 | 亚洲国产精品婷婷久久 | 国产精品自线在线播放 | 日韩永久免费视频 | 狠狠色噜噜狠狠狠狠98 | 久久精品最新免费国产成人 | 特级毛片免费视频播放 | 亚洲精品一区二区综合 | 加勒比精品久久一区二区三区 | 欧美理论大片清免费观看 | 国内精品久久久久久久久 | 婷婷网五月天天综合天天爱 | 色噜噜狠狠色综合久 | 亚洲精品国产第一综合99久久 | 91伊人影院 | 国产亚洲新品一区二区 | 国产精品爱久久久久久久9999 | 亚洲综合伦理 | 日韩大片在线 | 久久精品蜜芽亚洲国产a | 青青青草国产 | 奇米影视大全 | 亚洲国产网 | 波多野结衣国产精品 | 人人爱天天做夜夜爽2020麻豆 | 免费香蕉成视频成人网 | 日韩字幕无线乱码 | 国产精品久久久久影院免费 | 成人区精品一区二区不卡亚洲 | 97在线免费看视频 | 狠狠色丁香婷婷综合激情 | 色综合久久中文字幕综合网 | 四虎日韩| 国产二级片 | 精品九九视频 | 干欧美女人 | 91精品国产三级在线观看 | 99国产超薄丝袜足j在线观看 | 欧美日韩一级大片 | 久久精品a| 亚洲大片免费看 |