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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) hot資訊 一文讀懂Filter使用方法

一文讀懂Filter使用方法

更新時(shí)間:2021-11-15 10:43:43 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽874次

Javaweb中的過(guò)濾器可以攔截所有訪問(wèn)web資源的請(qǐng)求或響應(yīng)操作。

當(dāng)然,我們使用過(guò)濾器也是為了處理訪問(wèn)Servlet的數(shù)據(jù)。

首先我們來(lái)看一下Filter的用法。

    1.創(chuàng)建一個(gè)類實(shí)現(xiàn)Filter接口
    2.重寫接口中方法  doFilter方法是真正過(guò)濾的。
    3.在web.xml文件中配置

下面是實(shí)現(xiàn)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
        //請(qǐng)求過(guò)濾
        System.out.println("我是filter");
        chain.doFilter(request, response);
        //響應(yīng)過(guò)濾
        System.out.println("響應(yīng)過(guò)濾 ");
    }
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

接下來(lái)我們需要重寫接口中方法。

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

  <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中的內(nèi)容也就是我們需要寫的過(guò)濾地址。/*指的是過(guò)濾所有頁(yè)面。

還有就是我們可以寫確定的訪問(wèn)地址,比如servlet/Servlet1,這樣的話我們指明確的過(guò)濾訪問(wèn)Servlet1的數(shù)據(jù).

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

還有一種格式

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

它是對(duì)指定的servlet名稱的servlet進(jìn)行攔截的。

對(duì)于實(shí)現(xiàn)的接口的方法,我們下面再來(lái)具體看一下。

首先要注意到的就是doFilter方法中的chain參數(shù)。 chain的方法doFilter(request, response),它實(shí)現(xiàn)的功能就是繼續(xù)執(zhí)行下面的過(guò)濾器。

FilterChain 是 servlet 容器為開發(fā)人員提供的對(duì)象,它提供了對(duì)某一資源的已過(guò)濾請(qǐng)求調(diào)用鏈的視圖。過(guò)濾器使用 FilterChain 調(diào)用鏈中的下一個(gè)過(guò)濾器,如果調(diào)用的過(guò)濾器是鏈中的最后一個(gè)過(guò)濾器,則調(diào)用鏈末尾的資源。

問(wèn)題:怎樣可以形成一個(gè)Filter鏈?
    只要多個(gè)Filter對(duì)同一個(gè)資源進(jìn)行攔截就可以形成Filter鏈
問(wèn)題:怎樣確定Filter的執(zhí)行順序?
    由<filter-mapping>來(lái)確定,也就是xml配置文件的順序。

我們來(lái)看一下下面的代碼。

System.out.println("我是過(guò)濾器2.....請(qǐng)求");
chain.doFilter(request, response);//去執(zhí)行下一個(gè)過(guò)濾器
System.out.println("我是過(guò)濾器2.....響應(yīng)");
----------------------------------------------------
System.out.println("我是過(guò)濾器3。。。。。 請(qǐng)求");
chain.doFilter(request, response);//去執(zhí)行index.jsp
System.out.println("我是過(guò)濾器3。。。。。 響應(yīng)");

例如,這里的兩個(gè)過(guò)濾器形成了Filter鏈,那么就先執(zhí)行過(guò)濾器2然后過(guò)濾器3的請(qǐng)求代碼。

等請(qǐng)求的頁(yè)面響應(yīng)時(shí),是先返回到響應(yīng)3然后到達(dá)響應(yīng)2

還有一點(diǎn),我們可能注意到了過(guò)濾器中的init方法和destroy方法。

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

過(guò)濾器在服務(wù)器啟動(dòng)加載的時(shí)候就創(chuàng)建了,在服務(wù)器關(guān)閉的時(shí)候銷毀。

Servlet生命周期:
實(shí)例化 --》 初始化 --》 服務(wù) --》 銷毀
?當(dāng)服務(wù)器啟動(dòng),會(huì)創(chuàng)建Filter對(duì)象,并調(diào)用init方法,只調(diào)用一次.
?當(dāng)訪問(wèn)資源時(shí),路徑與Filter的攔截路徑匹配,會(huì)執(zhí)行Filter中的doFilter方法,這個(gè)方法是真正攔截操作的方法.
?當(dāng)服務(wù)器關(guān)閉時(shí),會(huì)調(diào)用Filter的destroy方法來(lái)進(jìn)行銷毀操作.

我們繼續(xù)Filter。

下面我們要看的這個(gè)是FilterConfig。這個(gè)重要性應(yīng)該一般。

在Filter的init方法上有一個(gè)參數(shù),類型就是FilterConfig.

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

1.獲取Filter名稱

2.獲取Filter初始化參數(shù)

3.獲取ServletContext對(duì)象。

我們獲取到的數(shù)據(jù)是從配置文件獲取的

 <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>

然后呢,F(xiàn)ilterConfig是這么用的。

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 過(guò)濾器。

<dispatcher>

可以取的值有 REQUEST FORWARD ERROR INCLUDE

它的作用是:當(dāng)以什么方式去訪問(wèn)web資源時(shí),進(jìn)行攔截操作.

1.REQUEST 當(dāng)是從瀏覽器直接訪問(wèn)資源,或是重定向到某個(gè)資源時(shí)進(jìn)行攔截方式配置的 它也是默認(rèn)值

2.FORWARD 它描述的是請(qǐng)求轉(zhuǎn)發(fā)的攔截方式配置

3.ERROR 如果目標(biāo)資源是通過(guò)聲明式異常處理機(jī)制調(diào)用時(shí),那么該過(guò)濾器將被調(diào)用。除此之外,過(guò)濾器不會(huì)被調(diào)用。

4.INCLUDE 如果目標(biāo)資源是通過(guò)RequestDispatcher的include()方法訪問(wèn)時(shí),那么該過(guò)濾器將被調(diào)用。除此之外,該過(guò)濾器不會(huì)被調(diào)用

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

這個(gè)是什么用呢。

之前我們每說(shuō)過(guò),比如當(dāng)我們?cè)L問(wèn)一個(gè)Servlet1時(shí),Servlet1中有跳轉(zhuǎn),這時(shí)候我們之前的過(guò)濾器就不能發(fā)揮作用了。

那么就需要修改過(guò)濾器的配置了。

這是我們就需要設(shè)置dispatcher屬性了。

上面也具體說(shuō)明了,有四種取值。

這是我們?cè)儆胷esquest和response跳轉(zhuǎn)的時(shí)候,我們的過(guò)濾器就可以攔截了。

Fliter過(guò)濾器就說(shuō)這么多了。

通過(guò)上述相信大家對(duì)Filter使用方法已經(jīng)有所了解,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Filter教程,里面的內(nèi)容通俗易懂,由淺到深,適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久精品国产视频 | 日本永久免费 | 四虎影音在线 | 99久久99久久 | 99热这里只有精品在线播放 | 麻豆视频一区二区 | 91精品国产高清久久久久 | 国产激情一区二区三区 | 亚洲成人综合在线 | 精品国产免费观看一区 | 四虎影视网 | 欧美成人午夜精品一区二区 | 国产精品亚洲精品观看不卡 | 九九热精彩视频 | 欧美成人免费xxx大片 | 久久久91精品国产一区二区 | 成人www视频网站免费观看 | 伊人tv | 美利坚永久精品视频在线观看 | 免费观看四虎精品成人 | 久久国产国内精品对话对白 | 日本爱爱网 | 在线视频一区二区三区 | 青草香蕉精品视频在线观看 | 日韩精品成人 | 欧美成人久久 | 国产精品成人观看视频免费 | 成人最新午夜免费视频 | 国产在线视频自拍 | 欧美一级片网址 | 久久久久国产精品免费 | 日韩毛片免费线上观看 | 色综合一区 | 一本伊在人香蕉线观新在线 | 97久久精品人人做人人爽 | 性短视频在线观看免费不卡流畅 | 亚洲狠狠婷婷综合久久久久网站 | 久热最新| 亚洲欧美国产日产综合不卡 | 99在线精品免费视频 | 亚洲aa视频 |