使用Cookie技术 获取用户的访问记录
1.创建 虚拟数据
package com.oracleoaec.cookie;
import java.util.HashMap;
public class GoodMap {
public static void main(String[] args) {
GoodMap instance = GoodMap.getInstance();
String good = instance.getMap().get("2");
System.out.println("商品为:"+good);
}
private HashMap<String, String> map = new HashMap<>();
private static GoodMap goodMap = null;
private GoodMap(){
map.put("1", "袜子");
map.put("2", "鞋子");
map.put("3", "裤子");
map.put("4", "女朋友");
map.put("5", "男朋友");
map.put("6", "丝袜");
}
public static synchronized GoodMap getInstance(){
if(goodMap==null){
goodMap = new GoodMap();
}
return goodMap;
}
//获得map容器的方法
public HashMap<String, String> getMap() {
return map;
}
}
2.获取数据
package com.oracleoaec.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GoodMap2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
String str = req.getParameter("id");
if (str != null) {
Cookie cookie = new Cookie(str, str);
resp.addCookie(cookie);
}
writer.write("<h1>所有的商品</h1>");
GoodMap instance = GoodMap.getInstance();
HashMap<String, String> map = instance.getMap();// 获取所有的商品
// 遍历MAP容器
Set<Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String id = entry.getKey();// 获得商品id
String name = entry.getValue();// 获得商品名称
// 搭建界面
writer.write("<a href='doS8?id=" + id + "'>" + name + "</a><br/>");
}
writer.write("<hr/>");// 分割一下
// 1.获取用户请求携带的所有cookies对象数组
// 2.如果数组中有数据
// 3.将数据内容响应到界面
Cookie[] cookies = req.getCookies();
writer.write("<h1>最近浏览过<h1/></br>");
for (int i = 0; cookies != null && i < cookies.length; i++) {
String id = cookies[i].getValue();// 这边获取的是商品id
// 根据商品id获取商品名称
String name = map.get(id);
writer.write(id+name+ "</br>");
}
}
}
//获取用户上一次的访问时间
package com.oracleoaec.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletDemo3 extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();//获得字符输出对象
Cookie[] cookies = req.getCookies();//从请求域对象中获取cookies
String value = null;
for (int i = 0;cookies!=null&&i < cookies.length; i++) {
String name = cookies[i].getName();//获取cookie的name
if("time".equals(name)){
value = cookies[i].getValue();//获取cookie的值
}
}
//区分第一次访问和后续访问
if(value==null){//第一次访问
//写界面
writer.write("用户为第一次访问<a href='doS3'>点击刷新</a>");
}else{//后续访问
//从req对象中取出cookies 重复的操作需要避免
//将获取的字符串格式的时间 转换成Date对象
Date date = new Date(Long.parseLong(value));
writer.write("用户上一次访问时间为:"+date.toLocaleString()+"<a href='doS3'>点击刷新</a>");
// new SimpleDateFormat("yyyy-MM-dd").format(date)
}
//将当前时间添加到resp响应对象的cookie中
Cookie c1 = new Cookie("time",System.currentTimeMillis()+"");
resp.addCookie(c1);
}
}