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

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

我们知道,这个功能在电商项目中很常见。这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用,

实现功能如下:

1,点击购买的商品后,显示到另一页面

2,记住用户浏览过的商品,并在页面时中显示

3,当浏览过的数量超过最大值限度时,最下面一个商品被挤下去

4,当浏览过的商品本身就在浏览记录中,显示列表将其从中间移到最上面

显示一打开网站的样子和显示用户的浏览记录:

package cn.itcast.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

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 CookieDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter  out = response.getWriter();

		//1.显示网站所有商品
		out.print("本网站有如下书籍:<br/>");
		Map<String,Book> map = DB.getMap();
		for(Map.Entry<String, Book> entry : map.entrySet()){
			Book book = entry.getValue();
			out.print("<a href='/day07/servlet/CookieDemo3?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>");
		}

		out.print("您曾经看过如下商品:<br/>");
		//2.显示用户曾经浏览过的商品    //   bookHistory
		Cookie cookie = null;
		Cookie cookies[] = request.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.getMap().get(id);
				out.print(book.getName() + "<br/>");
			}
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

class DB{
	private static Map<String,Book> map = new HashMap();
	static{
		map.put("1", new Book("1","javaweb开发","老张"));
		map.put("2", new Book("2","jdbc开发","老黎"));
		map.put("3", new Book("3","struts2开发","老张"));
		map.put("4", new Book("4","spring开发","老黎"));
		map.put("5", new Book("5","hibernate开发","老张"));
	}

	public static Map getMap(){
		return map;
	}

}

class Book{
	private String id;
	private String name;
	private String author;

	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Book(String id, String name, String author) {
		super();
		this.id = id;
		this.name = name;
		this.author = author;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
}

用于显示商品的详细信息:

package cn.itcast.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
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;
//显示商品详细信息
public class CookieDemo3 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter  out = response.getWriter();

		//1.根据用户带过来的id值,显示相应商品的信息
		out.print("您想看的书的详细信息为:<br/>");
		String id = request.getParameter("id");
		Book book = (Book) DB.getMap().get(id);
		out.print(book.getId() + "<br/>");
		out.print(book.getName() + "<br/>");
		out.print(book.getAuthor() + "<br/>");

		//2.以cookie的形式回写该商品的id号给浏览器
		String bookHistory = makeCookie(book.getId(),request);
		Cookie cookie = new Cookie("bookHistory",bookHistory);
		cookie.setMaxAge(10000);
		response.addCookie(cookie);

	}

	//根据用户原来看过的书,以及现在看的书的id,构建新的cookie值
	private String makeCookie(String id, HttpServletRequest request) {

		//bookHistory=null    3     bookHistory=3
		//bookHistory=2_1_5   3     bookHistory=3_2_1
		//bookHistory=2       3     bookHistory=3_2
		//bookHistory=2_3     3     bookHistory=3_2

		//1.得到用户曾经看过的书
		String bookHistory = null;
		Cookie cookies[] = request.getCookies();
		for(int i=0;cookies!=null && i<cookies.length;i++){
			if(cookies[i].getName().equals("bookHistory")){
				bookHistory = cookies[i].getValue();
			}
		}

		if(bookHistory==null){
			bookHistory = id;
			return bookHistory;
		}

		//bookHistory=1_2_5    代表用户曾经看一些书,接着程序要得到用户曾经看过什么书
		String ids[] = bookHistory.split("_");
		//为了检测数组中是否包含当前id,我们应该把数据转成集合,并且还要转成链表结构的集合
		LinkedList<String> idList = new LinkedList(Arrays.asList(ids));
		/*if(idList.contains(id)){
			//bookHistory=2_3     3     bookHistory=3_2
			idList.remove(id);
			idList.addFirst(id);
		}else{
			//bookHistory=2_1_5   3     bookHistory=3_2_1
			if(idList.size()>=3){
				idList.removeLast();
				idList.addFirst(id);
			}else{
				//bookHistory=2       3     bookHistory=3_2
				idList.addFirst(id);
			}
		}*/
		if(idList.contains(id)){
			idList.remove(id);
		}else{
			if(idList.size()>=3){
				idList.removeLast();
			}
		}
		idList.addFirst(id);

		StringBuffer sb = new StringBuffer();
		for(String lid: idList){   //1_2_3_
			sb.append(lid + "_");
		}

		return sb.deleteCharAt(sb.length()-1).toString();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

运行效果:

时间: 2024-10-09 19:04:33

Cookie小案例-----记住浏览过的商品记录的相关文章

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

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

Cookie小案例

Cookie小案例: 1记住用户最后一次的访问时间 2记住用户登录时的用户名 // 1利用Cookie技术,记住用户上次访问的时间 public class ShowLastAccessTimeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcepti

黑马day05 Cookie小案例&amp;记录上次访问的图书

1.建立一个javaBean Book package cn.itheima.domain; import java.io.Serializable; public class Book implements Serializable{ private String id; private String name; private String description; private String author; private String price; public Book(){} pu

利用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;

cookie的基础以及小案例

1.会话技术 用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话 cookie:将数据保存到客户端浏览器 session:将数据保存到服务器端 向浏览器保存数据: response.addCookie(Cookie cookie)获取浏览器带过来的数据: request.getCookies();创建cookie对象: cookie(String name,String value); 2.JSP的简单概述 jsp:java代码+html的元素+jsp内置

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> <sc

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io

Session小案例------完成用户登陆

Session小案例------完成用户登陆 在项目开发中,用户登陆功能再寻常不过啦,当用户完成用户名和密码校验后,进入主界面,需要在主界面中显示用户的信息,此时用session来记住用户是最为合适不过了. 功能实现如下: 1,完成用户登陆功能 2,在主界面记住用户 3,完成用户注销功能 用户类: package cn.itcast.login; public class User{ private String username; private String password; public

ASP入门(八)-Request对象小案例

我们将制作一个能够记住访问者姓名的页面,在这个小案例中,你将学会如何使用Request对象的Cookies.Form以及ServerVariables集合的值,还可以学习到如何使用Response对象来发送Cookies. 首先来看看程序代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset