JavaWeb及其框架技術 課件 5章 會話及會話技術_第1頁
JavaWeb及其框架技術 課件 5章 會話及會話技術_第2頁
JavaWeb及其框架技術 課件 5章 會話及會話技術_第3頁
JavaWeb及其框架技術 課件 5章 會話及會話技術_第4頁
JavaWeb及其框架技術 課件 5章 會話及會話技術_第5頁
已閱讀5頁,還剩18頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章會話及會話技術第5章Servlet的會話技術學習目標了解什么是Cookie,掌握Cookie對象了解什么是Session,掌握Session對象學會使用Session對象改進用戶管理系統了解URL重寫技術案例兩個人打電話兩個人你問我答的過程就是一個會話5.1 會話跟蹤技術的概述思考

Web應用中的會話是什么樣呢?一個用戶在某網站上的整個購物過程就是一個會話Web應用中的會話過程類似于生活中的打電話過程,它指的是一個客戶端(瀏覽器)與Web服務器之間連續發生的一系列請求和響應過程。在Servlet技術中,提供了兩個用于保存會話數據的對象,分別是Cookie和Session。5.1 會話跟蹤技術的概述當用戶通過瀏覽器訪問服務器,需要服務器跟蹤用戶的狀態時,這種跟蹤用戶信息的技術就稱為會話跟蹤技術。為什么需要對會話進行跟蹤呢?這是由于Web應用采用無狀態的HTTP協議進行通信,HTTP的無狀態意味著:用戶使用HTTP協議不能夠記憶用戶自己和相應的請求

,服務器把每一次請求都看作新的請求,總是根據當時提交的信息來給出響應,如此一來,服務器就無法跟蹤用戶的會話,它會將會話中涉及的多次請求都看作新的請求,而不能將這些請求與用戶關聯起來,也就無法支持用戶會話過程的實現。因此,要想實現用戶的會話,就需要采用某種會話跟蹤技術,記住用戶和其請求,將單個無狀態的HTTP請求轉換為整體有狀態的Web應用。會話跟蹤技術的原理比較簡單,當服務器收到客戶端第一次發來的請求時,服務器會生成一個唯一的標識符,即會話ID,客戶端隨后發送的每一次請求中都必須包含這個會話ID。服務器可以通過該會話ID來識別用戶的請求屬于哪一個會話,這樣就把用戶和該用戶的一系列請求關聯起來,從而實現用戶會話跟蹤。在實際應用中,我們既可以選擇手動生成并管理會話ID(采用Cookie技術、URL重寫技術或隱藏表單字段技術來實現),也可以采用Servlet提供的會話跟蹤API,自動生成并管理會話ID。手動實現會話跟蹤技術,面臨大量重復性工作,而且容易出錯。為此,Servlet提供的自動會話跟蹤方法,HttpSession接口,就非常地方便,利用此接口可以讓程序員在更高層次解決問題,從而擺脫底層的復雜操作。Servlet容器負責HttpSession接口的實現,在需要進行會話跟蹤的時候,通過調用此接口中相應的方法,Servlet容器會創建會話對象,通過會話對象HttpSession的相應方法可以存取用戶的會話ID的相關信息,從而實現會話跟蹤。HttpSession底層是基于Cookie技術或URL重寫技術實現的,若客戶端支持Cookie技術,則優先使用Cookie進行會話跟蹤,并不需要直接操縱Cookie對象,若用戶端禁用Cookie技術,則自動使用URL重寫技術來進行跟蹤。什么是Cookie?通過會員卡可以看到用戶的信息用戶的消費積分會累計到會員卡會員卡用戶Cookie的功能類似于這張會員卡。5.2.1 Cookie5.2 瀏覽器會話Cookie技術看一下Cookie在瀏覽器和服務器之間的傳輸服務器第一次訪問Server1,不存在Cookie瀏覽器Cookie存放區第一次訪問Server1第1次響應,setCookie:name=value將Server1的Cookie保存起來后續訪問Server1:Cookie:name=value后續訪問Server1,直接獲取Cookie第一次訪問服務器,服務器會增加Set-Cookie頭字段,將Cookie信息發送給瀏覽器,并保存在客戶端。當后續訪問服務器時,會在請求消息中將用戶信息以Cookie的形式發送給服務器,從而使服務器端分辨出當前請求是由哪個用戶發出的。【結論】5.2.1Cookie在ServletAPI中提供了javax.servlet.http.Cookie類,它包含了生成Cookie信息和提取Cookie信息各個屬性的方法。1、構造方法publicCookie(java.lang.Stringname,java.lang.Stringvalue)Cookie的名稱Cookie的值注意:Cookie一旦被創建,它的名稱就不能更改。5.2.2CookieAPI方法聲明功能描述StringgetName()用于返回Cookie的名稱voidsetValue(String

newValue)用于為Cookie設置一個新的值StringgetValue()用于返回Cookie的值voidsetMaxAge(int

expiry)用于設置Cookie在瀏覽器客戶機上保持有效的秒數intgetMaxAge()用于返回Cookie在瀏覽器客戶機上保持有效的秒數voidsetPath(String

uri)用于設置該Cookie項的有效目錄路徑StringgetPath()用于返回該Cookie項的有效目錄路徑voidsetDomain(String

pattern)用于設置該Cookie項的有效域StringgetDomain()用于返回該Cookie項的有效域voidsetVersion(int

v)用于設置該Cookie項采用的協議版本intgetVersion()用于返回該Cookie項采用的協議版本voidsetComment(String

purpose)用于設置該Cookie項的注解部分StringgetComment()用于返回該Cookie項的注解部分voidsetSecure(boolean

flag)用于設置該Cookie項是否只能使用安全的協議傳送booleangetSecure()用于返回該Cookie項是否只能使用安全的協議傳送這兩個方法用于設置和返回Cookie在瀏覽器上保持有效的秒數。如果設置的值為一個正整數時,瀏覽器會將Cookie信息保存在本地硬盤中。如果設置值為負整數時,瀏覽器會將Cookie信息保存在的緩存中,當瀏覽器關閉時,Cookie信息會被刪除。如果設置值為0時,則表示通知瀏覽器立即刪除這個Cookie信息。默認情況下,Max-Age屬性的值是-1。2、Cookie類的常用方法這兩個方法是針對Cookie的Path屬性。如果創建的某個Cookie對象沒有設置Path屬性,那么該Cookie只對當前訪問路徑所屬的目錄及其子目錄有效。如果想讓某個Cookie項對站點的所有目錄下的訪問路徑都有效,應調用Cookie對象的setPath()方法將其Path屬性設置為“/”。這兩個方法都是用來設置或獲取Cookie的Domain屬性。具體來說,setDomain方法用于設置Cookie的Domain屬性,而getDomain方法用于獲取Cookie的Domain屬性。默認情況下,Domain屬性的值為當前主機名,瀏覽器在訪問當前主機下的資源時,都會將Cookie信息回送給服務器。5.2.2CookieAPI2任務目標:具體實現步驟(詳見教材【5-1】)實現步驟:

1創建Servlet配置映射信息,查看運行效果學會如何使用Cookie技術實現顯示用戶上次的訪問時間的功能5.2.3 Cookie實例

顯示用戶上次訪問時間5.2.4 Cookie的原理分析當瀏覽器訪問Web服務器時,Servlet容器就會創建一個Session對象和ID屬性,其中,Session對象就相當于會員信息,ID就相當于會員卡號。當客戶端后續訪問服務器時,只要將標識號傳遞給服務器,服務器就能判斷出該請求是哪個客戶端發送的,從而選擇與之對應的Session對象為其服務。通常情況下,Session是借助Cookie技術來傳遞ID屬性的。5.3.1 Session技術5.3 服務器會話Session技術5.3.2 Session的工作原理獲取Session如何獲取Session對象?HttpServletRequest定義了用于獲取Session對象的getSession()方法publicHttpSessiongetSession(booleancreate)publicHttpSessiongetSession()5.3.2HttpSessionAPI方法聲明功能描述StringgetId()用于返回與當前HttpSession對象關聯的會話標識號longgetCreationTime()返回Session創建的時間,這個時間是創建Session的時間與1970年1月1日00:00:00之間時間差的毫秒表示形式longgetLastAccessedTime()返回客戶端最后一次發送與Session相關請求的時間,這個時間是發送請求的時間與1970年1月1日00:00:00之間時間差的毫秒表示形式voidsetMaxInactiveInterval(intinterval)用于設置當前HttpSession對象可空閑的以秒為單位的最長時間,也就是修改當前會話的默認超時間隔booleanisNew()判斷當前HttpSession對象是否是新創建的voidinvalidate()用于強制使Session對象無效ServletContextgetServletContext()用于返回當前HttpSession對象所屬于的WEB應用程序對象,即代表當前WEB應用程序的ServletContext對象voidsetAttribite(Stringname,Objectvalue)用于將一個對象與一個名稱關聯后存儲到當前的HttpSession對象中StringgetAttribute()用于從當前HttpSession對象中返回指定名稱的屬性對象voidremoveAttribute(Stringname)用于從當前HttpSession對象中刪除指定名稱的屬性5.3.3HttpSessionAPI什么是Session?在程序中,Web服務器無法判斷當前客戶端是否已經離開或關閉,還會保留與之對應的Session對象。But,Session對象還會占用內存,導致Web服務器崩潰怎么辦?Web服務器采用了超時管理來判斷客戶端是否存在!在一定時間內,如果某個客戶端一直沒有請求訪問,那么,Web服務器會認為客戶端已經結束請求,將對應的Session對象變成垃圾對象,并進行清除。反之,Web服務器會創建一個新的Session對象,并分配一個新的ID屬性。5.3.4 廢棄當前會話被動方式——設置會話“超時限制”

機制<session-config> <session-timeout>30</session-timeout></session-config>在會話過程中,會話的有效時間可以在web.xml文件中設置,其默認值由Servlet容器定義。在<tomcat安裝目錄>\conf\web.xml文件中,可以找到如下一段配置信息:超時的時間值,單位為分鐘,Tomcat的默認超時間隔為30分鐘注意:如果將<session-timeout>元素中的時間值設置成0或負數,則表示會話永不超時!5.3.4 廢棄當前會話主動方式——調用invalidate()方法大多數情況下,服務器無法判斷會話是否結束,所以我們主要采用被動方式來結束會話。但在有些情況下,我們明確知道會話可以結束了,比如用戶點擊了“關閉連接”按鈕,這時用戶也是可以主動結束會話的,這就需要調用invalidate()方法來執行。5.4URL重寫技術前面我們看到,瀏覽器會話Cookie技術需要客戶端的瀏覽器開啟Cookie,這樣才能在瀏覽器端保存用戶信息,實現跟蹤,就算是Session技術也同樣需要Cookie來保存SessionID才能實現跟蹤。如果瀏覽器關閉Cookie,那么服務器端就無法通過Cookie保存用戶會話信息,也就無法實現用戶跟蹤了。考慮到這種情況可能出現,Servlet規范引入了URL重寫機制來保存用戶的會話信息。所謂URL重寫,就是指將Session的會話標識號(會話ID)以參數的形式附加在超鏈接的URL地址后面,服務器可以使用傳遞過來的會話ID來識別和跟蹤用戶。方法描述StringencodeRedirectURL(Stringurl)對sendRedirect方法中使用的指定的URL進行編碼,若編碼不是必需的,則返回未改變的URLStringencodeURL(Stringurl)對包含session會話ID的指定URL進行編碼,若編碼不是必需的,則返回的未改變的URL至于如何

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論