实体类

package entity;

public class Product {

    private String id;
private String proName;
private String proType;
private double price;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getProType() {
return proType;
}
public void setProType(String proType) {
this.proType = proType;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Product(String id, String proName, String proType, double price) {
super();
this.id = id;
this.proName = proName;
this.proType = proType;
this.price = price;
}
public Product() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Product [id=" + id + ", price=" + price + ", proName="
+ proName + ", proType=" + proType + "]";
} }

商品列表servlet

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.ProductDao;
import entity.Product;
/*
* 查询所有商品的servlet
*/
public class ListServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); ProductDao dao = new ProductDao();
List<Product> list = dao.findAll(); //2.把商品显示到浏览器
PrintWriter writer = response.getWriter();
String html = ""; html += "<html>";
html += "<head>";
html += "<title>显示商品列表</title>";
html += "</head>";
html += "<body>";
html += "<table border='1' align='center' width='600px'>";
html += "<tr>";
html += "<th>编号</th><th>商品名称</th><th>商品型号</th><th>商品价格</th>";
html += "</tr>";
//遍历商品
if (list != null) {
for(Product p : list) {
html += "<tr>";
html += "<td>"+p.getId()+"</td>" +
"<td><a href='"+request.getContextPath()+"/DetailServlet?id="+p.getId()+"'>"
+p.getProName()+"</a></td><td>"+p.getProType()+"</td><td>"+p.getPrice()+"</td>";
html += "<tr>";
}
}
html += "</table>"; /**
* 显示浏览过的商品
*/
html += "最近浏览过的商品:<br/>";
Cookie[] cookies = request.getCookies();// 获取cookie对象
if (cookies != null) {
for(Cookie cookie : cookies) {
if (cookie.getName().equals("prodHist")) {
String prodHist = cookie.getValue();
String[] ids = prodHist.split(",");
for (String id : ids) {
//查询数据库,查询对应的商品
Product p = dao.findById(id);
//显示到浏览器
html += "" + p.getId() + "&nbsp;" + p.getProName() + "&nbsp;" + p.getPrice() + "<br/>";
}
}
}
}
html += "</body>";
html += "</html>"; writer.write(html);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
} }

商品详情

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import dao.ProductDao;
import entity.Product;
/**
* 显示商品详细
* @author Administrator
*
*/
public class DetailServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html; charset=utf-8"); //1.获取编号
String id = request.getParameter("id"); //2.到数据库中查询对应编号的商品
ProductDao dao = new ProductDao();
Product product = dao.findById(id); //3.显示到浏览器
PrintWriter writer = response.getWriter();
String html = ""; html += "<html>";
html += "<head>";
html += "<title>显示商品详细</title>";
html += "</head>";
html += "<body>";
html += "<table border='1' align='center' width='300px'>";
if(product!=null){
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></center>";
html += "</body>";
html += "</html>"; writer.write(html); /**
* 创建cookie,并发送
*/
//1.创建cookie
Cookie cookie = new Cookie("prodHist", createValue(request, id));
cookie.setMaxAge(1*60*60);//一个月
//2.发送cookie
response.addCookie(cookie);
} /*
* 生成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放最前面)
* @return
*/
public String createValue(HttpServletRequest request, String id) {
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;
} // 3,21 2
//String -> String[] -> Collection :为了方便判断重复id
String[] ids = prodhist.split(",");
Collection<String> colls = Arrays.asList(ids); // LinkedList 方便地操作(增删改元素)集合
// Collection -> LinkedList
LinkedList<String> list = new LinkedList<String>(colls); //不超过3个
if(list.size() < 3) {
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 obj : list) {
sb.append(obj + ",");
}
//去掉最后的逗号
String result = sb.toString();
result = result.substring(0, result.length()-1); return result;
} }

dao

package dao;

import java.util.ArrayList;
import java.util.List; import entity.Product; 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 , "LN00" + i,34.0 + i ));
}
} /**
* 提供查询所有商品的方法
*/
public List<Product> findAll() {
return data;
} /**
* 提供根据编号查询商品的方法
*/
public Product findById(String id) {
for (Product p : data) {
if(p.getId().equals(id)) {
return p;
}
}
return null;
}
}

cookie的应用——浏览记录的更多相关文章

  1. Cookie实现商品浏览记录--方式二:JS实现

    使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...

  2. 使用cookie实现打印浏览记录的功能

    可以用cookie知识来实现打印浏览记录.这里面用到的思路是将浏览记录以字符串的方式保存到cookie中,当浏览记录增加时,再将其转化为数组. $uri=$_SERVER['REQUEST_URI'] ...

  3. 使用Cookie保存商品浏览记录

    数据流程:页面上是商品列表,点击<a href="productServlet">商品名</a> ==>跳转到自定义的servlet中进行处理,先得到 ...

  4. destoon系统开发-最新利用浏览器的cookie 做历史浏览记录

      注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断    <!--历史浏览记录 S--> <div class=&quo ...

  5. Cookie实现商品浏览记录--方式一:Java实现

    方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...

  6. javaWeb 使用cookie显示商品浏览记录

    package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...

  7. Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)

    public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpSer ...

  8. jquery.cookie.js结合asp.net实现最近浏览记录

    一.html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  9. 简单的Cookie记录浏览记录案例

    books.jsp 界面 代码 <%@ page contentType="text/html;charset=UTF-8" language="java" ...

随机推荐

  1. shell脚本 加密备份MySQL数据库

    1.加密备份为.bak文件(实际只是个.zip文件) #!/bin/bash # $:IP地址 # $:用户名 # $:数据库密码 # $:数据库名 # $:加密密码 # $:备份文件名 mysqld ...

  2. JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中

    处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.ent ...

  3. Wget下载多个链接

    需要wget下载多个文件链接时,可以采用如下方法: 1. 将链接存入文件url.list中: 2. wget -bc -i url.list -o [log_file] -P [target_dir] ...

  4. 《炉石传说》架构设计赏析(4):Asset管理

    欢迎转载,请注明作者[燕良@游戏开发]及原文地址:http://blog.csdn.net/neil3d/article/details/39580197 另外.欢迎大家来我的QQ群交流各种游戏引擎相 ...

  5. 今晚的两道 bc

    第一道题  Beautiful Palindrome Number ,简单组合计数问题,手算打表就好~大概十五分钟左右搞定[第一次 提交竟然 wa了一次 有一个小小的坑在那.... /******** ...

  6. Java 基础 —— 注解

    注解(annotation)不是注释(comment): 注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法.注解在一定程度上实现了元数据和源代码文件的结合,而不是 ...

  7. luogu 3953 逛公园

    noip2017 D1T3 逛公园 某zz选手看到数据范围直接就最短路计数了,结果写错了爆零 题目大意: N个点M条边构成的有向图,且没有自环和重边.其中1号点是起点,N号点是公园的终点,每条边有一个 ...

  8. ModuleNotFoundError: No module named 'cStringIO'

    这是2.x转3.x问题: 2.x写法: import cStringIO 3.x写法: from io import StringIO 问题解决.

  9. POJ 2452 Sticks Problem (暴力或者rmq+二分)

    题意:给你一组数a[n],求满足a[i] < a[k] < a[j] (i <= k <= j)的最大的 j - i . 析:在比赛时,我是暴力做的,虽然错了好多次,后来说理解 ...

  10. 如何过滤 adb logcat 输出(转载)

    转自:http://www.cnblogs.com/imouto/archive/2012/12/11/filtering-adb-logcat-output.html 简介: 本文介绍如何在 she ...