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" ...
随机推荐
- Mysql中错误日志、binlog日志、查询日志、慢查询日志简单介绍
前言 数据库的日志是帮助数据库管理员,追踪分析数据库以前发生的各种事件的有力根据.mysql中提供了错误日志.binlog日志(二进制日志).查处日志.慢查询日志.在此,我力求解决下面问题:各个日志的 ...
- android的ListView点击item使item展开的做法
直接上代码把.主要是又一次给item measure高度,直接上代码把 import java.util.ArrayList; import android.app.Activity; import ...
- iOS音频播放 (二):AudioSession 转
原文出处 :http://msching.github.io/blog/2014/07/08/audio-in-ios-2/ 前言 本篇为<iOS音频播放>系列的第二篇. 在实施前一篇中所 ...
- WindowFromPoint -- 获得包括指定点的窗体的句柄
WindowFromPoint 函数功能: 该函数获得包括指定点的窗体的句柄. 函数原型: HWND WindowFromPoint(POINT Point): 參数: Point:指定一个被检 ...
- android 获取手机信息工具类
package com.yqy.yqy_listviewheadview; import android.content.Context; import android.telephony.Telep ...
- python爬虫【第1篇】
一.文件读写 1.打开文件 # 以读文件模式代开new.txt f=open(r"c:\new.txt",“r”) f=open("c:\new.txt",“r ...
- POJ 1625 Censored! (AC自己主动机 + 高精度 + DP)
题目链接:Censored! 解析:AC自己主动机 + 高精度 + 简单DP. 字符有可能会超过128.用map映射一下就可以. 中间的数太大.得上高精度. 用矩阵高速幂会超时,简单的DP就能解决时间 ...
- BZOJ1202 [HNOI2005]狡猾的商人 并查集维护前缀和
1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1935 Solved: 936[Submit][Stat ...
- 【bzoj4597】 [Shoi2016]随机序列
可以发现加减号之间可以互相抵消. 真正加到答案里的只有一些前缀积. 记s[i]为a[1]*a[2]*a[3]...*a[i].那s[i]在答案中出现的次数就是2*3^(n-i-1); 修改一个数只会对 ...
- 【poj2774】Long Long Message
用个分隔符将两个字符串连接起来,再用后缀数组求出height数组的值,找出一个height值最大并且i与i-1的sa值分别在两串字符中就好 #include<algorithm> #inc ...