自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Servlet容器的會(huì)話跟蹤

開(kāi)發(fā) 后端
本文介紹Servlet容器的會(huì)話跟蹤,另外需要注意的就是一些很重要的會(huì)話的語(yǔ)義問(wèn)題。

HTTP協(xié)議是一種無(wú)狀態(tài)的協(xié)議,而對(duì)于現(xiàn)在的web應(yīng)用而言,我們往往需要記錄從特定客戶端的一系列請(qǐng)求間的聯(lián)系?,F(xiàn)在已經(jīng)有很多會(huì)話跟蹤的技術(shù),但是對(duì)于程序員而言都不是很方便直接使用。Servlet規(guī)范定義了一個(gè)簡(jiǎn)單的HttpSession接口以方便Servlet容器進(jìn)行會(huì)話跟蹤而不需要開(kāi)發(fā)者注意實(shí)現(xiàn)的細(xì)節(jié)。一般而言,有兩種最常用的會(huì)話跟蹤機(jī)制,一種就是URL重寫(xiě)。在客戶端不接受cookie的情況下可以使用URL重寫(xiě)進(jìn)行會(huì)話跟蹤。

URL重寫(xiě)包括向URL路徑添加一些容器可以解釋的數(shù)據(jù)。規(guī)范要求會(huì)話ID必須編碼在URL路徑中,參數(shù)名稱必須是jsessionid,例如: http://www.myserver.com/catalog/index.html;jsessionid=1234,另一種就是現(xiàn)在最常用的cookie了,規(guī)范要求所有的Servlet都必須支持cookie。容器向客戶端發(fā)送一個(gè)cookie,客戶端在后續(xù)的處于同一個(gè)會(huì)話的請(qǐng)求中向服務(wù)器返回該cookie。會(huì)話跟蹤cookie的名字必須是JSESSIONID。

新出現(xiàn)的一種會(huì)話功能是SSL會(huì)話,SSL(Secure Sockets Layer,安全套接字層)是HTTPS協(xié)議使用的一種加密技術(shù),內(nèi)建了會(huì)話跟蹤功能,Servlet容器可以非常容易的使用這些數(shù)據(jù)建立會(huì)話跟蹤。(但是HTTPS不是規(guī)范要求Servlet必須支持的協(xié)議) 因?yàn)镠TTP是一種基于請(qǐng)求響應(yīng)的協(xié)議,因此會(huì)話只有在客戶端加入它以后才被新建立。當(dāng)會(huì)話跟蹤信息被成功的返回給服務(wù)器以指示會(huì)話給建立時(shí)客戶端才算加入了一個(gè)會(huì)話。如果客戶端沒(méi)有加入會(huì)話,那么下一次請(qǐng)求不會(huì)被認(rèn)為是會(huì)話的一部分。如何客戶端還不知道會(huì)話或者客戶端選擇不加入一個(gè)會(huì)話,那么會(huì)話被認(rèn)為是新的。開(kāi)發(fā)者必須自己設(shè)計(jì)自己的應(yīng)用中的會(huì)話處理狀態(tài),在什么地方?jīng)]有加入會(huì)話,什么地方不能加入會(huì)話以及什么地方不需要加入會(huì)話。

規(guī)范要求HttpSession在應(yīng)用或者Servlet上下文級(jí)別有效,諸如cookie這樣的建立會(huì)話的底層機(jī)制可以在上下文中共享,但是對(duì)于那些外露的對(duì)象,以及更重要的是對(duì)象的那些屬性是不能在上下文中共享的。對(duì)于會(huì)話的屬性的綁定而言,任何對(duì)象都可以綁定到某個(gè)命名屬性。被綁定的屬性對(duì)象對(duì)于其它處于相同ServletContext并且處于同一個(gè)會(huì)話處理中的其它Servlet也是可見(jiàn)的。

某些對(duì)象在被加入會(huì)話或者被從會(huì)話中移除時(shí)要求得到通知,這樣的信息可以通過(guò)讓該對(duì)象實(shí)現(xiàn)HttpSessionBindingListener接口得到。該接口定義了兩個(gè)方法用以標(biāo)記被綁定到會(huì)話或者從會(huì)話中被移除。 valueBound方法在對(duì)象通過(guò)getAttribute之前就被調(diào)用,而valueUnbound方法在對(duì)象已經(jīng)不能通過(guò)getAttribute得到后才被調(diào)用。

由于HTTP是無(wú)狀態(tài)協(xié)議,因此客戶端不再活動(dòng)時(shí)沒(méi)有什么明顯的信號(hào),這也就意味著只有一種機(jī)制可以用于表明客戶端不再活動(dòng):超時(shí)。會(huì)話的缺省的時(shí)限由Servlet容器定義并且可以通過(guò)HttpSession的getMaxInactiveInterval得到,開(kāi)發(fā)者也可以通過(guò)使用setMaxInactiveInterval
方法進(jìn)行設(shè)置,這些方法返回的單位是秒,如果時(shí)限被設(shè)置為-1,那么意味著永遠(yuǎn)不會(huì)超時(shí)。通過(guò)調(diào)用HttpSession的getLastAccessedTime方法,我們可以得到在當(dāng)前請(qǐng)求之前的訪問(wèn)時(shí)間。當(dāng)會(huì)話中的一個(gè)請(qǐng)求被Servlet上下文處理時(shí)會(huì)話就被認(rèn)為被訪問(wèn)了。

另外需要注意的就是一些很重要的會(huì)話的語(yǔ)義問(wèn)題。
◆多線程問(wèn)題:多個(gè)請(qǐng)求線程可能會(huì)同時(shí)訪問(wèn)同一個(gè)會(huì)話,開(kāi)發(fā)者有責(zé)任以適當(dāng)?shù)姆绞酵皆L問(wèn)會(huì)話中的資源。
◆分布式環(huán)境:對(duì)于被標(biāo)記為可分布的應(yīng)用而言,同一會(huì)話中的所有請(qǐng)求只能被單一的VM處理。同時(shí),放入HttpSession中的所有對(duì)象都必須實(shí)現(xiàn) Serializable接口,否則容器可能會(huì)拋出IllegalArgumentException(在jboss_tomcat下沒(méi)有拋出這個(gè)異常,但是如果在關(guān)閉服務(wù)器時(shí)還有未完成的會(huì)話,那么服務(wù)器在試圖存儲(chǔ)會(huì)話時(shí)會(huì)出現(xiàn)串行化異常,在重新啟動(dòng)的時(shí)候會(huì)試圖回復(fù)會(huì)話,也會(huì)出現(xiàn)異常)。
這個(gè)限制意味著開(kāi)發(fā)者不會(huì)遇到非可分布容器中的那些并發(fā)問(wèn)題。另外容器提供者可以通過(guò)將一個(gè)會(huì)話對(duì)象以及它的內(nèi)容從分布式系統(tǒng)的一個(gè)活動(dòng)節(jié)點(diǎn)移動(dòng)到系統(tǒng)的其它不同節(jié)點(diǎn)的能力來(lái)保證可伸縮性。
◆客戶端的語(yǔ)義:基于cookie或者SSL證書(shū)通常是被web瀏覽器控制并且不聯(lián)系到特定瀏覽器窗口的事實(shí),從客戶端應(yīng)用的所有窗口發(fā)送到容器的請(qǐng)求都可能是同一個(gè)會(huì)話。為了達(dá)到最大的可移植性,開(kāi)發(fā)者不能總假設(shè)特定客戶端的所有窗口的請(qǐng)求都處于同一個(gè)會(huì)話中。

【編輯推薦】

  1. 介紹Servlet 2.4版功能
  2. 多種Servlet接口介紹
  3. 接口介紹-Servlet Context
  4. Servlet的注冊(cè)方法
  5. 介紹Servlet容器
責(zé)任編輯:佚名 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
相關(guān)推薦

2009-07-08 15:10:00

Servlet會(huì)話管理

2009-07-09 11:27:59

Servlet容器

2009-07-08 14:01:47

Servlet容器

2009-07-07 16:23:05

Servlet容器

2009-07-08 14:22:36

Servlet容器匹配過(guò)程

2009-07-08 11:17:10

Servlet容器Servlet Con

2009-07-06 16:16:33

Servlet容器工作

2009-05-18 10:43:17

TomcatServletJetty

2022-03-31 15:17:04

JavaSocketServlet容器

2012-03-21 12:57:29

JavaJettyServlet

2013-05-28 13:44:32

Android開(kāi)發(fā)Android應(yīng)用ijetty

2019-12-09 15:00:48

TomcatServlet容器

2009-07-03 16:53:11

Servlet容器

2009-07-07 08:46:18

JettyServlet容器

2020-07-21 14:35:44

Servlet容器ApacheTomcat

2010-05-27 15:05:23

ServletJava

2009-07-08 09:35:53

Java ServleServlet 3.0

2009-07-08 10:12:04

Servlet Con

2010-09-07 15:34:14

2010-07-26 13:36:48

Telnet會(huì)話
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)