Servlet(3):Cookie
?概念
Cookie是存儲在客戶端計算機上的文本文件,并保留了各種跟蹤信息。Java Servlet支持HTTP Cookie。
識別返回用戶包括三個步驟:
(1) 服務(wù)器腳本向瀏覽器發(fā)送一組Cookie。例如:姓名、年齡或識別號碼等。
(2) 瀏覽器將這些信息存儲在本地計算機上,以備將來使用。
(3) 當(dāng)下一次瀏覽器向Web服務(wù)器發(fā)送任何請求時,瀏覽器會把這些Cookie信息發(fā)送到服務(wù)器,服務(wù)器將使用這些信息來識別用戶。
?
注意事項
(1) 創(chuàng)建一個Cookie對象(注意要Encode / 無論是名字還是值,都不應(yīng)該包含這字符: [ ] ( ) = , " / ? @ : ;)
(2) 設(shè)置Cookie的有效時間(當(dāng)設(shè)置0時意思為刪除Cookie)
cookie.setMaxAge(60*60*24); cookie.setMaxAge(0);?
例子
(1) 登錄成功后,[Welcome.Servlet]Response了兩個Cookie: userId, password給瀏覽器
(2) 瀏覽器點[返回],發(fā)送Request給[Login.Servlet]并且把Cookie信息又發(fā)送到服務(wù)器
(3) 最終[Login.Servlet]Response了Cookie的一覽信息
1 package com.servlettest.cookie; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.servlet.ServletException; 7 import javax.servlet.annotation.WebServlet; 8 import javax.servlet.http.Cookie; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 /** 14 * Servlet implementation class Login 15 */ 16 @WebServlet("/login") 17 public class Login extends HttpServlet { 18 19 private static final long serialVersionUID = 1L; 20 21 /** 22 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 23 */ 24 @Override 25 protected void doGet(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 28 response.setContentType("text/html"); 29 30 request.setCharacterEncoding("UTF-8"); 31 response.setCharacterEncoding("UTF-8"); 32 33 // 獲取Session 34 Cookie[] cookies = request.getCookies(); 35 36 PrintWriter out = response.getWriter(); 37 out.println("<!DOCTYPE html>"); 38 out.println("<html>"); 39 out.println("<head>"); 40 out.println("<title>Login Page</title>"); 41 out.println("</head>"); 42 out.println("<body>"); 43 if (cookies != null && cookies.length > 0) { 44 out.println("<p>Cookies:</p>"); 45 out.println("<table border=\"1\">"); 46 out.println( 47 "<tr><td>Name</td><td>Comment</td><td>Domain</td><td>MaxAge</td><td>Path</td><td>Value</td><td>Version</td></tr>"); 48 for (int i = 0; i < cookies.length; i++) { 49 out.println("<tr>"); 50 out.println("<td>" + cookies[i].getName() + "</td>"); 51 out.println("<td>" + cookies[i].getComment() + "</td>"); 52 out.println("<td>" + cookies[i].getDomain() + "</td>"); 53 out.println("<td>" + cookies[i].getMaxAge() + "</td>"); 54 out.println("<td>" + cookies[i].getPath() + "</td>"); 55 out.println("<td>" + cookies[i].getValue() + "</td>"); 56 out.println("<td>" + cookies[i].getVersion() + "</td>"); 57 out.println("</tr>"); 58 } 59 out.println("</table>"); 60 out.println("<br/>"); 61 } 62 out.println("<form action=\"welcome\" method=\"POST\">"); 63 out.println("帳號: <input type=\"text\" name=\"userId\"/><br/>"); 64 out.println("密碼: <input type=\"password\" name=\"password\"/><br/>"); 65 out.println("<input type=\"submit\" value=\"提交\"/>"); 66 out.println("</body>"); 67 out.println("</html>"); 68 } 69 70 /** 71 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 72 */ 73 @Override 74 protected void doPost(HttpServletRequest request, HttpServletResponse response) 75 throws ServletException, IOException { 76 doGet(request, response); 77 } 78 } package com.servlettest.cookie;import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class Welcome*/ @WebServlet("/welcome") public class Welcome extends HttpServlet {private static final long serialVersionUID = 1L;private static final int VALID_TIME = 60;/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html");request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");String userId = request.getParameter("userId");String password = request.getParameter("password");PrintWriter out = response.getWriter();out.println("<!DOCTYPE html>");out.println("<html>");out.println("<head>");out.println("<title>Login Page</title>");out.println("</head>");out.println("<body>");if ("123".equals(password)) {out.println("歡迎您, " + userId);// 創(chuàng)建Ssession addCookie(userId, password, response);} else {out.println("您的帳號或密碼錯誤!");}out.println("<a href = \"login\">返回</a>");out.println("</body>");out.println("</html>");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}private void addCookie(String userId, String password, HttpServletResponse response) throws IOException {Cookie userIdCookie = new Cookie("userId", URLEncoder.encode(userId, "UTF-8"));Cookie passwordCookie = new Cookie("password", URLEncoder.encode(password, "UTF-8"));userIdCookie.setMaxAge(VALID_TIME);passwordCookie.setMaxAge(VALID_TIME);response.addCookie(userIdCookie);response.addCookie(passwordCookie);} } <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://xmlns.jcp.org/xml/ns/javaee"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"id="WebApp_ID" version="3.1"><welcome-file-list><welcome-file>login</welcome-file></welcome-file-list> </web-app>?
轉(zhuǎn)載于:https://www.cnblogs.com/storml/p/7493519.html
總結(jié)
以上是生活随笔為你收集整理的Servlet(3):Cookie的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Deep Learning(深度学习)学
- 下一篇: 查看Linux系统软硬件信息