`
whoosh
  • 浏览: 232420 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

巴巴运动网商品交易系统对用户最近浏览过的产品列表的技术方案

 
阅读更多

本文参考传智播客巴巴运动网视频教程

 

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]

相关推荐

Global site tag (gtag.js) - Google Analytics