1.商品显示java代码:
package com.ask.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
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 Demo2 extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//输出网站的所有商品
out.println("商品:<br>");
Map<String, Book> books=Db.getBooks();
for (Map.Entry<String, Book> entry : books.entrySet()) {
Book book=entry.getValue();
out.println("<a href='/myCookie/demo3?id="+book.getId()+"' target=_blank>"+book.getName()+"</a>");
out.print("<br/><br/>");
}
//显示用户曾经看过的商品
out.println("你已浏览过的商品:<br/><br/>");
Cookie[] cookies=req.getCookies();
for (int i = 0;cookies!=null && i < cookies.length; i++) {
if (cookies[i].getName().equals("bookHistory")) {
String[] ids=cookies[i].getValue().split("\\,");
for (String id : ids) {
Book book=(Book) Db.getBooks().get(id);
out.println(book.getName()+"<br/>");
}
}
}
}
}
class Db{
//LinkedHashMap 有序的map集合,用来显示有顺序的输出
private static Map<String, Book> books=new LinkedHashMap<String, Book>();
//初始化商品
static {
books.put("1",new Book("1","javaweb开发","张三","是一本一张一弛的书"));
books.put("2",new Book("2","java程序设计","李四","是一本不能再好的书"));
books.put("3",new Book("3","java设计模式","张三","是一提高智力的书"));
books.put("4",new Book("4","java高级应用","李四","是一本渴望的书"));
books.put("5",new Book("5","java经典案例","张三","是一本爱情小说的书"));
}
public static Map getBooks(){
return books;
}
}
class Book{
private String id;
private String name;
private String author;
private String descipton;
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;
}
public String getDescipton() {
return descipton;
}
public void setDescipton(String descipton) {
this.descipton = descipton;
}
public Book() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author + ", descipton=" + descipton + "]";
}
public Book(String id, String name, String author, String descipton) {
super();
this.id = id;
this.name = name;
this.author = author;
this.descipton = descipton;
}
}
2.商品选择之后显示代码:
package com.ask.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 Demo3 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//根据用户带过来的id显示商品的详细信息
String id=req.getParameter("id");
System.out.println(id);
Book book=(Book) Db.getBooks().get(id);
out.println(book.getId()+"<br>");
out.println(book.getName()+"<br>");
out.println(book.getAuthor()+"<br>");
out.println(book.getDescipton()+"<br>");
//显示用户曾经看过的商品
//构建cookie响应给浏览器
String cookieValue=buildCookie(id,req);
Cookie cookie=new Cookie("bookHistory", cookieValue);
cookie.setMaxAge(1*30*24*3600);
cookie.setPath("/myCookie");
resp.addCookie(cookie);
}
//构建cookie响应给浏览器
private String buildCookie(String id, HttpServletRequest req) {
String bookHistory=null;
//获取所有的cookie
Cookie[] cookies=req.getCookies();
//遍历cookies
for (int i = 0; cookies!=null && i < cookies.length; i++) {
//判断cookies里面有没有bookHistory这个名字的cookie
if (cookies[i].getName().equals("bookHistory")) {
//有将这个值赋给bookHistory变量
bookHistory=cookies[i].getValue();
}
}
//判断这个名字的值是否为空
if (bookHistory==null) {
//是空讲id返回
return id;
}
//将获取的cookie名字为bookHistory分割成数组,然后转换为list集合,再将list集合转换linkedList集合
//用来操作数据方便
LinkedList<String> list=new LinkedList<String>(Arrays.asList(bookHistory.split("\\,")));
//判断集合是否包含id ,
if (list.contains(id)) {
list.remove(id);
}else if(list.size()>=3){
list.remove(id);
}
list.addFirst(id);
StringBuffer sb=new StringBuffer();
for (String bid : list) {
sb.append(bid+",");
}
return sb.deleteCharAt((sb.length()-1)).toString();
}
}