<项目><day11>查看用户浏览过的商品
<项目>查看用户浏览过的商品
1.创建一个entity包储存实体对象
1.1创建一个Product的类存储实体对象
对象具有以下属性,并添加set和get方法,含参和不含参的构造方法,toString方法
private String id;
private String proName;
private String proType;
private double price;
2.创建一个Dao包储存实体对象的操作方法
2.1创建一个存放所有对Product对象的CRUD方法的ProductDao类
public class ProductDao {
private static List<Product> data = new ArrayList<Product>();
//初始化商品
static{
//只执行一次
for(int i=1;i<=10;i++){
data.add(new Product(""+i,"笔记本"+i,"LLS00"+i,2300.0+i*300));
}
}
//提供查找所有商品的方法
public List<Product> findAll(){
return data;
}
//根据编号查找商品
public Product findById(String id){
for (Product p : data) {
if(p.getId().equals(id)){
return p;
}
}
return null;
}
}
3.创建一个Servlet包存放servlet程序
3.1创建一个ListServlet来显示所有商品列表
作用:
1.从"数据库"中读取商品列表信息
ProductDao dao = new ProductDao();
List<Product> list = dao.findAll();
2.把商品列表信息显示到浏览器中
PrintWriter writer = response.getWriter();
String html = "";
html += "<html><head><title>显示商品列表</title></head>";
html += "<body><center><h1>所有商品</h1></center><table border='1' align='center'>";
html += "<tr><th>编号</th><th>商品名称</th><th>商品型号</th><th>商品价格</th></tr>";
//遍历商品
for (Product product : list) {
// /day11_pro/DetailServlet?id=1 访问DetailSErvlet的servlet程序,同时传递 名为id,值为1 的参数
html += "<tr><td>"+product.getId()+"</td><td><a href='/day11_pro/DetailServlet?id="+product.getId()+"'>"+product.getProName()+"</a></td><td>"+product.getProType()+"</td><td>"+product.getPrice()+"</td></tr>";
}
html += "</table>";
html +="</html>";
writer.write(html)
3.接受cookie信息,取出prodHist的cookie
cookie[] cookies = request.getCookies();
4.根据编号查询相对应的商品
if(cookies!=null){
html += "<table align='center'><tr><th>最近浏览过的商品</th></tr>";
for (Cookie cookie : cookies) {
if(cookie.getName().equals("prodHist")){
String prodHist = cookie.getValue(); // 3,2,1
String[] ids = prodHist.split(",");
//遍历浏览过的商品id
for (String id : ids) {
//查询数据库,查询对应的商品
Product p = dao.findById(id);
//显示到浏览器
html += "<tr><td>"+p.getId()+"</td><td>"+p.getProName()+"</td><td>"+p.getPrice()+"</td></tr>";
}
}
}
html += "</table>";
}
5.把商品显示到浏览过的商品列表
3.2创建一个DetailServlet来显示商品详细信息
作用:
1.根据编号查询对应的商品
//接受获取到的编号
String id = request.getParameter("id");
//查询编号所对应的商品
ProductDao dao = new ProductDao();
Product product = dao.findById(id);
2.显示商品到浏览器
//将商品的详细信息显示到浏览器中
PrintWriter writer = response.getWriter();
String html = "";
html += "<html><head><title>商品详细信息</title></head>";
html += "<body><center><h1>详细信息</h1></center><table border='1' align='center'>";
html += "<tr><th>编号</th><td>"+product.getId()+"</td></tr>";
html += "<tr><th>商品名称</th><td>"+product.getProName()+"</td></tr>";
html += "<tr><th>商品型号</th><td>"+product.getProType()+"</td></tr>";
html += "<tr><th>商品价格</th><td>"+product.getPrice()+"</td></tr>";
html += "</table>";
html += "<center><a href='"+request.getContextPath()+"/ListServlet'>[返回列表]</a>";
html +="</html>";
writer.write(html);
3.创建cookie,名为prodHist
//1.创建cookie
Cookie cookie = new Cookie("prodHist",creatValue(request,id));
cookie.setMaxAge(1*30*24*60*60);
3.1分析思路
生成cookie的值
分析:
当前cookie值 传入商品id 最终cookie值
null或没有prodHist 1 1 (算法: 直接返回传入的id )
1 2 2,1 (没有重复且小于3个。算法:直接把传入的id放最前面 )
2,1 1 1,2(有重复且小于3个。算法:去除重复id,把传入的id放最前面 )
3,2,1 2 2,3,1(有重复且3个。算法:去除重复id,把传入的id放最前面)
3,2,1 4 4,3,2(没有重复且3个。算法:去最后的id,把传入的id放最前面)
3.2生成cookie的值
Cookie[] cookies = request.getCookies();
String prodHist = null;
if(cookies!=null){
for (Cookie cookie : cookies) {
if(cookie.getName().equals("prodHist")){
prodHist = cookie.getValue();
break;
}
}
}
//null或没有prodHist
if(cookies==null || prodHist==null){
//直接返回传入的id
return id;
}
//String -> String[] -> Collection :为了方便判断重复id
String[] ids = prodHist.split(",");
Collection coll = Arrays.asList(ids);
// LinkedList 方便地操作(增删改元素)集合
// Collection -> LinkedList
LinkedList list = new LinkedList(coll);
//不超过3个
if(list.size()<3){
//id重复
if(list.contains(id)){
//去除重复id,把传入的id放在最前面
list.remove(id);
list.addFirst(id);
}else{
//直接把传入的id放前面
list.addFirst(id);
}
}else{
//等于3个
//id重复
if(list.contains(id)){
//去除重复id,把传入的id放最前面
list.remove(id);
list.addFirst(id);
}else{
//去最后的id,把传入的id放最前面
list.removeLast();
list.addFirst(id);
}
}
// LinedList -> String
StringBuffer sb = new StringBuffer();
for (Object object : list) {
sb.append(object+",");
}
//去掉最后的逗号
String result = sb.toString();
result = result.substring(0, result.length()-1);
4.把cookie发送到浏览器保存
response.addCookie(cookie);

<项目><day11>查看用户浏览过的商品的更多相关文章
- Cookie小案例-----记住浏览过的商品记录
Cookie小案例------记住浏览过的商品记录 我们知道,这个功能在电商项目中非经常见.这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用, 实现功能例如以下: 1, ...
- Linux查看用户和组命令
在Linux系统里,我们会经常用Linux查看用户的命令,在这里我们一些命令进行了总结,总共有7个,并做了详细的解释,以便让大家更深入的理解,接下来让我们一起来看看这些命令和具体应用. 一.Linux ...
- linux下添加删除,修改,查看用户和用户组
一.组操作 1.创建组: groupadd test #增加一个test组 2.修改组 groupmod -n test2 test #将test组的名子改成test2 3.删除组 groupdel ...
- Hadoop项目实战-用户行为分析之分析与设计
1.概述 本课程的视频教程地址:<用户行为分析之分析与设计> 下面开始本教程的学习,本教程以用户行为分析案例为基础,带着大家对项目的各个指标做详细的分析,对项目的整体设计做合理的规划,让大 ...
- [原]Jenkins(十四)---jenkins示例:admin管理所有项目,新建用户只能看部分项目
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horiz ...
- 【SSH网上商城项目实战09】添加和更新商品类别功能的实现
转自:https://blog.csdn.net/eson_15/article/details/51347734 上一节我们做完了查询和删除商品的功能,这一节我们做一下添加和更新商品的功能. 1. ...
- vue中前进刷新、后退缓存用户浏览数据和浏览位置的实践
vue中前进刷新.后退缓存用户浏览数据和浏览位置的实践 2018年07月07日 11:58:40 大灰狼的小绵羊哥哥 阅读数:4492 vue中,我们所要实现的一个场景就是: 1.搜索页面==&g ...
- 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。
查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...
- Python基础-三次用户验证登录购买商品程序
需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...
随机推荐
- jstat命令-帮助优化java性能
jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]
- poj3050 Hopscotch
思路: 水题. 实现: #include <iostream> #include <cstdio> #include <set> using namespace s ...
- web.xml 加载顺序
参考网址: 上下文对象>监听>过滤器>servlet 1.先加载上下文对象 <!-- 初始化Spring classpath*:spring/applicationContex ...
- 如何安装sql server2005 windows 8
如何安装sql server2005 windows 8 1 从网上下载到本地文件 ,这里使用的是cs_sql_2005_dev_all_dvd 安装版. 2. 点击下图所表示进行安装 3. ...
- spring.net应用
经过一段时间的调试,终于把spring.net中关于aop的方面给做个了一个比较完整的Demo.包含异常日志和性能日志.spring.net和log4net配置. http://files.cnblo ...
- 忘记dba用户密码,利用SQLPlus重置dba密码
打开SQL Plus 输入用户名: sys as sysdba 输入口令:可直接回车 连接到: Oracle Database 11g Enterprise Edition Release 11.2. ...
- webpac入门
基于node环境,必须确保node已经安装:node-v,npm-v 基础入门 前身:browserify 缺点:只能转化JS webpack作用:一切都是模块化(js.css图片等),一个模块加载器 ...
- CAD交互绘制圆弧(com接口)
在CAD设计时,需要绘制圆弧,用户可以在图面点圆弧起点,圆弧上的一点和圆弧的终点,这样就绘制出圆弧. 主要用到函数说明: _DMxDrawX::DrawArc2 由圆弧上的三点绘制一个圆弧.详细说明如 ...
- base64记载
一丶 js /** * * Base64 encode / decode * * @author haitao.tu * @date 2010-04-26 * @email tuhaitao@foxm ...
- 看完这篇 你就能完全操作git 远程分支的增、删、改、查了
最近项目中又用到了git所以在此总结一番,这篇主要针对的是怎么创建远程分支,如何删除远程分支. 首先,如何创建远程分支.将一系列前期准备工作准备完成后(创建\添加ssh): 在终端键入 git bra ...