Java listener簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
1: 監(jiān)聽器的定義:
監(jiān)聽器實(shí)際上是一個(gè)類,這個(gè)類實(shí)現(xiàn)了特定的接口,然后將這個(gè)類在 web.xml 文件中進(jìn)行描述,這樣服務(wù)器在啟動(dòng)的時(shí)候就可以實(shí)例化這個(gè)類,啟動(dòng)監(jiān)聽器。當(dāng)范圍對(duì)象的狀態(tài)發(fā)生變化的時(shí)候,服務(wù)器自動(dòng)調(diào)用監(jiān)聽器對(duì)象中的方法。例如統(tǒng)計(jì)用戶在線人數(shù)。
web監(jiān)聽器是Servlet規(guī)范中定義的一種特殊類,用于監(jiān)聽ServletContext,HttpSession,ServletRequest等域?qū)ο蟮膭?chuàng)建、銷毀、以及屬性的變化等,可以在事件發(fā)生前、發(fā)生后進(jìn)行一些處理。
2、監(jiān)聽器的用途
- 統(tǒng)計(jì)在線人數(shù)和在線用戶
- 系統(tǒng)加載時(shí)進(jìn)行信息的初始化工作
- 統(tǒng)計(jì)網(wǎng)站的訪問量
- 跟Spring結(jié)合
3、實(shí)例
在web.xml文件中進(jìn)行配置
listenr-class中是自己定義的Listener的類路徑
public class MyRequestListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){ System.out.println("啟動(dòng)監(jiān)聽器"); } public void contextDestroy(ServletContextEvent event){ System.out.println("結(jié)束監(jiān)聽器"); } }
編譯器會(huì)為我們自動(dòng)生成contextInitialized和contextDestroy兩個(gè)函數(shù)
監(jiān)聽器>過濾器>serlvet,在 web.xml 文件中配置的時(shí)候注意順序
4 監(jiān)聽器的分類
按監(jiān)聽的對(duì)象劃分,可以分為監(jiān)聽
- ServletContext對(duì)象
- HttpSession對(duì)象
- ServletRequest對(duì)象
按監(jiān)聽的事件劃分
- 域?qū)ο笞陨淼膭?chuàng)建和銷毀
- 域?qū)ο笾袑傩缘膭?chuàng)建和消除
- 綁定到session中的某個(gè)對(duì)象的狀態(tài)
由于很多監(jiān)聽的方式一致,因此我們只考慮其中的HttpSession對(duì)象:
在web.xml中配置session超時(shí)
<session-config> <session-timeout> 30 </session-timeout> </session-config>
當(dāng)超過30秒后,session會(huì)自動(dòng)過期
public class MyRequestListener implements HttpSessionListener{ public void sessionCreate(HttpSessionEvent event){ System.out.println("event 創(chuàng)建:"); } public void sessionDestroy(HttpSessionEvent event){ System.out.println("event 銷毀:"); } }
另外,我們可以實(shí)現(xiàn)HttpSessionAttributeListener來實(shí)現(xiàn)session對(duì)象屬性的增加(added)、刪除(removed)、替換(replaced)的功能
public class MyRequestListener implements HttpSessionAttributeListener{ public void attributeAdded(HttpSessionBindEvent event){ } public void attributeRemoved(HttpSessionBindEvent event){ } public void attributeReplaced(HttpSessionBindEvent event){ } }
5、Servlte3.0下的使用
在Servlet3.0下通過注解@WebListener("")就可以實(shí)現(xiàn)了,不需要在web.xml中進(jìn)行配置
6、實(shí)戰(zhàn)(偽代碼)
public class MyRequestListener implements HttpSessionListener{ private int counts = 0;//用于統(tǒng)計(jì)在線人數(shù) public void sessionCreate(HttpSessionEvent event){ counts++; event.getSession().getServletContext.setAttribute("name",counts); //用戶人數(shù)+1 } public void sessionDestroy(HttpSessionEvent event){ counts--; event.getSession().getServletContext.setAttribute("name",counts);//用戶人數(shù)-1 } } @WebListener public class MyRequestListener2 implements ServletRequestListener{ private ArrayList<User>list; //創(chuàng)建一個(gè)在線用戶的列表 public void requestCreate(ServletRequestEvent event){ HttpServletRequest request = (HttpServletRequest) request.getServletContext(); String sessionId = request.getSession().getSessionId(); if(sessionId ...){ .... list.add(...); } } public void requestDestroy(ServletRequestEvent event){ } } public class User{ private int sessionId; }
相關(guān)文章
Maven發(fā)布項(xiàng)目 (jar包) 到Nexus私服中的操作
這篇文章主要介紹了Maven發(fā)布項(xiàng)目 (jar包) 到Nexus私服中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10springboot實(shí)現(xiàn)返回視圖而不是string的方法
這篇文章主要介紹了springboot實(shí)現(xiàn)返回視圖而不是string的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01JavaSE中compare、compareTo的區(qū)別
本文主要介紹了JavaSE中compare、compareTo的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的實(shí)現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于java多線程批量拆分List導(dǎo)入數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-10-10Java System.currentTimeMillis()時(shí)間的單位轉(zhuǎn)換與計(jì)算方式案例詳解
這篇文章主要介紹了Java System.currentTimeMillis()時(shí)間的單位轉(zhuǎn)換與計(jì)算方式案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Spring Boot環(huán)境屬性占位符解析及類型轉(zhuǎn)換詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot環(huán)境屬性占位符解析及類型轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08淺談Spring Boot Web 應(yīng)用性能優(yōu)化
這篇文章主要介紹了淺談Spring Boot Web 應(yīng)用性能優(yōu)化,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07SpringBoot使用@ResponseBody返回圖片的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用@ResponseBody返回圖片的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11SpringBoot+MyBatis簡(jiǎn)單數(shù)據(jù)訪問應(yīng)用的實(shí)例代碼
這篇文章主要介紹了SpringBoot+MyBatis簡(jiǎn)單數(shù)據(jù)訪問應(yīng)用的實(shí)例代碼,需要的朋友可以參考下2017-05-05