Java監聽器Listener的使用詳解

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

分類:

按監聽的對象劃分

能夠分爲:git

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

按監聽的事件劃分

能夠分爲:github

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

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

原理:每當有一個訪問鏈接到服務器時,服務器就會建立一個session來管理會話。那麼咱們就能夠經過統計session的數量來得到當前在線人數。因此這裏用到的是HttpSessionListener。web

一、建立監聽器類,實現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);
    }

}

二、在web.xml中配置監聽器。注意:監聽器>過濾器>servlet,配置的時候要注意前後順序session

<listener>
  <listener-class>com.ygj.control.onLineCount</listener-class>
</listener>

若是使用 Servlet3.0 以上版本,監聽器的配置能夠直接在代碼中經過註解來完成,無需在 web.xml 中再配置。以下:ide

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

三、在須要顯示在線人數的地方經過session.getAttribute("Count")便可獲取在線人數值。post

附:經常使用監聽器

除了上面監聽session創建與銷燬的listener外,還有如下幾個經常使用的監聽器。網站

一、監聽session屬性的增長、移除以及屬性值改變的HttpSessionAttributeListener,以下圖:code

二、監聽web上下文的初始化(服務器已準備好接收請求)與銷燬的ServletContextListener,以下圖:

三、監聽web上下文屬性的增長、刪除、屬性值變化的ServletContextAttributeListener,以下圖:

四、監聽request的建立與銷燬的ServletRequestListener,以下圖:

五、監聽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

相關文章
相關標籤/搜索