记住上一次的访问时间——Cookie的使用场景

news/2024/5/18 13:28:47 标签: cookie

 

需求

  1. 访问一个Servlet,如果是第一次访问,则提示:第一次见面,请多指教 ! ! !
  2. 如果不是第一次访问,则提示:欢迎回来 >_< ! 上次见到你是在 + 上一次访问时间
    . 在这里插入图片描述

 

思路和细节

  1. 在访问Servlet时,对其request请求的Cookie进行判断——
    如果name为lastTime的Cookie,则响应"第一次见面",写回Cookie
    如果没有name为lastTime的Cookie,则响应"上一次见面是在…",写回Cookie
  2. request.getCookies()返回的是个Cookie数组而非集合,没有直接get到lastTime的方法,只能遍历,看其是否存在
  3. 不管有没有,都可以直接new一个Cookie返回,因为同名Cookie会发生覆盖
    (虽然写回(response)的Cookie的响应头中没有覆盖,但其实在下一次的发出的request的请求头中,会发现已经覆盖了)
  4. response.setContentType("text/html;charset=utf-8")解决服务器输出到浏览器的字符流(响应体)中文乱码问题
  5. 新版本的Cookie虽然已经支持中文,但仍有一些特殊字符(比如space空格)出现乱码——因此最好在生成Cookie时,用URL编码多转化一次(URLEncoder);读取Cookie时,用URL解码多转化一次(URLDecoder)—— 参数是字符串返回值也是字符串,用起来很方便(★)

 

代码

@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置响应体的数据格式以及编码
        response.setContentType("text/html;charset=utf-8");

        Cookie[] cookies = request.getCookies();
        boolean hasVisited = false;

        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("lastTime")) {
                // 如果已经被访问过(有了Cookie)
                hasVisited = true;
                response.getWriter().write("欢迎回来 >_< ! 上次见到你是在" + URLDecoder.decode(cookie.getValue(), "utf-8"));
                break;
            }
        }

        if(!hasVisited){
            // 如果第一次被访问
            response.getWriter().write("第一次见面,请多指教 ! ! !");
        }

        Cookie cookie = new Cookie("lastTime", getCurrentTime());	// new就完事了,不用setValue,反正能覆盖
        cookie.setMaxAge(60 * 60 * 24 * 30);						// 持久化存储(硬盘存储)一个月
        response.addCookie(cookie);
    }


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

    /**
     * 返回此刻的时间(已经格式化的字符串,且被URL编码方式转化过;响应的在读取时也要用URL解码转化一次)
     */
    private String getCurrentTime() {
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        String dateString = simpleDateFormat.format(date);
        try {
            dateString = URLEncoder.encode(dateString, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return dateString;
    }
}

 

 

 

 

 

 

 


http://www.niftyadmin.cn/n/1330454.html

相关文章

网页随机生成验证码 + 根据验证情况进行跳转

效果 思路 这是个tomcat部署的小项目&#xff08;本地一样用&#xff09; 每次点击按钮&#xff0c;向Servlet请求一次资源&#xff0c;更新一次img的src 代码&#xff08;3部分&#xff09; CheckImage.java public class CheckImage {/** 【该类用于生成并处理BufferedIm…

红色病毒问题 hdu 2065

Problem Description 医学界发现的新病毒因其蔓延速度和Internet上传播的”红色病毒”不相上下,被称为”红色病毒”,经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,腺嘧啶均是成对出现的。 现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成;…

用户登录界面的实现与部署——思路与结构分析

Hello&#xff0c;JavaWeb 这是一个简单的账户密码登录界面。 很简单&#xff0c;如果登录成功&#xff0c;显示"登录成功! 账户名"&#xff1b;登录失败显示"登录失败&#xff0c;用户名或密码错误" 思路分析 创建JavaEE项目编辑配置Tomcat —— 此…

解决python初学问题TemplatesDoesNotExist

初学python&#xff0c;遇到TemplatesDoesNotExist问题 背景&#xff1a;为了实现如下功能 当初次访问http://127.0.0.1:8000/showPersons/时&#xff0c;报错TemplatesDoesNotExist 项目目录结构&#xff1a; 经查收原因&#xff1a; 应将&#xff0c;DIRS&#xff0c;由[ ]…

【JSP】JSP总结——html标签与java代码的巧妙缝合

JSP&#xff1a;Java Server Pages ▶ 概念&#xff1a;Java Server Pages&#xff1a; java服务器端页面 一个特殊的缝合怪页面——既可以写html标签&#xff0c;又可以写java代码 ▶ 原理&#xff1a;JSP本质上就是一个Servlet。 ▶ JSP脚本&#xff1a;Java代码写在哪 &…

2018 icpc网络赛-Nanjing 题解 J 题

原文链接&#xff1a;https://kuangbin.github.io/2018/09/01/2018-ACM-ICPC-Nanjing-online-J/ 题目链接: https://nanti.jisuanke.com/t/30999 A square-free integer is an integer which is indivisible by any square number except 11. For example, 6 2 \cdot 362⋅3…

【EL表达式 + JSTL标签库】—— 取代和简化JSP页面的java代码

EL&#xff1a;Expression Language ▶ 概念&#xff1a;Expression Language &#xff0c;即 表达式语言 ▶ 作用&#xff1a;取代和简化jsp页面java代码的编写 ▶ 语法&#xff1a;${表达式} ▶ 注意&#xff1a;jsp页面默认支持el表达式。如果要忽略el表达式&#xff0c…

图解【MVC开发模式】【三层架构】

JSP演变历史 早期只有Servlet&#xff0c;什么都用response输出&#xff0c;尤其是大量的页面标签数据&#xff0c;是个棘手的问题后来有了jsp这个标签java代码的缝合怪&#xff0c;简化了Servlet开发——“简答题"变成了"填空题”&#xff0c;只是维护代码变成了噩…