1. 程式人生 > >電商專案中客戶端歷史紀錄

電商專案中客戶端歷史紀錄

1.點進商品訪問的servlet

package com.itheima.web.servlet;

import java.io.IOException;
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 com.itheima.domain.Product;
import com.itheima.service.ProductService;

public class ProductInfoServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //獲得當前頁
        String currentPage = request.getParameter("currentPage");
        //獲得商品類別
        String cid = request.getParameter("cid");
        
        //獲得要查詢的商品的pid
        String pid = request.getParameter("pid");
        
        ProductService service = new ProductService();
        Product product = service.findProductByPid(pid);
        
        request.setAttribute("product", product);
        request.setAttribute("currentPage", currentPage);
        request.setAttribute("cid", cid);
        
        
        //獲得客戶端攜帶cookie---獲得名字是pids的cookie
        String pids = pid;
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie cookie : cookies){
                if("pids".equals(cookie.getName())){
                    pids = cookie.getValue();
                    //1-3-2 本次訪問商品pid是8----->8-1-3-2
                    //1-3-2 本次訪問商品pid是3----->3-1-2
                    //1-3-2 本次訪問商品pid是2----->2-1-3
                    //將pids拆成一個數組
                    String[] split = pids.split("-");//{3,1,2}
                    List<String> asList = Arrays.asList(split);//[3,1,2]
                    LinkedList<String> list = new LinkedList<String>(asList);//[3,1,2]
                    //判斷集合中是否存在當前pid
                    if(list.contains(pid)){
                        //包含當前檢視商品的pid
                        list.remove(pid);
                        list.addFirst(pid);
                    }else{
                        //不包含當前檢視商品的pid 直接將該pid放到頭上
                        list.addFirst(pid);
                    }
                    //將[3,1,2]轉成3-1-2字串
                    StringBuffer sb = new StringBuffer();
                    for(int i=0;i<list.size()&&i<7;i++){
                        sb.append(list.get(i));
                        sb.append("-");//3-1-2-
                    }
                    //去掉3-1-2-後的-
                    pids = sb.substring(0, sb.length()-1);
                }
            }
        }
        

        Cookie cookie_pids = new Cookie("pids",pids);
        response.addCookie(cookie_pids);
        
        
        
        request.getRequestDispatcher("/product_info.jsp").forward(request, response);
        
    }

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

2.點選返回執行的servlet 

package com.itheima.web.servlet;

import java.io.IOException;
import java.util.ArrayList;
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 com.itheima.domain.PageBean;
import com.itheima.domain.Product;
import com.itheima.service.ProductService;

public class ProductListByCidServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //獲得cid
        String cid = request.getParameter("cid");
        
        String currentPageStr = request.getParameter("currentPage");
        if(currentPageStr==null) currentPageStr="1";
        int currentPage = Integer.parseInt(currentPageStr);
        int currentCount = 12;
        
        ProductService service = new ProductService();
        PageBean pageBean = service.findProductListByCid(cid,currentPage,currentCount);
        
        request.setAttribute("pageBean", pageBean);
        request.setAttribute("cid", cid);
        
        //定義一個記錄歷史商品資訊的集合
        List<Product> historyProductList = new ArrayList<Product>();
        
        //獲得客戶端攜帶名字叫pids的cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                if("pids".equals(cookie.getName())){
                    String pids = cookie.getValue();//3-2-1
                    String[] split = pids.split("-");
                    for(String pid : split){
                        Product pro = service.findProductByPid(pid);
                        historyProductList.add(pro);
                    }
                }
            }
        }
        
        //將歷史記錄的集合放到域中
        request.setAttribute("historyProductList", historyProductList);
        
        
        request.getRequestDispatcher("/product_list.jsp").forward(request, response);
        
    }

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