使用Cookie获取最近浏览商品

本文介绍了Cookie在客户端技术中的作用,详细阐述了当用户访问Web资源时,如何通过Cookie记录和传递用户信息,以及在二次访问时如何利用Cookie实现个性化体验。

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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄鸭and小黑鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值