posts - 5,  comments - 1,  trackbacks - 0
          在網站中經常需要進行在線人數的統計。過去的一般做法是結合登錄和退出功能,即當用戶輸入用戶名密碼進行登錄的時候計數器加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>


          posted on 2006-07-25 17:39 herry 閱讀(212) 評論(0)  編輯  收藏 所屬分類: JAVA
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          有空多聯系~

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          java

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 曲松县| 姚安县| 金平| 亚东县| 福贡县| 广河县| 永胜县| 岳阳县| 旺苍县| 来安县| 和顺县| 深水埗区| 逊克县| 罗定市| 克拉玛依市| 唐河县| 合川市| 澄江县| 刚察县| 顺平县| 太原市| 娱乐| 六枝特区| 苍南县| 鸡东县| 长岭县| 营口市| 榆社县| 蓬安县| 孙吴县| 丹棱县| 扎鲁特旗| 策勒县| 吴江市| 巴中市| 宿松县| 修武县| 宜阳县| 资阳市| 德昌县| 台东市|