Java監聽器Listener的使用詳解


監聽器用於監聽Web應用中某些對象的創建、銷毀、增加,修改,刪除等動作的發生,然后作出相應的響應處理。當監聽范圍的對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。常用於統計網站在線人數、系統加載時進行信息初始化、統計網站的訪問量等等。

分類:

按監聽的對象划分

可以分為:

  • ServletContext對象的監聽器
  • HttpSession對象的監聽器
  • ServletRequest對象的監聽器

按監聽的事件划分

可以分為:

  • 對象自身的創建和銷毀的監聽器
  • 對象中屬性的創建和消除的監聽器
  • session中的某個對象的狀態變化的監聽器

示例:用監聽器統計網站的在線人數

原理:每當有一個訪問連接到服務器時,服務器就會創建一個session來管理會話。那么我們就可以通過統計session的數量來獲得當前在線人數。所以這里用到的是HttpSessionListener。

1、創建監聽器類,實現HttpSessionListener接口,並重寫監聽器類中的方法。代碼如下:

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);
    }

}

2、在web.xml中配置監聽器。注意:監聽器>過濾器>servlet,配置的時候要注意先后順序

<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);
    }

3、在需要顯示在線人數的地方通過session.getAttribute("Count")即可獲取在線人數值。

附:常用監聽器

除了上面監聽session建立與銷毀的listener外,還有以下幾個常用的監聽器。

1、監聽session屬性的增加、移除以及屬性值改變的HttpSessionAttributeListener,如下圖:

2、監聽web上下文的初始化(服務器已准備好接收請求)與銷毀的ServletContextListener,如下圖:

3、監聽web上下文屬性的增加、刪除、屬性值變化的ServletContextAttributeListener,如下圖:

4、監聽request的創建與銷毀的ServletRequestListener,如下圖:

5、監聽request的屬性的增加、刪除、屬性值變化的ServletRequestAttributeListener,如下圖:


本文永久更新地址:https://github.com/nnngu/LearningNotes/blob/master/_posts/2018-03-22-Java%E7%9B%91%E5%90%AC%E5%99%A8Listener%E7%9A%84%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3.md


免責聲明!

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



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