Cookie实现商品浏览记录--方式一:Java实现
方式一:Java代码方式实现:此种方式实现思路较为顺畅。
难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助addFirst()方法将此id插入到最前面。具体实现如下:
(1). 在JSP页面中,显示所有的商品列表。当我们选择某一款产品时,通过超链接跳转到Servlet中,并将此产品的ID一并传过去。
```
<dt><a href="<%=path %>/servlet/do_home_control?param=recode&ep_id=${ep.ep_id}" target="_self"><img src="data:images/product/1.jpg" /></a></dt>
```
(2). 在Servlet中,接收产品id。
```
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String param = request.getParameter("param");
String path = request.getContextPath();
PrintWriter out = response.getWriter();
//......
if("recode".equals(param)) {
String ep_id = request.getParameter("ep_id");
// 如果是首页显示,则ep_id为null,则只显示cookie中的值即可。
// 根据cookie的name,重设对应的value
String cvalue = Tool.BuildCookie("productRecode", ep_id, request);
// 将新的cookie写入
Cookie cookie = new Cookie("productRecode", cvalue);
cookie.setMaxAge(3600 * 1000);
cookie.setPath("/");
response.addCookie(cookie);
// 根据id获得对应的产品集合,最终将产品列表显示到jsp页面中
List<Easybuy_Product> eps = new ArrayList<Easybuy_Product>();
for (String c : cvalue.split(",")) {
eps.add(productService.getProductByEp_Id(Integer.parseInt(c)));
}
request.getSession().setAttribute("productRecode", eps);
response.sendRedirect(request.getContextPath()
+ "/product-view.jsp?ep_id=" + ep_id);
}
}
```
(3). 上面涉及到一个方法,将此方法写到工具类中了。
```
//Tool.java工具类中写了下面的两个方法
/**
* 将id添加到cookie中,并返回最终的Cookie字符串
* @param cookieName
* @param ep_id
* @param request
* @return String
*/
public static String BuildCookie(String cookieName, String ep_id,
HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
String recodeValue = getCookieValue(cookieName, request);
// 判断cookie的value值中是否包含此id
if (recodeValue == null) {
// 判断ep_id是否为空。如果为空,则为首页显示
if (ep_id == null || "".equals(ep_id)) {
return null;
}
return ep_id;
} else {
//转换成LinkedList很有必要。普通的ArrayList想要实现最近浏览的产品移动到最前面比较困难,不如LinkedList提供的方法来的直接。
LinkedList<String> s = new LinkedList<String>(
Arrays.asList(recodeValue.split(",")));
// 判断ep_id是否为空。如果为空,则为首页显示
//如果ep_id不为空,则判断LinkedList中是否包含此ID。如果包含,则移除掉。然后将此ID放置到列表中的第一个位置。
if (ep_id != null) {
if (s.contains(ep_id)) {
s.remove(ep_id);
}
//商品显示3条
if (s.size() > 3) {
s.removeLast();
}
s.addFirst(ep_id);
}
for (String bid : s) {
sb.append(bid + ",");
}
return sb.deleteCharAt(sb.length() - 1).toString();
}
}
/**
* 根据cookieName获取cookie对应的value值
*
* @param cookieName
* @return
*/
public static String getCookieValue(String cookieName,
HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
String recodeValue = null;
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (cookieName.equals(cookie.getName())) {
recodeValue = cookie.getValue();
break;
}
}
}
return recodeValue;
}
```
这个功能就这样实现了!如果你有想法,咱们一起探讨!
Cookie实现商品浏览记录--方式一:Java实现的更多相关文章
- Cookie实现商品浏览记录--方式二:JS实现
使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...
- 使用Cookie保存商品浏览记录
数据流程:页面上是商品列表,点击<a href="productServlet">商品名</a> ==>跳转到自定义的servlet中进行处理,先得到 ...
- javaWeb 使用cookie显示商品浏览记录
package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...
- Java遇见HTML——JSP篇之商品浏览记录的实现
一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 ...
- (JS实现顾客商品浏览记录以及购物车)Cookie的保存与删除
//JS实现顾客浏览商品的记录以及实现购物车的功能function setCookie(name,value) { var Days = 30; var exp = new Date(); exp.s ...
- 使用cookie实现打印浏览记录的功能
可以用cookie知识来实现打印浏览记录.这里面用到的思路是将浏览记录以字符串的方式保存到cookie中,当浏览记录增加时,再将其转化为数组. $uri=$_SERVER['REQUEST_URI'] ...
- cookie的应用——浏览记录
实体类 package entity; public class Product { private String id; private String proName; private String ...
- 使用cookies查询商品浏览记录
经历了俩个星期,易买网项目如期完工,现在总结一下如何使用cookies实现浏览商品的历史记录. 第一步:创建商品实体类. 第二步:连接oracle数据库. 第三步:创建商品三层架构. 效果图: 在要显 ...
- destoon系统开发-最新利用浏览器的cookie 做历史浏览记录
注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断 <!--历史浏览记录 S--> <div class=&quo ...
随机推荐
- 【JS】数字转大写中文
原文参考 逛到一道面试题,数字转大写中文的,搜索学习并记录于此. //自动转换数字金额为大小写中文字符,返回大小写中文字符串,最大处理到999兆 function changeMoneyToChine ...
- linux sed的使用
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理, 可以将数据行进行替换.删除.新增.选取等特定工作. sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同:同时 ...
- MySQL使用正则表达式比较字段中的数字
今天遇到一个问题,需要对表中的一个类json字段的内容进行筛选,而筛选的条件是值要大于某个值.因为值的位数并不确定,考虑使用正则表达式进行筛选. 字段格式 类json的key-value字段,示例如下 ...
- encode和decode的区别
$octets = encode("iso-8859-1", $string);把一个串从perl内部格式转为iso-8859-1格式$string = decode(" ...
- 数据库SQL优化总结
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 【Django】Django web项目部署(Nginx+uwsgi)
一.安装uwsgi 通过pip安装uwsgi. pip install uwsgi 测试uwsgi,创建test.py文件: def application(env, start_response): ...
- LeetCode-Search in Rotated Sorted Array II
Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this ...
- (转) Playing FPS games with deep reinforcement learning
Playing FPS games with deep reinforcement learning 博文转自:https://blog.acolyer.org/2016/11/23/playing- ...
- apk安全测试思路
一: apk安全测试 对于一款android的apk程序,主要进行的测试分两部分: 1) 接口测试 ---接口测试实际上是常见的web安全测试 2) android组件测试 --组件测试实际上是and ...
- python logging模块
1.logging模块提供了四个组件logger:日志类,有两个功能1)配置日志的等级,处理器handler,过滤器filterlogger.setLevel(logging.INFO)logger. ...