丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說 明 你 沒 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1

          在網站中經常需要進行在線人數的統計。過去的一般做法是結合登錄和退出功能,即當用戶輸入用戶名密碼進行登錄的時候計數器加1,然后當用戶點擊退出按鈕退出系統的時候計數器減1。這種處理方式存在一些缺點,例如:用戶正常登錄后,可能會忘記點擊退出按鈕,而直接關閉瀏覽器,導致計數器減1的操作沒有及時執行;網站上還經常有一些內容是不需要登錄就可以訪問的,在這種情況下也無法使用上面的方法進行在線人數統計。
            我們可以利用Servlet規范中定義的事件監聽器(Listener)來解決這個問題,實現更準確的在線人數統計功能。對每一個正在訪問的用戶,J2EE應用服務器會為其建立一個對應的HttpSession對象。當一個瀏覽器第一次訪問網站的時候,J2EE應用服務器會新建一個HttpSession對象,并觸發HttpSession創建事件,如果注冊了HttpSessionListener事件監聽器,則會調用HttpSessionListener事件監聽器的sessionCreated方法。相反,當這個瀏覽器訪問結束超時的時候,J2EE應用服務器會銷毀相應的HttpSession對象,觸發HttpSession銷毀事件,同時調用所注冊HttpSessionListener事件監聽器的sessionDestroyed方法。
            可見,對應于一個用戶訪問的開始和結束,相應的有sessionCreated方法和sessionDestroyed方法執行。這樣,我們只需要在HttpSessionListener實現類的sessionCreated方法中讓計數器加1,在sessionDestroyed方法中讓計數器減1,就輕松實現了網站在線人數的統計功能。
            下面就是利用HttpSessionListener實現在線人數統計的一個例子,這個例子已經在中創軟件的J2EE應用服務器JBOSS中測試通過。
            首先,編寫一個簡單的計數器,代碼如下:

          1.    package accp.onlinecounter;

          2.    public class OnlineCounter {

          3.        private static long online = 0;    

          4.        public static long getOnline() {

          5.            return online;

          6.        }    

          7.        public static void raise(){

          8.            online++;

          9.        } 

          10.       public static void reduce(){

          11.           online--;

          12.      }

          13.   }


            然后,編寫HttpSessionListener實現類,在這個實現類的sessionCreated方法中調用OnlineCounterraise方法,在sessionDestroyed方法中調用OnlineCounterreduce方法,代碼如下:

          1.    package accp.onlinecounter;

          2.    import javax.servlet.http.HttpSessionEvent;

          3.    import javax.servlet.http.HttpSessionListener;

          4.    public class OnlineCounterListener implements HttpSessionListener {

          5.        public void sessionCreated(HttpSessionEvent hse) {

          6.            OnlineCounter.raise();

          7.        }

          8.        public void sessionDestroyed(HttpSessionEvent hse) {

          9.            OnlineCounter.reduce();

          10.       }

          11.   }


            再然后,把這個HttpSessionListener實現類注冊到網站應用中,也就是在網站應用的web.xml中加入如下內容:

          1.    <web-app>

          2.        ……

          3.        <listener>

          4.            <listener-class>

          5.                accp.OnlineCounterListener

          6.            </listener-class>

          7.        </listener>

          8.        ……

          9.    </web-app>


            OK,在線人數統計功能已經實現,只要在JSP頁面中加入下面這樣的腳本就能顯示但前在線人數了:

          1.    <%@ page language="java" pageEncoding="GB2312" %>

          2.    <%@ page import="accp.OnlineCounter" %>

          3.    <html>

          4.        <head><title>On Line Counert</title></head>

          5.        <body bgcolor="#FFFFFF">

          6.            On line:<%=OnlineCounter.getOnline()%>
          7.        </body>

          8.    </html>

          posted on 2007-10-10 11:10 Crying 閱讀(1886) 評論(1)  編輯  收藏 所屬分類: Jsp+Struts

          FeedBack:
          # re: 利用servlet監聽器實現jsp中在線人數統計的方法 [未登錄]
          2010-07-27 15:18 | a
          這個方法有問題。多用戶,在一機器上登陸竟然計數為1.  回復  更多評論
            
          主站蜘蛛池模板: 桃园市| 长白| 潮州市| 晋江市| 黑山县| 景德镇市| 青海省| 丰原市| 湘阴县| 遂平县| 永德县| 砀山县| 宣恩县| 钟祥市| 焦作市| 开原市| 钦州市| 平度市| 东乡| 新泰市| 仲巴县| 松原市| 临邑县| 普兰县| 湾仔区| 休宁县| 南昌县| 旺苍县| 洱源县| 博乐市| 绥德县| 洞头县| 密山市| 凤阳县| 龙海市| 澳门| 科技| 岳西县| 上栗县| 星座| 桐柏县|