关于浏览记录重复的问题怎么解决,

来源:8-8 使用Cookie实现保存商品浏览记录

连宏伟HW

2016-07-12 18:23

在出现的浏览记录中会出现相同的商品,这个怎么做到不出现相同的商品呢?


老师的代码是不是不完善?


或者每次刷新details.jsp页面都会在浏览记录出现相同的商品

写回答 关注

6回答

  • 慕盖茨9747674
    2016-12-12 10:23:59

    //逻辑处理最好放在itemsDao类里

       public ArrayList<Items> getViewList(String list){
           ArrayList<Items> itemList = new ArrayList<Items>();
           ArrayList<Integer> ls = new ArrayList<Integer>();
           String[] arr = list.split(",");
           int iCount=5;
           if(list!=null&&list.length()>0){
              //去重,并且按最新浏览顺序输出
              for(int i=arr.length-1;i>=0;i--){
                if(ls!=null&&!ls.isEmpty()){
                   if(ls.contains(Integer.parseInt(arr[i]))){
                      continue;
                   }else{
                      ls.add(Integer.parseInt(arr[i]));
                   }
                }else{
                  ls.add(Integer.parseInt(arr[i]));
                }
              }
              if(ls.size()<=iCount){
                 for(Integer i:ls){
                    itemList.add(getItemById(i));
                 }
              }else{
                 for(int i=0;i<iCount;i++){
                    itemList.add(getItemById(ls.get(i)));
                 }
              }
              return itemList;
           }else{
              return null;
              }
       }


  • qq_连环_04358155
    2016-11-16 18:15:45

    有一个判断方式很简单:

                  Cookie[] cookies = request.getCookies();

                  if(cookies!=null&&cookies.length>0)

                  {

                      for(Cookie c:cookies)

                      {

                          if(c.getName().equals("ListViewCookie"))

                          {

                             list = c.getValue();

                          }

                      }

                  }

                  //这里已经得到需要的字符串在list里面了;

                id=request.getParameter("id");

              // 得到需要添加的字符串id

              if(list.startsWith(id+",")){

              int length = id.length+1;

             list.remove(0,length);

              }

             if(list.contains(","+id+","){

             list.replace(    ","+id+","   ,     ","    ) ;

             }

    直接得到重复的id删除后的字符串,然后再就判断是否超过多少条,将id添加。


                  


  • tlojy
    2016-08-25 16:30:12
                  String list ="";
                  String id ="";
                  //从客户端获得Cookies集合
                  Cookie[] cookies = request.getCookies();
                  //遍历这个Cookies集合
                  if(cookies!=null&&cookies.length>0)
                  {
    	              for(Cookie c:cookies)
    	              {
    	                  if(c.getName().equals("ListViewCookie"))
    	                  {
    	                     list = c.getValue();
    	                  }
    	              }
    	          }
                  id=request.getParameter("id");//当前点击的商品ID
                  String[] arr = list.split(",");//将cookie中的list按','分割成数组
                  System.out.println("arr.length="+arr.length);
                  //如果浏览记录达到10条,清零.
                 
                  if(arr!=null&&arr.length>0)
                  {
                      if(arr.length>=10)//浏览记录达到10条,cookie清零
                      {
                          list="";
                          list+=id+",";
                      }else{
                      int i=0;
                      /**
                      * while循环遍历arr,如果当前id跟arr中的某个id相同,则将当前id后的所有id向前移动一位,
                      * 并将当前id置于arr数组末尾(最新的浏览记录总在最后面)
                      * 例如:当前list为 1,3,8,6,7,5,如果当前id是3,则经过处理后新的list为:1,8,6,7,5,3,
                      **/
                      while(i<arr.length){
                    	 
                    	 if(id.equals(arr[i])){
                    		 for(int j=i;j<arr.length-1;j++){
                    			 arr[j]=arr[j+1];//从当前id位置起,将后面的id向前移动一位
                    			 
                    		 }
                    		 arr[arr.length-1]=id;//将当前id置于arr数组末端
                    		 
                    		 //将arr数组重新组合成list字符串
                    		 StringBuffer sb= new StringBuffer();
                    		 for(int k=0;k<arr.length;k++){
                    			 sb.append(arr[k]);
                    			 sb.append(",");
                    		 }
                    		 list=sb.toString();//新的list字符串,当前id在最末尾
                    		 break;//当前id已经存在于list中,上面已经将list重新排序,此处跳出循环
                    	 }
                    	 i++;//i自增
                    	 
                    	 /**
                          * 当i==arr.length,说明循环结束了,
                          * 并且一直没有通过break跳出循环,说明list中不存在当前id
                          * 直接将当前id加到list末尾
                          **/
                    	 if(i==arr.length){
                    		 list+=id+",";//直接将当前id加到list末尾
                    	 }
                     }
                      }
                      
                  }
                //重新生成cookie并添加
                  Cookie cookie = new Cookie("ListViewCookie",list);
                  response.addCookie(cookie);


  • 宗晟
    2016-08-03 18:58:51

    //判断商品是否浏览过,只判断倒数五条中是否存在,浏览过则不再重复记录

    String[] list = browsingList.split(",");

    boolean exist = false;

    int icount = 5;

    if(list!=null&&list.length>5){

    for (int j=list.length-1;j>=list.length-icount;j--) {

    if (list[j].equals(request.getParameter("id"))) {

    exist = true;

    }

    }

    }else{

    for(String id:list){

    if (id.equals(request.getParameter("id"))) {

    exist = true;

    }

    }

    }

    if (!exist) {

    browsingList += request.getParameter("id") + ",";

    }

    String[] arr = browsingList.split(",");

    if (arr != null && arr.length > 0) {

    if (arr.length >= 1000) {

    browsingList = "";

    }

    }

    Cookie cookie = new Cookie("browsingList", browsingList);

    response.addCookie(cookie);


  • 慕粉3723686
    2016-08-02 10:37:13

    假设商品的id不会出现包含关系的话,例如没有id:2和id:12这样的则可以用字符串函数indexOf(),来判断这个字符串中是否包含这个子串。

    比较麻烦的方式就是:

    将这个字符串以","分隔后成为一个数组,用每个添加的id和这个数组的元素遍历比较,如果不相同则添加到字符串中。

  • MotoDoctor
    2016-07-13 10:40:35

    把记录从cookie出来后比对一下,如果新的待添加的记录在cookie中有了,就不添加到cookie中,没有则添加到cookie中

    宗晟

    回复 连宏伟HW代码有点乱,你看下,逻辑是跟上面那位仁兄一样

    2016-08-03 19:00:10

    共 2 条回复 >

JAVA遇见HTML——JSP篇

Java Web入门级教程JSP,带你轻松的学习JSP基础知识

248278 学习 · 3071 问题

查看课程

相似问题