posts - 5,  comments - 1,  trackbacks - 0
          在網(wǎng)站中經(jīng)常需要進(jìn)行在線人數(shù)的統(tǒng)計(jì)。過去的一般做法是結(jié)合登錄和退出功能,即當(dāng)用戶輸入用戶名密碼進(jìn)行登錄的時(shí)候計(jì)數(shù)器加1,然后當(dāng)用戶點(diǎn)擊退出按鈕退出系統(tǒng)的時(shí)候計(jì)數(shù)器減1。這種處理方式存在一些缺點(diǎn),例如:用戶正常登錄后,可能會(huì)忘記點(diǎn)擊退出按鈕,而直接關(guān)閉瀏覽器,導(dǎo)致計(jì)數(shù)器減1的操作沒有及時(shí)執(zhí)行;網(wǎng)站上還經(jīng)常有一些內(nèi)容是不需要登錄就可以訪問的,在這種情況下也無法使用上面的方法進(jìn)行在線人數(shù)統(tǒng)計(jì)。
            我們可以利用Servlet規(guī)范中定義的事件監(jiān)聽器(Listener)來解決這個(gè)問題,實(shí)現(xiàn)更準(zhǔn)確的在線人數(shù)統(tǒng)計(jì)功能。對(duì)每一個(gè)正在訪問的用戶,J2EE應(yīng)用服務(wù)器會(huì)為其建立一個(gè)對(duì)應(yīng)的HttpSession對(duì)象。當(dāng)一個(gè)瀏覽器第一次訪問網(wǎng)站的時(shí)候,J2EE應(yīng)用服務(wù)器會(huì)新建一個(gè)HttpSession對(duì)象,并觸發(fā)HttpSession創(chuàng)建事件,如果注冊(cè)了HttpSessionListener事件監(jiān)聽器,則會(huì)調(diào)用HttpSessionListener事件監(jiān)聽器的sessionCreated方法。相反,當(dāng)這個(gè)瀏覽器訪問結(jié)束超時(shí)的時(shí)候,J2EE應(yīng)用服務(wù)器會(huì)銷毀相應(yīng)的HttpSession對(duì)象,觸發(fā)HttpSession銷毀事件,同時(shí)調(diào)用所注冊(cè)HttpSessionListener事件監(jiān)聽器的sessionDestroyed方法。
            可見,對(duì)應(yīng)于一個(gè)用戶訪問的開始和結(jié)束,相應(yīng)的有sessionCreated方法和sessionDestroyed方法執(zhí)行。這樣,我們只需要在HttpSessionListener實(shí)現(xiàn)類的sessionCreated方法中讓計(jì)數(shù)器加1,在sessionDestroyed方法中讓計(jì)數(shù)器減1,就輕松實(shí)現(xiàn)了網(wǎng)站在線人數(shù)的統(tǒng)計(jì)功能。
            下面就是利用HttpSessionListener實(shí)現(xiàn)在線人數(shù)統(tǒng)計(jì)的一個(gè)例子,這個(gè)例子已經(jīng)在中創(chuàng)軟件的J2EE應(yīng)用服務(wù)器InforWeb中測(cè)試通過。
            首先,編寫一個(gè)簡(jiǎn)單的計(jì)數(shù)器,代碼如下:
          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實(shí)現(xiàn)類,在這個(gè)實(shí)現(xiàn)類的sessionCreated方法中調(diào)用OnlineCounter的raise方法,在sessionDestroyed方法中調(diào)用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. }

            再然后,把這個(gè)HttpSessionListener實(shí)現(xiàn)類注冊(cè)到網(wǎng)站應(yīng)用中,也就是在網(wǎng)站應(yīng)用的web.xml中加入如下內(nèi)容:
          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) 評(píng)論(0)  編輯  收藏 所屬分類: JAVA

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          有空多聯(lián)系~

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          java

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 望都县| 蚌埠市| 华坪县| 腾冲县| 柳州市| 灵寿县| 贡嘎县| 玉山县| 南丹县| 屏山县| 克拉玛依市| 吴桥县| 新宁县| 疏附县| 富宁县| 顺平县| 武川县| 抚远县| 灵丘县| 噶尔县| 从江县| 德保县| 凤阳县| 伊春市| 普兰县| 安化县| 本溪| 沈阳市| 岗巴县| 莱阳市| 银川市| 余姚市| 桂阳县| 新竹市| 宁安市| 鄱阳县| 舞阳县| 叙永县| 镇远县| 康乐县| 若羌县|