Cookie案例-记录用户上次访问的时间+商品的浏览记录

使用cookie来记录用户上次访问浏览器的时间

cookie工具类:从cookie数组中获取指定名称的cookie

package com.utils;

import javax.servlet.http.Cookie;

public class MyCookieUtil {
	public static Cookie getCookieByName(Cookie[] cookies,String name){
		if(cookies==null){
			return null;
		}else{
			for (Cookie c : cookies) {
				if(name.equals(c.getName())==true)
					return c;
			}
			return null;
		}
	}
}

访问的servlet

package com.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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 com.utils.MyCookieUtil;
/**
 * 显示用户上次访问的时间
 * @author 58351
 *
 */
@WebServlet("/lasttime")
public class LastTimeServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html;charset=UTF-8");
		
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String sDate = sdf.format(date);
		/*
		 * 1、先判断是否是第一次访问servlet,第一次和第n次处理的业务是不一样的
		 * 2、如果是第一次访问,向客户端输出一句欢迎,并且记录当前的时间,保存到cookie中,回写到浏览器
		 * 3、如果不是第一次访问,获取cookie中的值(上次的访问时间),把时间输出到页面上,并且记录到当前的时间,保存到cookie中,回写到浏览器
		 */
		//判断是否是第一次访问
		//获取cookie的数组
		Cookie[] cookies = request.getCookies();
		//查找自己定义的cookie,查找指定名称的cookie(Cookie c = new Cookie("cookie的名称","cookie的值");)
		Cookie cookie = MyCookieUtil.getCookieByName(cookies, "last");
		if(cookie==null){
			//说明是第一次访问
			//打印一句欢迎
			response.getWriter().write("<h3>第一次访问,欢迎!</h3>");
			//创建一个cookie,并将当前的时间保存到cookie中去
			Cookie c = new Cookie("last",sDate);
			response.addCookie(c);
		}
		else{
			//不是第一次访问了,获取上一次访问的时间
			String lastTime = cookie.getValue();
			response.getWriter().write("<h3>上次访问的时间是:"+lastTime+"</h3>");
			cookie.setValue(sDate);
			response.addCookie(cookie);
		}
	}

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

}

商品的浏览记录

JSP页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<style type="text/css">
	.img1{
	width:160px;
	height:140px;	
	}	
	.img2{
	width:80px;
	height:70px;
	}
</style>
<body>
	<img class="img1" src="/Product/img/1.jpg"><a href="/Product/product?id=1">手电筒</a>
	<img class="img1" src="/Product/img/2.jpg"><a href="/Product/product?id=2">电话</a>
	<img class="img1" src="/Product/img/3.jpg"><a href="/Product/product?id=3">电视</a>
	<br/>
	<img class="img1" src="/Product/img/4.jpg"><a href="/Product/product?id=4">冰箱</a>
	<img class="img1" src="/Product/img/5.jpg"><a href="/Product/product?id=5">手表</a>
	<img class="img1" src="/Product/img/6.jpg"><a href="/Product/product?id=6">电脑</a>
	
	<h3>商品的浏览记录</h3>
	<%
	//从cookie中获取值
	Cookie[] cookies = request.getCookies();
	Cookie cookie = com.utils.MyCookieUtils.getCookieByName(cookies, "product");
	if(cookie!=null){
		String longId = cookie.getValue();
		//切割
		String[] ids = longId.split(",");
		String path = request.getContextPath();
		//遍历
		for(String id:ids){
	%>
		<img class="img2" src="<%=path%>/img/<%= id %>.jpg">
	<%		
		}
	}
	%>
	
	
	
</body>
</html>

servlet响应

package com.servlet;

import java.io.IOException;

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 com.utils.MyCookieUtils;

@WebServlet("/product")
public class ProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//response.getWriter().write("111");
		/*
		 * 1、获取从客户端传过来的id值
		 * 2、判断是否是第一次访问(通过在cookie数组中查找指定名称的cookie来判断)
		 * 	如果是第一次访问(获取的cookie为null),创建一个指定名称的cookie,将获取的id值存入cookie,向客户端回写cookie
		 * 	如果不是第一次访问,判断获取的id值是否已经存在于cookie中,如果是,则不操作,否则将这个id值存入cookie中
		 */
		//获取id值
		String id = request.getParameter("id");
		//获取cookie数组
		Cookie[] cookies = request.getCookies();
		//查找指定名称的cookie
		Cookie cookie = MyCookieUtils.getCookieByName(cookies, "product");
		//判断cookie
		if(cookie==null){
			Cookie c = new Cookie("product",id);
			//设置cookie的有效时间
			//c.setMaxAge(60*60);
			//设置访问路径
			c.setPath("/Product");
			//回写到客户端
			response.addCookie(c);
		}else{
			//获取cookie的值
			String longId = cookie.getValue();
			//把cookie的值切割为字符串数组
			String[] ids = longId.split(",");
			//判断longId中是否包含当前id
			//longId中不包含当前id,将当前id加入到cookie的值中
			if(!checkId(ids,id)){
				cookie.setValue(id+","+longId);
				//cookie.setMaxAge(60*60);
				cookie.setPath("/Product");
				//回写到客户端
				response.addCookie(cookie);
			}
		}
		//重定向或者转发到商品显示页面,用request.getContextPath()获取虚拟路径,默认和项目名相同
		response.sendRedirect(request.getContextPath()+"/cookie/productList.jsp");
	}

	//判断longId中是否包含当前id
	public boolean checkId(String[] ids,String id){
		for(String s:ids){
			if(s.equals(id)){
				return true;
			}
		}
		return false;
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

效果:

清楚商品的浏览记录servlet

package com.servlet;

import java.io.IOException;

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 com.utils.MyCookieUtils;

@WebServlet("/removeProduct")
public class RemoveProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取cookie
		Cookie[] cookies = request.getCookies();
		Cookie cookie = MyCookieUtils.getCookieByName(cookies, "product");
		if(cookie!=null){
			cookie.setMaxAge(0);
			response.addCookie(cookie);
		}
		response.sendRedirect(request.getContextPath()+"/cookie/productList.jsp");
	}

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

}

猜你喜欢

转载自blog.csdn.net/Tommy5553/article/details/86155296
今日推荐