cookie案例之显示用户上次浏览过的商品

2024-06-08 01:08

本文主要是介绍cookie案例之显示用户上次浏览过的商品,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//网站首页
public class CookieDemo2 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//有中文输入,防止乱码response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriter  out = response.getWriter();//1.显示网站所有商品//print与write的区别在于有换行out.print("本网站有如下书籍:<br/>");Map<String,Book> map = DB.getMap();for(Map.Entry<String, Book> entry : map.entrySet()){Book book = entry.getValue();out.print("<a href='/day07/servlet/CookieDemo3?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>");}out.print("您曾经看过如下商品:<br/>");//2.显示用户曾经浏览过的商品    //   bookHistoryCookie cookie = null;Cookie cookies[] = request.getCookies();for(int i=0;cookies!=null && i<cookies.length;i++){if(cookies[i].getName().equals("bookHistory")){cookie = cookies[i];}}if(cookie!=null){//找到了bookHistory这个cookie//值为这样的:4_6_1String bookHistory = cookie.getValue(); //以_分割字符串,需要转义String ids[] = bookHistory.split("\\_");for(String id: ids){Book book = (Book) DB.getMap().get(id);out.print(book.getName() + "<br/>");}}}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}//此类用于模拟数据库
class DB{//用map集合的原因为要用到检索数据的需求private static Map<String,Book> map = new HashMap();static{map.put("1", new Book("1","javaweb开发","老张"));map.put("2", new Book("2","jdbc开发","老黎"));map.put("3", new Book("3","struts2开发","老张"));map.put("4", new Book("4","spring开发","老黎"));map.put("5", new Book("5","hibernate开发","老张"));}//提供方法返回map集合public static Map getMap(){return map;}
}
class Book{private String id;private String name;private String author;public Book() {super();// TODO Auto-generated constructor stub}public Book(String id, String name, String author) {super();this.id = id;this.name = name;this.author = author;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}
}//显示商品详细信息
public class CookieDemo3 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");PrintWriter  out = response.getWriter();//1.根据用户带过来的id值,显示相应商品的信息out.print("您想看的书的详细信息为:<br/>");String id = request.getParameter("id");Book book = (Book) DB.getMap().get(id);out.print(book.getId() + "<br/>");out.print(book.getName() + "<br/>");out.print(book.getAuthor() + "<br/>");//2.以cookie的形式回写该商品的id号给浏览器String bookHistory = makeCookie(book.getId(),request);Cookie cookie = new Cookie("bookHistory",bookHistory);cookie.setMaxAge(10000);response.addCookie(cookie);}//根据用户原来看过的书,以及现在看的书的id,构建新的cookie值(要求浏览历史只能保存3本书)private String makeCookie(String id, HttpServletRequest request) {//有以下四种情况//首次看id为3的书//bookHistory=null    3     bookHistory=3//浏览历史有三个了,但不包含id等于3的书,要删除最后一个再把3加在开头//bookHistory=2_1_5   3     bookHistory=3_2_1//浏览历史不超过3个,直接把3加在开头//bookHistory=2       3     bookHistory=3_2//浏览历史包含id为3的书,将其删除,再添加到开头//bookHistory=2_3     3     bookHistory=3_2//1.得到用户曾经看过的书String bookHistory = null;Cookie cookies[] = request.getCookies();for(int i=0;cookies!=null && i<cookies.length;i++){if(cookies[i].getName().equals("bookHistory")){bookHistory = cookies[i].getValue();}}//等于空证明用户第一次访问if(bookHistory==null){bookHistory = id;return bookHistory;}//bookHistory=1_2_5    代表用户曾经看一些书,接着程序要得到用户曾经看过什么书//先切割成含有id的数组String ids[] = bookHistory.split("_");//为了检测数组中是否包含当前id,我们应该把数据转成集合,并且还要转成链表结构的集合,为了使用addFirst方法与removelast方法LinkedList<String> idList = new LinkedList(Arrays.asList(ids));//如果包含,就移除if(idList.contains(id)){idList.remove(id);}else{//如果不包含且长度够了,就删除最后一个if(idList.size()>=3){idList.removeLast();}}//总之都要在开头添加此ididList.addFirst(id);//再将id与_连接组合形成新的cookies的值,但末尾存在_StringBuffer sb = new StringBuffer();for(String lid: idList){   //1_2_3_sb.append(lid + "_");}//把末尾的_截取return sb.deleteCharAt(sb.length()-1).toString();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

这篇关于cookie案例之显示用户上次浏览过的商品的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040823

相关文章

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可