步骤分析:
1.先将product_list.htm转成jsp
2.点击一个商品,展示该商品的信息,将该商品id记录到cookie (GetProductById)
获取之前的浏览记录 例如名称:ids
判断cookie是否为空
若为空 将当前商品的id起个名称 ids 放入cookie中 ids=1
若不为空,获取值 例如:ids=2-1 当前访问的id=1 使用"-"分割商品id
判断之前记录中有无该商品
若有:
将当前的id放入前面 结果 ids=1-2
若没有:
继续判断长度是否>=3
若>=3,移除最后一个,将当前的id放入最前面
若<3,直接将当前的id放入最前面.
若 ids=3-2-1 现在访问1 结果 ids=1-3-2
若 ids=4-3-2 现在访问1 结果 ids=1-4-3
3.再次回到product_list.jsp页面,需要将之前访问商品展示在浏览记录中
获取ids 例如:ids=2-3-1
切割
jsp代码:
<!--
商品浏览记录:
-->
<div style="width:1210px;margin:0 auto; padding: 0 9px;border: 1px solid #ddd;border-top: 2px solid #999;height: 246px;">
<h4 style="width: 50%;float: left;font: 14px/30px " 微软雅黑 ";">浏览记录<a href="/webseven/clearHistroy">清空</a></h4>
<div style="width: 50%;float: right;text-align: right;"><a href="">more</a></div>
<div style="clear: both;"></div>
<div style="overflow: hidden;">
<ul style="list-style: none;">
<%
//获取指定名称的cookie ids
Cookie c= CookieUtils.getCookieByName("ids", request.getCookies());
//判断ids是否为空
if(c==null){
%>
<h2>暂无浏览记录</h2>
<%
}else{//ids=3-2-1
String [] arr= c.getValue().split("-");
for(String id :arr){
%>
<li style="width: 150px;height: 216;float: left;margin: 0 8px 0 0;padding: 0 18px 15px;text-align: center;"><img src="products/1/cs1000<%=id %>.jpg" width="130px" height="130px" /></li>
<% }
}
%>
</ul>
</div>
</div>
<div style="margin-top:50px;">
<img src="./image/footer.jpg" width="100%" height="78" alt="我们的优势" title="我们的优势" />
</div>
工具类:
package com.feizhu.utils;
import javax.servlet.http.Cookie;
public class CookieUtils {
/**
* 通过名称在cookie数组获取指定的cookie
* @param name cookie名词
* @param cookies cookie数组
* @return
*/
public static Cookie getCookieByName(String name, Cookie[] cookies) {
if(cookies!=null) {
for(Cookie c: cookies) {
//通过名称获取
if(name.equals(c.getName()))
//返回
return c;
}
}
return null;
}
}
Servlet类:
package com.feizhu.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.feizhu.utils.CookieUtils;
/**
* 记录商品浏览记录
*/
public class GetProductByIdServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
//获取当前访问的商品id
String id=request.getParameter("id");
//1.获取指定的cokie ids
Cookie c= CookieUtils.getCookieByName("ids", request.getCookies());
String ids="";
//判断cookie是否为空
if(c==null) {
//若cookie为空 需要将当前商品id放入ids中
ids=id;
}else {
//若cookie不为空,继续判断ids种是否已经包含id // ids=2-11-21
//获取值
ids=c.getValue();
String[] arr= ids.split("-");
//将数组转成集合,此aslist长度不变
List<String> aslist =Arrays.asList(arr);
//将aslist放入一个新的list中
LinkedList<String> list = new LinkedList<>(aslist);
if(list.contains(id)) {
//若ids中包含id 将id移除放到最前面
list.remove(id);
list.addFirst(id);
}else {
//若ids种不包含id 继续判断长度是否大于2
if(list.size()>2) {
//长度>=3 移除最后一个,将当前的放入最前面
list.removeLast();
list.addFirst(id);
}else {
//长度<3将当前放入最前面
list.addFirst(id);
}
}
ids="";
//将List转成字符串
for(String s :list) {
ids+=(s+"-");
}
ids=ids.substring(0, ids.length());
}
//将ids写回去
c= new Cookie("ids",ids);
//设置访问路径
c.setPath(request.getContextPath());
//设置存活时间
c.setMaxAge(3600);
//写回浏览器
response.addCookie(c);
//3.跳转到指定的商品页面上
response.sendRedirect(request.getContextPath()+"/product_info"+id+".htm");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
备注:由于个人原因,本博客暂停更新。如有问题可联系本人,本人提供技术指导、学习方向、学习路线。本人微信wlp1156107728(添加注明来意) QQ1156107728(添加注明来意)