Oracle神諭

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            284 隨筆 :: 9 文章 :: 106 評論 :: 0 Trackbacks
           在網站中經常需要進行在線人數的統計。過去的一般做法是結合登錄和退出功能,即當用戶輸入用戶名密碼進行登錄的時候計數器加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應用服務器InforWeb中測試通過。
            首先,編寫一個簡單的計數器,代碼如下:
          1. package gongfei.cmc.articles.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方法中調用OnlineCounter的raise方法,在sessionDestroyed方法中調用OnlineCounter的reduce方法,代碼如下:
          1. package gongfei.cmc.articles.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.             gongfei.cmc.articles.example.OnlineCounterListener
          6.         </listener-class>
          7.     </listener>
          8.     ……
          9. </web-app>


          原文地址:http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=18541

          posted on 2005-09-12 16:06 java世界暢談 閱讀(1015) 評論(1)  編輯  收藏 所屬分類: JAVA

          評論

          # re: 利用HttpSessionListener實現網站在線人數統計功能 2007-10-24 21:29 ddsa
          --不行
          有能臨聽到用戶關閉時的動作
            回復  更多評論
            

          主站蜘蛛池模板: 黄骅市| 莱阳市| 阳原县| 大宁县| 乌海市| 双牌县| 綦江县| 九台市| 沙河市| 察隅县| 宝鸡市| 贵港市| 汝城县| 西乌珠穆沁旗| 崇仁县| 巨野县| 固阳县| 奎屯市| 肇庆市| 明光市| 大同县| 普格县| 通化市| 西林县| 南涧| 吉水县| 德令哈市| 增城市| 三穗县| 佳木斯市| 巴中市| 柯坪县| 林甸县| 明溪县| 竹山县| 安仁县| 公安县| 博爱县| 宁阳县| 开封市| 晋州市|