使用cookie获取用户上次访问的时间,代码优化

代码如下

package com.zuoyueer.cookie;

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.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author Zuoyueer
 * Date: 2019/10/26
 * Time: 17:40
 * @projectName HomeWork
 * @description: 使用cookie获取用户上一次访问时间
 */
@WebServlet(urlPatterns = "/CookieDemo_01", name = "CookieDemo_01")
public class CookieDemo_01 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //处理乱码
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取输出流
        PrintWriter writer = response.getWriter();
        //获取cookies
        Cookie[] cookies = request.getCookies();
        //这里体现了编程技巧,提取变量到循环外面,最后根据变量的值统一做判断,就避免了多次对结果进行判断的情况,避免了代码重复
        String format = "";
        //因为有遍历,防止空指针异常,先判断下
        if (cookies != null && cookies.length > 0) {
            //遍历cookies,查询记录时间的cookie
            for (Cookie cookie : cookies) {
                if ("date".equals(cookie.getName())) {
                    String value = cookie.getValue();
                    //因为cookie只能存储String类型,使用,我们要转换下格式
                    Date date = new Date(Long.parseLong(value));
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    format = simpleDateFormat.format(date);
                    //找到了就跳出循环,避免不必要的循环
                    break;
                }
            }
        }
        //无论cookies==null,还是不为空,但是没找到,format的值都是"" ,都表示第一次访问
        if ("".equals(format)) {
            writer.write("这是你第一次访问!");
        } else {
            //打印到浏览器上
            writer.write("你上次访问的时间是:");
            writer.write(format);
        }
        //更新date的值,覆盖原来的值
        Cookie date = new Cookie("date", System.currentTimeMillis() + "");
        date.setMaxAge(24 * 3600);
        response.addCookie(date);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

如果你有更加简单,奇思妙想的想法,还请赐教,感谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值