cookie的应用——浏览记录
实体类
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() + " " + p.getProName() + " " + 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的应用——浏览记录的更多相关文章
- Cookie实现商品浏览记录--方式二:JS实现
使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...
- 使用cookie实现打印浏览记录的功能
可以用cookie知识来实现打印浏览记录.这里面用到的思路是将浏览记录以字符串的方式保存到cookie中,当浏览记录增加时,再将其转化为数组. $uri=$_SERVER['REQUEST_URI'] ...
- 使用Cookie保存商品浏览记录
数据流程:页面上是商品列表,点击<a href="productServlet">商品名</a> ==>跳转到自定义的servlet中进行处理,先得到 ...
- destoon系统开发-最新利用浏览器的cookie 做历史浏览记录
注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断 <!--历史浏览记录 S--> <div class=&quo ...
- Cookie实现商品浏览记录--方式一:Java实现
方式一:Java代码方式实现:此种方式实现思路较为顺畅.难点在于,如何实现将最近浏览的产品显示在最前面:实现方式是借助LinkedList提供的remove()方法,先将此id从列表中移除,然后再借助 ...
- javaWeb 使用cookie显示商品浏览记录
package de.bvb.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.Date ...
- Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)
public class ShowServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpSer ...
- jquery.cookie.js结合asp.net实现最近浏览记录
一.html代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- 简单的Cookie记录浏览记录案例
books.jsp 界面 代码 <%@ page contentType="text/html;charset=UTF-8" language="java" ...
随机推荐
- Gulp安装及使用
測试环境 Mac:10.10.4 Gulp:3.9.0 时间:2015年08月15日18:07:08 安装Gulp sudo npm install --global gulp npm install ...
- has实现 更新视图但不重新加载页面原理
URL中#符号本身以及它的字符称之为hash,可以通过window.location.hash获取.hash具有如下特点: 1.has虽然出现在URL中,但不会被包括在http请求中.因此,改变has ...
- ×变成x
昨天晚上遇到一个很尴尬的bug. 当使用IE浏览器,跳转链接使用&传参的时候第二个参数是times,也就是×(你有可能看到的是x,实际是×),结果& ...
- Eclipse + CDT引入OpenCV失败的解决的方法
Android JNI开发中用到了OpenCV,由于想通过JNI实现,就没有去用Android层的Lib引用. 可是操作中发如今.cpp文件中include的时候发现"#include &l ...
- (一)Java 入门教程
Java 入门教程 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统 ...
- Linux/Android——输入子系统input_event传递 (二)【转】
本文转载自:http://blog.csdn.net/jscese/article/details/42099381 在前文Linux/Android——usb触摸屏驱动 - usbtouchscre ...
- 美国诚实签经验——必带材料:护照,证件照,DS160确认页,面试预约确认页,+境外照片
Step3. 准备签证材料这些材料如果准备,请一定围绕着你的DS160表格,不可说谎,但可适当修饰,辅佐它,烘托它,营造出一种——你绝无可能去不复返,绝无可能制造麻烦,绝无想占人便宜的意思,并且随时可 ...
- python-----获取ip的两种方法
方法一: 通常使用socket.gethostbyname()方法即可获取本机IP地址,但有时候获取不到(比如没有正确设置主机名称),示例代码如下: import socket # 获取本机计算机名称 ...
- 16. Ext.ux.TabCloseMenu插件的使用(TabPanel右键关闭菜单) 示例
转自:https://crabdave.iteye.com/blog/327978 Ext.ux.TabCloseMenu插件的使用(TabPanel右键关闭菜单) 示例 效果: 创建调用的HTML: ...
- 17_activity任务栈和启动模式
夜神安卓模拟器. 如果从第一个页面开启另外一个页面,只要不去调finish()方法咱们上一个页面它是不会退出的,它会留在底下.留在底下的话它设计了这样一个模式就是为了维护一个比较好的用户体验,你的仪器 ...