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上的页面就会自 ...
随机推荐
- 领域驱动设计(DDD:Domain-Driven Design)
领域驱动设计(DDD:Domain-Driven Design) Eric Evans的"Domain-Driven Design领域驱动设计"简称DDD,Evans DDD是一套 ...
- ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门
一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...
- Windows应急响应常识
Windows 应急响应 常见事件ID 1102 清理审计日志 4624 账号登陆成功 4625 账号登陆失败 4672 授予特殊权限 4720 创建用户 4726 删除用户 4728 将成员添加到启 ...
- 重置Visual Studio 2017的配置
1,从命令行进入VS 2017安装目录下面的Common7\IDE文件夹. 例如,Windows 10系统中 VS 2017 企业版的默认安装目录如下: C:\Program Files (x86)\ ...
- Bootstrap -- 文本,背景,其他样式
Bootstrap -- 文本,背景,其他样式 1. 文本样式:展示了不同的文本颜色 使用文本样式: <!DOCTYPE html> <html> <head> & ...
- iOS Accessibility指南
开发者经常会为用户开发一些令人充满惊喜的App.但是,开发者真的为每一个潜在的用户都做适配了么?是否每个人都可以真正使用你的APP呢? 设计APP.产品或者任何类型的服务,都要考虑到所有用户,包括视力 ...
- Python开发【第三篇】基本数据类型
整型 int __author__ = 'Tang' # 将字符串转换为数字 a = " b = int(a) # 前面是0的数转换,默认base按照十进制 a = " b = i ...
- bootstrapt 使用遇到问题
1.布局的时候什么时候用xs,sm,md,lg? small grid (≥ 768px) = .col-sm-*, medium grid (≥ 992px) = .col-md-*, large ...
- 运行ConnectionDemo时遇到的问题及解决方案
20175227张雪莹 2018-2019-2 <Java程序设计> 运行ConnectionDemo时遇到的问题及解决方案 老师博客上提供确认数据库连接的代码 import static ...
- 洛谷 P1908 逆序对
\[传送门qwq\] 题目描述 猫猫\(TOM\)和小老鼠\(JERRY\)最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计. 最近,\(TOM\)老猫查阅 ...