Cookie获取用户的访问记录
使用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); } }