Cookie是客户端技术,当一个用户访问WEB资源时,web可以返回cookie数据,当用户再次访问web资源时会携带自己独享的cookie数据
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 商品展示首页
*/
@WebServlet("/ProductServlet")
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;character='UTF-8'");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
//展示所有商品
writer.write("所有商品列表:</br>");
DB db = new DB();
Map<String,Product> products = db.GetProducts();
Set<Entry<String, Product>> product_set = products.entrySet();
for(Entry e:product_set){
Product p = (Product) e.getValue();
writer.write("<a href = '/CookieGetProduct/ProductInfoServlet?ID="+p.getID()+"' target = '_blank'>"+p.getProductName()+"</a></br>");
}
//展示最近浏览商品从cookie中取出商品号
Cookie cookies[] = request.getCookies();
Cookie ProductHistory = null;
for(int i=0;cookies!=null&&i<cookies.length;i++){
ProductHistory = cookies[i];
if(ProductHistory.getName()=="ProductHistory"){
break;
}
}
writer.write("最近访问商品列表:</br>");
if(ProductHistory!=null){
String ids[] = ProductHistory.getValue().split("_");
for(int i=0;i<ids.length;i++){
Product p = products.get(ids[i]);
writer.write("<a href = '/CookieGetProduct/ProductInfoServlet?ID="+p.getID()+"' target = '_blank'>"+p.getProductName()+"</a></br>");
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
/**
* 使用类来模拟数据库
*/
class DB{
private Map<String, Product> products = new HashMap();
public DB(){
this.products.put("1", new Product("1","马丁靴","冬季保暖"));
this.products.put("2", new Product("2","马丁靴2","冬季保暖2"));
this.products.put("3", new Product("3","马丁靴3","冬季保暖3"));
this.products.put("4", new Product("4","马丁靴4","冬季保暖4"));
this.products.put("5", new Product("5","马丁靴5","冬季保暖5"));
this.products.put("6", new Product("6","马丁靴6","冬季保暖6"));
}
public Map GetProducts(){
return products;
}
}
/**
* 使用类Product来模拟数据库记录
*/
class Product{
private String ID;
private String ProductName;
private String ProductDecs;
public Product(String iD, String productName, String productDecs) {
super();
ID = iD;
ProductName = productName;
ProductDecs = productDecs;
}
public String getID() {
return ID;
}
public void setID(String iD) {
ID = iD;
}
public String getProductName() {
return ProductName;
}
public void setProductName(String productName) {
ProductName = productName;
}
public String getProductDecs() {
return ProductDecs;
}
public void setProductDecs(String productDecs) {
ProductDecs = productDecs;
}
}
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 商品详情展示页
*/
@WebServlet("/ProductInfoServlet")
public class ProductInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;character='UTF-8'");
response.setCharacterEncoding("UTF-8");
String id = request.getParameter("ID");
PrintWriter writer = response.getWriter();
DB db = new DB();
Map<String, Product> products = db.GetProducts();
Product product = products.get(id);
// 显示商品
writer.write(product.getID() + "\t" + product.getProductName() + "\t" + product.getProductDecs() + "</br>");
String ProductHistory = GetProductHistory(id, request);
// 添加新的cookie
Cookie cookie = new Cookie("ProductHistory", ProductHistory);
cookie.setMaxAge(10000);
response.addCookie(cookie);
}
/**
* 生成新的cookie
*
* @return
*/
private String GetProductHistory(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
//得到用户之前浏览过的商品
Cookie cookies[] = request.getCookies();
Cookie hp = null;
for(int i=0;cookies!=null&&i<cookies.length;i++){
hp = cookies[i];
if(hp.getName()=="ProductHistory"){
break;
}
}
if(hp==null){
return id;
}else{
String ids[] = hp.getValue().split("_");
LinkedList<String> list = new LinkedList<String>(Arrays.asList(ids));
for(int i=0;i<ids.length;i++){
if(id.equals(ids[i])){
list.remove(id);
}
}
if(list.size()>=3){
list.removeLast();
}
list.addFirst(id);;
StringBuffer result=new StringBuffer();
for(String i:list){
result.append(i+"_");
}
result.deleteCharAt(result.length()-1);
return result.toString();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}