深入理解JavaWeb中過濾器與監(jiān)聽器的應用
過濾器Filter
Filter過濾器能夠對匹配的請求到達目標之前或返回響應之后增加一些處理代碼
常用來做 全局轉碼 ,session有效性判斷
過濾器聲明
在 web.xml 中聲明Filter的匹配過濾特征及對應的類路徑 , 3.0版本后可以在類上使用 @WebFilter 注解來聲明
filter-class
: 內部地址路徑
url-pattern
: 匹配過濾的特征, 實際開發(fā)中匹配規(guī)則的準確性非常重要
filter-name
: 兩者的對應
<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>
過濾器生命周期
加載 : 在web.xml中聲明Filter相關信息
實例化 : 由WebServer( 如 : Tomcat )根據(jù)web.xml中聲明信息進行實例化, 實例化后才能調用方法
初始化 : 在init() 方法中,進行初始屬性設置
過濾 : 用戶發(fā)請求到達目標之前, 或者完成服務產(chǎn)生響應之后, 在 doFilter()方法中增加處理代碼
銷毀 : 當servlet被銷毀時, 調用destroy()方法, 可以在這個方法中釋放一些資源
垃圾回收 : 被JVM進行垃圾回收時, 調用 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 { // 對請求進行加工 filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { // 銷毀方法 } }
監(jiān)聽器Listener
Java Servlet的Listener是一種特殊的Java類,它可以監(jiān)聽Web應用程序中發(fā)生的事件,例如Servlet的生命周期事件、HTTP會話事件等。
它可以在Servlet容器啟動時注冊,當Web應用程序中發(fā)生事件時,容器會調用Listener的相應方法來處理它。
監(jiān)聽器Listener 用于監(jiān)聽web應用中某些對象、信息的創(chuàng)建、銷毀、增加,修改,刪除等動作的發(fā)生,然后作出相應的響應處理。
當范圍對象的狀態(tài)發(fā)生變化的時候,服務器自動調用監(jiān)聽器對象中的方法。
常見的Java Servlet Listener包括:
- ServletContextListener:用于監(jiān)聽Servlet上下文初始化和銷毀事件。
- HttpSessionListener:用于監(jiān)聽HTTP會話的創(chuàng)建和銷毀事件。
- ServletRequestListener:用于監(jiān)聽Servlet請求的創(chuàng)建和銷毀事件。
- ServletRequestAttributeListener:用于監(jiān)聽Servlet請求屬性的增刪改事件。
- HttpSessionAttributeListener:用于監(jiān)聽HTTP會話屬性的增刪改事件。
通過監(jiān)聽這些事件,我們可以在應用程序初始化、銷毀、或者在每個請求和會話之間共享信息、修改請求或響應、改變應用程序行為以及跟蹤應用程序的狀態(tài)等。
常用于 統(tǒng)計在線人數(shù)和在線用戶,系統(tǒng)加載時進行信息初始化,統(tǒng)計網(wǎng)站的訪問量等等。
Listener聲明
在web.xml中聲明
listener-class
: 內部地址路徑
<listener> <listener-class>com.yuan.listener.MyListener</listener-class> </listener>
實例
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加入信息時執(zhí)行的方法 } @Override public void attributeRemoved(HttpSessionBindingEvent se) { // 從session中移除信息時執(zhí)行的方法 } @Override public void attributeReplaced(HttpSessionBindingEvent se) { // session中的信息被替換時執(zhí)行的方法 } }
到此這篇關于深入理解JavaWeb中過濾器與監(jiān)聽器的應用的文章就介紹到這了,更多相關JavaWeb過濾器與監(jiān)聽器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java畢業(yè)設計實戰(zhàn)之寵物醫(yī)院與商城一體的系統(tǒng)的實現(xiàn)
這是一個使用了java+Springboot+Jsp+maven+Mysql開發(fā)的寵物醫(yī)院與商城一體的系統(tǒng),是一個畢業(yè)設計的實戰(zhàn)練習,具有寵物醫(yī)院和寵物商城該有的所有功能,感興趣的朋友快來看看吧2022-02-02詳解SpringMVC的攔截器鏈實現(xiàn)及攔截器鏈配置
攔截器(Interceptor)是一種動態(tài)攔截方法調用的機制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下2022-08-08基于Spring?Boot的線程池監(jiān)控問題及解決方案
這篇文章主要介紹了基于Spring?Boot的線程池監(jiān)控方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03mybatis mapper.xml 區(qū)間查詢條件詳解
這篇文章主要介紹了mybatis mapper.xml 區(qū)間查詢條件詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09