課程
/后端開發
/Java
/JAVA遇見HTML——JSP篇
在出現的瀏覽記錄中會出現相同的商品,這個怎么做到不出現相同的商品呢?
老師的代碼是不是不完善?
或者每次刷新details.jsp頁面都會在瀏覽記錄出現相同的商品
2016-07-12
源自:JAVA遇見HTML——JSP篇 8-8
正在回答
//邏輯處理最好放在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; ??????????} ???}
有一個判斷方式很簡單:
? ? ? ? ? ? ? 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添加。
? ? ? ? ? ? ??
??????????????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);
//判斷商品是否瀏覽過,只判斷倒數五條中是否存在,瀏覽過則不再重復記錄
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"))) {
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);
假設商品的id不會出現包含關系的話,例如沒有id:2和id:12這樣的則可以用字符串函數indexOf(),來判斷這個字符串中是否包含這個子串。
比較麻煩的方式就是:
將這個字符串以","分隔后成為一個數組,用每個添加的id和這個數組的元素遍歷比較,如果不相同則添加到字符串中。
把記錄從cookie出來后比對一下,如果新的待添加的記錄在cookie中有了,就不添加到cookie中,沒有則添加到cookie中
連宏偉HW 提問者
宗晟
舉報
Java Web入門級教程JSP,帶你輕松的學習JSP基礎知識
4 回答關于瀏覽記錄刷新重復的問題
3 回答關于重復瀏覽的商品不會重復出現在商品記錄里面的解決辦法
1 回答關于商品瀏覽記錄中cookie的問題
1 回答關于整個瀏覽記錄的案例!
3 回答怎么解決點擊同一商品在瀏覽過得商品列表中重復的問題。
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-12-12
//邏輯處理最好放在itemsDao類里
2016-11-16
有一個判斷方式很簡單:
? ? ? ? ? ? ? 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添加。
? ? ? ? ? ? ??
2016-08-25
2016-08-03
//判斷商品是否瀏覽過,只判斷倒數五條中是否存在,瀏覽過則不再重復記錄
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);
2016-08-02
假設商品的id不會出現包含關系的話,例如沒有id:2和id:12這樣的則可以用字符串函數indexOf(),來判斷這個字符串中是否包含這個子串。
比較麻煩的方式就是:
將這個字符串以","分隔后成為一個數組,用每個添加的id和這個數組的元素遍歷比較,如果不相同則添加到字符串中。
2016-07-13
把記錄從cookie出來后比對一下,如果新的待添加的記錄在cookie中有了,就不添加到cookie中,沒有則添加到cookie中