案例(web开发):记录上一次访问的时间(利用Cookie知识点)

案例- 记录上一次访问的时间 (重点)

需求: 如果用户是第一次访问CookieServlet, 浏览器上打印您是第一次访问. 如果用户不是第一次访问,就给浏览器上打印您上一次访问的时间是xxxx.

分析:
在这里插入图片描述
代码实现:

package com.ccc.cookie_project;

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

/**
 1.获取所有的cookie  (如果cookie的是空或者,name不是我们想要的)说明是第一次访问.
 2.如果是第一次访问
     2.1创建cookie ("time",当前时间字符串)
     2.3将创建的cookie放到response中
     2.3给浏览器打印一句话 您是第一次访问
 3.如果不是第一次访问 (已经获取到了名称为time的cookie)
     3.1获取cookie中的内容(上一次访问的时间)
     3.2cookie重新设置当前时间
     3.3给response中设置cookie
     3.4给浏览器打印一句话, 您上一次访问的时间是xxx
 */
@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置乱码
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        // 1.获取所有的cookie  (如果cookie的是空或者,name不是我们想要的)说明是第一次访问.
        Cookie[] cookies = request.getCookies();  
        
        //获取到了所有的cookie,查询看里面我们想要的cookie,即key值是time
        
        //1.1编写一个方法从所有的cookie查找key值为time的cookie
        //cookie如果是null 没查到第一次访问 如果不是null不是第一次访问
        Cookie cookie = findCookieByName(cookies,"time");
        //2.如果是第一次访问
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/HH:mm:ss");
        String time = sdf.format(date);
        if(cookie == null){
            //2.1创建cookie ("time",当前时间字符串)

            Cookie c = new Cookie("time",time);
            //补充:
            c.setMaxAge(60*60*24*7);
            c.setPath("/day14");
            //2.3将创建的cookie放到response中
            response.addCookie(c);
           //2.3给浏览器打印一句话 您是第一次访问
            response.getWriter().print("<h2>您是第一次访问</h2>");

        }else{
			// 3.如果不是第一次访问 (已经获取到了名称为time的cookie)
            
            //3.1获取cookie中的内容(上一次访问的时间)
            String value = cookie.getValue();  //value是上一次cookie中记录的时间
            //3.2cookie重新设置当前时间
            cookie.setValue(time);
            //3.3给response中设置cookie
            response.addCookie(cookie);
            //3.4给浏览器打印一句话, 您上一次访问的时间是xxx
            response.getWriter().print("<h2>您上一次访问的事件是"+value+"</h2>");
        }
    }

    //根据指定的名称查找cookie信息
    private Cookie findCookieByName(Cookie[] cookies, String time) {
        //1.判断cookies数组是否为null,判断cookies数组的长度是否大于0,如果满足这两个条件循环.
        //不然就返回null
        if(cookies != null && cookies.length>0){
            for (Cookie cookie : cookies) {
                //循环中判断,如果cookie的名字和传递参数name值一致,直接返回该cookie
                if(time.equals(cookie.getName())){
                    return cookie;
                    //return cookie;这句代码的大括号{}可以省略,因为if条件成立之后,
                    //默认执行离他最近的一句话
                }
            }
            
        }else{
            return null;
        }
        //如果有cookie,但是没有我们需要的key为time的cookie,仍然返回null
        return null;
    }

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

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/92965972