zoukankan      html  css  js  c++  java
  • cookie的应用——浏览记录

    实体类

    package 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(String id, String proName, String proType, double price) {
            super();
            this.id = id;
            this.proName = proName;
            this.proType = proType;
            this.price = price;
        }
        public Product() {
            super();
            // TODO Auto-generated constructor stub
        }
        @Override
        public String toString() {
            return "Product [id=" + id + ", price=" + price + ", proName="
                    + proName + ", proType=" + proType + "]";
        }
        
    }

    商品列表servlet

    package servlet;
    
    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;
    
    import dao.ProductDao;
    import entity.Product;
    /*
     * 查询所有商品的servlet
     */
    public 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();
            
            //2.把商品显示到浏览器
            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>";
                    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/>";
            Cookie[] cookies = request.getCookies();// 获取cookie对象
            if (cookies != null) {
                for(Cookie cookie : cookies) {
                    if (cookie.getName().equals("prodHist")) {
                        String prodHist = cookie.getValue();
                        String[] ids = prodHist.split(",");
                        for (String id : ids) {
                            //查询数据库,查询对应的商品
                            Product p = dao.findById(id);
                            //显示到浏览器
                            html += "" + p.getId() + "&nbsp;" + p.getProName() + "&nbsp;" + p.getPrice() + "<br/>";
                        }
                    }
                }
            }
            html += "</body>";
            html += "</html>";
            
            writer.write(html);
        }
        
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    商品详情

    package servlet;
    
    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;
    
    import dao.ProductDao;
    import entity.Product;
    /**
     * 显示商品详细
     * @author Administrator
     *
     */
    public class DetailServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        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.创建cookie
            Cookie cookie = new Cookie("prodHist", createValue(request, id));
            cookie.setMaxAge(1*60*60);//一个月
            //2.发送cookie
            response.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
         */
        public 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;
                    }
                }
            }
            
            // null或没有prodHist
            if (cookies == null || prodhist == null) {
                // 直接返回传入的id
                return id;
            }
            
            // 3,21          2
            //String -> String[] ->  Collection :为了方便判断重复id
            String[] ids = prodhist.split(",");
            Collection<String> colls = Arrays.asList(ids);
            
            // LinkedList 方便地操作(增删改元素)集合
            // Collection -> LinkedList
            LinkedList<String> list = new LinkedList<String>(colls);
            
            //不超过3个
            if(list.size() < 3) {
                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 obj : list) {
                sb.append(obj + ",");
            }
            //去掉最后的逗号
            String result = sb.toString();
            result = result.substring(0, result.length()-1);
            
            return result;
        }
    
    }

    dao

    package dao;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import entity.Product;
    
    public class ProductDao {
    
        //模拟"数据库",存放所有商品数据
        private static List<Product> data = new ArrayList<Product>();
        
        /**
         * 初始化商品数据
         */
        static {
            //只执行一次
            for(int i=1; i<=10; i++) {
                data.add(new Product("" + i, "笔记本" + i , "LN00" + i,34.0 + i ));
            }
        }
        
        /**
         * 提供查询所有商品的方法
         */
        public List<Product> findAll() {
            return data;
        }
        
        /**
         * 提供根据编号查询商品的方法
         */
        public Product findById(String id) {
            for (Product p : data) {
                if(p.getId().equals(id)) {
                    return p;
                }
            }
            return null;
        }
    }
  • 相关阅读:
    Mysql::Error: Commands out of sync; you can't run this command now: SHOW TABLES解决方案
    mysql安装失败Error Nr. 1045
    TermServDevices 报错【远程服务使用者必读】
    数据库出现“提取逻辑页失败”
    Ruby学习——数据库操作
    VS2008 安装失败
    Ubuntu Server 安装图解
    C#的Enum——枚举
    SQLServer2005数据库被置为“可疑”
    ROR之include、extend、send对module、class进行扩展
  • 原文地址:https://www.cnblogs.com/tzzt01/p/7358538.html
Copyright © 2011-2022 走看看