• 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>
  • 相关阅读:
    Qt下如何修改文件的时间(全平台修改)
    Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)
    VirtualTreeView控件
    VS2013设置release版本可调试
    工程脚本插件方案
    decode函数
    一个消息调度框架构建
    数据访问模式之Repository模式
    Angular.js Services
    OpenCascade简介
  • 原文地址:https://www.cnblogs.com/storml/p/7493519.html
Copyright © 2020-2023  润新知