• cookie


          案例:记住上一次访问时间
            1. 需求:
                1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。
                2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

            2. 分析:
                1. 可以采用Cookie来完成
                2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie
                    1. 有:不是第一次访问
                        1. 响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20
                        2. 写回Cookie:lastTime=2018年6月10日11:50:01
                    2. 没有:是第一次访问
                        1. 响应数据:您好,欢迎您首次访问
                        2. 写回Cookie:lastTime=2018年6月10日11:50:00

    注意点:

    1. 获取PrintWriter流之前必须设置编码

     response.setContentType("text/html;charset=utf-8");

    2. cookie中不能包含特殊字符,比如空格,所以要进行编码以及解码

     1 package cn.itcast.web.servlet;
     2 
     3 import javax.servlet.ServletException;
     4 import javax.servlet.annotation.WebServlet;
     5 import javax.servlet.http.Cookie;
     6 import javax.servlet.http.HttpServlet;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 import java.io.IOException;
    10 import java.net.URLDecoder;
    11 import java.net.URLEncoder;
    12 import java.text.SimpleDateFormat;
    13 import java.util.Date;
    14 
    15 @WebServlet("/cookieServlet")
    16 public class CookieServlet extends HttpServlet {
    17     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    18         // 获取PrintWriter流之前设置响应的消息体的数据格式以及编码
    19         response.setHeader("content-type", "text/html;charset=utf-8");
    20 
    21         // 1.获取所有Cookie
    22         Cookie[] cookies = request.getCookies();
    23         boolean flag = false;   // 没有叫做lastTime名称的cookie
    24 
    25         // 2.遍历cookie数组
    26         if (cookies != null) {
    27             for (Cookie cookie : cookies) {
    28                 if (cookie.getName().equals("lastTime")) {  // 不是第一次访问
    29                     flag = true;
    30 
    31                     String value = cookie.getValue();
    32                     value = URLDecoder.decode(value, "utf-8");  // URL解码
    33                     response.getWriter().write("欢迎回来,您上次的访问时间是" + value);
    34 
    35                     // 将cookie的value值改为此次登录的时间,重新发送cookie
    36                     Date date = new Date();
    37                     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    38                     String str_date = sdf.format(date);
    39                     str_date = URLEncoder.encode(str_date, "utf-8");    // URL编码,因为str_date中包含空格,如果不进行URL编码将会报错
    40                     cookie.setValue(str_date);
    41                     cookie.setMaxAge(30 * 24 *60 *60); // 设置cookie的存活时间
    42                     response.addCookie(cookie);
    43                     break;
    44                 }
    45             }
    46         }
    47 
    48         if (cookies == null || flag == false){  // 第一次访问
    49             response.getWriter().write("<h1>您好,欢迎您首次访问<h1>");
    50 
    51             Date date = new Date();
    52             SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    53             String str_date = sdf.format(date);
    54             str_date = URLEncoder.encode(str_date, "utf-8");
    55             Cookie cookie = new Cookie("lastTime", str_date);
    56             cookie.setMaxAge(30 * 24 *60 *60);
    57             response.addCookie(cookie);
    58         }
    59 
    60 
    61     }
    62 
    63     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    64         this.doPost(request, response);
    65     }
    66 }
  • 相关阅读:
    react native
    快速幂模板
    Java异常归纳
    Java环境变量配置
    过滤器
    cookie和session页面随机数和防止重复提交
    javabean&el&jstl
    servlet&jsp
    Tomcat和Servlet入门
    网络编程
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/11615958.html
Copyright © 2020-2023  润新知