Java監聽器Listener使用詳解


轉載請注明原文地址: 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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM