JavaWeb之Filter與Listener使用解析
一、Filter
1.1 Filter概述
- 概念:Filter表示過濾器,是JavaWeb三大組件 (Servlet、Filter、Listener) 之一
- 過濾器可以把對資源的請求攔截下來,從而實現(xiàn)一些特殊的功能
- 過濾器一般完成一些通用的操作,比如:權(quán)限控制、統(tǒng)一編碼處理、敏感字符處理等等
1.2 Filter快速入門
進行 Filter 開發(fā)分成以下三步實現(xiàn)
定義類,實現(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 { //放行前,對request數(shù)據(jù)進行處理 System.out.println("1. FilterDemo...."); //放行 filterChain.doFilter(servletRequest,servletResponse); //放行后,對response數(shù)據(jù)進行處理 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 會對請求的哪些資源進行攔截,使用 @WebFilter 注解進行配置。如: @WebFilter("攔截路徑")
攔截路徑有如下四種配置方式:
- 攔截具體的資源: /index.jsp:只有訪問index.jsp時才會被攔截
- 目錄攔截:/user/*:訪問/user下的所有資源,都會攔截
- 后綴名攔截:*. jsp:訪問后綴名為jsp 的所有資源,都會被攔截
- 攔截所有:/*:訪問所有資源,都會被攔截
1.5 過濾器鏈
過濾器鏈是指在一個Web應(yīng)用,可以配置多個過濾器,這多個過濾器稱為過濾器鏈。
代碼案例中為什么是先執(zhí)行 FilterDemo ,后執(zhí)行 FilterDemo2 呢?
- 我們現(xiàn)在使用的是注解配置Filter,而這種配置方式的優(yōu)先級是按照過濾器類名(字符串)的自然排序。
- 比如有如下兩個名稱的過濾器 : BFilterDemo 和 AFilterDemo 。那一定是 AFilterDemo 過濾器先執(zhí)行。
二、Listener
2.1 概述
- Listener表示監(jiān)聽器,是JavaWeb三大組件(Servlet、Filter、Listener) 之一
- 監(jiān)聽器可以監(jiān)聽就是在 application , session , request 三個對象創(chuàng)建、銷毀或者往其中添加修改刪除屬性時自動 執(zhí)行代碼的功能組件。
application 是 ServletContext 類型的對象。
ServletContext 代表整個web應(yīng)用,在服務(wù)器啟動的時候,tomcat會自動創(chuàng)建該對象。在服務(wù)器關(guān)閉時會自動銷毀該 對象。
2.2 分類
JavaWeb 提供了8個監(jiān)聽器:
這里面只有 ServletContextListener 這個監(jiān)聽器后期會接觸到, ServletContextListener 是用來監(jiān)聽 ServletContext 對象的創(chuàng)建和銷毀。
2.3 ServletContextListener的使用
1. 定義類,實現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系
- java 在Jetty9中使用HttpSessionListener和Filter
- Filter、Servlet、Listener的學(xué)習(xí)_動力節(jié)點Java學(xué)院整理
- Java web三件套listener、filter、servelt原理解析
- JavaWeb學(xué)習(xí)筆記之Filter和Listener
- 深入了解Java中的過濾器Filter和監(jiān)聽器Listener
- Java學(xué)習(xí)手冊之Filter和Listener使用方法
相關(guān)文章
基于SpringMVC攔截器實現(xiàn)接口耗時監(jiān)控功能
本文呢主要介紹了基于SpringMVC攔截器實現(xiàn)的接口耗時監(jiān)控功能,統(tǒng)計接口的耗時情況屬于一個可以復(fù)用的功能點,因此這里直接使用 SpringMVC的HandlerInterceptor攔截器來實現(xiàn),需要的朋友可以參考下2024-02-02SpringMVC使用JsonView針對統(tǒng)一實體返回不同信息
這篇文章主要為大家介紹了SpringMVC使用JsonView針對統(tǒng)一實體返回不同信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03JavaSE面試題之this與super關(guān)鍵字的區(qū)別詳解
this關(guān)鍵字用于引用當前對象的引用,super關(guān)鍵字用于引用父類對象的引用,下面這篇文章主要給大家介紹了關(guān)于JavaSE面試題之this與super關(guān)鍵字區(qū)別的相關(guān)資料,需要的朋友可以參考下2023-12-12