天天看點

JavaWeb對于Listener的運用詳解【利用Session統計線上人數】一.監聽器Listener

一.監聽器Listener

1.1 Listener的作用

Listener是一個功能元件,在建立、銷毀或添加、修改或删除應用程式、會話和請求對象的屬性時自動執行代碼。

監聽器是servlet的監聽器,它可以監聽用戶端的請求和伺服器的操作。

可以使用application,session,request這三個對象

1.2 小demo之統計線上人數

1.建立omline,繼承類HttpSessionListener,重寫sessionCreated和sessionDestroyed方法:

public class omline implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {

    }
    public void sessionDestroyed(HttpSessionEvent se) {
    }
}
           

2.對于sessionCreated方法:

建立Session監聽,可以檢視使用者的一舉一動。一旦建立Session就會觸發這個方法!

對于sessionDestroyed方法:

銷毀session監聽。一旦銷毀Session就會觸發這個方法!

3.建立servletContext對象,建立OnlineCount鍵值對。

ServletContext servletContext = se.getSession().getServletContext();
Integer omlinecount = (Integer) servletContext.getAttribute("OnlineCount");
           

判斷目前線上人數,如果omlinecount為空的話,更新目前的線上人數為1。

if(omlinecount==null){
    omlinecount=new Integer(1);
}
           

如果現在人數不為空的話,将目前的人數加一。

else{
    int count = omlinecount.intValue();
    omlinecount=new Integer(count+1);
}
           

将目前人數存入鍵值對:

servletContext.setAttribute("OnlineCount",omlinecount);
           

4.銷毀session監聽:

前面的代碼基本一樣,唯一不同的是,對于空值的判斷和非空的人數計算。

對于目前對象為空時,将其指派為0。

if(omlinecount==null){
    omlinecount=new Integer(0);
}
           

當其不為0時,将其人數減一:

else{
    int count = omlinecount.intValue();
    omlinecount=new Integer(count-1);
}
           

5.注冊監聽器,注冊監聽器隻需要一句話,如下:

<listener>
    <listener-class>main.java.omline</listener-class>
</listener>
           

6.在通路的首頁面寫下jsp語句,引入java對象的值,實作輸出目前的線上人數。

目前有<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人線上</span>

           

7.啟動伺服器,通路首頁,得到結果如下:

JavaWeb對于Listener的運用詳解【利用Session統計線上人數】一.監聽器Listener

1.3 統計結果錯誤原因分析

尋找原因,找到omline裡的sessionCreated方法,寫一下輸出所有Session的ID

System.out.println(se.getSession().getId());
           

運作項目,觀察輸出台:

9DF74823455F36EDA429B31938B5EEE5
2D248509C732D5C448DA1E57BE539E97
           

打開F12,網絡檢視該使用者的Session:

JavaWeb對于Listener的運用詳解【利用Session統計線上人數】一.監聽器Listener

可以看到,現在的Session是控制台輸出的最後一個,說明第一個連結失敗,已經被銷毀了。

如果我們重新釋出改頁面:

JavaWeb對于Listener的運用詳解【利用Session統計線上人數】一.監聽器Listener

重新整理改頁面,繼續打開Session觀察如下:現在就變為了一人!

JavaWeb對于Listener的運用詳解【利用Session統計線上人數】一.監聽器Listener

注意:

如果我們使用一個遊覽器兩個頁面都通路該路徑,還是屬于一個任務的,線上人數算做一人。

如果我們打開不同的遊覽器來通路該url,這個這時候就會算做不同的使用者,配置設定不同的Sessionid給使用者。