黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

一文讀懂Filter使用方法

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

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教程,里面的內容通俗易懂,由淺到深,適合小白學習,希望對大家能夠有所幫助。

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩视频福利 | 青草草产国视频 | 亚洲乱码尤物193yw在线播放 | 夜夜躁日日躁 | 亚洲七七久久精品中文国产 | 夜夜拍夜夜爽夜夜拍拍拍 | 午夜手机看片 | 人人人人凹人人爽人人澡 | 国产特级全黄一级毛片不卡 | 日日摸日日碰夜夜97 | 国产精品视频人人做人人爱 | 高清中文字幕在线 | 国产小视频福利 | 成人国产精品免费视频 | 久久精品国产免费中文 | 男人把女人下部桶爽的视频 | 久久国产免费 | 国产成+人+综合+亚洲 欧美 | 日本亚洲免费 | 精品日韩欧美 | 天天综合色天天综合网 | 国产精品亚洲欧美日韩一区在线 | 最近最新中文字幕免费大全3 | 亚洲精品午夜 | 河南毛片| 免费在线国产视频 | 国产 麻豆 欧美亚洲综合久久 | 久久天天躁狠狠躁狠狠躁 | 成人av在线播放 | 伊人99在线 | 亚洲第一免费视频 | 色视频在线免费观看 | 免费在线国产视频 | 国产凹凸一区在线观看视频 | 色网站免费 | 涩涩视频www在线观看入口 | 亚洲激情一区 | 欧美00xx| 国产欧美日韩在线一区二区不卡 | 第一国内永久免费福利视频 | 国产成人免费在线观看 |