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

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟