1. 程式人生 > >Java監聽器Listener使用詳解

Java監聽器Listener使用詳解

request對象 數值 context 信息 event 順序 -c 以及 too

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