动态网站开发讲课笔记08:Cookie案例演示

Cookie案例演示 - 显示用户上次访问时间

1、创建Web项目

  • Web项目 - CookieDemo
    在这里插入图片描述
    在这里插入图片描述

2、修改Artifact名称,重新部署项目

  • 在项目结构窗口里修改Artifact名称
    在这里插入图片描述
  • 编辑服务器配置,重新部署项目,URL变成http://localhost:8080/CookieDemo/
    在这里插入图片描述
  • 修改首页
    在这里插入图片描述
  • 启动服务器,查看效果
    在这里插入图片描述

3、创建LastAccessServlet类

  • 创建net.hdl.servlet包,然后在里面创建LastAccessServlet
    在这里插入图片描述
package net.hdl.servlet;

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;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 功能:显示用户上次访问时间
 * 作者:胡德兰
 * 日期:2023年04月21日
 */
@WebServlet(name = "LastAccessServlet", value = "/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 设置响应对象内容类型(网页、编码),避免中文乱码
        response.setContentType("text/html; charset=utf-8");
        // 获取打印输出流
        PrintWriter out = response.getWriter();
        // 获取所有cookie
        Cookie[] cookies = request.getCookies();
        // 定义标志变量isFirstAccess
        boolean isFirstAccess = true;
        // 判断cookies是否为空
        if (cookies.length > 0 && cookies != null) {
            // 遍历cookies数组
            for (Cookie cookie : cookies) {
                // 获取cookie的名称
                String name = cookie.getName();
                // 判断cookie名称是否为`lastTime`
                if (name.equals("lastTime")) {
                    // 用户不是第一次访问
                    isFirstAccess = false;
                    // 获取cookie的值(上次访问时间)
                    String value = cookie.getValue();
                    // 控制台输出解码前的数据
                    System.out.println("解码前:" + value);
                    // 对cookie值进行URL解码
                    value = URLDecoder.decode(value, "utf-8");
                    // 控制台输出解码后的数据
                    System.out.println("解码后:" + value);
                    // 在页面显示用户上次访问时间
                    out.print("欢迎回来,您上次访问时间:" + value);
                    // 获取当前时间字符串
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                    String strDate = sdf.format(date);
                    // 控制台输出编码前的日期数据
                    System.out.println("编码前:" + strDate);
                    // 对日期数据进行URL编码
                    strDate = URLEncoder.encode(strDate, "utf-8");
                    // 控制台输出编码后的日期数据
                    System.out.println("编码后:" + strDate);
                    // 设置cookie的值
                    cookie.setValue(strDate);
                    // 设置cookie的存活时间(以秒为单位)
                    cookie.setMaxAge(30 * 24 * 60 * 60);  // 一个月
                    // 加入cookie,让其生效
                    response.addCookie(cookie);
                }
            }
        }

        // 第一次访问
        if (isFirstAccess) {
            // 获取当前时间字符串
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
            String strDate = sdf.format(date);
            // 控制台输出编码前的日期数据
            System.out.println("编码前:" + strDate);
            // 对日期数据进行URL编码
            strDate = URLEncoder.encode(strDate, "utf-8");
            // 控制台输出编码后的日期数据
            System.out.println("编码后:" + strDate);
            // 创建一个cookie
            Cookie cookie = new Cookie("lastTime", strDate);
            // 设置cookie的值
            cookie.setValue(strDate);
            // 设置cookie的存活时间(以秒为单位)
            cookie.setMaxAge(30 * 24 * 60 * 60);  // 一个月
            // 加入cookie,让其生效
            response.addCookie(cookie);
            // 在页面显示欢迎用户首次访问信息
            out.print("您好,欢迎您首次访问本网站~");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
}


4、启动服务器,查看结果

启动服务器,访问http://localhost:8080/CookieDemo/LastAccessServlet

在这里插入图片描述

  • 查看控制台输出信息
    在这里插入图片描述

  • 刷新访问地址http://localhost:8080/CookieDemo/LastAccessServlet,浏览器显示了用户的上次访问时间,这是因为用户第一次访问LastAccessServlet时,LastAccessServlet向浏览器发送并保存用户访问时间的Cookie信息。第二次访问LastAccessServlet时,服务器读取该Cookie信息,并在浏览器显示
    在这里插入图片描述

  • 查看控制台输出信息
    在这里插入图片描述