国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用Cookie,實現動態顯示用戶曾經瀏覽過的商品

2019-11-15 00:58:09
字體:
來源:轉載
供稿:網友
利用Cookie,實現動態顯示用戶曾經瀏覽過的商品 2015-07-25 20:58 by 怡紅院丿無痕, ... 閱讀, ... 評論, 收藏, 編輯

1、在DisPlay的servlet中主要做兩件事情

1.1顯示在出售的商品

1.2顯示顧客曾經瀏覽的商品

DisPlay的代碼如下:

package com.baowei.cookie;import java.io.IOException;import java.io.PRintWriter;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class Display extends HttpServlet {        @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {                doPost(req, resp);    }        @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {                resp.setCharacterEncoding("utf-8");        resp.setContentType("text/html;charset=utf-8");                //顯示所有的圖書        PrintWriter  out = resp.getWriter();        out.print("本書店出售的圖書如下:<br/>");                Map<String,Book> books = DB.getDBMap();        Set<Entry<String, Book>> set = books.entrySet();        Iterator<Entry<String, Book>>  it = set.iterator();        while(it.hasNext()){            Entry<String, Book> entry = it.next();            Book book = entry.getValue();            out.print("<a href='/HuiHuaTest/BookDetail?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>");                        }                //用戶最近看過的圖書        out.print("你最近瀏覽過的圖書如下:<br/>");        Cookie cookie = null;        Cookie [] cookies = req.getCookies();        for (int   i = 0; cookies != null &&   i < cookies.length;   i++) {             if(cookies[i].getName().equals("bookHistory")){                cookie = cookies[i];            }        }                if(cookie!=null){            //找到了bookHistory這個cookie            String bookHistory = cookie.getValue();   //4_6_1            String ids[] = bookHistory.split("http://_"); //這樣劃分更好            for(String id: ids){                Book book = (Book) DB.getDBMap().get(id);                out.print(book.getName() + "<br/>");            }        }            }}

2. 對于圖書的詳細介紹的BookDetail的servlet,也是兩個功能

2.1 介紹商品的詳細信息

2.2 將瀏覽過的商品的信息加入到Cookie中,并且將Cookie寫回瀏覽器

BookDetail的實現代碼如下:

 1 package com.baowei.cookie; 2  3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.util.Arrays; 6 import java.util.LinkedList; 7  8 import javax.servlet.ServletException; 9 import javax.servlet.http.Cookie;10 import javax.servlet.http.HttpServlet;11 import javax.servlet.http.HttpServletRequest;12 import javax.servlet.http.HttpServletResponse;13 14 public class BookDetail extends HttpServlet {15 16     public void doGet(HttpServletRequest request, HttpServletResponse response)17             throws ServletException, IOException {18 19         doPost(request, response);20 21     }22 23     public void doPost(HttpServletRequest request, HttpServletResponse response)24             throws ServletException, IOException {25 26         response.setContentType("text/html;charset=UTF-8");27         response.setCharacterEncoding("UTF-8");28         PrintWriter out = response.getWriter();29 30         // 1.根據用戶帶過來的id值,顯示相應商品的信息31         out.print("您想看的書的詳細信息為:<br/>");32         String id = request.getParameter("id");33         Book book = (Book) DB.getDBMap().get(id);34         out.print(book.getId() + "<br/>");35         out.print(book.getName() + "<br/>");36         out.print(book.getAuthor() + "<br/>");37 38         // 2.以cookie的形式回寫該商品的id號給瀏覽器39         String bookHistory = makeCookie(book.getId(), request);40         Cookie cookie = new Cookie("bookHistory", bookHistory);41         //cookie.setMaxAge(10000); //將Cookie保存在硬盤內42         response.addCookie(cookie);43 44     }45 46     // 根據用戶原來看過的書,以及現在看的書的id,構建新的cookie值47     private String makeCookie(String id, HttpServletRequest request) {48 49         // bookHistory=null    3   bookHistory=350         // bookHistory=2_1_5   3   bookHistory=3_2_151         // bookHistory=2 3     3   bookHistory=3_252         // bookHistory=2_3     3   bookHistory=3_253 54         // 1.得到用戶曾經看過的書55         String bookHistory = null;56         Cookie cookies[] = request.getCookies();57         for (int i = 0; cookies != null && i < cookies.length; i++) {58             if (cookies[i].getName().equals("bookHistory")) {59                 bookHistory = cookies[i].getValue();60             }61         }62 63         if (bookHistory == null) {64             bookHistory = id;65             return bookHistory;66         }67 68         // bookHistory=1_2_5 代表用戶曾經看一些書,接著程序要得到用戶曾經看過什么書69         String ids[] = bookHistory.split("_");70         // 為了檢測數組中是否包含當前id,我們應該把數據轉成集合,并且還要轉成鏈表結構的集合71         LinkedList<String> idList = new LinkedList(Arrays.asList(ids));72     73         if (idList.contains(id)) {74             idList.remove(id);75         } else {76             if (idList.size() >= 5) {77                 idList.removeLast();78             }79         }80         idList.addFirst(id);81 82         StringBuffer sb = new StringBuffer();83         for (String lid : idList) { // 1_2_3_84             sb.append(lid + "_");85         }86 87         return sb.deleteCharAt(sb.length() - 1).toString();88     }89 90 }

上面兩個程序中用到的Book類和DB類如下:

Book類的代碼:

 1 package com.baowei.cookie; 2  3 public class Book { 4      5     private String id; 6     private String name; 7     private String author; 8      9     public Book() {10 11     }12     13     public Book(String id, String name, String author) {14         this.id = id;15         this.name = name;16         this.author = author;17     }18     public String getId() {19         return id;20     }21     public void setId(String id) {22         this.id = id;23     }24     public String getName() {25         return name;26     }27     public void setName(String name) {28         this.name = name;29     }30     public String getAuthor() {31         return author;32     }33     public void setAuthor(String author) {34         this.author = author;35     }36     37     38 39 }

DB類的代碼如下:

package com.baowei.cookie;import java.util.HashMap;import java.util.Map;public class DB {        static Map<String,Book>   map = new HashMap<String,Book>();        static {                map.put("1", new Book("1","JavaWeb開發","張保衛") );        map.put("2", new Book("2","操作系統","張保衛") );        map.put("3", new Book("3","Spring開發","張保衛") );        map.put("4", new Book("4","Struts2開發","張保衛") );        map.put("5", new Book("5","Java基礎開發","張保衛") );        map.put("6", new Book("6","數據結構","張保衛") );        map.put("7", new Book("7","ACM","張保衛") );        map.put("8", new Book("8","計算機網絡","張保衛") );        map.put("9", new Book("9","軟件工程","張保衛") );        map.put("10", new Book("10","Android開發","張保衛") );        }        public static Map<String,Book> getDBMap(){         return map;       }   }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新巴尔虎右旗| 聂拉木县| 鄂尔多斯市| 尉氏县| 沂源县| 体育| 井研县| 微山县| 扎囊县| 望谟县| 河池市| 文安县| 阜南县| 岱山县| 吴江市| 马鞍山市| 辽宁省| 贵港市| 芜湖县| 美姑县| 沙河市| 通许县| 康保县| 元谋县| 铜陵市| 兴文县| 巩义市| 昂仁县| 尤溪县| 大余县| 白朗县| 抚州市| 澜沧| 黄大仙区| 邢台市| 怀远县| 河南省| 灵寿县| 鹤壁市| 常山县| 邵阳市|