版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章
會話及會話技術(shù)《JavaWeb程序設(shè)計(jì)任務(wù)教程(第3版)(AIGC版)》學(xué)習(xí)目標(biāo)/Target了解會話,能夠簡述什么是會話以及常見發(fā)兩種會話技術(shù)
了解Cookie,能夠簡述Cookie的作用以及Cookie的工作原理了解Session,能夠簡述Session的作用以及Session保存用戶信息的原理掌握Cookie類的使用,能夠簡述Cookie類的常用方法,并基于Cookie對象封裝和管理Cookie數(shù)據(jù)掌握HttpSession接口的使用,能夠簡述HttpSession的常用方法,能夠使用HttpSession對象管理Session數(shù)據(jù)章節(jié)概述/Summary當(dāng)用戶通過瀏覽器訪問Web應(yīng)用時,通常情況下,服務(wù)器需要對用戶的狀態(tài)進(jìn)行跟蹤。例如,用戶在網(wǎng)站結(jié)算商品時,Web服務(wù)器必須根據(jù)請求用戶的身份找到該用戶所購買的商品。在Web開發(fā)中,服務(wù)器跟蹤用戶信息的技術(shù)稱為會話技術(shù),本章將針對會話及會話技術(shù)進(jìn)行詳細(xì)講解。目錄/Contents0102會話概述Cookie03Session會話概述4.14.1
會話概述先定一個小目標(biāo)!
先定一個小目標(biāo)!了解會話,能夠簡述什么是會話以及常見兩種的會話技術(shù)4.1
會話概述什么是會話?4.1
會話概述會話可以類比于日常中的電話通話,從接通到掛斷,其間所有互動構(gòu)成了一次完整的會話過程。在Web應(yīng)用中,會話則是指客戶端與Web服務(wù)器之間持續(xù)進(jìn)行的一系列請求與響應(yīng)交互的總和。例如,用戶在購物網(wǎng)站上從瀏覽商品到最終完成購買的整個流程,這便構(gòu)成了一次典型的Web會話。4.1
會話概述用戶在購物過程中通常會發(fā)送多個請求,例如在網(wǎng)頁中選擇某個商品、加入購物車、再返回網(wǎng)頁選擇其他商品、結(jié)算付款等。這些請求和服務(wù)器返回的響應(yīng)會產(chǎn)生許多數(shù)據(jù),例如用戶的身份信息、瀏覽記錄、購物車內(nèi)容等。為了使服務(wù)器能夠識別來自同一個用戶的請求,并在多個請求間共享這些數(shù)據(jù),服務(wù)器需要保存和跟蹤用戶的狀態(tài)。4.1
會話概述由于HTTP是一個基于請求與響應(yīng)模式的無狀態(tài)協(xié)議,意味著HTTP本身不保存任何關(guān)于用戶會話狀態(tài)的信息。每次客戶端向服務(wù)器發(fā)送請求時,都是獨(dú)立且不關(guān)聯(lián)先前請求的,所以實(shí)現(xiàn)客戶端與服務(wù)器交互時保存和跟蹤用戶的狀態(tài)需要使用其他方案解決,其中會話技術(shù)就是最常見的解決方案之一。會話技術(shù)是用于維護(hù)客戶端和服務(wù)器之間在同一次會話中的數(shù)據(jù)狀態(tài)的技術(shù),常用的會話技術(shù)包括Cookie和Session兩種。Cookie4.24.2
CookieCookie是一種客戶端會話技術(shù),它能夠在客戶端保存少量數(shù)據(jù),例如用戶狀態(tài)、身份信息等。服務(wù)器通過設(shè)置Cookie來向客戶端發(fā)送這些信息,并在后續(xù)的請求中通過讀取客戶端發(fā)送的Cookie來識別用戶。下面對Cookie進(jìn)行詳細(xì)講解。4.2.1
Cookie簡介先定一個小目標(biāo)!
先定一個小目標(biāo)!了解Cookie,能夠簡述Cookie的作用以及Cookie的工作原理4.2.1
Cookie簡介在Web應(yīng)用中,Cookie的功能類似于會員卡,當(dāng)用戶通過瀏覽器訪問Web服務(wù)器時,可以在服務(wù)器創(chuàng)建Cookie,并將用戶狀態(tài)等信息保存在Cookie中發(fā)送給客戶端。之后瀏覽器在向同一服務(wù)器發(fā)送請求時,會通過HTTP請求頭自動附帶這些Cookie,以便服務(wù)器對瀏覽器做出正確識別和響應(yīng)。服務(wù)器向客戶端發(fā)送Cookie時,會在HTTP響應(yīng)頭字段中增加一個Set-Cookie字段用于設(shè)置Cookie。在Set-Cookie響應(yīng)頭字段中設(shè)置Cookie的具體示例如下。Set-Cookie:user=itcast;Path=/;4.2.1
Cookie簡介當(dāng)瀏覽器再次訪問服務(wù)器時,會在HTTP請求頭字段中增加一個Cookie字段來攜帶之前服務(wù)器設(shè)置的Cookie。4.2.2
Cookie類先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握Cookie類的使用,能夠簡述Cookie的常用方法,并基于Cookie對象封裝和管理Cookie數(shù)據(jù)4.2.2
Cookie類為了封裝和管理客戶端與服務(wù)器之間的Cookie信息,Servlet引入了Cookie類。通過該類可以在服務(wù)器端創(chuàng)建Cookie對象,設(shè)置并獲取Cookie的屬性等。Cookie類提供了構(gòu)造方法用于創(chuàng)建Cookie對象,該構(gòu)造方法的聲明如下。publicCookie(Stringname,Stringvalue)創(chuàng)建好Cookie對象后,當(dāng)需要向客戶端發(fā)送Cookie時,可以使用HttpServletResponse對象的addCookie()方法,添加一個Cookie到響應(yīng)中;當(dāng)服務(wù)器接收來自客戶端的請求時,可以使用HttpServletRequest對象的getCookies()方法,獲取一個包含所有Cookie的數(shù)組。4.2.2
Cookie類Cookie類提供了一系列用于操作Cookie屬性的方法,例如獲取Cookie的名稱,為Cookie設(shè)置有效時間,設(shè)置Cookie的有效路徑等。Cookie類的常用方法如下。方法描述StringgetName()用于獲取Cookie的名稱voidsetValue(StringnewValue)用于為Cookie設(shè)置一個新的值StringgetValue()用于獲取Cookie的值voidsetMaxAge(intexpiry)用于設(shè)置Cookie在瀏覽器中保存的有效秒數(shù)intgetMaxAge()用于獲取Cookie在瀏覽器中保存的有效秒數(shù)voidsetPath(Stringuri)用于設(shè)置Cookie的有效路徑StringgetPath()用于獲取Cookie的有效路徑4.2.2
Cookie類Cookie的有效時間即Cookie在瀏覽器中保存的有效秒數(shù)。默認(rèn)情況下,Cookie的有效時間是一次會話范圍內(nèi),也就是說當(dāng)瀏覽器關(guān)閉時,Cookie會自動刪除。如果想要手動設(shè)置Cookie的有效時間,可以使用setMaxAge()方法進(jìn)行設(shè)置。當(dāng)設(shè)置的值為正數(shù)時,表示從設(shè)置的時間開始計(jì)算,在沒有超過設(shè)置的秒數(shù)之前,Cookie都是有效的;當(dāng)設(shè)置的值為負(fù)數(shù)時,大多數(shù)瀏覽器會將其視為會話Cookie,即在瀏覽器關(guān)閉時刪除Cookie;當(dāng)設(shè)置的值為0時,瀏覽器會立即刪除這個Cookie。1.Cookie的有效時間4.2.2
Cookie類在訪問互聯(lián)網(wǎng)資源時,通常不會每次請求都攜帶所有的Cookie,而是希望在訪問不同資源時根據(jù)需要攜帶對應(yīng)的Cookie,為此可以通過setPath()方法設(shè)置Cookie的有效路徑,從而限制該Cookie只在特定路徑下發(fā)送給服務(wù)器。2.Cookie的有效路徑4.2.2
Cookie類下面通過一個案例演示Cookie的使用。(1)創(chuàng)建項(xiàng)目在IDEA中創(chuàng)建MavenWeb項(xiàng)目,在項(xiàng)目的pom.xml文件中導(dǎo)入Servlet的依賴。(2)創(chuàng)建Servlet類創(chuàng)建CookieServlet01類繼承HttpServlet類,在重寫的service()方法中獲取請求中的所有Cookie,輸出名稱包含“cookie”的Cookie信息,同時,創(chuàng)建兩個名稱包含“cookie”的Cookie,分別為它們設(shè)置不同的有效路徑和不同的有效時間,然后將這兩個Cookie添加到HttpServletResponse對象中進(jìn)行響應(yīng)。4.2.2
Cookie類(3)測試效果啟動項(xiàng)目,在確保開發(fā)者工具打開的前提下通過地址http://localhost:8080/chapter04/cookie01訪問CookieServlet01,訪問后在瀏覽器的開發(fā)者工具中查看響應(yīng)頭信息。4.2.2
Cookie類(3)測試效果確保距離訪問SendCookieServlet01未超過15秒的情況下再次訪問http://localhost:8080/chapter04/cookie01,查看IDEA控制臺的輸出結(jié)果。4.2.2
Cookie類間隔15秒之后,再次訪問http://localhost:8080/chapter04/cookie01,查看IDEA控制臺的輸出結(jié)果。4.2.2
Cookie類通過地址http://localhost:8080/chapter04/cookie02訪問CookieServlet02,控制臺輸出信息。4.2.2
Cookie類關(guān)閉瀏覽器,但不關(guān)閉程序,通過地址http://localhost:8080/chapter04/cookie02訪問CookieServlet02,控制臺輸出信息。AI編程任務(wù):使用Cookie記錄上次訪問時間當(dāng)用戶訪問某些Web應(yīng)用時,經(jīng)常會顯示出該用戶上一次的訪問時間。例如,QQ登錄成功后,會顯示用戶上次的登錄時間。本任務(wù)要求使用Cookie記錄上次訪問時間,并在用戶訪問頁面時進(jìn)行顯示。為了提高編程效率,本任務(wù)基于AI編程助手實(shí)現(xiàn)。Session4.34.3
SessionCookie技術(shù)可以將用戶的信息保存在各自的瀏覽器中,并且可以在多次請求下實(shí)現(xiàn)數(shù)據(jù)的共享。但是,瀏覽器對Cookie存儲的數(shù)據(jù)量有限制,同時一些敏感數(shù)據(jù)存儲在客戶端,存在被篡改或竊取等安全風(fēng)險。為了克服Cookie的這些局限性,Servlet技術(shù)引入了Session,Session可以將用戶會話數(shù)據(jù)存儲在服務(wù)器,本節(jié)將對Session進(jìn)行詳細(xì)講解。4.3.1
Session簡介先定一個小目標(biāo)!
先定一個小目標(biāo)!了解Session,能夠簡述Session的作用以及Session保存用戶信息的原理4.3.1
Session簡介通常顧客去酒店辦理入住時,酒店前臺人員會給顧客分配一個房間,并給顧客一把對應(yīng)房間的鑰匙,顧客只需拿著這把鑰匙就可以訪問和使用這個房間,并且鑰匙在顧客整個入住期間有效,直到退房。Session技術(shù)的工作原理和辦理酒店入住的流程類似,當(dāng)瀏覽器訪問Web服務(wù)器時,Servlet容器就會創(chuàng)建一個Session對象和ID屬性,Session對象就相當(dāng)于辦理酒店入住后分配的房間,ID就相當(dāng)于房間的鑰匙。當(dāng)后端后續(xù)訪問服務(wù)器時,只要將ID傳遞給服務(wù)器,服務(wù)器就能判斷出該請求是哪個客戶端發(fā)送的,從而選擇與之對應(yīng)的Session對象為其服務(wù)。4.3.1
Session簡介Session指的是用戶與應(yīng)用程序之間的一系列交互,這些交互被組織成一個邏輯上的會話。4.3.2
HttpSession接口先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握HttpSession接口,能夠簡述HttpSession的常用方法,能夠使用HttpSession對象管理Session數(shù)據(jù)4.3.2
HttpSession接口為了有效管理Web會話,ServletAPI提供了HttpSession接口,并由Servlet容器提供了HttpSession接口的默認(rèn)實(shí)現(xiàn),以提供Session管理機(jī)制。HttpSession對象可以通過HttpServletRequest接口的getSession()方法獲取,該方法有兩種重載形式,具體如下。publicHttpSessiongetSession(booleancreate)publicHttpSessiongetSession()4.3.2
HttpSession接口HttpSession接口常用的方法如下。方法描述StringgetId()用于獲取當(dāng)前HttpSession的唯一標(biāo)識符,這個標(biāo)識符在會話創(chuàng)建時由服務(wù)器生成isNew()用于獲取當(dāng)前請求是否是與該會話關(guān)聯(lián)的第一個請求。如果是,則返回true;否則返回falsevoidsetMaxInactiveInterval(intinterval)用于設(shè)置當(dāng)前HttpSession可空閑的以秒為單位的最長時間,也就是修改當(dāng)前會話的默認(rèn)超時時間voidinvalidate()用于強(qiáng)制使當(dāng)前HttpSession對象無效4.3.2
HttpSession接口HttpSession接口常用的方法如下。方法描述ServletContextgetServletContext()用于返回當(dāng)前HttpSession對象所屬的Web應(yīng)用程序?qū)ο髒oidsetAttribute(Stringname,Objectvalue)用于在當(dāng)前HttpSession對象中存儲一個屬性數(shù)據(jù),其中參數(shù)name為屬性名稱,value為對象類型的屬性值StringgetAttribute(Stringname)用于從當(dāng)前HttpSession對象中獲取指定名稱的屬性值voidremoveAttribute(Stringname)用于從當(dāng)前HttpSession對象中刪除指定名稱的屬性4.3.2
HttpSession接口Session數(shù)據(jù)在服務(wù)器中通常并不永久存儲,這是因?yàn)槿绻鸋ttpSession對象一昧地創(chuàng)建而不釋放,服務(wù)器內(nèi)存資源會被長期占用,影響系統(tǒng)性能。所以通常情況下,服務(wù)器會設(shè)置默認(rèn)的Session超時時間,這個超時時間定義了Session在沒有任何活動的情況下可以保持多久。一旦Session超過了這個時間限制,服務(wù)器就會自動將其標(biāo)記為過期,并在后續(xù)的垃圾回收過程中清除這些過期的Session數(shù)據(jù)。Tomcat默認(rèn)的Session超時時間是30分鐘,這個時間是在Tomcat安裝目錄下的conf/web.xml文件中指定的,具體如下。<session-config><session-timeout>30</session-timeout></session-config>4.3.2
HttpSession接口除了通過web.xml配置Session的超時時間,還可以在Servlet程序中通過HttpSession接口提供的setMaxInactiveInterval()方法設(shè)置當(dāng)前會話的超時時間,該方法的參數(shù)為超時時間,單位為秒。例如,設(shè)置超時時間為60分鐘的示例代碼如下。session.setMaxInactiveInterval(60*60);4.3.2
HttpSession接口下面通過一個案例來演示Session的使用。本案例模擬用戶去銀行開戶,并且存款取款的過程。使用HttpSession的標(biāo)識符模擬銀行卡號,當(dāng)用戶存款或取款時,服務(wù)器會根據(jù)該HttpSession的標(biāo)識符定位用戶,并為用戶提供存款取款操作。(1)創(chuàng)建Servlet類在項(xiàng)目中創(chuàng)建DepositServlet類繼承HttpServlet類,在重寫的service()方法中通過HttpSession對象存儲用戶的存款金額,并輸出用戶的銀行卡號和余額。需要注意的是,該類中需要判斷該用戶是否是第一次存款,若不是第一次存款,則余額為本次存款金額加存款前的余額。4.3.2
HttpSession接口(2)測試效果啟動項(xiàng)目,以存款200元為例,在瀏覽器中通過地址http://localhost:8080/chapter04/deposit?amoun
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年重慶幼兒師范高等??茖W(xué)校輔導(dǎo)員考試筆試真題匯編附答案
- 計(jì)算機(jī)板級維修工崗前任職考核試卷含答案
- 化纖聚合工變更管理強(qiáng)化考核試卷含答案
- 水生物檢疫檢驗(yàn)員班組協(xié)作知識考核試卷含答案
- 真空制鹽工安全培訓(xùn)水平考核試卷含答案
- 鍋爐設(shè)備試壓工安全宣傳模擬考核試卷含答案
- 品酒師安全專項(xiàng)競賽考核試卷含答案
- 絕緣材料制造工創(chuàng)新實(shí)踐評優(yōu)考核試卷含答案
- 漆器髹漆工操作規(guī)范知識考核試卷含答案
- 2024年湖南冶金職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試筆試題庫附答案
- 2024年全國職業(yè)院校技能大賽(節(jié)水系統(tǒng)安裝與維護(hù)賽項(xiàng))考試題庫(含答案)
- GB/T 4706.9-2024家用和類似用途電器的安全第9部分:剃須刀、電理發(fā)剪及類似器具的特殊要求
- 2019年急性腦梗死出血轉(zhuǎn)化專家共識解讀
- 電力工程有限公司管理制度制度范本
- 科研倫理與學(xué)術(shù)規(guī)范-課后作業(yè)答案
- 安全防范系統(tǒng)安裝維護(hù)員題庫
- mbd技術(shù)體系在航空制造中的應(yīng)用
- 苗木育苗方式
- 通信原理-脈沖編碼調(diào)制(PCM)
- 省直單位公費(fèi)醫(yī)療管理辦法實(shí)施細(xì)則
- 附錄 阿特拉斯空壓機(jī)操作手冊
評論
0/150
提交評論