A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.1 案例二:记录用户的商品浏览记录:1.1.1 需求:
在购物网站上浏览商品的信息,商家为了留住用户,记住之前浏览的一些商品.
图片1.png
1.1.2 分析:1.1.2.1 技术分析:
1.1.2.2 步骤分析:
【步骤一】:在登录完成后,显示商品列表页面.
【步骤二】:为商品列表页面做一些准备工作.
【步骤三】:点击某个商品,将商品ID传递一个Servlet.
【步骤四】:在Servlet中:判断是否是第一次浏览商品
【步骤五】:如果是第一次:将商品的ID存入到Cookie中即可.
【步骤六】:如果不是第一次:判断该商品是否已经浏览了.
【步骤七】:如果浏览器过.删除之前元素,将该元素添加到最前面.
【步骤八】:如果没有浏览过该商品.判断最大长度,没有超过限制,直接加到最前,如果已经超过限制,删除最后一个,将其插入到最前.
1.1.3 代码实现:
public class ProductServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                /**
                 * * 接收商品id.
                 * * 接收从客户端带过来的所有Cookie.
                 * * 从Cookie的数组中查找指定名称的Cookie.
                 * * 判断是否是第一次浏览商品:
                 *     * 第一次浏览商品
                 *        * 直接将商品的ID存入到Cookie.
                 *        * 将Cookie回写到浏览器.
                 *     * 不是第一次浏览商品 1-2
                 *        * 判断当前的商品是否已经在浏览记录.
                 *            * 已经存在: 2-1 移除当前元素,将当前元素添加到最开始.
                 *            * 没在浏览记录中:
                 *                * 判断是否已经超过了最大长度:如果超过 2-1-3:删除最后一个 将当前元素添加到最前面.
                 *                * 没有超过:直接将该元素添加到最前位置.
                 *        * 将转换的id的值存入到Cookie,回写浏览器.
                 */
                // 接收id:
                String id = request.getParameter("id");
                // 获得所有的Cookie的信息:
                Cookie[] cookies = request.getCookies();
                // 判断是否是第一次:
                Cookie cookie = CookieUtils.findCookie(cookies, "history");
                if(cookie == null){
                        // 第一次浏览商品
                        Cookie c = new Cookie("history",id);
                        c.setPath("/day11");
                        c.setMaxAge(60*60*24*7);
                        response.addCookie(c);
                }else{
                        // 不是第一次浏览
                        // 判断选择的商品是否已经在浏览记录中 2-1
                        String value = cookie.getValue();
                        String[] ids = value.split("-");
                        // 将数组变为集合:
                        LinkedList<String> list = new LinkedList<String>(Arrays.asList(ids));
                        if(list.contains(id)){
                                // 之前浏览过该商品
                                list.remove(id); // 1-2-3
                                list.addFirst(id);
                        }else{
                                // 没有浏览过该商品.
                                if(list.size() >=3 ){
                                        // 超过3个
                                        list.removeLast();
                                        list.addFirst(id);
                                }else{
                                        // 没到3个.
                                        list.addFirst(id);
                                }
                        }
                        // 将list中的元素取出,使用-连接上保存到Cookie,写回浏览器.
                        StringBuffer sb = new StringBuffer();
                        for(String s:list){
                                sb.append(s).append("-");
                        }
                        String sValue = sb.toString().substring(0,sb.length()-1);
                        System.out.println(sValue);
                        // 存入到Cookie中
                        Cookie c = new Cookie("history",sValue);
                        c.setPath("/day11");
                        c.setMaxAge(60*60*24*7);
                        response.addCookie(c);
                }
               
                request.getRequestDispatcher("/demo2/product_info.htm").forward(request, response);
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
        }
}
1.1.4 总结:1.1.4.1 清空浏览记录:
删除持久性的Cookie:
public class ClearServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                Cookie cookie = new Cookie("history",null);
                cookie.setPath("/day11");
                cookie.setMaxAge(0);
                response.addCookie(cookie);
               
                response.sendRedirect("/day11/demo2/product_list.jsp");
        }
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                // TODO Auto-generated method stub
                doGet(request, response);
        }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马