版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JavaWeb開(kāi)發(fā)從入門到實(shí)踐JavaWebDevelopmentFromIntroductiontoPractice會(huì)話及會(huì)話技術(shù)Chap06提綱會(huì)話及會(huì)話技術(shù)本章介紹會(huì)話管理的基本概念,包括Cookie和Session對(duì)象的作用。Cookie用于在客戶端保存數(shù)據(jù),而Session則在服務(wù)器端管理用戶會(huì)話信息。6.1會(huì)話概述6.2Cookie對(duì)象6.3Session對(duì)象6.4本章小結(jié)6.1會(huì)話概述用戶A用戶B會(huì)話:可以區(qū)分用戶A和用戶B的數(shù)據(jù)6.2Cookie對(duì)象6.2.1什么是Cookie6.2.2CookieAPI6.2.1什么是CookieCookie是一種將會(huì)話過(guò)程中的數(shù)據(jù)保存在客戶端瀏覽器,方便客戶端和服務(wù)器更好地進(jìn)行交互的會(huì)話技術(shù)。圖
6-1
客戶端瀏覽器和服務(wù)器之間傳遞Cookie的過(guò)程6.2.1什么是Cookie用戶第一次訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)在響應(yīng)消息頭中增加Set-Cookie頭字段,并將用戶信息以Cookie的形式發(fā)送給瀏覽器。Set-Cookie:JSESSIONID=15816FE518E1586EDC5253512F7C272E;Path=/cookieSessionPro;JSESSIONID表示Cookie的屬性名,15816FE518E1586EDC5253512F7C272E表示Cookie的屬性值;Path表示Cookie的路徑屬性。瀏覽器接收到Cookie消息后,會(huì)將它保存在瀏覽器的緩沖區(qū)中,當(dāng)瀏覽器再次訪問(wèn)服務(wù)器時(shí),就會(huì)把用戶信息以Cookie形式發(fā)送給Web服務(wù)器Cookie:JSESSIONID=15816FE518E1586EDC5253512F7C272E6.2.2CookieAPI通過(guò)Java提供的CookieAPI,開(kāi)發(fā)人員可以很方便地創(chuàng)建、發(fā)送、讀取和使用Cookie。構(gòu)造方法Cookiecookie=newCookie("username","Charles");resp.addCookie(cookie);通過(guò)HttpServletResponse對(duì)象通過(guò)HttpServletRequest對(duì)象Cookie[]cookies=request.getCookies();6.2.2CookieAPICookie類的常用方法表
6-1
Cookie類的常用方法及其描述方法描述Cookie(Stringname,Stringvalue)Cookie的構(gòu)造方法,例如,Cookiecookie=newCookie("subject","JavaWeb");voidsetMaxAge(intexpiry)設(shè)置Cookie過(guò)期時(shí)間,以秒為單位intgetMaxAge()獲取Cookie過(guò)期時(shí)間,以秒為單位StringgetName()獲取Cookie的名稱voidsetValue(Stringvalue)設(shè)置Cookie的值StringgetValue()獲取Cookie的值voidsetComment(Stringcomment)設(shè)置Cookie注釋StringgetComment()獲取Cookie注釋voidsetDomain(Stringpattern)設(shè)置Cookie的域名,例如,如果設(shè)置為“.”,則所有以“.”結(jié)尾的域名都可以訪問(wèn)該Cookie。參數(shù)第一個(gè)字符必須是“.”voidsetPath(Stringuri)設(shè)置Cookie的使用路徑。例如,“/admin/”表示只有uri為“/admin”的程序可以訪問(wèn)該Cooike。參數(shù)最后一個(gè)字符必須是“/”voidsetHttpOnly(booleanflag)參數(shù)設(shè)置為“true”,表示只能通過(guò)http訪問(wèn)。voidsetSecure(booleanflag)是否加密后傳輸協(xié)議。參數(shù)設(shè)置為true時(shí),只有https請(qǐng)求連接時(shí)才會(huì)把Cookie發(fā)送給服務(wù)器,而http不行,但是服務(wù)器是可以發(fā)送給瀏覽器。6.2.2CookieAPI案例:創(chuàng)建一個(gè)Cookie對(duì)象添加到響應(yīng)對(duì)象中,并獲取Cookie數(shù)組@WebServlet("/cookieServlet")
publicclassCookieServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
PrintWriterout=resp.getWriter();
Cookiecookie=newCookie("username","Charles");//創(chuàng)建Cookie
resp.addCookie(cookie);//cookie對(duì)象添加到響應(yīng)對(duì)象中
Cookie[]cookies=req.getCookies();//獲取Cookie
for(Cookiec:cookies){//遍歷Cookie
out.println(c.getName()+":"+c.getValue()+"<br/>");
}
}
}6.2.2CookieAPI圖
6-2瀏覽器端Cookie數(shù)據(jù)圖
6-3查看請(qǐng)求頭6.2.2CookieAPI刪除Cookie:Cookie對(duì)象在客戶端的存活時(shí)間可以通過(guò)setMaxAge()方法設(shè)置@WebServlet("/cookieDelServlet")publicclassCookieDelServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
PrintWriterout=resp.getWriter();
Cookiecookie=newCookie("username","");//創(chuàng)建一個(gè)值為空字串符的Cookie對(duì)象
cookie.setMaxAge(0);//設(shè)置Cookie的有效期為0
resp.addCookie(cookie);//將Cookie對(duì)象添加到響應(yīng)對(duì)象中
}
}6.2.2CookieAPI圖
6-4在瀏覽器中查看Cookie數(shù)據(jù)6.3Session對(duì)象6.3.1Session的概念6.3.2SessionAPI6.3.3Session中禁用Cookie6.3.4Session中生命周期6.3.5Session的有效期6.3.6Session與Cookie的區(qū)別6.3.1Session的概念Session(會(huì)話)是指使用HttpSession對(duì)象實(shí)現(xiàn)會(huì)話跟蹤的服務(wù)器端技術(shù)。Session對(duì)象存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。圖
6-5
HttpSession會(huì)話管理示意圖6.3.1Session的概念SessionServlet.java@WebServlet("/sessionServlet")publicclassSessionServletextendsHttpServlet{ @Override protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ req.getRequestDispatcher("session.jsp").forward(req,resp);//轉(zhuǎn)發(fā)到session.jsp頁(yè)面 }}session.jsp<body>
會(huì)話測(cè)試:<br/>
SessionId=<%=session.getId()%>
</body>案例:創(chuàng)建一個(gè)頁(yè)面session.jsp用來(lái)獲取SessionID6.3.1Session的概念圖
6-6查看存儲(chǔ)在瀏覽器客戶端Cookie中的SessionIDCookie對(duì)象中名稱為“JSESSIONID”的值和服務(wù)器響應(yīng)瀏覽器客戶端的SessionId是一致的瀏覽器地址欄輸入:“http://localhost:8080/cookieSessionPro/sessionServlet”6.3.2SessionAPI在JavaWeb應(yīng)用程序中,JavaSession對(duì)象的創(chuàng)建和管理都是由Servlet容器來(lái)完成的,軟件開(kāi)發(fā)人員只需使用容器提供的API來(lái)訪問(wèn)和操作Session對(duì)象即可。表
6-2
HttpSession類的常用方法及其描述方法描述StringgetId()獲取SessionIdvoidsetAttribute(Stringname,Objectvalue)設(shè)置Session屬性O(shè)bjectgetAttribute(Stringname)獲取Session屬性的值,如果屬性名不存在,則返回nullEnumerationgetAttributeNames()獲取Session所有的屬性voidremoveAttribute(Stringname)移除Session屬性voidsetMaxInactiveInterval(intinterval)設(shè)置超時(shí)時(shí)間,以秒為單位intgetMaxInactiveInterval()獲取超時(shí)時(shí)間,以秒為單位LonggetCreationTime()獲取Session的創(chuàng)建時(shí)間voidinvalidate()銷毀Session對(duì)象booleanisNew()Session是否是新創(chuàng)建的SessionlonggetLastAccessedTime()客戶端最后訪問(wèn)的時(shí)間6.3.2SessionAPI案例:在服務(wù)器端存入國(guó)產(chǎn)操作系統(tǒng)麒麟信安,然后在瀏覽器讀取Session數(shù)據(jù)@WebServlet("/sessionAPIServlet")
publicclassSessionAPIServletextendsHttpServlet{
@Override
protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
HttpSessionsession=req.getSession();
session.setAttribute("os","麒麟信安");
req.getRequestDispatcher("SessionExample.jsp").forward(req,resp);
}
}<body>
OS:<%=session.getAttribute("os")%></body>SessionAPIServlet.javaSessionExample.jsp6.3.2SessionAPI圖
6-7瀏覽器查看Session數(shù)據(jù)6.3.3Session中禁用Cookie禁用方法有以下二種方法:在web目錄下創(chuàng)建META-INF文件夾(跟WEB-INF文件夾是同級(jí)目錄),在該文件夾中創(chuàng)建context.xml文件<?xmlversion="1.0"encoding="UTF-8"?>
<Contextcookies="false"path="/cookieSessionPro">
</Context>修改Tomcat全局的conf/context.xml文件<?xmlversion="1.0"encoding="UTF-8"?><Contextcookies="false"> ...
</Context>6.3.4Session中生命周期Session的生命周期是:創(chuàng)建→使用→銷毀。Session對(duì)象的創(chuàng)建Session對(duì)象的銷毀當(dāng)客戶端第一次訪問(wèn)服務(wù)器時(shí),服務(wù)器為每個(gè)瀏覽器創(chuàng)建不同SessionID。在服務(wù)器端使用request.getSession()或者request.getSession(true)方法來(lái)獲取Session對(duì)象。Session對(duì)象的銷毀有以下三種方式。關(guān)閉瀏覽器或服務(wù)器卸載了當(dāng)前的WEB應(yīng)用調(diào)用HttpSession的invalidate()方法超出了Session的最大有效時(shí)間客戶端第一次訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)生成SessionID,并將SessionID存入到Cookie中??蛻舳嗽俅伟l(fā)送請(qǐng)求時(shí),會(huì)將SessionID傳送給服務(wù)器。服務(wù)器對(duì)比客戶端發(fā)送過(guò)來(lái)的SessionID和保存在服務(wù)器端的SessionID,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度工業(yè)廢棄物處理職業(yè)健康與環(huán)保防護(hù)協(xié)議3篇
- 2024年船舶改裝設(shè)計(jì)及建造合同3篇
- 保安監(jiān)控系統(tǒng)招投標(biāo)文件目錄
- 糖果店店員崗位協(xié)議
- 隧道工程機(jī)械租賃合同
- 醫(yī)療緊急事件應(yīng)對(duì)策略
- 2025年度KTV聯(lián)盟商家品牌合作推廣與權(quán)益交換協(xié)議3篇
- 醫(yī)療器械招投標(biāo)文件封條格式
- 航空航天場(chǎng)地暖施工合同模板
- 2024年防腐刷漆項(xiàng)目承包合同3篇
- GB 5768.4-2017道路交通標(biāo)志和標(biāo)線第4部分:作業(yè)區(qū)
- ISO IEC20000-2018信息技術(shù)服務(wù)管理體系程序文件
- 廢氣治理設(shè)施運(yùn)行管理規(guī)程
- 出租廠房建筑和設(shè)施安全檢查表
- 項(xiàng)目驗(yàn)收交接單(運(yùn)維部)
- 園林綠化養(yǎng)護(hù)組織實(shí)施方案實(shí)施計(jì)劃書(shū)
- 關(guān)于父子關(guān)系證明
- 管理線性規(guī)劃入門形考答案
- 個(gè)人勞動(dòng)仲裁委托書(shū)(5篇)
- GB∕T 18387-2017 電動(dòng)車輛的電磁場(chǎng)發(fā)射強(qiáng)度的限值和測(cè)量方法
- (完整版)混凝土公司組織機(jī)構(gòu)框圖
評(píng)論
0/150
提交評(píng)論