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

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

一文讀懂Filter使用方法

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

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 在线视频综合视频免费观看 | 一级h片| 久久大香香蕉国产免费网vrr | 国产九九在线 | 色拍拍噜噜噜aⅴ在线观看 色拍拍欧美视频在线看 | 中文字幕五月天 | 香蕉在线网站 | 欧美一级视频在线观看欧美 | 91视频日韩 | 国产香蕉在线精彩视频 | 四房激情 | 欧美在线观看第一页 | 国产一及片| 色综合桃花网 | 欧美成人四级hd版 | 在线国产中文字幕 | 爱久久www.35669| 欧美freesex呦交 | 久草手机视频在线 | 色尼玛亚洲综合 | 日韩天堂视频 | 国产精品98视频全部国产 | 免费伊人 | 亚洲日本高清成人aⅴ片 | 久久免费视频7 | 玖玖在线免费视频 | 四虎ww| 成人免费精品视频 | 亚洲精品123区在线观看 | 一级特黄特交牲大片 | 女女同免费播放毛片 | 久久久91精品国产一区二区 | 久久国产亚洲高清观看5388 | 国产高清国产精品国产k | 中文字幕在线精品不卡 | 欧美色爱综合网 | 欧洲国产伦久久久久久久 | 免费看欧美一级特黄α大片 | 中文字幕精品1在线 | 欧美色图一区二区 | 亚洲成色 |