亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

關于瀏覽記錄重復的問題怎么解決,

在出現的瀏覽記錄中會出現相同的商品,這個怎么做到不出現相同的商品呢?


老師的代碼是不是不完善?


或者每次刷新details.jsp頁面都會在瀏覽記錄出現相同的商品

正在回答

6 回答

//邏輯處理最好放在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;
??????????}
???}


0 回復 有任何疑惑可以回復我~

有一個判斷方式很簡單:

? ? ? ? ? ? ? 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添加。


? ? ? ? ? ? ??


0 回復 有任何疑惑可以回復我~
??????????????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);


0 回復 有任何疑惑可以回復我~

//判斷商品是否瀏覽過,只判斷倒數五條中是否存在,瀏覽過則不再重復記錄

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);


0 回復 有任何疑惑可以回復我~

假設商品的id不會出現包含關系的話,例如沒有id:2和id:12這樣的則可以用字符串函數indexOf(),來判斷這個字符串中是否包含這個子串。

比較麻煩的方式就是:

將這個字符串以","分隔后成為一個數組,用每個添加的id和這個數組的元素遍歷比較,如果不相同則添加到字符串中。

0 回復 有任何疑惑可以回復我~

把記錄從cookie出來后比對一下,如果新的待添加的記錄在cookie中有了,就不添加到cookie中,沒有則添加到cookie中

0 回復 有任何疑惑可以回復我~
#1

連宏偉HW 提問者

有沒有具體實現的代碼,
2016-07-16 回復 有任何疑惑可以回復我~
#2

宗晟

回復 連宏偉HW代碼有點亂,你看下,邏輯是跟上面那位仁兄一樣
2016-08-03 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

關于瀏覽記錄重復的問題怎么解決,

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號