巴巴运动网商品交易系统对用户日前浏览过的产品列表的技术方案
巴巴运动网商品交易系统对用户最近浏览过的产品列表的技术方案
本文参考传智播客巴巴运动网视频教程
1.对最近浏览商品的实现需要用到cookie,一下代码可以获取cookie:
/** * 获取cookie的值 * @param request * @param name cookie的名称 * @return */ public static String getCookieByName(HttpServletRequest request, String name) { Map<String, Cookie> cookieMap = WebUtil.readCookieMap(request); if(cookieMap.containsKey(name)){ Cookie cookie = (Cookie)cookieMap.get(name); return cookie.getValue(); }else{ return null; } } protected static Map<String, Cookie> readCookieMap(HttpServletRequest request) { Map<String, Cookie> cookieMap = new HashMap<String, Cookie>(); Cookie[] cookies = request.getCookies(); if (null != cookies) { for (int i = 0; i < cookies.length; i++) { cookieMap.put(cookies[i].getName(), cookies[i]); } } return cookieMap; }
readCookieMap先获取request里面的所有cookie,然后以键值对的形式存放到一个Map中。在getCookieByName方法中,先调用 readCookieMap方法来获取所有的cookie,然后在查询自己想要查找的那个cookie的值。
2.完成了获取cookie值之后,我们就可以对cookie里面的浏览记录进行修改排序:
public String buildViewHistory(HttpServletRequest request, Integer currentProductId){ //23-2-6-5 //1.如果当前浏览的id已经在浏览历史里了,我们要把移到最前面 //2.如果浏览历史里已经达到了10个产品了,我们需要把最选进入的元素删除 String cookieValue = WebUtil.getCookieByName(request, "productViewHistory"); LinkedList<Integer> productids = new LinkedList<Integer>(); if(cookieValue!=null && !"".equals(cookieValue.trim())){ String[] ids = cookieValue.split("-"); for(String id : ids){ productids.offer(new Integer(id.trim())); } if(productids.contains(currentProductId)) productids.remove(currentProductId); if(productids.size()>=10) productids.poll(); } productids.offer(currentProductId); StringBuffer out = new StringBuffer(); for(Integer id : productids){ out.append(id).append('-'); } out.deleteCharAt(out.length()-1); return out.toString(); }
为了方便排序 cookie的值是:用户浏览过的商品的id加横杠分隔符结合而成的。如:23-2-6-5。
3.排序结束后我们又可以将新的cookie存入浏览器中:
/** * 添加cookie * @param response * @param name cookie的名称 * @param value cookie的值 * @param maxAge cookie存放的时间(以秒为单位,假如存放三天,即3*24*60*60; 如果值为0,cookie将随浏览器关闭而清除) */ public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) { Cookie cookie = new Cookie(name, value); cookie.setPath("/"); if (maxAge>0) cookie.setMaxAge(maxAge); response.addCookie(cookie); }
该方法的调用如下:
WebUtil.addCookie(response, "productViewHistory", buildViewHistory(request, formbean.getProductid()), 30*24*60*60);
这样就完成了将用户最近浏览过的产品以cookie的形式存入浏览器。
1 楼
mountainol
2012-01-09
mnmnm
[/size][size=x-large]