轉載請注明原文地址: http://www.cnblogs.com/ygj0930/p/6374384.html
在我的項目中有具體應用:https://github.com/ygj0930/CoupleSpace
監聽器用於監聽web應用中某些對象、信息的創建、銷毀、增加,修改,刪除等動作的發生,然后作出相應的響應處理。當范圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。常用於統計在線人數和在線用戶,系統加載時進行信息初始化,統計網站的訪問量等等。
分類:
按監聽的對象划分,可以分為
- ServletContext對象監聽器
- HttpSession對象監聽器
- ServletRequest對象監聽器
按監聽的事件划分
- 對象自身的創建和銷毀的監聽器
- 對象中屬性的創建和消除的監聽器
- session中的某個對象的狀態變化的監聽器
示例:用監聽器統計網站在線人數
原理:每當有一個訪問連接到服務器時,服務器就會創建一個session來管理會話。那么我們就可以通過統計session的數量來獲得當前在線人數。
所以這里用到的是HttpSessionListener。
1:創建監聽器類,實現HttpSessionListener接口。
2:重寫監聽器類中的方法
public class onLineCount implements HttpSessionListener { public int count=0;//記錄session的數量 public void sessionCreated(HttpSessionEvent arg0) {//監聽session的創建 count++; arg0.getSession().getServletContext().setAttribute("Count", count); } @Override public void sessionDestroyed(HttpSessionEvent arg0) {//監聽session的撤銷 count--; arg0.getSession().getServletContext().setAttribute("Count", count); } }
3:在web.xml中配置監聽器。注意:監聽器>過濾器>serlvet,配置的時候要注意先后順序
<listener> <listener-class>com.ygj.control.onLineCount</listener-class> </listener>
在Servlet3.0中,監聽器的配置可以直接在代碼中通過注釋來完成,無需在web.xml中再配置。
@WebListener //在此注明以下類是監聽器 public class onLineCount implements HttpSessionListener { public int count=0; public void sessionCreated(HttpSessionEvent arg0) { count++; arg0.getSession().getServletContext().setAttribute("Count", count); } @Override public void sessionDestroyed(HttpSessionEvent arg0) { count--; arg0.getSession().getServletContext().setAttribute("Count", count); }
4:在顯示在線人數處通過session.getAttribute("Count")即可獲取在線人數值。
附:常用監聽器
除了上面監聽session建立與銷毀的listener外,還有以下幾個常用的監聽器。
1:監聽session屬性的增加、移除以及屬性值改變的HttpSessionAttributeListener
2:監聽web上下文的初始化(服務器已准備好接收請求)與銷毀的ServletContextListener
3:監聽web上下文屬性的增加、刪除、屬性值變化的ServletContextAttributeListener
4:監聽request的創建與銷毀的ServletRequestListener
5:監聽request的屬性的增加、刪除、屬性值變化的ServletRequestAttributeListener