JavaWeb_02_cookie_显示商品浏览记录
2013-11-22 14:13
393 查看
代表首页的Servlet
代表商品详细信息的Servlet
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedHashMap; import java.util.Map; 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 CookieDemo3 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*方法说明: * CookieDemo3代表首页的Servlet: * 1,输出网站的所有商品 * 2,输出用户访问过的商品(只显示名字) * CookieDemo4代表商品详细信息的Servlet * 1,根据用户带过来的id号显示详细信息(显示book的四个成员) * 2,构造Cookie回写浏览器(难点) */ //前三句防乱码+获取流 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); out.write("首页所有商品如下:<br />"); //重点来了 Map<String,Book> map=Db.getAll(); for (Map.Entry<String, Book> entry : map.entrySet()) { Book book=entry.getValue(); String id=book.getId(); String name=book.getName(); out.print("<a href='/day04/servlet/CookieDemo4?id="+id+"' target='_blank'"+">"+name+"</a><br/>"); } //下面是CookieDemo3功能的第2部分输出用户访问过的商品(只显示名字) out.write("最近浏览过的商品:<br />"); Cookie[] cookies=request.getCookies(); for (int i = 0; cookies!=null && i < cookies.length; i++) { if ("bookCookie".equals(cookies[i].getName())) { String cookieVal=cookies[i].getValue(); //因为构造的时候是用逗号连接 String[] ids=cookieVal.split("\\,"); //根据id显示看过的书名 for (String id : ids) { Book book=(Book) Db.getAll().get(id); out.print(book.getName()+"<br />"); } } } } } //写个Db类模拟数据库:容器双列(有检索要求) class Db{ //购物有序,内部维护一个map集合 private static Map<String,Book> map=new LinkedHashMap(); //开始就有些书 static{ map.put("1", new Book("1","javascript","老张","一本好书")); map.put("2", new Book("2","javase","老毕","一本好书")); map.put("3", new Book("3","javaweb","老方","一本好书")); map.put("4", new Book("4","android","老黎","一本好书")); } //提供一个取得所有Map方法 public static Map getAll(){ return map; } } //写个Book类封装数据 class Book{ private String id; private String name; private String author; private String description; //生成无参构造函数,带参构造函数,Getters and Setters public Book(String id, String name, String author, String description) { super(); this.id = id; this.name = name; this.author = author; this.description = description; } public Book() { super(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
代表商品详细信息的Servlet
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import java.util.LinkedList; import java.util.List; 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 CookieDemo4 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*方法说明: * CookieDemo3代表首页的Servlet: * 1,输出网站的所有商品 * 2,输出用户访问过的商品(只显示名字) * CookieDemo4代表商品详细信息的Servlet * 1,根据用户带过来的id号显示详细信息(显示book的四个成员) * 2,构造Cookie回写浏览器(难点) */ //前三句防乱码+获取流 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); //根据用户通过链接带过来的参数id,显示book所有成员 String id=request.getParameter("id"); Book book=(Book) Db.getAll().get(id); out.print(book.getId()+" "); out.print(book.getName()+" "); out.print(book.getAuthor()+" "); out.print(book.getDescription()+"<br />"); //下面是CookieDemo4的功能2,构造Cookie回写浏览器(难点) //用个generateCookie(id,request)方法封装 String cookieVal=generateCookie(id,request); Cookie cookie=new Cookie("bookCookie",cookieVal); //设置有效期(必须)和全站路径(先不考虑用户禁用cookie) cookie.setMaxAge(1*3600*24*30);//单位是秒,有效期为一个月 cookie.setPath("/day04"); response.addCookie(cookie); } private String generateCookie(String id, HttpServletRequest request) { /*方法说明: *构造Cookie回写浏览器(难点) *情况分析:(共4种) *第1种,用户过来时没带Cookie(首次来访) *第2种,包含当前id(前面浏览过) *第3种,列表显示长度已满 *第4种,其他。 */ String cookieVal=null; Cookie[] cookies=request.getCookies(); //得到名为bookCookie的值cookieVal(形如2,5,1) for (int i = 0; cookies!=null && i < cookies.length; i++) { if ("bookCookie".equals(cookies[i].getName())) { cookieVal=cookies[i].getValue(); } } //第1种,用户过来时没带Cookie(首次来访) if (cookieVal==null) { return id; } //下面3句,将形如“2,5,1”字符串cookieVal转成单链表,方便增删改查 String[] str_arr=cookieVal.split("\\,"); List li=Arrays.asList(str_arr); LinkedList<String> list=new LinkedList<String>(li); //第2种,包含当前id(前面浏览过)2,5,1 //第3种,列表显示长度已满 if (list.contains(id)) { list.remove(id); } else { if (list.size()>=3) { list.removeLast(); } } list.addFirst(id); //用StringBuffer连接成串并返回 StringBuffer sb=new StringBuffer(); for (String s : list) { sb.append(s+","); } //去掉最后的逗号 sb=sb.deleteCharAt(sb.length()-1); return sb.toString(); } }
相关文章推荐
- JavaWeb的Cookie技术显示历史商品( 信息 )浏览记录(学习方立勋老师的教程)
- javaweb之Cookie显示商品的浏览记录和Cookie的常见应用有哪些
- 利用Cookie显示商品浏览历史记录
- javaWEB总结(19):利用Cookie显示最近浏览的商品
- javaWeb 使用cookie显示商品浏览记录
- 利用cookie显示商品的浏览记录
- 【Cookie:默认存储在浏览器的内存中】显示上一次访问时间、商品浏览记录
- java(16)--利用cookie显示商品浏览历史
- Cookie的应用:显示用户上次浏览过的商品
- 【JSP开发】利用cookie实现商品浏览记录
- 自己写的一个php利用cookie记录浏览(商品)历史记录的函数
- Cookie案例-显示商品浏览历史纪录
- JavaWeb学习记录(十四)——商城购物之字符串拼接实现最近浏览商品和购物车的功能
- cookie应用——显示用户浏览记录
- cookie记录用户的浏览商品的路径
- JavaWeb_使用Cookie模拟实现显示最近浏览的商品
- cookie应用 显示上次浏览商品的实现过程
- 使用Cookie保存商品浏览记录
- Javaweb学习--显示商品浏览记录
- Cookie小案例-----记住浏览过的商品记录