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

下載本文檔

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

文檔簡介

JavaWeb開發(fā)從入門到實踐JavaWebDevelopmentFromIntroductiontoPractice會話及會話技術Chap06提綱會話及會話技術本章介紹會話管理的基本概念,包括Cookie和Session對象的作用。Cookie用于在客戶端保存數據,而Session則在服務器端管理用戶會話信息。6.1會話概述6.2Cookie對象6.3Session對象6.4本章小結6.1會話概述用戶A用戶B會話:可以區(qū)分用戶A和用戶B的數據6.2Cookie對象6.2.1什么是Cookie6.2.2CookieAPI6.2.1什么是CookieCookie是一種將會話過程中的數據保存在客戶端瀏覽器,方便客戶端和服務器更好地進行交互的會話技術。圖

6-1

客戶端瀏覽器和服務器之間傳遞Cookie的過程6.2.1什么是Cookie用戶第一次訪問服務器時,服務器會在響應消息頭中增加Set-Cookie頭字段,并將用戶信息以Cookie的形式發(fā)送給瀏覽器。Set-Cookie:JSESSIONID=15816FE518E1586EDC5253512F7C272E;Path=/cookieSessionPro;JSESSIONID表示Cookie的屬性名,15816FE518E1586EDC5253512F7C272E表示Cookie的屬性值;Path表示Cookie的路徑屬性。瀏覽器接收到Cookie消息后,會將它保存在瀏覽器的緩沖區(qū)中,當瀏覽器再次訪問服務器時,就會把用戶信息以Cookie形式發(fā)送給Web服務器Cookie:JSESSIONID=15816FE518E1586EDC5253512F7C272E6.2.2CookieAPI通過Java提供的CookieAPI,開發(fā)人員可以很方便地創(chuàng)建、發(fā)送、讀取和使用Cookie。構造方法Cookiecookie=newCookie("username","Charles");resp.addCookie(cookie);通過HttpServletResponse對象通過HttpServletRequest對象Cookie[]cookies=request.getCookies();6.2.2CookieAPICookie類的常用方法表

6-1

Cookie類的常用方法及其描述方法描述Cookie(Stringname,Stringvalue)Cookie的構造方法,例如,Cookiecookie=newCookie("subject","JavaWeb");voidsetMaxAge(intexpiry)設置Cookie過期時間,以秒為單位intgetMaxAge()獲取Cookie過期時間,以秒為單位StringgetName()獲取Cookie的名稱voidsetValue(Stringvalue)設置Cookie的值StringgetValue()獲取Cookie的值voidsetComment(Stringcomment)設置Cookie注釋StringgetComment()獲取Cookie注釋voidsetDomain(Stringpattern)設置Cookie的域名,例如,如果設置為“.”,則所有以“.”結尾的域名都可以訪問該Cookie。參數第一個字符必須是“.”voidsetPath(Stringuri)設置Cookie的使用路徑。例如,“/admin/”表示只有uri為“/admin”的程序可以訪問該Cooike。參數最后一個字符必須是“/”voidsetHttpOnly(booleanflag)參數設置為“true”,表示只能通過http訪問。voidsetSecure(booleanflag)是否加密后傳輸協(xié)議。參數設置為true時,只有https請求連接時才會把Cookie發(fā)送給服務器,而http不行,但是服務器是可以發(fā)送給瀏覽器。6.2.2CookieAPI案例:創(chuàng)建一個Cookie對象添加到響應對象中,并獲取Cookie數組@WebServlet("/cookieServlet")

publicclassCookieServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

PrintWriterout=resp.getWriter();

Cookiecookie=newCookie("username","Charles");//創(chuàng)建Cookie

resp.addCookie(cookie);//cookie對象添加到響應對象中

Cookie[]cookies=req.getCookies();//獲取Cookie

for(Cookiec:cookies){//遍歷Cookie

out.println(c.getName()+":"+c.getValue()+"<br/>");

}

}

}6.2.2CookieAPI圖

6-2瀏覽器端Cookie數據圖

6-3查看請求頭6.2.2CookieAPI刪除Cookie:Cookie對象在客戶端的存活時間可以通過setMaxAge()方法設置@WebServlet("/cookieDelServlet")publicclassCookieDelServletextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

PrintWriterout=resp.getWriter();

Cookiecookie=newCookie("username","");//創(chuàng)建一個值為空字串符的Cookie對象

cookie.setMaxAge(0);//設置Cookie的有效期為0

resp.addCookie(cookie);//將Cookie對象添加到響應對象中

}

}6.2.2CookieAPI圖

6-4在瀏覽器中查看Cookie數據6.3Session對象6.3.1Session的概念6.3.2SessionAPI6.3.3Session中禁用Cookie6.3.4Session中生命周期6.3.5Session的有效期6.3.6Session與Cookie的區(qū)別6.3.1Session的概念Session(會話)是指使用HttpSession對象實現會話跟蹤的服務器端技術。Session對象存儲特定用戶會話所需的屬性及配置信息。圖

6-5

HttpSession會話管理示意圖6.3.1Session的概念SessionServlet.java@WebServlet("/sessionServlet")publicclassSessionServletextendsHttpServlet{ @Override protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{ req.getRequestDispatcher("session.jsp").forward(req,resp);//轉發(fā)到session.jsp頁面 }}session.jsp<body>

會話測試:<br/>

SessionId=<%=session.getId()%>

</body>案例:創(chuàng)建一個頁面session.jsp用來獲取SessionID6.3.1Session的概念圖

6-6查看存儲在瀏覽器客戶端Cookie中的SessionIDCookie對象中名稱為“JSESSIONID”的值和服務器響應瀏覽器客戶端的SessionId是一致的瀏覽器地址欄輸入:“http://localhost:8080/cookieSessionPro/sessionServlet”6.3.2SessionAPI在JavaWeb應用程序中,JavaSession對象的創(chuàng)建和管理都是由Servlet容器來完成的,軟件開發(fā)人員只需使用容器提供的API來訪問和操作Session對象即可。表

6-2

HttpSession類的常用方法及其描述方法描述StringgetId()獲取SessionIdvoidsetAttribute(Stringname,Objectvalue)設置Session屬性ObjectgetAttribute(Stringname)獲取Session屬性的值,如果屬性名不存在,則返回nullEnumerationgetAttributeNames()獲取Session所有的屬性voidremoveAttribute(Stringname)移除Session屬性voidsetMaxInactiveInterval(intinterval)設置超時時間,以秒為單位intgetMaxInactiveInterval()獲取超時時間,以秒為單位LonggetCreationTime()獲取Session的創(chuàng)建時間voidinvalidate()銷毀Session對象booleanisNew()Session是否是新創(chuàng)建的SessionlonggetLastAccessedTime()客戶端最后訪問的時間6.3.2SessionAPI案例:在服務器端存入國產操作系統(tǒng)麒麟信安,然后在瀏覽器讀取Session數據@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數據6.3.3Session中禁用Cookie禁用方法有以下二種方法:在web目錄下創(chuàng)建META-INF文件夾(跟WEB-INF文件夾是同級目錄),在該文件夾中創(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對象的創(chuàng)建Session對象的銷毀當客戶端第一次訪問服務器時,服務器為每個瀏覽器創(chuàng)建不同SessionID。在服務器端使用request.getSession()或者request.getSession(true)方法來獲取Session對象。Session對象的銷毀有以下三種方式。關閉瀏覽器或服務器卸載了當前的WEB應用調用HttpSession的invalidate()方法超出了Session的最大有效時間客戶端第一次訪問服務器時,服務器會生成SessionID,并將SessionID存入到Cookie中。客戶端再次發(fā)送請求時,會將SessionID傳送給服務器。服務器對比客戶端發(fā)送過來的SessionID和保存在服務器端的SessionID,

溫馨提示

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

評論

0/150

提交評論