深入理解JavaWeb中過(guò)濾器與監(jiān)聽器的應(yīng)用
過(guò)濾器Filter
Filter過(guò)濾器能夠?qū)ζヅ涞恼?qǐng)求到達(dá)目標(biāo)之前或返回響應(yīng)之后增加一些處理代碼
常用來(lái)做 全局轉(zhuǎn)碼 ,session有效性判斷

過(guò)濾器聲明
在 web.xml 中聲明Filter的匹配過(guò)濾特征及對(duì)應(yīng)的類路徑 , 3.0版本后可以在類上使用 @WebFilter 注解來(lái)聲明
filter-class : 內(nèi)部地址路徑
url-pattern : 匹配過(guò)濾的特征, 實(shí)際開發(fā)中匹配規(guī)則的準(zhǔn)確性非常重要
filter-name : 兩者的對(duì)應(yīng)
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.yuan.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>過(guò)濾器生命周期

加載 : 在web.xml中聲明Filter相關(guān)信息
實(shí)例化 : 由WebServer( 如 : Tomcat )根據(jù)web.xml中聲明信息進(jìn)行實(shí)例化, 實(shí)例化后才能調(diào)用方法
初始化 : 在init() 方法中,進(jìn)行初始屬性設(shè)置
過(guò)濾 : 用戶發(fā)請(qǐng)求到達(dá)目標(biāo)之前, 或者完成服務(wù)產(chǎn)生響應(yīng)之后, 在 doFilter()方法中增加處理代碼
銷毀 : 當(dāng)servlet被銷毀時(shí), 調(diào)用destroy()方法, 可以在這個(gè)方法中釋放一些資源
垃圾回收 : 被JVM進(jìn)行垃圾回收時(shí), 調(diào)用 finalize() 方法
package com.yuan.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 對(duì)請(qǐng)求進(jìn)行加工
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
// 銷毀方法
}
}監(jiān)聽器Listener
Java Servlet的Listener是一種特殊的Java類,它可以監(jiān)聽Web應(yīng)用程序中發(fā)生的事件,例如Servlet的生命周期事件、HTTP會(huì)話事件等。
它可以在Servlet容器啟動(dòng)時(shí)注冊(cè),當(dāng)Web應(yīng)用程序中發(fā)生事件時(shí),容器會(huì)調(diào)用Listener的相應(yīng)方法來(lái)處理它。
監(jiān)聽器Listener 用于監(jiān)聽web應(yīng)用中某些對(duì)象、信息的創(chuàng)建、銷毀、增加,修改,刪除等動(dòng)作的發(fā)生,然后作出相應(yīng)的響應(yīng)處理。
當(dāng)范圍對(duì)象的狀態(tài)發(fā)生變化的時(shí)候,服務(wù)器自動(dòng)調(diào)用監(jiān)聽器對(duì)象中的方法。
常見(jiàn)的Java Servlet Listener包括:
- ServletContextListener:用于監(jiān)聽Servlet上下文初始化和銷毀事件。
- HttpSessionListener:用于監(jiān)聽HTTP會(huì)話的創(chuàng)建和銷毀事件。
- ServletRequestListener:用于監(jiān)聽Servlet請(qǐng)求的創(chuàng)建和銷毀事件。
- ServletRequestAttributeListener:用于監(jiān)聽Servlet請(qǐng)求屬性的增刪改事件。
- HttpSessionAttributeListener:用于監(jiān)聽HTTP會(huì)話屬性的增刪改事件。
通過(guò)監(jiān)聽這些事件,我們可以在應(yīng)用程序初始化、銷毀、或者在每個(gè)請(qǐng)求和會(huì)話之間共享信息、修改請(qǐng)求或響應(yīng)、改變應(yīng)用程序行為以及跟蹤應(yīng)用程序的狀態(tài)等。
常用于 統(tǒng)計(jì)在線人數(shù)和在線用戶,系統(tǒng)加載時(shí)進(jìn)行信息初始化,統(tǒng)計(jì)網(wǎng)站的訪問(wèn)量等等。

Listener聲明
在web.xml中聲明
listener-class : 內(nèi)部地址路徑
<listener>
<listener-class>com.yuan.listener.MyListener</listener-class>
</listener>實(shí)例
package com.yuan.listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MyListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
// 向session加入信息時(shí)執(zhí)行的方法
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
// 從session中移除信息時(shí)執(zhí)行的方法
}
@Override
public void attributeReplaced(HttpSessionBindingEvent se) {
// session中的信息被替換時(shí)執(zhí)行的方法
}
}到此這篇關(guān)于深入理解JavaWeb中過(guò)濾器與監(jiān)聽器的應(yīng)用的文章就介紹到這了,更多相關(guān)JavaWeb過(guò)濾器與監(jiān)聽器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java非阻塞I/O模型之NIO相關(guān)知識(shí)總結(jié)
在了解NIO (Non-Block I/O) 非阻塞I/O模型之前,我們可以先了解一下原始的BIO(Block I/O) 阻塞I/O模型,NIO模型能夠以非阻塞的方式更好的利用服務(wù)器資源,需要的朋友可以參考下2021-05-05
Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之寵物醫(yī)院與商城一體的系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+Springboot+Jsp+maven+Mysql開發(fā)的寵物醫(yī)院與商城一體的系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有寵物醫(yī)院和寵物商城該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02
詳解SpringMVC的攔截器鏈實(shí)現(xiàn)及攔截器鏈配置
攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下2022-08-08
基于Spring?Boot的線程池監(jiān)控問(wèn)題及解決方案
這篇文章主要介紹了基于Spring?Boot的線程池監(jiān)控方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
mybatis mapper.xml 區(qū)間查詢條件詳解
這篇文章主要介紹了mybatis mapper.xml 區(qū)間查詢條件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
idea同時(shí)編輯多行問(wèn)題-win&mac都支持
這篇文章主要介紹了idea同時(shí)編輯多行問(wèn)題-win&mac都支持,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

