JavaWeb之Filter與Listener使用解析
一、Filter
1.1 Filter概述
- 概念:Filter表示過(guò)濾器,是JavaWeb三大組件 (Servlet、Filter、Listener) 之一
- 過(guò)濾器可以把對(duì)資源的請(qǐng)求攔截下來(lái),從而實(shí)現(xiàn)一些特殊的功能
- 過(guò)濾器一般完成一些通用的操作,比如:權(quán)限控制、統(tǒng)一編碼處理、敏感字符處理等等

1.2 Filter快速入門
進(jìn)行 Filter 開(kāi)發(fā)分成以下三步實(shí)現(xiàn)
定義類,實(shí)現(xiàn)Filter接口,并重寫其所有方法

配置Filter攔截資源的路徑:在類上定義 @WebFilter 注解。而注解的value屬性值 /* 表示攔截所有的資源

在doFilter方法中輸出一句話,并放行

package com.learn.web.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* @author 咕咕貓
* @version 1.0
*/
@WebFilter("/*")
public class FilterDemo implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//放行前,對(duì)request數(shù)據(jù)進(jìn)行處理
System.out.println("1. FilterDemo....");
//放行
filterChain.doFilter(servletRequest,servletResponse);
//放行后,對(duì)response數(shù)據(jù)進(jìn)行處理
System.out.println("3. FilterDemo....");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}1.3 Filter執(zhí)行流程

Filter的執(zhí)行流程如下:

1.4 Filter攔截的路徑配置
攔截路徑表示 Filter 會(huì)對(duì)請(qǐng)求的哪些資源進(jìn)行攔截,使用 @WebFilter 注解進(jìn)行配置。如: @WebFilter("攔截路徑")
攔截路徑有如下四種配置方式:
- 攔截具體的資源: /index.jsp:只有訪問(wèn)index.jsp時(shí)才會(huì)被攔截
- 目錄攔截:/user/*:訪問(wèn)/user下的所有資源,都會(huì)攔截
- 后綴名攔截:*. jsp:訪問(wèn)后綴名為jsp 的所有資源,都會(huì)被攔截
- 攔截所有:/*:訪問(wèn)所有資源,都會(huì)被攔截
1.5 過(guò)濾器鏈
過(guò)濾器鏈?zhǔn)侵冈谝粋€(gè)Web應(yīng)用,可以配置多個(gè)過(guò)濾器,這多個(gè)過(guò)濾器稱為過(guò)濾器鏈。

代碼案例中為什么是先執(zhí)行 FilterDemo ,后執(zhí)行 FilterDemo2 呢?
- 我們現(xiàn)在使用的是注解配置Filter,而這種配置方式的優(yōu)先級(jí)是按照過(guò)濾器類名(字符串)的自然排序。
- 比如有如下兩個(gè)名稱的過(guò)濾器 : BFilterDemo 和 AFilterDemo 。那一定是 AFilterDemo 過(guò)濾器先執(zhí)行。
二、Listener
2.1 概述
- Listener表示監(jiān)聽(tīng)器,是JavaWeb三大組件(Servlet、Filter、Listener) 之一
- 監(jiān)聽(tīng)器可以監(jiān)聽(tīng)就是在 application , session , request 三個(gè)對(duì)象創(chuàng)建、銷毀或者往其中添加修改刪除屬性時(shí)自動(dòng) 執(zhí)行代碼的功能組件。
application 是 ServletContext 類型的對(duì)象。
ServletContext 代表整個(gè)web應(yīng)用,在服務(wù)器啟動(dòng)的時(shí)候,tomcat會(huì)自動(dòng)創(chuàng)建該對(duì)象。在服務(wù)器關(guān)閉時(shí)會(huì)自動(dòng)銷毀該 對(duì)象。
2.2 分類
JavaWeb 提供了8個(gè)監(jiān)聽(tīng)器:

這里面只有 ServletContextListener 這個(gè)監(jiān)聽(tīng)器后期會(huì)接觸到, ServletContextListener 是用來(lái)監(jiān)聽(tīng) ServletContext 對(duì)象的創(chuàng)建和銷毀。
2.3 ServletContextListener的使用
1. 定義類,實(shí)現(xiàn) ServletContextListener 接口并重寫所有的抽象方法

2. 在類上添加 @WebListener 注解
package com.learn.web.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/**
* @author 咕咕貓
* @version 1.0
*/
@WebListener
public class ContextLoaderListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
//加載資源
System.out.println("ContextLoaderListener...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
//釋放資源
}
}到此這篇關(guān)于JavaWeb之Filter與Listener使用解析的文章就介紹到這了,更多相關(guān)Filter與Listener使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
- java 在Jetty9中使用HttpSessionListener和Filter
- Filter、Servlet、Listener的學(xué)習(xí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- Java web三件套listener、filter、servelt原理解析
- JavaWeb學(xué)習(xí)筆記之Filter和Listener
- 深入了解Java中的過(guò)濾器Filter和監(jiān)聽(tīng)器Listener
- Java學(xué)習(xí)手冊(cè)之Filter和Listener使用方法
相關(guān)文章
基于SpringMVC攔截器實(shí)現(xiàn)接口耗時(shí)監(jiān)控功能
本文呢主要介紹了基于SpringMVC攔截器實(shí)現(xiàn)的接口耗時(shí)監(jiān)控功能,統(tǒng)計(jì)接口的耗時(shí)情況屬于一個(gè)可以復(fù)用的功能點(diǎn),因此這里直接使用 SpringMVC的HandlerInterceptor攔截器來(lái)實(shí)現(xiàn),需要的朋友可以參考下2024-02-02
java 對(duì)文件夾目錄進(jìn)行深度遍歷實(shí)例代碼
這篇文章主要介紹了java 對(duì)文件夾目錄進(jìn)行深度遍歷實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
SpringBoot項(xiàng)目如何訪問(wèn)jsp頁(yè)面的示例代碼
本篇文章主要介紹了SpringBoot項(xiàng)目如何訪問(wèn)jsp頁(yè)面的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
SpringMVC使用JsonView針對(duì)統(tǒng)一實(shí)體返回不同信息
這篇文章主要為大家介紹了SpringMVC使用JsonView針對(duì)統(tǒng)一實(shí)體返回不同信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
JavaSE面試題之this與super關(guān)鍵字的區(qū)別詳解
this關(guān)鍵字用于引用當(dāng)前對(duì)象的引用,super關(guān)鍵字用于引用父類對(duì)象的引用,下面這篇文章主要給大家介紹了關(guān)于JavaSE面試題之this與super關(guān)鍵字區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-12-12
Java 對(duì)接飛書多維表格使用詳解(微服務(wù))
本文詳細(xì)介紹了如何基于飛書開(kāi)放平臺(tái)在微服務(wù)項(xiàng)目中操作飛書多維表格,包括應(yīng)用創(chuàng)建、授權(quán)、多維表數(shù)據(jù)操作(新增、查詢、刪除)以及Java SDK實(shí)現(xiàn)等步驟,感興趣的朋友跟隨小編一起看看吧2024-12-12
Jenkins自動(dòng)部署Net Core過(guò)程圖解
這篇文章主要介紹了Jenkins自動(dòng)部署Net Core過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

