利用Cookie,实现动态显示用户曾经浏览过的商品

1、在DisPlay的servlet中主要做两件事情

1.1显示在出售的商品

1.2显示顾客曾经浏览的商品

DisPlay的代码如下:

package com.baowei.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Display extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //显示所有的图书
        PrintWriter  out = resp.getWriter();
        out.print("本书店出售的图书如下:<br/>");

        Map<String,Book> books = DB.getDBMap();
        Set<Entry<String, Book>> set = books.entrySet();
        Iterator<Entry<String, Book>>  it = set.iterator();
        while(it.hasNext()){
            Entry<String, Book> entry = it.next();
            Book book = entry.getValue();
            out.print("<a href=‘/HuiHuaTest/BookDetail?id="+book.getId()+"‘ target=‘_blank‘>"+book.getName()+"</a><br/>");

        }

        //用户最近看过的图书
        out.print("你最近浏览过的图书如下:<br/>");
        Cookie cookie = null;
        Cookie [] cookies = req.getCookies();
        for (int   i = 0; cookies != null &&   i < cookies.length;   i++) {
            if(cookies[i].getName().equals("bookHistory")){
                cookie = cookies[i];
            }
        }

        if(cookie!=null){
            //找到了bookHistory这个cookie
            String bookHistory = cookie.getValue();   //4_6_1
            String ids[] = bookHistory.split("\\_"); //这样划分更好
            for(String id: ids){
                Book book = (Book) DB.getDBMap().get(id);
                out.print(book.getName() + "<br/>");
            }
        }

    }

}

2. 对于图书的详细介绍的BookDetail的servlet,也是两个功能

2.1 介绍商品的详细信息

2.2 将浏览过的商品的信息加入到Cookie中,并且将Cookie写回浏览器

BookDetail的实现代码如下:

 1 package com.baowei.cookie;
 2
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.Arrays;
 6 import java.util.LinkedList;
 7
 8 import javax.servlet.ServletException;
 9 import javax.servlet.http.Cookie;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 public class BookDetail extends HttpServlet {
15
16     public void doGet(HttpServletRequest request, HttpServletResponse response)
17             throws ServletException, IOException {
18
19         doPost(request, response);
20
21     }
22
23     public void doPost(HttpServletRequest request, HttpServletResponse response)
24             throws ServletException, IOException {
25
26         response.setContentType("text/html;charset=UTF-8");
27         response.setCharacterEncoding("UTF-8");
28         PrintWriter out = response.getWriter();
29
30         // 1.根据用户带过来的id值,显示相应商品的信息
31         out.print("您想看的书的详细信息为:<br/>");
32         String id = request.getParameter("id");
33         Book book = (Book) DB.getDBMap().get(id);
34         out.print(book.getId() + "<br/>");
35         out.print(book.getName() + "<br/>");
36         out.print(book.getAuthor() + "<br/>");
37
38         // 2.以cookie的形式回写该商品的id号给浏览器
39         String bookHistory = makeCookie(book.getId(), request);
40         Cookie cookie = new Cookie("bookHistory", bookHistory);
41         //cookie.setMaxAge(10000); //将Cookie保存在硬盘内
42         response.addCookie(cookie);
43
44     }
45
46     // 根据用户原来看过的书,以及现在看的书的id,构建新的cookie值
47     private String makeCookie(String id, HttpServletRequest request) {
48
49         // bookHistory=null    3   bookHistory=3
50         // bookHistory=2_1_5   3   bookHistory=3_2_1
51         // bookHistory=2 3     3   bookHistory=3_2
52         // bookHistory=2_3     3   bookHistory=3_2
53
54         // 1.得到用户曾经看过的书
55         String bookHistory = null;
56         Cookie cookies[] = request.getCookies();
57         for (int i = 0; cookies != null && i < cookies.length; i++) {
58             if (cookies[i].getName().equals("bookHistory")) {
59                 bookHistory = cookies[i].getValue();
60             }
61         }
62
63         if (bookHistory == null) {
64             bookHistory = id;
65             return bookHistory;
66         }
67
68         // bookHistory=1_2_5 代表用户曾经看一些书,接着程序要得到用户曾经看过什么书
69         String ids[] = bookHistory.split("_");
70         // 为了检测数组中是否包含当前id,我们应该把数据转成集合,并且还要转成链表结构的集合
71         LinkedList<String> idList = new LinkedList(Arrays.asList(ids));
72
73         if (idList.contains(id)) {
74             idList.remove(id);
75         } else {
76             if (idList.size() >= 5) {
77                 idList.removeLast();
78             }
79         }
80         idList.addFirst(id);
81
82         StringBuffer sb = new StringBuffer();
83         for (String lid : idList) { // 1_2_3_
84             sb.append(lid + "_");
85         }
86
87         return sb.deleteCharAt(sb.length() - 1).toString();
88     }
89
90 }

上面两个程序中用到的Book类和DB类如下:

Book类的代码:

 1 package com.baowei.cookie;
 2
 3 public class Book {
 4
 5     private String id;
 6     private String name;
 7     private String author;
 8
 9     public Book() {
10
11     }
12
13     public Book(String id, String name, String author) {
14         this.id = id;
15         this.name = name;
16         this.author = author;
17     }
18     public String getId() {
19         return id;
20     }
21     public void setId(String id) {
22         this.id = id;
23     }
24     public String getName() {
25         return name;
26     }
27     public void setName(String name) {
28         this.name = name;
29     }
30     public String getAuthor() {
31         return author;
32     }
33     public void setAuthor(String author) {
34         this.author = author;
35     }
36
37
38
39 }

DB类的代码如下:

package com.baowei.cookie;

import java.util.HashMap;
import java.util.Map;

public class DB {

    static Map<String,Book>   map = new HashMap<String,Book>();

    static {

        map.put("1", new Book("1","JavaWeb开发","张保卫") );
        map.put("2", new Book("2","操作系统","张保卫") );
        map.put("3", new Book("3","Spring开发","张保卫") );
        map.put("4", new Book("4","Struts2开发","张保卫") );
        map.put("5", new Book("5","Java基础开发","张保卫") );
        map.put("6", new Book("6","数据结构","张保卫") );
        map.put("7", new Book("7","ACM","张保卫") );
        map.put("8", new Book("8","计算机网络","张保卫") );
        map.put("9", new Book("9","软件工程","张保卫") );
        map.put("10", new Book("10","Android开发","张保卫") );
    }

    public static Map<String,Book> getDBMap(){
        return map;
    }

}
时间: 2024-08-04 14:08:43

利用Cookie,实现动态显示用户曾经浏览过的商品的相关文章

如何利用cookie来保存用户登录账号

众所周知,cookie在网页编写中不接或缺,今天就谈谈如何利用cookie技术来保存用户登录账号 1.首先是否保存用户登录账号当然是用户自行决定,所以我们需要在用户登录界面设置一个复选框,以此取得用户意愿信息,以便为下一步操作提供判断依据. require_once 'common.php'; 用户账号:</td><td><input type="text" name="id" value="<?php echo get

Cookie小案例-----记住浏览过的商品记录

Cookie小案例------记住浏览过的商品记录 我们知道,这个功能在电商项目中很常见.这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用, 实现功能如下: 1,点击购买的商品后,显示到另一页面 2,记住用户浏览过的商品,并在页面时中显示 3,当浏览过的数量超过最大值限度时,最下面一个商品被挤下去 4,当浏览过的商品本身就在浏览记录中,显示列表将其从中间移到最上面 显示一打开网站的样子和显示用户的浏览记录: package cn.itcast.cookie; im

cookie技术案例-用户浏览商品的记录

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

cookie记录用户的浏览商品的路径

在电子商务的网站中,经常要记录用户的浏览路径,以判断用户到底对哪些商品感兴趣,或者哪些商品之间存在关联. 下面将使用cookie记录用户的浏览过的历史页面.该网站将每个页面的标题保存在该页面的$TITLE 变量中,用户每访问一次,就将新访问的标题添加到COOKie变量$_COOKIE["history"]值中. 随着访问页面的次数增多,该cookie变量中保存的含有页面标题的字符串会越来越长.将cookie变量切分成数组.然后输出数组元素的值就可以输出用户最近访问的页面的标题了 <

JavaWeb利用cookie记住账号

JavaWeb利用cookie记住账号. 首先,来看看界面什么样子. 记住账号最普遍的做法,就是在点击登录时,将账号保存到cookie中. 材料准备 <script src="${ctx}/background/js/jquery-1.7.2.js" type="text/javascript"></script> <script src="${ctx}/background/js/jquery.cookie.js"

利用cookie,实现刷新页面跳转,左侧菜单点击后状态保持不变。

是一个后台关系系统,后台是phyton,后台把左侧菜单都是利用a标签进行跳转,导致菜单点击状态在页面刷新后失效,用户体验不好,被要求改掉. 查了一些资料.利用cookie终于搞定了这个大问题.主要利用 cookie记录存值. 代码贴上去,以防忘掉 $(".nav-item li a").click(function(){ $.cookie("navstation", $(this).html(), { path: "/" }); }); var

Python利用cookie模拟网站登录

Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了 [[email protected]~]# cat cscook.py #!/usr/bin/python #-*- coding: UTF-8 -*- import cookielib import urlli

js中利用cookie实现记住密码功能

js中利用cookie实现记住密码功能 在登录界面添加记住密码功能,我首先想到的是在java后台中调用cookie存放账号密码,大致如下: 1 HttpServletRequest request 2 HttpServletResponse response 3 Cookie username = new Cookie("username ","cookievalue"); 4 Cookie password = new Cookie("password

利用cookie改变背景色

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head> <title></title> <scr