欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解

 更新時間:2022年10月28日 14:02:37   作者:游坦之  
這篇文章主要為大家詳細(xì)介紹了Java中的過濾器Filter和監(jiān)聽器Listener的使用以及二者的區(qū)別,文中的示例代碼講解詳細(xì),需要的可以參考一下

1 Filter

1.1 Filter簡介

  • Filter表示過濾器,是JavaWeb三大組件(Servlet、Filter、Listener)之一。
  • 過濾器可以把資源的請求攔截下來,從而實(shí)現(xiàn)一些特殊的功能。
  • 過濾器一般完成一些通用的操作,比如權(quán)限控制、統(tǒng)一編碼處理、敏感字符處理等等
  • Filter流程圖

1.2 Filter的快速入門

Filter和Servlet很相像,步驟也是一樣的。

1.2.1 創(chuàng)建Filter類

  • 新建一個Filter.java文件,實(shí)現(xiàn)Filter接口
  • 實(shí)現(xiàn)接口后,重寫其三個方法
  • 其中都chain.doFilter()是放行的方法
  • inti、和destory都是生命周期的函數(shù)
  • @WebFilter()配置的是攔截的路徑,當(dāng)訪問這個路徑的時候,F(xiàn)ilter會被調(diào)用

注意:此處導(dǎo)入的Filter 是Javax Servlet包下的

@WebFilter("/index.jsp")
public class DemoFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("1.init.......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("2.放行前.....");
        chain.doFilter(request,response);
        System.out.println("4.放行后.....");
    }
    @Override
    public void destroy() {
        System.out.println("5.destory....");
    }
}

1.2.2 訪問index.jsp

由上圖分析所致,當(dāng)我們訪問index.jsp的時候,會調(diào)用Filter,那么我們用代碼檢驗(yàn)一下上面的流程圖。

**按照流程圖,正確的輸出應(yīng)該是1、2、3、4、5,**訪問一下index.jsp

<html>
<body>
<h2>Hello World!</h2>
<%
    System.out.println("3. 我是index.jsp ......");
%>
</body>
</html>

結(jié)果證明流程圖是正確的!

1、放行后訪問對應(yīng)資源,資源訪問完成后,還會回到Filter嗎?

2、如果回到Filter中,是重頭執(zhí)行還是執(zhí)行放行后的邏輯呢?

放行后的邏輯

1.3 Filter的攔截路徑的配置

配置在**@WebFilter(“”)**中,主要有以下四類

  • 攔截具體的資源路徑:/index.jsp,只有訪問index.jsp的時候才會被攔截
  • 目錄攔截:/user/*,訪問/user下的所有資源,都會被攔截
  • 后綴名攔截:*.jsp 訪問后綴名為jsp的資源,都會被攔截
  • 攔截所有:/* 訪問所有的資源,都會被攔截

1.4 過濾器鏈

1.4.1 過濾器鏈簡介

一個web路徑,可以配置多個過濾器,這多個過濾器就被稱為過濾器鏈。

流程圖如下:

見圖知意:

當(dāng)web應(yīng)用有一個A一個B過濾器組成的過濾器鏈時,A放行后,會來到B過濾器。只有兩個過濾器都放行,才會訪問到相應(yīng)的資源。隨后,按照怎么來的,怎么返回的方式,執(zhí)行B、A的放行后邏輯

注意:

為什么是按照A、B,而不是B、A呢?

你以為我瞎說的?其實(shí)不然,**排序方式即為按照字符串排序,**先后執(zhí)行。就是字符串排序小的限制性。

1.4.2 過濾器鏈的例子

由上面的流程圖可知,瀏覽器會按照DemoFilter01 DemoFilter02 的方式 訪問過濾器鏈,所以我們配置了兩個過濾器類。

@WebFilter("/index.jsp")
public class DemoFilter01 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("DemoFilter01 init.......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("1.DemoFilter01 doFilter.....");
        chain.doFilter(request,response);
        System.out.println("5.DemoFilter01 doFilter end.....");
    }
    @Override
    public void destroy() {
        System.out.println("DemoFilter01 destory....");
    }
}
@WebFilter("/index.jsp")
public class DemoFilter02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("DemoFilter02 init......");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("2.DemoFilter02 doFilter....");
        chain.doFilter(request,response);
        System.out.println("4.DemoFilter02 doFilter end....");
    }
    @Override
    public void destroy() {
        System.out.println("DemoFilter02 destory.....");
    }
}
<html>
<body>
<h2>Hello World!</h2>
<%
    System.out.println("3. index.jsp ......");
%>
</body>
</html>

效果圖如下:

2 Listener

2.1 概念

  • Listener表示監(jiān)聽器,是JavaWeb三大組件之一。
  • 監(jiān)聽器可以監(jiān)聽就是在application,session,request三個對象創(chuàng)建、銷毀或者往其中添加修改刪除屬性時自動執(zhí)行代碼的功能組件。
  • Listener分類:Javaweb提供了8個監(jiān)聽器(接口)

2.2 監(jiān)聽器的使用

@WebListener
public class DemoListener01 implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized....");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed....");
    }
}

當(dāng)啟動Tomcat的時候,會自動調(diào)用!

ntln(“contextInitialized…”);

}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("contextDestroyed....");
}

}

當(dāng)啟動Tomcat的時候,會自動調(diào)用!

![image-20220916172910166](https://img-blog.csdnimg.cn/img_convert/7d4ee33099f9d23fddadcfc5140ab6f4.png)

到此這篇關(guān)于Java Web開發(fā)中過濾器和監(jiān)聽器使用詳解的文章就介紹到這了,更多相關(guān)JavaWeb過濾器和監(jiān)聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 怎么在AVD上安裝apk軟件

    怎么在AVD上安裝apk軟件

    執(zhí)行 Windows 開始菜單 => 所有程序 => 附件 => 命令提示符 或通過 Win+R 組合鍵調(diào)出 運(yùn)行 對話框輸入cmd 單擊確定即可
    2013-09-09
  • maven 配置多個倉庫的方法

    maven 配置多個倉庫的方法

    這篇文章主要介紹了maven 配置多個倉庫的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法

    Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java 其中翻轉(zhuǎn)字符串的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-02-02
  • springboot+rabbitmq實(shí)現(xiàn)指定消費(fèi)者才能消費(fèi)的方法

    springboot+rabbitmq實(shí)現(xiàn)指定消費(fèi)者才能消費(fèi)的方法

    當(dāng)項(xiàng)目部署到測試環(huán)境后,QA測試過程中,總是“莫名其妙”的發(fā)現(xiàn)所保存的用戶付款單數(shù)據(jù)有問題。這篇文章主要介紹了springboot+rabbitmq實(shí)現(xiàn)指定消費(fèi)者才能消費(fèi),需要的朋友可以參考下
    2021-11-11
  • 淺談SpringMVC對RESTfull的支持

    淺談SpringMVC對RESTfull的支持

    這篇文章主要介紹了淺談SpringMVC對RESTfull的支持,分享了相關(guān)配置代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法

    eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法

    這篇文章主要介紹了eclipse springboot工程打war包方法及再Tomcat中運(yùn)行的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Java源碼解析HashMap的keySet()方法

    Java源碼解析HashMap的keySet()方法

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的keySet()方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Mybatis中連接查詢和嵌套查詢實(shí)例代碼

    Mybatis中連接查詢和嵌套查詢實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Mybatis中連接查詢和嵌套查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 使用Java8實(shí)現(xiàn)觀察者模式的方法(上)

    使用Java8實(shí)現(xiàn)觀察者模式的方法(上)

    本文給大家介紹使用java8實(shí)現(xiàn)觀察者模式的方法,涉及到j(luò)ava8觀察者模式相關(guān)知識,對此感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • 解決java.lang.NoClassDefFoundError:lombok/Data報錯問題

    解決java.lang.NoClassDefFoundError:lombok/Data報錯問題

    在Java開發(fā)中,使用Lombok庫簡化代碼非常普遍,今天在啟動拉取的git代碼時,遇到了java.lang.NoClassDefFoundError:lombok/Data的報錯,經(jīng)過檢查,發(fā)現(xiàn)錯誤的原因是將Date誤寫為Data,且錯誤地引用了lombok.Data包
    2024-09-09

最新評論