cookie之用户浏览过的商品(Dm)

来源:互联网 发布:新版淘宝联盟 编辑:程序博客网 时间:2024/05/21 06:58
package gz.itcast.entity;public class Product {private String id;private String proName;private String proType;private double price;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getProName() {return proName;}public void setProName(String proName) {this.proName = proName;}public String getProType() {return proType;}public void setProType(String proType) {this.proType = proType;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Product() {super();// TODO Auto-generated constructor stub}public Product(String id, String proName, String proType, double price) {super();this.id = id;this.proName = proName;this.proType = proType;this.price = price;}@Overridepublic String toString() {return "Product [id=" + id + ", proName=" + proName + ", proType="+ proType + ", price=" + price + "]";}}

package gz.itcast.dao;import gz.itcast.entity.Product;import java.util.ArrayList;import java.util.List;public class ProductDao {//存放所有的商品数据 模拟“数据库”private static List<Product> date =new ArrayList<Product>();//初始化商品数据static{//只执行一次for(int i=1;i<=10;i++){date.add(new Product(""+i,"笔记本"+i,"LN00"+i,34.0+i));}}//提供查询所有商品的方法public List<Product> findAll(){return date;}//提供根据编号查询商品的方法public Product findById(String id){for(Product p:date){if(p.getId().equals(id)){return p;}}return null;}}

package gz.itcast.servlet;import gz.itcast.dao.ProductDao;import gz.itcast.entity.Product;import java.io.IOException;import java.io.PrintWriter;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;//查询所有商品的servletpublic class ListServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");//读取数据库,查询商品的列表ProductDao dao = new ProductDao();List<Product> list = dao.findAll();//把商品显示到浏览器里面PrintWriter writer =  response.getWriter();  //返回一个输出流String html = "";html += "<html>";html += "<head>";html += "<title>显示商品列表</title>";html += "</head>";html += "<body>";html += "<table border='1' align='center' width='600px'>";html += "<tr>";html += "<th>编号</th><th>商品名称</th><th>商品型号</th><th>商品价格</th>";html += "</tr>";//遍历商品if(list!=null){for(Product p:list){html += "<tr>";// /day11_hist/DetailServlet?id=1 访问DetailSErvlet的servlet程序,同时传递 名为id,值为1 的参数html += "<td>"+p.getId()+"</td><td><a href='"+request.getContextPath()+"/DetailServlet?id="+p.getId()+"'>"+p.getProName()+"</a></td><td>"+p.getProType()+"</td><td>"+p.getPrice()+"</td>";html += "<tr>";}}html += "</table>";//显示浏览过的商品html += "最近浏览过的商品:<br/>";//取出prodHist的cookieCookie[] cookies = request.getCookies();if(cookies!=null){for (Cookie cookie : cookies) {if(cookie.getName().equals("prodHist")){String prodHist = cookie.getValue(); // 3,2,1String[] ids = prodHist.split(",");//遍历浏览过的商品idfor (String id : ids) {//查询数据库,查询对应的商品Product p = dao.findById(id);//显示到浏览器html += ""+p.getId()+" "+p.getProName()+" "+p.getPrice()+"<br/>";}}}}html += "</body>";html += "</html>";writer.write(html);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}

package gz.itcast.servlet;import gz.itcast.dao.ProductDao;import gz.itcast.entity.Product;import java.io.IOException;import java.io.PrintWriter;import java.util.Arrays;import java.util.Collection;import java.util.LinkedList;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 DetailServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");      //1.获取编号String id = request.getParameter("id");//2.到数据库中查询对应编号的商品ProductDao dao = new ProductDao();Product product = dao.findById(id);//3.显示到浏览器PrintWriter writer = response.getWriter();String html = "";html += "<html>";html += "<head>";html += "<title>显示商品详细</title>";html += "</head>";html += "<body>";html += "<table border='1' align='center' width='300px'>";if(product!=null){html += "<tr><th>编号:</th><td>"+product.getId()+"</td></tr>";html += "<tr><th>商品名称:</th><td>"+product.getProName()+"</td></tr>";html += "<tr><th>商品型号:</th><td>"+product.getProType()+"</td></tr>";html += "<tr><th>商品价格:</th><td>"+product.getPrice()+"</td></tr>";}html += "</table>";html += "<center><a href='"+request.getContextPath()+"/ListServlet'>[返回列表]</a></center>";html += "</body>";html += "</html>";writer.write(html);/** * 创建cookie,并发送 *///1.创建cookieCookie cookie = new Cookie("prodHist",createValue(request,id));cookie.setMaxAge(1*30*24*60*60);//一个月//2.发送cookieresponse.addCookie(cookie);}/** * 生成cookie的值 * 分析: * 当前cookie值                     传入商品id               最终cookie值 *      null或没有prodHist          1                     1    (算法: 直接返回传入的id ) *             1                  2                     2,1 (没有重复且小于3个。算法:直接把传入的id放最前面 ) *             2,1                1                     1,2(有重复且小于3个。算法:去除重复id,把传入的id放最前面 ) *             3,2,1              2                     2,3,1(有重复且3个。算法:去除重复id,把传入的id放最前面) *             3,2,1              4                     4,3,2(没有重复且3个。算法:去最后的id,把传入的id放最前面) * @return */private String createValue(HttpServletRequest request,String id) {Cookie[] cookies = request.getCookies();String prodHist = null;if(cookies!=null){for (Cookie cookie : cookies) {if(cookie.getName().equals("prodHist")){prodHist = cookie.getValue();break;}}}//System.out.println(prodHist);// null或没有prodHistif(cookies==null || prodHist==null){//直接返回传入的id     return id;      }      //String -> String[] ->  Collection :为了方便判断重复idString[] ids = prodHist.split(",");Collection colls = Arrays.asList(ids); //<3,21>// LinkedList 方便地操作(增删改元素)集合// Collection -> LinkedListLinkedList list = new LinkedList(colls);if(list.size()<3){//id重复if(list.contains(id)){//去除重复id,把传入的id放最前面list.remove(id);list.addFirst(id);}else{//直接把传入的id放最前面list.addFirst(id);}}else{//等于3个//id重复if(list.contains(id)){//去除重复id,把传入的id放最前面list.remove(id);list.addFirst(id);}else{//去最后的id,把传入的id放最前面list.removeLast();list.addFirst(id);}}// LinedList -> String StringBuffer sb = new StringBuffer();for (Object object : list) {sb.append(object+",");}//去掉最后的逗号String result = sb.toString();result = result.substring(0, result.length()-1);return result;}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}}

原创粉丝点击