




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章使用會(huì)話追蹤
2011年5月30日
本節(jié)課的內(nèi)容:
⑥什么是客戶會(huì)話
⑥會(huì)話的工作機(jī)制
⑥維護(hù)會(huì)話的幾種方式
⑥跟蹤客戶會(huì)話
?,使用H11pSession對(duì)象維護(hù)會(huì)話信息
⑥監(jiān)視會(huì)話對(duì)象
2011年5月30日2
工、什么是會(huì)話
典型的在線商店的情況:
用戶剛剛在一個(gè)頁(yè)面中挑選到一種商品,添加到購(gòu)物車
中,在下一個(gè)商品頁(yè)面中又挑選到一種添加到購(gòu)物車中。
注意到這兩次選擇是在不同的HTTP連接中發(fā)生的。而用
戶希望兩次挑選的商品在同一個(gè)購(gòu)物車中一起交付,而不是
每選一件商品都要交付一次。這就需要一種機(jī)制來唯一的標(biāo)
識(shí)用戶,以便跟蹤客戶在站點(diǎn)中的行為。
會(huì)話:
這種在多次HTTP連接間維護(hù)用戶與同一用戶發(fā)出的不同
請(qǐng)求之間關(guān)聯(lián)的情況稱為維護(hù)一個(gè)會(huì)話(session)。
2011年5月30日3
2、會(huì)話的特征
合會(huì)話能夠把用戶與同一用戶發(fā)出的不同請(qǐng)求之間關(guān)聯(lián)
起來。不同用戶的會(huì)話應(yīng)當(dāng)是相互獨(dú)立的。
合會(huì)話一旦建立就應(yīng)當(dāng)一直存在,直到用戶空閑時(shí)間超
過了某一個(gè)時(shí)間界限,容器才應(yīng)當(dāng)釋放該會(huì)話資源。
⑥在會(huì)話的存活期間,用戶可能給服務(wù)器發(fā)送了很多請(qǐng)
求,該用戶的這些請(qǐng)求信息都可以存儲(chǔ)在會(huì)話中。
2011年5月30日4
3、會(huì)話的工作機(jī)制
網(wǎng)上購(gòu)物商店的購(gòu)物車
商店當(dāng)用戶選擇“YES”確認(rèn)購(gòu)買時(shí),服務(wù)
的
、器會(huì)將會(huì)話對(duì)象中的商品信息保存到
購(gòu)
用戶輸入個(gè)人信用信息登物數(shù)據(jù)庫(kù)中,并聯(lián)系網(wǎng)上銀行和郵局向
錄到網(wǎng)上商店用戶發(fā)貨。
用戶瀏覽產(chǎn)品頁(yè),察看商品
介紹,并點(diǎn)產(chǎn)“力口人”珀就在服務(wù)器,該商品的相關(guān)信息
商品信息在一次HTI保存在用戶的會(huì)話對(duì)象中
傳遞到服務(wù)器
f7<issword:
心h版川程序
q當(dāng)用戶離開網(wǎng)上商店前,被
詢問是否購(gòu)買。
2011年5月30日5
⑥在上述的網(wǎng)上商店中,用戶的會(huì)話信息保存在服務(wù)器端,用
戶與服務(wù)器之間必須提供一種機(jī)制,標(biāo)識(shí)某一用戶與他在服務(wù)
器端用戶狀態(tài)之間的對(duì)應(yīng)關(guān)系。這種機(jī)制必須保證:
■允許用戶在不同頁(yè)面(如:S一工vl一t)間瀏覽而不會(huì)丟失
“購(gòu)物車”
-必須避免不同用戶的“購(gòu)物車”混淆。用戶不會(huì)允許自
己為別的用戶付款。
今不幸的是通常情況下W一b服務(wù)器不會(huì)自動(dòng)跟蹤用戶操作軌跡。
捕獲并存儲(chǔ)用戶軌跡是W一b應(yīng)用開發(fā)人員的工作。
2011年5月30日6
4、維護(hù)會(huì)話的方式…?URL重寫
>客戶第一次訪問網(wǎng)站時(shí),將會(huì)話信息添加到由服務(wù)器發(fā)出
的每一個(gè)響應(yīng)的URL中。
爹當(dāng)用戶再次訪問網(wǎng)站時(shí),URL中會(huì)把這個(gè)會(huì)話信息作為用
戶請(qǐng)求參數(shù)返回服務(wù)器端,服務(wù)器根據(jù)返回的會(huì)話信息來標(biāo)
識(shí)該客戶,維護(hù)整個(gè)會(huì)話的信息持續(xù)性。
卷常見的URL重寫格式
為了保持URL的簡(jiǎn)潔,通常這個(gè)嵌在URL中的會(huì)話信息
是一個(gè)由服務(wù)器器成的代表客戶的唯一性的工D號(hào),在URL的
表現(xiàn)形式上,它通常是作為URL查詢參數(shù)的形式出現(xiàn)的,如:
http://.../ch09/huihua.jsp?sessionid=678
2011年5月30日7
#Session.jsp
#Tom.jsp
#■Jerry.jsp
2011年5月30日8
今URL重寫技術(shù)的優(yōu)點(diǎn):
■用戶是匿名的;
-在Web服務(wù)器實(shí)現(xiàn)上得到普遍的支持;
卷URL重寫技術(shù)的缺點(diǎn):
■由于會(huì)話信息作為查詢參數(shù)在URL上是可見的,因
此會(huì)話存在一定的安全隱患;
■需要對(duì)所有動(dòng)態(tài)生成的URL進(jìn)行重寫,代碼比較繁
瑣;
■只能用于動(dòng)態(tài)產(chǎn)生的文檔如Servlet和JSP頁(yè)面,而
不能用于HTML文檔;
■重寫的URL不能長(zhǎng)期有效
2011年5月30日9
5、隱藏窗體技術(shù)
⑥隱藏窗體技術(shù)原理
HTML表單允許把一些字段信息隱藏起來,而在瀏覽器上不
被顯示出來。例如:
<INPUTTYPE="H1DDEN"Name's一ssion"Value
⑥使用隱藏窗體技術(shù)實(shí)現(xiàn)會(huì)話管理
這種方式的工作機(jī)制為:在用戶第一次請(qǐng)求時(shí),服務(wù)器在
為客戶準(zhǔn)備的頁(yè)面上添加一個(gè)或多個(gè)隱藏表單,把一些要隱藏的
信息如標(biāo)識(shí)該客戶的工D號(hào)存儲(chǔ)在那里。當(dāng)客戶提交該表單時(shí),
這些信息會(huì)作為查詢參數(shù)返回服務(wù)器,服務(wù)器可以利坦、
HttpS一rvl一tR一qu一st對(duì)象的g一'tParam一t一r()方法讀取出來c
這樣就達(dá)到了在服務(wù)器端維護(hù)會(huì)話信息持續(xù)的作用。
2011年5月30日10
⑥可以這樣認(rèn)為,同重寫URL技術(shù)相比,
隱藏窗體技術(shù)在表單參數(shù)中傳遞會(huì)話信息,
而重寫URL技術(shù)是在GET參數(shù)中傳遞會(huì)話
信息。除了這點(diǎn),二者并無根本區(qū)別。
2011年5月30日11
卷上面我們分別說明了如何使用URL重寫、cooki一和
隱藏表單這三種方式來跟蹤用戶會(huì)話。不管采用何種方
式,都應(yīng)實(shí)現(xiàn)以下步驟:
1、服務(wù)器必須為每個(gè)會(huì)話產(chǎn)生一個(gè)唯一的工D號(hào)
2、在服務(wù)器和客戶瀏覽器之間傳遞這個(gè)工D號(hào)以維持會(huì)
話
3、服務(wù)器端根據(jù)工D號(hào)維護(hù)相關(guān)客戶的會(huì)話信息
2011年5月30日12
6、使用內(nèi)建的Session對(duì)象
#'Servlet2.3規(guī)范定義了^^HttpSession^
口,允許S一rvl一t容器針對(duì)每一個(gè)用戶建立一個(gè)
HTTP會(huì)話(即HttpS一ssion對(duì)象),每個(gè)HTTP會(huì)
話將會(huì)自動(dòng)派減予一個(gè)唯一的會(huì)話編號(hào)(session
ID),而無需程序員編程實(shí)現(xiàn)。
*HttpS一ssion對(duì)象提供了和S一rvl一tCont一xt對(duì)
象相似的一組會(huì)話屬性的方法,這樣就可以很容易
地在服務(wù)器端存放用戶會(huì)話狀態(tài)。
2011年5月30日13
2011年5月30日14
會(huì)話與請(qǐng)求的關(guān)系
會(huì)話和請(qǐng)求之間的關(guān)系
會(huì)話維護(hù)的就是同一用戶的一組請(qǐng)求序列之間的關(guān)聯(lián)性。
mJI.、士-4^-fr-t人、-r.>口?、,AlY在一定A的J關(guān)系。換言之,
這些請(qǐng)求屬于一個(gè)會(huì)話,因?yàn)樗鼈兪峭粋€(gè)用戶發(fā)茬金港號(hào)哈
往同一個(gè)服務(wù)器應(yīng)用程序(HeUoworld)的,即使冷浦沙/:義叱白田
它們是發(fā)往不同的Servlet的。當(dāng)用戶在Helloworld9判斷該請(qǐng)求所屬的
下不同的Servlet間瀏覽時(shí),服務(wù)器可以用會(huì)話對(duì)象,
跟蹤與用戶有關(guān)的狀態(tài)。r
http://www.MyW/HelloworLServlet
Id/Servlet2
這些請(qǐng)求屬于另一個(gè)會(huì)話,代表不同的用戶。
hI/Servlet3
這時(shí)請(qǐng)求可以與上面的請(qǐng)求同時(shí)發(fā)生而不會(huì)被
Servlet混淆。Servlet
/HeUoworld
Web應(yīng)用
http://www.MyW/Helloworld7Servlet2'
http://www.MyW/Helloworld/Servlet3
http://www.MyW/HelloworlA/Servletl
http://www.MyW/HelloworldAServlet4
2011年5月30日客戶端215
會(huì)話與請(qǐng)求的關(guān)系
獲取與請(qǐng)求關(guān)聯(lián)的會(huì)話對(duì)象
Ht■tpS一rvl一■tR一qu一st對(duì)象提供了g一tS一ssion方法,
通過這個(gè)方法,S一rvl一t就可以獲得與當(dāng)前請(qǐng)?zhí)╆P(guān)聯(lián)的會(huì)話對(duì)象的
引用。該方法為重載的方法,有兩個(gè)版本:
■publicHttpSessiongetSession();
案故與當(dāng)朝德求相去聯(lián)的含話,如果當(dāng)前請(qǐng)求還沒有一個(gè)相關(guān)聯(lián)
的會(huì)話,就創(chuàng)建一個(gè)并返回。
■publicHttpSessiongetSession(boolbCreate);
扳回與當(dāng)前請(qǐng)求相關(guān)聯(lián)的會(huì)t面寸象。如果沒有,且參數(shù)cr一at一的
值為tru一,貝。創(chuàng)建異地向一個(gè)新的會(huì)話。如果cr一at一的值為
false,且請(qǐng)求沒有相關(guān)聯(lián)的會(huì)話對(duì)象,將返回null。
可以利用這點(diǎn)判斷用戶最直為第一次邁問朝點(diǎn)二如果一、、、
g一tS一ssion(false)返回null,則表不用尸是第一次訪問站點(diǎn),
如果返回非null則表示用戶不是第一次訪問站點(diǎn)。
2011年5月30日16
會(huì)話與請(qǐng)求的關(guān)系
獲取與請(qǐng)求關(guān)聯(lián)的會(huì)話對(duì)彳總是返回一個(gè)會(huì)話。但是我們不知道該會(huì)
、-r*DiVLr-kt,JL/_、--LD-1—
獲得會(huì)話ID并保存到字符串中。該串將類似于:
.32FE24119D28C30866C9EF4BEA40EF4E
判斷會(huì)話是新建的還是舊的。
if(s.isNew()){
out.printin("<p>新的會(huì)話工D="+sid+”</p>");
}
else{
out.printin("<p>歡迎回
來,<br>User:”+sid+”</p>");
}
2011年5月30日17
會(huì)話與請(qǐng)求的關(guān)系
會(huì)話工D
?s一rvl一t容器在創(chuàng)建每一個(gè)新的HTTP會(huì)話對(duì)象時(shí),都會(huì)賦予一
個(gè)新的工D號(hào)。
⑥s一工vl一t容器保證它在W一b應(yīng)用范圍內(nèi)是唯一的。
⑥會(huì)話工D是實(shí)際包含在Http請(qǐng)求/響應(yīng)報(bào)文中的會(huì)話數(shù)據(jù)。
?這個(gè)工D號(hào)可以通過HttpS一ssion對(duì)象的g一t工d()獲得。例如:
HttpS一ssicms一ssion=raqu一st.g一tS一ssion();
Strings一ssion工d=s一ssion.g一t工d();
2011年5月30日18
會(huì)話與請(qǐng)求的關(guān)系
HttpS一ssion工作原理
1.當(dāng)用戶第一次發(fā)出請(qǐng)求時(shí),S一工vl一t容器會(huì)建立一個(gè)HttpSassion
對(duì)象,并自動(dòng)分配一■個(gè)W一b應(yīng)用范圍內(nèi)唯一的Sassion工D與之對(duì)應(yīng)。
這個(gè)Session工D也會(huì)隨著HTTP響應(yīng)內(nèi)容傳遞給用戶端瀏覽器。傳遞
的方式默認(rèn)情況下為cooki一,如果用戶端瀏覽器關(guān)閉了cookie功能,
就會(huì)使用URL重寫技術(shù)傳遞給用戶瀏覽器。
2.在用戶發(fā)出的后續(xù)請(qǐng)求中,請(qǐng)求信息中會(huì)包含S一工v一It容器傳遞給它
的SessionIDoS一rvl一t容器就會(huì)根據(jù)傳回的S一ssion工D將原來
建立的HttpS一ssion對(duì)象將請(qǐng)求與HttpS一工vl一tR一qu一st對(duì)象關(guān)聯(lián)
起來。所以,對(duì)于同一個(gè)用戶,調(diào)用g一tS一ssion()方法返[1]的將是
同一個(gè)HttpS一ssion對(duì)象。
2011年5月30日19
HttpSession對(duì)象的屬性
與ServletContexI^^象類似,我們可以給HttpSession
對(duì)象綁定屬性。
■S一工vl一tCont一xt對(duì)象的屬性的作用域是W一b應(yīng)用程序,
在這個(gè)應(yīng)用程序下的所有S一zl一t都共享這些屬性;
-綁定到HttpSessicm對(duì)象上的屬性只在一次會(huì)話周期內(nèi)有
效,且只有在屬于該會(huì)話的HttpR一quest對(duì)象中才可以訪
問這些屬性。換句話說,會(huì)話屬件就是特定用戶的專用數(shù)據(jù),
同時(shí)訪問W一b應(yīng)用的其他用戶無法訪問這些屬性。
2011年5月30日20
HttpSession接口方法一訪問屬性
HttpSession接口使用以下方法管理綁定到會(huì)話的屬
性
voids一tAttribut一(Stringnam一,Obj一ctvalue)
Objectg一tAttribut一(Stringnam一)
void工一mov一Att工ibute(Stringnam一)
?除伽的蹄頡叫楸槌u附麒的噬掘頻碘豳鼬蒯輜周一
的堪聊雎制朝哪?例僦葡皴崎儂蹴蜘說ne雇的可姒肥邰播
闔楂時(shí)族弼曲對(duì)袈蜃豳對(duì)魔殿甜象將由vlaue指定的對(duì)象置換掉。
HttpSessionsession=request.getSession(true);
幽鎮(zhèn)§幽)n(true);
Nttp^^km1s€S8senHrgqti^tti^tfte^hxii0iiMt)^);
session.setAttribute(naccountn,acct);
2011年5月38^sion.setAttribute(naccount6t,newInteger(lOO));21
HttpSession接口方法一訪問屬性
用false參數(shù)獲取現(xiàn)有會(huì)話對(duì)象。若沒有,則創(chuàng)建一
個(gè)新的會(huì)話,并將visitCount對(duì)象綁定到該會(huì)話名
publicvoiddoGet(HttpServletRe為“visitCount”的屬性。
HttpServletResponseresponse)注意綁定到會(huì)話屬性的對(duì)象類型只能為Object類型。
即可以是null、int、double、boolean以外的類型。
注意在本例中newInteger(visitCount))的用法
intvLsitCount;
HttpSessionsession=request.getSession(false);
if(session==null){若存在會(huì)話,則從該會(huì)話提取名為“visitCount”
vLsitCount=l;的綁定對(duì)象。更新其值后,重新綁定到會(huì)話。
session=request.getSessi
session.setAttribute("y,new
Integer(visitCount));
}else{
visitCount=((Integer)session.getAttribute("visitCount")).intVal
ue();
visitCount++;
session.setAttribute(HvisitCount",new
22
HttpSession接口方法一終止會(huì)話
如果要終止某個(gè)HTTP會(huì)話,可以使用下面的幾種方式
publicvoidinvalidat一()方法
publicvoids一tMax工nactiv一工nt一rval(intinterval)
方法
在web.xm1中配置會(huì)話的生存時(shí)間
般嗣逮因嗨徽也颯謝帥像㈱翔教I加峨璇的逾神飾6綁姥國(guó)性,
寮金函蒯n-gfl咖gakStaiSExesfitiiHt鼎1翁ut例期;素指定,單位為分鐘:
HttpSessionse^sion=request.getSession(true);
^猷惻0n(true);
T<sessiaii-tim£ouf>yO</session-timeouf>
sessionanvanaafeQ;
碣湍瓢跪纜躁金比,沿本W(wǎng)eb應(yīng)用程序的間隔超過了10分鐘,容器
初倒.賴含嫡鬼碰氤出劭底懶嫩赧1EI置的曬第璇坤食麻游
2011年5月3曲篦攜提責(zé)問閥陶超迤的弱會(huì)解§將肺擻會(huì)時(shí)之中。23
對(duì)于網(wǎng)上商店這樣的應(yīng)用,可能希望對(duì)“商店”中當(dāng)前
的客人總數(shù)進(jìn)行監(jiān)控。根據(jù)前面所學(xué)內(nèi)容,我們知道應(yīng)該利用會(huì)話
來實(shí)現(xiàn)該功能。
在本節(jié)中,我們將學(xué)習(xí)利用HttpS一ssionList一n一r偵
聽器,輕松實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,以跟蹤并向用戶顯示本網(wǎng)站的在線人
數(shù)。
監(jiān)視會(huì)話對(duì)象
2011年5月30日24
鐐施陵慚對(duì)象
4加稻
會(huì)話偵聽器是用來監(jiān)聽會(huì)話事件的監(jiān)聽器類。同其他Web偵聽
監(jiān)器類似,會(huì)話偵聽器由用戶編寫并注冊(cè)到web應(yīng)用中。當(dāng)容器檢測(cè)
視到某個(gè)會(huì)話有事件發(fā)生時(shí),容器將激活監(jiān)聽器對(duì)象并激發(fā)對(duì)應(yīng)的事
件方法。
會(huì)主要有兩類會(huì)話偵聽器:
話
對(duì)⑥會(huì)話生命周期偵聽器
象同S一rv一tCont一xtList一n一r類似,這類偵聽器主要負(fù)責(zé)會(huì)話生
命周期事件的監(jiān)聽,如會(huì)話的生成、結(jié)束、激活等。在S一rv工一t規(guī)
范中,可以通過實(shí)現(xiàn)接口HttpSessionListener和
HttpSessionActivationListener來實(shí)現(xiàn)偵聽。
參會(huì)話屬性偵聽器、…
同S一rv一tCont一xtAt?tribut一List一n一r類似,這類偵聽器負(fù)責(zé)
處理綁定到會(huì)話的屬性的更改事件,如綁定、刪除、修改等。這類
偵聽器應(yīng)實(shí)現(xiàn)HttpSessionAttributeListener或
HttpSessionBindingListener接口。
2011年5月30日25
、會(huì)話生命周期事件
4加稻
會(huì)話的生命周期是由S一rvl一t容器管理的。在會(huì)話生
監(jiān)
年周容官合有今于當(dāng)去器方現(xiàn)某個(gè)杳話的次態(tài)發(fā)生變溫時(shí)(如生成、鼠
視我們需要做的是實(shí)現(xiàn)監(jiān)弓化、激活、銷毀),容器會(huì)將一個(gè)SessionEvent對(duì)象
會(huì)作為參數(shù)調(diào)用注冊(cè)的監(jiān)聽器。
話
HttpSessionEvent
對(duì)生成會(huì)話HttpSessionListener
象
可以添加:替換、
刪除型話精華HttpSessionActivationEvent
鈍化會(huì)話)-----------------------------1HttpSessionActivationListener
HttpSessionActivationEvent
激活會(huì)話HttpSessionActvationListener
可以添力、替換、
.除"話屬)
HttpSessionEvent
r銷毀會(huì)話)
HttpSessionListener
2011年5月一、---------->
HttpSessionListener偵聽器
4
OS
監(jiān)
視對(duì)于本節(jié)要完成的任務(wù),我們利用會(huì)話的生命周期事件來實(shí)現(xiàn)當(dāng)前
會(huì)在線人數(shù)的統(tǒng)計(jì)工作。
話當(dāng)一個(gè)用戶登錄網(wǎng)站時(shí),容器將創(chuàng)建一個(gè)會(huì)話,這時(shí)可以將在線人
對(duì)數(shù)計(jì)數(shù)器加1;當(dāng)田口超時(shí)、洋鐺時(shí)一裒瞿"為;玄仝在牛的一在線
當(dāng)容器生成一個(gè)新會(huì)話時(shí)會(huì)通知HttpSessionListener偵聽器
象人數(shù)計(jì)數(shù)器減
調(diào)用本方法。容器向該方法傳遞的參數(shù)是HttpSessionEvent
當(dāng)容器創(chuàng)建或
對(duì)當(dāng)某個(gè)會(huì)話超時(shí)或者調(diào)用了invalidate。方法都會(huì)引起會(huì)話的
偵聽器。Httj偵銷毀。在會(huì)話銷毀之前,容器會(huì)通知HttpSessionListener
在這兩個(gè)方法pi偵聽器并調(diào)用本方法。
同樣,容器向該方法傳遞的參數(shù)是HttpSessionEvent對(duì)象,
偵聽器可通過其getSessionO方法引用發(fā)生事件的會(huì)話對(duì)象。
publicvoids一一ssionEsee!
publicvoids一ssicmD一stroy一d(HttpS一ssimt
sc一)
2011年5月30日
HttpSessionListener偵聽器
4
OS
監(jiān)
視注意事項(xiàng):
會(huì)
話1.當(dāng)實(shí)現(xiàn)HttpSessionListener偵聽器時(shí),必須同附
對(duì)s一ssionCr一at一、s一ssionD一st工oy一d的實(shí)現(xiàn)。當(dāng)僅僅需要
象偵聽一個(gè)事件時(shí),另一個(gè)事件方法可用空方法體,但必須實(shí)現(xiàn);
2.通過從參數(shù)得到的HttpS一ssionEv一nt引用,在
s一ssionCr一at一方法和s一ssionD一stroy一d方法內(nèi)可以獲得
發(fā)生事件的會(huì)話的引用。除此之外,HttpSessionEvent
參數(shù)并不提供其他信息;
3.與S一rvl一tCont一xtList一n一r類似,這兩個(gè)方法可能會(huì)遇到
多線程同步問題。
2011年5月30日28
publicclassOnlineCounterListenerimplementsServletContextListener,HttpSessionListener{
publicvoidcontext工nitialized(S一rvl一tCont一xtEv一ntsee)
(
S一工vl一tContext
cont一xt=sc一.g一tS一rvl一tConTaxT;
工nt一garcountc當(dāng)容器每次進(jìn)入一個(gè)新的會(huì)話時(shí),從該會(huì)話檢索出所
context.s一tAt'屬的Web應(yīng)用上下文,然后將其"counter”屬性的值
}加1。注意"counter”屬性是一個(gè)整型的、在整個(gè)Web
入】.44nd應(yīng)用運(yùn)行期間維護(hù)的量。
publicvoidcontextDestroi一、=-一一一一一一一一
S一rvl一tCont一xt
conLexL=t>ce.geLServle);
context.r一mev一一r”);
當(dāng)容器每次刪除一個(gè)會(huì)話時(shí),說明有用戶正在離開當(dāng)
publicvoidsessionCreatec前Web應(yīng)用。從會(huì)話檢索出所屬Web應(yīng)用上下文,然
HttpSassions一ssion=s(后將其“counter”屬性的值減1,重新存入Web應(yīng)用上
下文。
S一rvl一tCont一xtcont一x-▼▼V<J/.LA/|J~|~/、p'11J,\JA411J''JJL_t
工nt一gar9S^rvletContext屬性,這樣就能保證計(jì)數(shù)器
counter=(Integer)context.對(duì)象能夠讓所有的用戶訪問。
count一r=n一wInteger(count一工.cntValu一()+1);
cont一xt.s一tAtt工ibut一("count一r”,counter);
publicvoidsessionDestroyed(HttpS一ssionEv一ntse){
HttpSassions一ssion=s一.g一tS一ssion();
S一工vl一tCont一xtcont一xt=sassion.g一tS一工vl一tCont一xt();
count一工=(工nt一ger)cont一xt.g一tAttribute("counter");
HttpSessionListener偵聽器
4om箱
°本例中的幾個(gè)問題說明:
監(jiān)i.四個(gè)方法的作用必須分清楚:、
contextInitial!zed負(fù)責(zé)在Web上下文中建立"counter”屬性并設(shè)置初值;
視sessionCreated負(fù)責(zé)在新會(huì)話出現(xiàn)時(shí)將“counter”屬性值增、加
sessionDestroyed負(fù)責(zé)在會(huì)話結(jié)束時(shí)將"counter”屬性值減少
會(huì)contextDestroyed負(fù)責(zé)在Web應(yīng)用結(jié)束前釋放上下文屬性所苫資源。
話
2.編寫好事件偵聽器后,還要注冊(cè)到Web.xml中才會(huì)生效。其中:
對(duì)〈session-config〉
<session-timeout>l</session-timeout>---
象會(huì)話失效時(shí)間長(zhǎng)度
</session-config>
<listener><listener-class>
com.mycompany.servlet.OnlineCounterListener事件類的
全名
〈/listener-class〉</listener>
3.在Web應(yīng)用中的某個(gè)Servlet中,可以隨時(shí)查詢計(jì)數(shù)
context=this.getServletContext();
request.getSession(true);//若還未進(jìn)入會(huì)i舌貝(J倉(cāng)U建—1^。
out.printin("<p>Online:n+context.getAttribute("counter")+
n</p>");
out.printin(</body></html>n);
2011年5月赳用《9$就$1。1111注01^「只能監(jiān)聽整個(gè)對(duì)象的生命周期,無法監(jiān)聽會(huì)話屬理M添加、
朋||K仝書才?4^萬1.U勺不用1支止匕d三自.才市由Hh■HnGaQQ-icn△十上rTHiihaT.iQhanar
二會(huì)話屬性偵聽器
4加稻
當(dāng)容器發(fā)現(xiàn)向某個(gè)會(huì)話的屬性發(fā)生變化時(shí),將向
、、.nrtBv1r-nJ」.▼一.*.?
監(jiān)
問偵聽費(fèi)是滿足以下條件的Java類:合對(duì)屬性的
視
添?實(shí)現(xiàn)HttpSessionAttributeListener或HttpSessionBindingListener接口
會(huì),注冊(cè)到了Web.XML卜的<listener><listener-class>節(jié)中
在偵聽器中的事件方法
話取發(fā)生事件的會(huì)話和屬事件發(fā)生時(shí),一個(gè)HttpSessionBindingEvent對(duì)
一般情況下,我們通過象作為消息參數(shù)發(fā)送到偵聽器。偵聽器可以:
對(duì)
器而不是HttpSessionBii通過該參數(shù)獲得會(huì)話、屬性名等信息。
象生成或被治;:巾
HttpSessionBindingEvent
添加屬性
HttpSessionBindingEvent
替換屬性)------------------------------■HttpSessionAttributeListener
一.“=>…\HttpSessionBindingEvent
刪除屬性1________________________I
2011年5月30E鈍化或隼毀會(huì)話
HttpSessionAttributeListener偵聽器
領(lǐng)
監(jiān)
HttpSessionAttributeListener4fe口共定義了三個(gè)方法:
普
話■publicvoid
attributeAdded(HttpSessionBindingEventse)
對(duì)
當(dāng)使用HttpSession對(duì)象的setAttribute()方法添力口——
象個(gè)新的會(huì)話屬性時(shí),容器會(huì)調(diào)用偵聽器的這個(gè)方法。
■publicvoid
attributeRemoved(HttpSessionBindingEventse)
當(dāng)通過HttpS一ssion對(duì)象的removeAttribute()方法刪
除一個(gè)會(huì)話屬性時(shí),容器會(huì)調(diào)用偵聽器的這個(gè)方法。
■publicvoid
2011年5月30日attributeReplaced(HttpSessionBindingEventse)
HnTTIIC11*4^:不___■1____/%F豐*.
HttpSessionAttributeListener偵聽器
4
OS
監(jiān)
視HttpSessionBindingEvent^象
會(huì)
話
對(duì)當(dāng)會(huì)話屬性發(fā)生變更時(shí),通知_
象HttpS一ssionAttribut一List一n一工偵聽器的事件為
HttpS一ssionBindingEv一nt對(duì)象。
HttpS一ssionBindingEv一nt類繼承自HttpS一ssionEv一nt類,
除了繼承的g一tS一ssion()方法,
HttpS一ssionBindingEv一nt類還定義了兩個(gè)方法:
■StringgetName()
返回綁定到會(huì)話對(duì)象或解除綁定的屬性的名稱。
■ObjectgetValue()
返回添加、替換或要?jiǎng)h除的會(huì)話屬性。
2011年5月30日33
publicclassSessionAttributeHandlerimplementsHttpSessionAttributeListener{
publicvoidattributeAdded(HttpSessionBinclingEventse){
HttpSessionsession=se.getSession();
ServletContextcontext=session.getServletContext();
context.log("Anattributenamed"+se.getName()+“!!
+s一.g一tValu一()+“add一d");
}
當(dāng)向會(huì)話中綁定新屬性時(shí),容器調(diào)用該方法。參數(shù)se
publicvoidattributeRemoved(1說明了發(fā)生事件的會(huì)話對(duì)象以及新添加的屬性。
HttpSessionsession=se.g(在本例中,我們從se獲取會(huì)話,然后獲取Web上下文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)三年級(jí)下冊(cè)譯林版英語(yǔ)第二單元測(cè)試卷+參考答案
- 浙江省2025年小升初數(shù)學(xué)專項(xiàng)復(fù)習(xí)13-小數(shù)的運(yùn)算與應(yīng)用(含答案)
- 廣場(chǎng)地塊項(xiàng)目策劃提案
- 管理學(xué)ab試題及答案
- 票據(jù)法期末試題及答案
- 廢水專業(yè)面試題及答案
- 檢驗(yàn)員與生產(chǎn)的協(xié)同工作試題及答案
- 安徽地理面試題目及答案
- 2024年紡織品設(shè)計(jì)師的技能要求試題及答案
- 醫(yī)院基建管理試題及答案
- 大學(xué)化學(xué)第03章-材料化學(xué)基礎(chǔ)
- 面癱患者的中醫(yī)護(hù)理常規(guī)
- 企業(yè)刑事合規(guī)培訓(xùn)課件
- 訂做門合同協(xié)議范本
- 2025年蘭州市九年級(jí)診斷考試(一診)物理試卷
- 2024年陪診師考試完整題庫(kù)試題及答案
- 2025-2030開關(guān)電源行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 【初中地理】西亞課件-2024-2025學(xué)年人教版(2024)七年級(jí)地理下冊(cè)
- (一模)2025年廣東省高三高考模擬測(cè)試 (一) 英語(yǔ)試卷(含官方答案及詳解)
- 項(xiàng)目實(shí)施進(jìn)度跟蹤與調(diào)整方案
- 鑄就數(shù)字堅(jiān)盾網(wǎng)絡(luò)安全技術(shù)知到課后答案智慧樹章節(jié)測(cè)試答案2025年春青島工學(xué)院
評(píng)論
0/150
提交評(píng)論