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);
}
}
效果: