国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

servlet會話介紹

2019-11-18 12:32:36
字體:
來源:轉載
供稿:網友

  HTTP協議是一種無狀態的協議,而對于現在的web應用而言,我們往往需要記錄從特定客戶端的一系列請求間的聯系。
  現在已經有很多會話跟蹤的技術,但是對于程序員而言都不是很方便直接使用。servlet規范定義了一個簡單的
  Httpsession接口以方便servlet容器進行會話跟蹤而不需要開發者注重實現的細節。
  一般而言,有兩種最常用的會話跟蹤機制,一種就是URL重寫。在客戶端不接受cookie的情況下可以使用URL重寫進行會話跟蹤。
  URL重寫包括向URL路徑添加一些容器可以解釋的數據。規范要求會話ID必須編碼在URL路徑中,參數名稱必須是jsessionid,
  例如: http://www.myserver.com/catalog/index.Html;jsessionid=1234
  另一種就是現在最常用的cookie了,規范要求所有的servlet都必須支持cookie。容器向客戶端發送一個cookie,客戶端在后續的處于同一個會話的請求中向服務器返回該cookie。會話跟蹤cookie的名字必須是JSESSIONID。
  新出現的一種會話功能是SSL會話,SSL(Secure Sockets Layer,安全套接字層)是HTTPS協議使用的一種加密技術,內建了會話跟蹤功能,servlet容器可以非常輕易的使用這些數據建立會話跟蹤。(但是HTTPS不是規范要求servlet必須支持的協議) 因為HTTP是一種基于請求響應的協議,因此會話只有在客戶端加入它以后才被新建立。當會話跟蹤信息被成功的返回給服務器以指示會話給建立時客戶端才算加入了一個會話。假如客戶端沒有加入會話,那么下一次請求不會被認為是會話的一部分。如何客戶端還不知道會話或者客戶端選擇不加入一個會話,那么會話被認為是新的。開發者必須自己設計自己的應用中的會話處理狀態,在什么地方沒有加入會話,什么地方不能加入會話以及什么地方不需要加入會話。
  規范要求HttpSession在應用或者servlet上下文級別有效,諸如cookie這樣的建立會話的底層機制可以在上下文中共享,但是對于那些外露的對象,以及更重要的是對象的那些屬性是不能在上下文中共享的。
  對于會話的屬性的綁定而言,任何對象都可以綁定到某個命名屬性。被綁定的屬性對象對于其它處于相同ServletContext并且處于同一個會話處理中的其它servlet也是可見的。
  某些對象在被加入會話或者被從會話中移除時要求得到通知,這樣的信息可以通過讓該對象實現HttpSessionBindingListener接口得到。
  該接口定義了兩個方法用以標記被綁定到會話或者從會話中被移除。 valueBound方法在對象通過getAttribute之前就被調用,而valueUnbound方法在對象已經不能通過getAttribute得到后才被調用。
  由于HTTP是無狀態協議,因此客戶端不再活動時沒有什么明顯的信號,這也就意味著只有一種機制可以用于表明客戶端不再活動:超時。
  會話的缺省的時限由servlet容器定義并且可以通過HttpSession的getMaxInactiveInterval得到,開發者也可以通過使用setMaxInactiveInterval
  方法進行設置,這些方法返回的單位是秒,假如時限被設置為-1,那么意味著永遠不會超時。
  通過調用HttpSession的getLastaccessedTime方法,我們可以得到在當前請求之前的訪問時間。當會話中的一個請求被servlet上下文處理時會話就被認為被訪問了。
  另外需要注重的就是一些很重要的會話的語義問題。
  多線程問題:多個請求線程可能會同時訪問同一個會話,開發者有責任以適當的方式同步訪問會話中的資源。
  分布式環境:對于被標記為可分布的應用而言,同一會話中的所有請求只能被單一的VM處理。同時,放入HttpSession中的所有對象都必須實現Serializable接口,否則容器可能會拋出IllegalArgumentException(在jboss_tomcat下沒有拋出這個異常,但是假如在關閉服務器時還有未完成的會話,那么服務器在試圖存儲會話時會出現串行化異常,在重新啟動的時候會試圖回復會話,也會出現異常)。
  這個限制意味著開發者不會碰到非可分布容器中的那些并發問題。另外容器提供者可以通過將一個會話對象以及它的內容從分布式系統的一個活動節點移動到系統的其它不同節點的能力來保證可伸縮性。
  客戶端的語義:基于cookie或者SSL證書通常是被web瀏覽器控制并且不聯系到特定瀏覽器窗口的事實,從客戶端應用的所有窗口發送到容器的請求都可能是同一個會話。為了達到最大的可移植性,開發者不能總假設特定客戶端的所有窗口的請求都處于同一個會話中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄大仙区| 河西区| 保德县| 嫩江县| 酒泉市| 登封市| 汉沽区| 盐亭县| 堆龙德庆县| 高邮市| 中宁县| 垫江县| 社旗县| 澄城县| 安徽省| 台东市| 康马县| 久治县| 阿合奇县| 抚顺市| 霍州市| 凉城县| 鄯善县| 安丘市| 伊春市| 石林| 柳江县| 饶平县| 阳城县| 林州市| 双鸭山市| 澄迈县| 柏乡县| 绍兴市| 云和县| 泰来县| 广丰县| 桂阳县| 舒兰市| 扶风县| 金堂县|