Servlet(3):Cookie

 概念

Cookie是存储在客户端计算机上的文本文件,并保留了各种跟踪信息。Java Servlet支持HTTP Cookie。

识别返回用户包括三个步骤:

(1) 服务器脚本向浏览器发送一组Cookie。例如:姓名、年龄或识别号码等。

(2) 浏览器将这些信息存储在本地计算机上,以备将来使用。

(3) 当下一次浏览器向Web服务器发送任何请求时,浏览器会把这些Cookie信息发送到服务器,服务器将使用这些信息来识别用户。

注意事项
(1) 创建一个Cookie对象(注意要Encode / 无论是名字还是值,都不应该包含这字符: [ ] ( ) = , " / ? @ : ;)

Cookie name = new Cookie("name", URLEncoder.encode(request.getParameter("name"), "UTF-8"));

(2) 设置Cookie的有效时间(当设置0时意思为删除Cookie)

cookie.setMaxAge(60*60*24);
cookie.setMaxAge(0);

例子

(1) 登录成功后,[Welcome.Servlet]Response了两个Cookie: userId, password给浏览器

(2) 浏览器点[返回],发送Request给[Login.Servlet]并且把Cookie信息又发送到服务器

(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)
     */
    @Override
    protected 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);
            // 创建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)
     */
    @Override
    protected 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>
原文地址:https://www.cnblogs.com/storml/p/7493519.html