Java Web 開(kāi)發(fā)從入門到實(shí)踐課件 第6章 - 會(huì)話及會(huì)話技術(shù)_第1頁(yè)
Java Web 開(kāi)發(fā)從入門到實(shí)踐課件 第6章 - 會(huì)話及會(huì)話技術(shù)_第2頁(yè)
Java Web 開(kāi)發(fā)從入門到實(shí)踐課件 第6章 - 會(huì)話及會(huì)話技術(shù)_第3頁(yè)
Java Web 開(kāi)發(fā)從入門到實(shí)踐課件 第6章 - 會(huì)話及會(huì)話技術(shù)_第4頁(yè)
Java Web 開(kāi)發(fā)從入門到實(shí)踐課件 第6章 - 會(huì)話及會(huì)話技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論