javaweb商城之后端(无框架)(三)浏览历史记录

时间:2021-07-27 13:03:39

浏览商品历史记录,存session或者cookie

session感觉有点久,这里用cookie

cookie怎么存呢,存不了product对象,但是可以存pid啊(用符号隔开),再根据pid在历史记录处显示

点击商品,发送请求至productInfoServlet,顺便将商品pid存进cookie

将历史记录存进cookie("pids",pids)

首先得到cookie,
Cookie[] cookies = request.getCookies();
String pid = request.getParameter("pid");
如果不存在,创建,存当前pid;
如果存在,遍历查看有无"pids".equals(cookie.getName()),无,存pid;
                                                                                             有,查看是否已经有该pid,无,存最前;

                                                                                                                                       有,删了,存最前


//1-3-2    点3,3-1-2

//1-3-2    点4,4-1-3-2

ProductInfoservlet

String pid = request.getParameter("pid");
//获得客户端携带cookie---获得名字是pids的cookie
		String pids = pid;
		Cookie[] cookies = request.getCookies();//不管有无,得到cookie
		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],asList转成无方法,需改成List
					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++){//7,历史记录最多显示7,超过的只显示头7个,addFirst
						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);

cookie得到,

然后看历史记录在哪个界面显示,就在得到那个界面的servlet里得到cookie,然后拆pid串,查product存进一个list里,set.Attribute,jsp再得到

//定义一个记录历史商品信息的集合
		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);//根据pid查product,上一篇有
						historyProductList.add(pro);
					}
				}
			}
		}
		
		//将历史记录的集合放到域中
		request.setAttribute("historyProductList", historyProductList);

jsp

            <c:forEach items="${historyProductList }" var="historyPro">
			<li >
				<img src="${pageContext.request.contextPath}/${historyPro.pimage}" />

                                 ${historyPro.pname}					</li>
	</c:forEach>

需要再加超链接得到商品信息,大致这样