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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产成人a毛片在线 | 99热热久久这里只有精品8 | 激情一区二区三区成人 | 香蕉视频看片 | 黄色α片 | 国产一区二区三区日韩欧美 | 国产精品久久久久久久久久直 | 亚洲国产成人精品女人久久久 | 精品国产日韩亚洲一区在线 | 久久婷婷丁香七月色综合 | 国产精品香蕉在线观看不卡 | 日韩a级黄色片 | 免费一级毛片在线播放泰国 | 日本美女一区 | 国产精品九九久久精品女同 | 亚洲欧美在线免费 | 一级毛片日本特黄97人人 | 国产精品99久久久久久www | 免费欧洲毛片a级视频老妇女 | 国产成人在线视频观看 | 午夜国产福利在线观看 | 久久不卡一区二区三区 | 欧美激情xxxx性bbbb | 天天干天天骑 | 亚色视频在线观看 | 国产精品亚洲精品影院 | 久久成人国产精品青青 | 国产毛片一区二区三区精品 | 日本中文字幕在线精品 | 午夜影院一区二区 | 成人网在线看 | 久久青草国产免费观看 | 久草在线色站 | 日韩欧美国产一区二区三区 | 国产精品视频网站 | 欧美精品一区二区三区视频 | 四虎成人永久地址 | 888米奇四色极速在线观看 | 国产波波社区精品视频 | 91精品国产色综合久久不卡蜜 | 亚洲一区二区在线成人 |