cookieDemo1:
package cn.itcast.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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;
import cn.itcast.domain.Book;
import cn.itcast.domain.DB;
public class CookieDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
//显示网站的商品列表
writer.write("本网站有如下商品:<br>");
Map<String, Book> all = DB.getAll();
for(Map.Entry<String, Book> me : all.entrySet()) {
Book book = me.getValue();
writer.write("<a href='/day07/servlet/CookieDemo2?id="+book.getId()+"'>" + book.getName() + "</a><br>");
}
//显示用户曾经浏览过的商品
writer.write("<br><br>您曾经购买过的商品:<br>");
//获得cookie, bookHistory=1_2_3
Cookie[] cookies = request.getCookies();
for(int i=0; cookies!=null&&i<cookies.length; i++) {
if("bookHistory".equals(cookies[i].getName())) {
String[] ids = cookies[i].getValue().split("//_");
for(String id : ids) {
Book book = all.get(id);
writer.write(book.getName() + "<br>");
}
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
CookieDemo2:
package cn.itcast.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
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 cn.itcast.domain.Book;
import cn.itcast.domain.DB;
public class CookieDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
//显示商品详细信息
//获得用户选择的书的id
String bookid = request.getParameter("id");
writer.write("这本书的详细信息如下:<br>");
Book book = DB.find(bookid);
writer.write(book.getId() + "<br>");
writer.write(book.getName() + "<br>");
writer.write(book.getAuthor() + "<br>");
writer.write(book.getPrice() + "<br>");
//发送Cookie
String bookHistory = getCookie(bookid, request);
Cookie cookie = new Cookie("bookHistory", bookHistory);
cookie.setMaxAge(60*5);
response.addCookie(cookie);
}
private String getCookie(String bookid, HttpServletRequest request) {
// 生成cookie的value bookHistory=1
//获得以前发给客户端的cookie
String bookHistory = null;
Cookie[] cookies = request.getCookies();
for(int i=0; cookies!=null&&i<cookies.length; i++) {
if("bookHistory".equals(cookies[i].getName()))
bookHistory = cookies[i].getValue();
}
//假设买的是1 最多放三本
//bookHistory null bookHistory=1
//bookHistory 2_1_3 1_2_3
//bookHistory 3_5 1_3_5
//bookHistory 2_3_5 1_2_3
if(bookHistory==null)
return bookid;
String ids[] = bookHistory.split("//_");
List<String> l = Arrays.asList(ids);
LinkedList<String> list = new LinkedList<String>();
list.addAll(l);
if(list.contains(bookid)) {
//包含
list.remove(bookid);
list.addFirst(bookid);
} else if(list.size()==3) {
//不包含,但是已经有3本了
list.removeLast();
list.addFirst(bookid);
} else {
//不包含,不足3本
list.addFirst(bookid);
}
StringBuilder sb = new StringBuilder();
for(String str : list) {
sb.append(str + "_");
}
sb.deleteCharAt(sb.length()-1); //2_3_5_
return sb.toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}