listener監(jiān)聽器在Java中的作用有哪些?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司專注于玄武網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供玄武營銷型網(wǎng)站建設(shè),玄武網(wǎng)站制作、玄武網(wǎng)頁設(shè)計、玄武網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造玄武網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供玄武網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1: 監(jiān)聽器的定義:
監(jiān)聽器實際上是一個類,這個類實現(xiàn)了特定的接口,然后將這個類在 web.xml 文件中進行描述,這樣服務(wù)器在啟動的時候就可以實例化這個類,啟動監(jiān)聽器。當范圍對象的狀態(tài)發(fā)生變化的時候,服務(wù)器自動調(diào)用監(jiān)聽器對象中的方法。例如統(tǒng)計用戶在線人數(shù)。
web監(jiān)聽器是Servlet規(guī)范中定義的一種特殊類,用于監(jiān)聽ServletContext,HttpSession,ServletRequest等域?qū)ο蟮膭?chuàng)建、銷毀、以及屬性的變化等,可以在事件發(fā)生前、發(fā)生后進行一些處理。
2、監(jiān)聽器的用途
統(tǒng)計在線人數(shù)和在線用戶
系統(tǒng)加載時進行信息的初始化工作
統(tǒng)計網(wǎng)站的訪問量
跟Spring結(jié)合
3、實例
在web.xml文件中進行配置
listenr-class中是自己定義的Listener的類路徑
public class MyRequestListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){ System.out.println("啟動監(jiān)聽器"); } public void contextDestroy(ServletContextEvent event){ System.out.println("結(jié)束監(jiān)聽器"); } }
編譯器會為我們自動生成contextInitialized和contextDestroy兩個函數(shù)
監(jiān)聽器>過濾器>serlvet,在 web.xml 文件中配置的時候注意順序
4 監(jiān)聽器的分類
按監(jiān)聽的對象劃分,可以分為監(jiān)聽
ServletContext對象
HttpSession對象
ServletRequest對象
按監(jiān)聽的事件劃分
域?qū)ο笞陨淼膭?chuàng)建和銷毀
域?qū)ο笾袑傩缘膭?chuàng)建和消除
綁定到session中的某個對象的狀態(tài)
由于很多監(jiān)聽的方式一致,因此我們只考慮其中的HttpSession對象:
在web.xml中配置session超時
30
當超過30秒后,session會自動過期
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 銷毀:"); } }
另外,我們可以實現(xiàn)HttpSessionAttributeListener來實現(xiàn)session對象屬性的增加(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("")就可以實現(xiàn)了,不需要在web.xml中進行配置
6、實戰(zhàn)(偽代碼)
public class MyRequestListener implements HttpSessionListener{ private int counts = 0;//用于統(tǒng)計在線人數(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 ArrayListlist; //創(chuàng)建一個在線用戶的列表 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; }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。