JavaWeb?Listener?利用Session統(tǒng)計在線人數(shù)
一.監(jiān)聽器Listener
1.1 Listener的作用
Listener是一個功能組件,在創(chuàng)建、銷毀或添加、修改或刪除應用程序、會話和請求對象的屬性時自動執(zhí)行代碼。
監(jiān)聽器是servlet的監(jiān)聽器,它可以監(jiān)聽客戶端的請求和服務器的操作。
可以使用application,session,request這三個對象
1.2 小demo之統(tǒng)計在線人數(shù)
1.新建omline,繼承類HttpSessionListener,重寫sessionCreated和sessionDestroyed方法:
public class omline implements HttpSessionListener { public void sessionCreated(HttpSessionEvent se) { } public void sessionDestroyed(HttpSessionEvent se) { } }
2.對于sessionCreated方法:
創(chuàng)建Session監(jiān)聽,可以查看用戶的一舉一動。一旦創(chuàng)建Session就會觸發(fā)這個方法!
對于sessionDestroyed方法:
銷毀session監(jiān)聽。一旦銷毀Session就會觸發(fā)這個方法!
3.創(chuàng)建servletContext對象,新建OnlineCount鍵值對。
ServletContext servletContext = se.getSession().getServletContext(); Integer omlinecount = (Integer) servletContext.getAttribute("OnlineCount");
判斷當前在線人數(shù),如果omlinecount為空的話,更新當前的在線人數(shù)為1。
if(omlinecount==null){ omlinecount=new Integer(1); }
如果現(xiàn)在人數(shù)不為空的話,將當前的人數(shù)加一。
else{ int count = omlinecount.intValue(); omlinecount=new Integer(count+1); }
將當前人數(shù)存入鍵值對:
servletContext.setAttribute("OnlineCount",omlinecount);
4.銷毀session監(jiān)聽:
前面的代碼基本一樣,唯一不同的是,對于空值的判斷和非空的人數(shù)計算。
對于當前對象為空時,將其賦值為0。
if(omlinecount==null){ omlinecount=new Integer(0); }
當其不為0時,將其人數(shù)減一:
else{ int count = omlinecount.intValue(); omlinecount=new Integer(count-1); }
5.注冊監(jiān)聽器,注冊監(jiān)聽器只需要一句話,如下:
<listener> <listener-class>main.java.omline</listener-class> </listener>
6.在訪問的主頁面寫下jsp語句,引入java對象的值,實現(xiàn)輸出當前的在線人數(shù)。
<h2> 當前有<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人在線</span> </h2>
7.啟動服務器,訪問主頁,得到結果如下:
1.3 統(tǒng)計結果錯誤原因分析
尋找原因,找到omline里的sessionCreated方法,寫一下輸出所有Session的ID
System.out.println(se.getSession().getId());
運行項目,觀察輸出臺:
9DF74823455F36EDA429B31938B5EEE5
2D248509C732D5C448DA1E57BE539E97
打開F12,網(wǎng)絡查看該用戶的Session:
可以看到,現(xiàn)在的Session是控制臺輸出的最后一個,說明第一個鏈接失敗,已經(jīng)被銷毀了。
如果我們重新發(fā)布改頁面:
刷新改頁面,繼續(xù)打開Session觀察如下:現(xiàn)在就變?yōu)榱艘蝗耍?/p>
注意:
如果我們使用一個游覽器兩個頁面都訪問該路徑,還是屬于一個任務的,在線人數(shù)算做一人。
如果我們打開不同的游覽器來訪問該url,這個這時候就會算做不同的用戶,分配不同的Sessionid給用戶。
步驟:
1.實現(xiàn)監(jiān)聽器的接口。重寫里面的方法!
2.配置監(jiān)聽器(xml里注冊監(jiān)聽器)。
以上就是JavaWeb Listener 利用Session統(tǒng)計在線人數(shù)的詳細內(nèi)容,更多關于JavaWeb Listener Session統(tǒng)計在線人數(shù)的資料請關注腳本之家其它相關文章!
相關文章
Java JDBC API介紹與實現(xiàn)數(shù)據(jù)庫連接池流程
JDBC是指Java數(shù)據(jù)庫連接,是一種標準Java應用編程接口( JAVA API),用來連接 Java 編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC 是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫,本篇文章我們來了解JDBC API及數(shù)據(jù)庫連接池2022-12-12