Java監聽器Listener使用詳解
監聽器用於監聽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
Java監聽器Listener使用詳解