




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
任務5.2實現新聞發(fā)布系統用戶登錄功能主講:
新聞發(fā)布系統—Servlet技術實現任務描述知識準備總結與練習目錄CONTENTS任務描述01Servlet實現用戶注冊實現新聞發(fā)布系統用戶注冊功能之后,用戶注冊成功后可以進行登錄,登錄成功后管理員用戶可以進入后臺系統對新聞類別、新聞等進行相關管理。如果用戶未登錄則不能進入系統后臺進行相關管理工作。新聞發(fā)布系統后臺首頁需要在用戶登錄時對用戶的登錄狀態(tài)進行跟蹤記錄,防止未登錄的用戶直接進入系統后臺。王小康帶領開發(fā)團隊一起來實現用戶登錄功能。知識準備02會話概述Cookie技術Session技術會話兩個人你問我答的過程就是一個會話會話思考
Web應用中的會話是什么樣呢?一個用戶在某網站上的整個購物過程就是一個會話在Web應用程序中,用戶通過瀏覽器與服務器進行交互,因HTTP本身是無狀態(tài)的,當瀏覽器發(fā)送HTTP請求到服務器時,服務器會響應客戶端的請求,但當同一個瀏覽器再次發(fā)送請求到該服務器時,服務器并不知道它使用的是哪一個瀏覽器,即HTTP請求無法保存用戶狀態(tài)。為了使這種跨請求的用戶狀態(tài)得到保持,Servlet技術引入了會話的概念。一個用戶打開一個瀏覽器,在同一個Web應用程序上,單擊多個超鏈接,訪問多個Web資源,然后關閉瀏覽器,整個過程稱為一個會話。會話概述會話的作用包括保存用戶數據和實現數據共享。會話技術可以保存用戶在會話過程中所產生的數據,如用戶登錄信息、購物車內容等。會話技術也可以讓用戶在同一個會話中實現數據的共享,即用戶在同一會話中的多個請求可以訪問到相同的數據。Servlet會話主要通過Cookie和Session兩種技術實現,Cookie為客戶端會話技術,Session為服務器端會話技術。會話概述Cookie技術是一種在客戶端存儲用戶會話數據的方法,它允許服務器在用戶的瀏覽器中保存少量信息,并在后續(xù)的請求中檢索這些信息。Cookie主要用于識別用戶會話、跟蹤用戶行為、存儲用戶偏好等,其特點是Cookie數據存儲在客戶端,減小了服務器的存儲壓力;客戶端可以清除Cookie;安全性相對較差。Cookie技術Cookie技術什么是Cookie?通過會員卡可以看到用戶的信息用戶的消費積分會累計到會員卡會員卡用戶Cookie的功能類似于這張會員卡1.Cookie的工作原理當用戶通過瀏覽器訪問Web服務器時,服務器會給客戶端發(fā)送一些信息,這些信息都保存在Cookie中。當瀏覽器保存Cookie后,再次訪問服務器時,會在HTTP請求頭中將這個Cookie回傳給服務器。服務器向客戶端發(fā)送Cookie時,會在HTTP響應頭字段中增加Set-Cookie響應頭字段,例如Set-Cookie:name=sdcet;Path=/,其中name表示Cookie的名稱、sdcet表示Cookie的值、Path表示Cookie的屬性。Cookie技術Cookie在瀏覽器和服務器之間的傳輸過程如圖5-15所示。Cookie技術當用戶第一次訪問服務器時,服務器會在響應消息中增加Set-Cookie頭字段,將Cookie信息發(fā)送給瀏覽器,并保存在客戶端的緩沖區(qū)中。當瀏覽器后續(xù)訪問服務器時,會在請求消息中將用戶信息以Cookie的形式發(fā)送給服務器,從而使服務器端分辨出當前請求是由哪個用戶發(fā)出的。2.Cookie常用方法javax.servlet.http.Cookie類中提供了帶參構造方法及一系列獲取或者設置Cookie的方法,如表5-8所示。Cookie技術Cookie技術表5-8
Cookie常用方法返回值類型方法描述無Cookie(Stringname,Stringvalue)構造方法,通過鍵值對創(chuàng)建一個新的Cookie對象intgetMaxAge()用于獲取指定Cookie的最大有效時間,以秒為單位。默認情況下取值為-1,表示該Cookie保留到瀏覽器關閉為止StringgetName()用于獲取Cookie的名稱StringgetPath()用于獲取Cookie的有效路徑StringgetValue()用于獲取Cookie的值voidsetMaxAge(intexpiry)用于設置Cookie的最大有效時間,以秒為單位。取值為正時,表示Cookie在經過指定時間后過期。取值為負時,表示Cookie不會被持久存儲,在退出Web瀏覽器時被刪除。取值為0時,表示刪除該CookievoidsetPath(Stringuri)用于指定Cookie的路徑voidsetValue(StringnewValue)用于設置Cookie的值Cookie技術(1)Cookie的創(chuàng)建使用javax.servlet.http.Cookie類的構造方法創(chuàng)建Cookie對象。構造方法接收兩個字符串參數:name和value,分別代表Cookie的名稱和值。Cookie必須以鍵值對的形式存在,Cookie一旦創(chuàng)建,它的名稱就不能再更改,Cookie的值創(chuàng)建后允許被修改。publicCookie(java.lang.Stringname,java.lang.Stringvalue)Cookie的名稱Cookie的值注意:Cookie一旦被創(chuàng)建,它的名稱就不能更改。(2)設置Cookie在瀏覽器上的存在時間使用setMaxAge(intexpiry)方法設置Cookie的存在時間,參數expiry應是一個整數。正值表示Cookie的存在時間(以秒為單位),是Cookie將要存在的最大時間,而不是Cookie現在的存在時間,瀏覽器會將Cookie信息保存在本地磁盤中。負值表示瀏覽器會將Cookie信息保存在瀏覽器的緩存中,當瀏覽器關閉時,Cookie將會被刪除。0表示瀏覽器立即刪除該Cookie。Cookie技術(3)設置Cookie的有效目錄路徑setPath(Stringuri)用于設置Cookie的有效目錄路徑,如果創(chuàng)建的某個Cookie對象沒有設置Path屬性,那么該Cookie對象只對當前訪問路徑所屬的目錄及子目錄有效。如果需要某個Cookie對站點的所有目錄下的訪問路徑均有效,應調用Cookie對象的setPath()方法,將其Path屬性設置為/。Cookie技術Cookie技術3.Cookie對象的使用(1)發(fā)送Cookie到客戶端在Servlet中,通過HttpServletResponse對象的addCookie()方法將Cookie添加到HTTP響應中,瀏覽器在接收到響應時會保存這些Cookie。(2)獲取客戶端Cookie當瀏覽器再次向服務器發(fā)送請求時,會自動將之前保存的Cookie包含在HTTP請求頭中發(fā)送給服務器。在Servlet中,通過HttpServletRequest對象的getCookies()方法獲取一個Cookie數組,該數組包含了請求中所有的Cookie對象。遍歷Cookie數組,通過Cookie對象的getName()和getValue()方法獲取Cookie的名稱和值,并根據需要處理Cookie中的數據。Cookie技術【例5-9】在Servlet中發(fā)送并獲取Cookie信息。案例技能點:Cookie創(chuàng)建、發(fā)送、獲取與解析。實現步驟如下。①
在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為CookieTest。②
使用注解配置CookieTest,在doPost()方法中創(chuàng)建一個名為username的Cookie,設置Cookie的相關屬性,發(fā)送Cookie、獲取所有Cookie并解析Cookie,代碼示例如下。Cookie技術CookieusernameCookie=newCookie("username","admin");//創(chuàng)建一個CookieusernameCookie.setMaxAge(30*60);//設置存在時間為30分鐘usernameCookie.setPath("/");//設置路徑response.addCookie(usernameCookie);//發(fā)送CookieCookie[]cookies=request.getCookies();//獲取所有Cookie//解析Cookieif(cookies!=null){for(Cookiecookie:cookies){if("username".equals(cookie.getName())){Stringusername=cookie.getValue();System.out.println("username:"+username);//控制臺輸出用戶名}}}Cookie技術③啟動Tomcat服務器,在瀏覽器地址欄輸入http://localhost:8080/ServletProj_war_exploded//CookieTest后按Enter鍵。控制臺輸出結果為“username:admin”。Cookie技術4.Cookie的缺點(1)在HTTP請求中,Cookie是明文傳遞的,容易泄露用戶信息,安全性不高。(2)客戶端瀏覽器保存Cookie的數量和長度是有限制的,并且瀏覽器可以禁用Cookie,一旦瀏覽器設置禁用Cookie,Cookie將無法正常工作。(3)Cookie對象中只能設置文本(字符串)信息。Session技術Session技術是一種用于在服務器端跟蹤用戶會話狀態(tài)的重要機制。它允許服務器在用戶的整個訪問過程中保持用戶狀態(tài),并在不同的頁面和請求之間共享數據。當瀏覽器訪問Web服務器的資源時,服務器可以為每個瀏覽器創(chuàng)建一個Session對象,每個瀏覽器獨占一個Session對象。由于每個瀏覽器獨占一個Session,所以用戶在訪問服務器的資源時,可以把數據保存在各自的Session中。利用Session,服務器可以把一個用戶的所有請求聯系在一起,并記住用戶的操作狀態(tài)。Session技術1.Session的運行機制當用戶第一次連接到服務器時,服務器為其創(chuàng)建一個Session,并分配給用戶一個唯一的標識(SessionID),以后用戶每次提交請求都要將標識一起提交。服務器根據標識找出特定的Session,用這個Session記錄用戶的狀態(tài)。Session的運行機制如圖5-16所示。Session技術在JavaServletAPI中,javax.servlet.http.HttpSession接口用于創(chuàng)建HTTP客戶端和HTTP服務器之間的會話,由Servlet容器提供這個接口的實現。當一個會話開始的時候,Servlet容器就創(chuàng)建一個HttpSession對象,在HttpSession對象中存放客戶端的狀態(tài)信息。Servlet容器為HttpSession對象分配一個唯一的SessionID,將其作為Cookie(或者作為URL的一部分)發(fā)送給客戶端,客戶端的瀏覽器在內存中保存這個Cookie。當客戶端再次發(fā)送HTTP請求時,瀏覽器將Cookie隨請求一起發(fā)送,Servlet容器從請求對象中讀取SessionID,然后根據SessionID找到對應的HttpSession對象,從而得到客戶端的狀態(tài)信息。Session技術2.HttpSession接口常用方法在Servlet中要得到一個HttpSession對象,可以調用HttpServletRequest接口的getSession()或getSession(boolean)方法,該方法有兩種重載形式,如表5-9所示。在JSP頁面中,默認情況下存在的隱式對象session即HttpSession類型的對象。方法名描述publicHttpSessiongetSession(booleancreate)返回與此次請求相關聯的HttpSession對象,如果不存在,則根據參數creat的值(true或false)來決定是創(chuàng)建一個新的HttpSession對象返回還是返回nullSession技術方法名描述publicHttpSessiongetSession()返回與此次請求相關聯的HttpSession對象,如果不存在,則創(chuàng)建一個新的HttpSession對象返回Session技術Session對象也是一種域對象,它可以通過getAttribute(Stringname)、removeAttribute(Stringname)、setAttribute(Stringname,Objectvalue)等方法對屬性進行操作,進而實現會話中請求之間的數據通信和數據共享。Session技術HttpSession接口的常用方法如表5-10所示。表5-10
HttpSession接口的常用方法方法名描述getAttribute(Stringname)根據屬性名返回設定的值getAttributeNames()返回一個包含所有屬性名的Enumeration對象removeAttribute(Stringname)從HttpSession對象中移除指定的屬性setAttribute(Stringname,Objectvalue)在HttpSession對象中設置屬性getId()返回包含分配給Session的唯一標識符的字符串getCreationTime()返回Session創(chuàng)建的時間getServletContext()返回Session所屬的ServletContext對象getLastAccessedTime()返回客戶端上一次發(fā)送與此Session關聯的請求的時間getMaxInactiveInterval()返回在無任何操作的情況下Session失效的時間,以秒為單位invalidate()使會話失效isNew()判斷會話是否是新的并返回判斷結果setMaxInactiveInterval(intinterval)指定在無任何操作的情況下Session失效的時間,以秒為單位。負數表示Session永遠不會失效Session技術3.Session的生命周期Session具有一定的生命周期。(1)Session生效用戶每一次訪問服務器都會創(chuàng)建Session。值得注意的是,只有訪問JSP、Servlet等程序時才會創(chuàng)建Session。此外,還可以調用HttpServletRequest接口的getSession()方法強制創(chuàng)建Session。僅訪問HTML、IMAGE等靜態(tài)資源不會創(chuàng)建Session。Session技術(2)Session失效HttpSession對象在以下3種情況下會失效。①Session自動過期。Web服務器采用“超時限制”判斷客戶端是否還在繼續(xù)訪問,在一定時間內,如果某個客戶端一直沒有訪問,Web服務器就會認為該客戶端已經結束請求,并將該客戶端會話所對應的HttpSession對象變成垃圾對象,等待垃圾收集器將其從內存中徹底清除。Session技術自定義Session失效時間的方法有3種。第一種方法是在項目的web.xml文件中配置Session的失效時間,具體代碼如下。<session-config><session-timeout>30</session-timeout></session-config>【注】web.xml文件中配置的Session失效時間默認單位是分鐘。第二種方法是在Servlet程序中手動設置Session的失效時間,具體代碼如下。session.setMaxInactiveInterval(30*60);//單位為秒,設置為-1表示永不過期第三種方法是找到Tomcat安裝目錄下的web.xml文件,在如下配置信息中設置時間。<session-config><session-timeout>30</session-timeout></session-config>Session技術【注】Tomcat安裝目錄下的web.xml文件中配置的Session失效時間默認單位是分鐘。如果將時間設置為0或負數,則表示會話永不超時,此文件對站點內所有的Web應用程序均起作用。Session技術②
手動銷毀Session。HttpSession接口中的session.invalidate()方法用以強制Session對象失效。③Web服務器關閉或者應用被卸載。當Web服務器關閉或者應用從Web服務器被卸載之后,HttpSession對象即失效。Session技術【例5-10】用Session實現用戶訪問控制功能。案例技能點:使用Cookie將用戶信息存儲在客戶端瀏覽器、使用Session實現會話跟蹤、請求轉發(fā)與重定向跳轉頁面。實現步驟如下。①
分析用戶訪問控制流程,實現登錄功能。當用戶訪問網站首頁時,首先判斷用戶是否已登錄。如果用戶已登錄則正常訪問首頁,并顯示用戶登錄信息和退出登錄的鏈接。否則進入登錄頁面,驗證登錄信息正確后進入首頁。用戶訪問控制流程如圖5-17所示。Session技術
用戶訪問控制流程Session技術
②
在項目ServletProj的src目錄下創(chuàng)建cn.sdcet.entity包,在包內新建一個封裝用戶信息的User類,代碼示例如下。packagecn.sdcet.entity;publicclassUser{
privateStringusername;
privateStringpassword;
publicUser(){
super();
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}}Session技術③在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為IndexServlet,配置并編寫代碼實現顯示網站首頁的功能,代碼片斷示例如下。@WebServlet("/IndexServlet")publicclassIndexServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();HttpSessionsession=request.getSession();Useruser=(User)session.getAttribute("user");if(user==null){out.print("您還沒有登錄,請<ahref='/ServletProj_war_exploded/loginPlus.jsp'>登錄</a>");}else{out.print("您已經登錄,歡迎您:"+user.getUsername()+"<br>");out.print("<ahref='/ServletProj_war_exploded/LogoutServlet'>單擊此處退出</a>");Cookiecookie=newCookie("JSESSIONID",session.getId());cookie.setMaxAge(60*30);cookie.setPath("/");response.addCookie(cookie);}}Session技術④
在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為LoginServlet,配置并編寫代碼,處理用戶登錄,代碼片斷示例如下。@WebServlet("/LoginServlet")publicclassLoginServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType("text/html;charset=utf-8");PrintWriterout=response.getWriter();Stringusername=request.getParameter("username");Stringpassword=request.getParameter("password");if("admin".equals(username)&&"admin".equals(password)){Useruser=newUser();user.setUsername(username);user.setPassword(password);CookiecookieName=newCookie("username",username);cookieName.setMaxAge(30);cookieName.setPath("/");response.addCookie(cookieName);request.getSession().setAttribute("user",user);response.sendRedirect("/ServletProj_war_exploded/IndexServlet");}else{out.print("用戶名或者密碼錯誤!登錄失??!");}}Session技術⑤
在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為LogoutServlet,配置并編寫代碼,實現用戶注銷功能,代碼示例如下。@WebServlet("/LogoutServlet")publicclassLogoutServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{request.getSession().removeAttribute("user");response.sendRedirect("/ServletProj_war_exploded/IndexServlet");}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}Session技術⑥
在項目ServletProj的web目錄下創(chuàng)建登錄頁面loginPlus.jsp,代碼示例如下。<html><head><title>登錄</title></head><%Stringcookievalue=null;Cookie[]cookies=request.getCookies();for(inti=0;cookies!=null&&i<cookies.length;i++){if("username".equals(cookies[i].getName())){cookievalue=cookies[i].getValue();}}%><body><formmethod="post"action="LoginServlet">
用戶名<input
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)康復治療技術試題庫+參考答案
- 制作書本合同范本
- 中醫(yī)診所勞務合同范本
- 一本好書讓我改變自己超越自己演講稿
- 借款合同范本 質押
- 買賣制合同范本
- 一封家書范文30篇
- 《集結號》電影觀后感范文
- 團隊管理服務合同范本
- 公司承攬合同范本
- access上機練習題題庫
- 2023年茂名市人民醫(yī)院護士招聘考試歷年高頻考點試題含答案
- 山東教育出版社(魯教版)八年級化學全一冊教學課件
- 《外貿風險管理》完整全套課件
- 公路水運工程施工企業(yè)主要負責人和安全生產管理人員大綱和題庫
- 榜樣7航天追夢人王亞平事跡介紹PPT英雄航天員王亞平事跡介紹PPT課件(帶內容)
- 物理word版2023山東高考答題卡涂準考證號和條形碼
- 人教版《道德與法治》三年級下冊全冊全套課件
- GB/T 32294-2015鍛制承插焊和螺紋活接頭
- 部編人教版三年級語文下冊《快樂讀書吧》精美課件
- 建筑力學 李前程 第一章 緒 論
評論
0/150
提交評論