JavaWeb之商品查看后历史记录代码实现
JavaWeb之商品查看后历史记录代码实现全过程解析。
历史记录思路图:

假设已经访问了商品 :1-2-3
那么历史记录就是1-2-3,如果访问了商品8,那么历史记录就是:8-1-2-3,如果再次访问3那么历史记录就是:3-8-1-2。
当历史记录中存在了商品3,再次访问商品3,将会删除之前的历史记录3,而把当前访问的商品3归为最新访问记录。
实现过程如下:
点击商品,在商品详情页面中的cookie中生成pid,如果返回再次访问其他商品那么Cookie中的信息就是pid=商品id-商品id,以-作为分隔符,这里可以以逗号作为分隔符。

核心代码实现:
//获得客户端携带cookie---获得名字是pids的cookie
Cookie[] cookies = request.getCookies();
String pids = pid;
if(cookies!=null) {
for (Cookie cookie : cookies) {
if("pids".equals(cookie.getName())) {
pids=cookie.getValue();
//以-进行分割
String[] split = pids.split("-");
List<String> asList = Arrays.asList(split);
LinkedList<String> list =new LinkedList<String>(asList);
//判断集合中是否存在pid
if(list.contains(pid)) {
//包含当前查看的商品pid
list.remove(pid);
list.addFirst(pid);
}else {
//不包含当前查看商品的pid 直接将该pid放到头上
list.addFirst(pid);
}
//使用StringBuffer存储字符
StringBuffer sb =new StringBuffer(); //遍历集合并且让集合中的内容每次都<7就是每次历史记录最多显示7条数据
for(int i=0;i<list.size()&&i<7;i++) {
sb.append(list.get(i));
sb.append("-");
}
//截除掉最后面的一个-
pids =sb.substring(0,sb.length()-1);
}
}
}
//封装到Cookie中
Cookie cookie_pid = new Cookie("pids", pids);
response.addCookie(cookie_pid);
request.getRequestDispatcher("/product_info.jsp").forward(request, response);
完成了这个功能之后,下面就是在历史记录中显示商品信息了。
浏览商品记录模块:

首先思路如下:
从Cookie中寻找pid的值,然后把pid代入数据库查询,然后添加到集合中,然后将历史记录的集合放到域中,最后再用jstl循环调用商品的图片:
首先Cookie中寻找pid的值,然后把pid代入数据库查询,然后添加到集合中,然后将历史记录的集合放到域中实现代码如下:
Web层:
List<Product> historyProductList =new ArrayList<Product>();
Cookie[] cookies = request.getCookies();
if(cookies!=null) {
for (Cookie cookie : cookies) {
if("pids".equals(cookie.getName())) {
String pids=cookie.getValue();
String[] split = pids.split("-");
for (String pid : split) {
Product pro = service.findProductByPid(pid);
historyProductList.add(pro);
}
}
}
}
request.setAttribute("historyProductList", historyProductList);
request.getRequestDispatcher("/product_list.jsp").forward(request, response);
查看service对象中的findProductByPid方法:
service层:
public Product findProductByPid(String pid) {
// TODO Auto-generated method stub
ProductDao dao =new ProductDao();
Product product=null;
try {
product = dao.findProductByPid(pid);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return product;
}
Dao层:
public Product findProductByPid(String pid) throws SQLException {
// TODO Auto-generated method stub
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql="select * from product where pid=?";
Product product = runner.query(sql, new BeanHandler<Product>(Product.class),pid);
return product;
}
然后前端view层jstl调用域中的集合信息:
先引用jstl:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
然后通过jstl显示信息:
<c:forEach items="${historyProductList}" var="historyPro">
<li
style="width: 150px; height: 216; float: left; margin: 0 8px 0 0; padding: 0 18px 15px; text-align: center;"><img
src="${pageContext.request.contextPath}/${historyPro.pimage}" width="130px" height="130px" />
</li>
</c:forEach>
最后的代码运行效果图:

JavaWeb之商品查看后历史记录代码实现的更多相关文章
- JavaWeb -- Cookie应用实例 -- 购物历史记录
1. 页面一:主页面 页面二: 详细显示页面 Demo2 负责页面一, 显示商品清单和历史记录 Demo3负责页面二 ...
- 我的Git教程 之 解决 git clone后无代码
解决 git clone 后无代码 前言:这个教程只适用于像我一样大致理解Git的原理,但是不太记得住Git命令的同学使用.所以具体原理只会提一下,具体可以参见Pro Git. 在另一篇 简明的教程 ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- java虚拟机jvm启动后java代码层面发生了什么?
java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...
- wpf后置代码中的Grid布局以及图片路径的设置
之前用Grid练习连连看布局时,遇到了几个困惑.此次就把当时的一些收获写出来,供以后翻看. 图片路径可能比较常用,所以就写在第一个了. 在xaml中,设置图片非常简单,只要把图片拷贝到资源目录(这里假 ...
- git 找回 git reset --hard HEAD 后的代码
下面方法只针对当你本地代码做了 git add 或则 git commit 后又手贱的重置本地代码到上一个版本,导致本地代码丢失的情况. 如果你没有 git add 命令,而直接 git reset ...
- 调试查看CLR运行代码
SOS (Son of Strike)调试扩展可以让我们在调试过程中查看CLR运行代码.SOS.dll随.NET一起安装,对于.NET 4.0来说,SOS.dll的所在位置是:C:\Windows\M ...
- script指定src后内部代码无效
/********** 无效 ***************/ <script type="text/javascript" src=""> fun ...
- 只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自动刷新。
学习html和css的时候Ctrl+s 以后预览网页需要手动刷新 现在不用了 给chrome安装安装LivePage这个插件. 只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自 ...
随机推荐
- Spring Boot 相关
SpringBoot工程 参数解析 HTTP Method Request / Response / Session Error/重定向 Logger IoC AOP/Aspect 1:Sprin ...
- 章节八、2-火狐的插件TryXPath
一.火狐上有一个很好用的插件TryXPath能够进行元素定位(安装) 1.打开图中标识的菜单 2.然后点击“扩展”,搜索“xpath” 3.然后安装“TryXPath” 4.安装成功后右上角x显示一个 ...
- 06-Nodejs介绍
06-Nodejs介绍 打开Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一 ...
- js 学习之路6: if...else...条件语句的使用
1.1 if (...) { ... } else { ... } <!DOCTYPE html> <html> <meta http-equiv="Conte ...
- MFC界面相关源码
这是这4篇MFC界面的相关源码.建议学习Visual C++的看看这2本微软官方出的教材. [MFC Windows程序设计(第2版,修订版)](美)Jeff Prosise著 [Windows程序设 ...
- "'cl' 不是内部或外部命令,也不是可运行的程序"解决方案
最近使用VS2012+Qt5.1+QtCreator2.8.1来搭建Qt的开发环境(之前有用MinGW编译的经历,经常碰到gdb调试器崩溃的问题),全部换成想用VC的编译器和调试环境,但是觉得QtCr ...
- Windows server 2012 R2 部署WSUS补丁服务
一.WSUS 安装要求 1.硬件要求: 对于多达 13000 个客户端的服务器,建议使用以下硬件:* 4 Core E5-2609 2.1GHz 的处理器* 8 GB 的 RAM 2.软件要求: 要使 ...
- 2017 百度杯丶春秋欢乐赛 writeup
1. 内涵图(Misc) 题目: 我不是一个简单的图片 我是一个有内涵的图片 解:保存到桌面,右键属性->详细信息,即可获得flag. 2. 小电影(Misc) 题目: 我说过 这次比赛是让大家 ...
- DeveloperGuide Hive UDTF
Writing UDTF's Writing UDTF's GenericUDTF Interface GenericUDTF Interface A custom UDTF can be creat ...
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...