用Cookie和Session简单实现购物车

来源:互联网 发布:qq分组软件下载 编辑:程序博客网 时间:2024/05/17 08:30

作为单身汪的小编,无法体会到被女神逼着清空购物车的那种”快感”!!,罢特!!我可以自己清空呀!! 傲娇脸~~

冰箱, 手机, 电视, 手电筒 来一套!!(ps:手电筒是什么鬼!!)


下面我用Cookie和Session来清空购物车里的这4样东东!! 感觉自己有点溜!!

一.Cookie

Cookie分为会话级别和持久化两种,这里将利用的是持久化的Cookie,以遍保存并显示浏览商品记录,和实现商品就算页面

(1)创建商品列表页面

在Web项目根目录建一个product.jsp服务器端页面,如下:

<img src="/day09-cookie/img/1.jpg"><a href="/day09-cookie/product?id=1">手电筒</a> <img src="/day09-cookie/img/2.jpg"><a href="/day09-cookie/product?id=2">手机</a><img src="/day09-cookie/img/3.jpg"><a href="/day09-cookie/product?id=3">电视</a><img src="/day09-cookie/img/4.jpg"><a href="/day09-cookie/product?id=4">冰箱</a>

当点击对应的商品时会自动将商品id提交到后台servet中. servet会将id值放入cookie中并回写到浏览器里.

(2)在servlet中完成把浏览记录存到cookie
*这里会预先写一个工具类MyCookieUtil,里面有方法findCookie(),判断浏览器是否存在用于存商品id的Cookie.

代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)        throws ServletException, IOException {    //获取浏览器所有的cookies    Cookie[] cookies = request.getCookies();    //判断是否有名为scan的cookie    Cookie cookie = MyCookieUtil.findCookie(cookies, "scan");    //获取当前点击商品的id    String id = request.getParameter("id");    if (cookie==null) {    //如果没有就创建一个名为scan的cookie,并将商品的id设置到cookie里        Cookie cookie2 = new Cookie("scan", id);        //设置cookie保存时长为30分钟        cookie2.setMaxAge(1800);        //设置项目路径        cookie2.setPath("/day09-cookie");        //回写到浏览器        response.addCookie(cookie2);        }else {        //将当前点击商品的id值添加到上一次回写到浏览器的cookie里            String value = cookie.getValue();            String[] ids = value.split(",");            //判断是否有重复的商品            boolean flag=checkID(ids,id);            if (!flag) {            //没有重复就添加id到cookie里                String newValue=value+","+id;                Cookie cookie2 = new Cookie("scan", newValue);                cookie2.setMaxAge(1800);                cookie2.setPath("/day09-cookie");                response.addCookie(cookie2);            }        }        //回写cookie到浏览器之后再重定向到浏览器        response.sendRedirect("/day09-cookie/product.jsp");    }    //判断id是否重复的方法    private boolean checkID(String[] ids, String id) {        for (String string : ids) {            if (string.equals(id)) {                return true;            }        }        return false;    }

(3)在浏览器显示商品的浏览记录
在product.jsp里嵌入java代码,实现显示浏览记录的逻辑
代码:

<!-- 显示浏览记录的操作 --> <%  //获取浏览器里面所有的cookie  Cookie[] cookies=request.getCookies();  Cookie cookie=MyCookieUtil.findCookie(cookies,"scan");    if(cookie==null){  %>    <h2>没有任何记录</h2>  <%    }else{        String values=cookie.getValue();        String[] productNames={"手电筒","手机","电视","冰箱"};        String[] ids=values.split(",");        //遍历ids,把所有对应图片的信息显示到页面上        for(String id:ids){        //获得对应的商品名称        String productName=productNames[Integer.parseInt(id)-1];  %>        <img src="/day09-cookie/img/<%= id%>.jpg"/><%=productName %>  <%                }            }  %>

(4)清空保存在浏览器上的商品浏览记录
原理: 销毁持久化的cookie操作. 新建一个servet, ProductClear.java
步骤:
* 1、创建一个和要销毁cookie相同名称的cookie
* 2、设置cookie的有效时长是 0
* 3、设置路径一致的
* 4、把cookie回写到浏览器
代码:
在product.jsp里加一行代码:

<h1><a href="/day09-cookie/clear">清空浏览记录</a></h1>

写在ProductClear.java里的代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    Cookie cookie = new Cookie("scan", "");    cookie.setMaxAge(0);    cookie.setPath("/day09-cookie");    response.addCookie(cookie);    response.sendRedirect("/day09-cookie/product.jsp");    }

我一运行

这里写图片描述


选择商品之后:

(点击”清空浏览记录”又会变成上面的页面)


这里写图片描述

二.Session

增加了一个显示购物车内容的功能
(1)创建商品列表页面 product.jsp
代码:

<body>   <img src="/day09-session/img/1.jpg"/><a href="/day09-session/store?id=1">手电筒</a>    <img src="/day09-session/img/2.jpg"/><a href="/day09-session/store?id=2">手机</a>    <img src="/day09-session/img/3.jpg"/><a href="/day09-session/store?id=3">电视</a>    <img src="/day09-session/img/4.jpg"/><a href="/day09-session/store?id=4">冰箱</a>  </body>

(2)在servlet中完成把浏览记录存到cookie
创建servet,名为StoreInCart

public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    String id = request.getParameter("id");    String[] names={"手电筒","手机","电视","冰箱"};    String productName=names[Integer.parseInt(id)-1];    //将产品名和数量放到一个map集合里之后再放入购物车    Map<String,Integer> cart = (Map<String, Integer>) request.getSession().getAttribute("cart");    //判断购物车是否为空. 空的话,就将产品信息和数量放入    if (cart==null) {        cart=new HashMap<String, Integer>();        cart.put(productName, 1);    }else {    //不为空就将不重复的产品存入购物车        if (cart.containsKey(productName)) {            int num=cart.get(productName);            cart.put(productName, num+1);        }else {            cart.put(productName, 1);        }    }    //将map集合设置到购物车cart里面    request.getSession().setAttribute("cart", cart);    response.setContentType("text/html;charset=utf-8");    response.getWriter().write("<a href='/day09-session/product.jsp'>继续购物</a><br/>"+"<a href='/day09-session/cart.jsp'>去结算</a>");}

(3)创建一个购物车cart.jsp文件,显示选购的商品信息
代码:

 <body>    <h1>结算页面</h1>    <h3><a href="/day09-session/clear">清空购物车</a></h3>    <h5>购物车清单:</h5>    <br/>    <%    //获取购物车cart,遍历购物车,打印出商品详情   Map<String,Integer> cart=(Map<String,Integer>) request.getSession().getAttribute("cart");   if(cart==null){       %>        <h2>没有任何购物记录</h2>       <%   }else{        for(String name:cart.keySet()){            int num=cart.get(name);        %>        商品:<%=name %>, 数量:<%=num %>        <br/>        <%        }   }     %>  </body>

(4)终于来到了清空购物车, 泪流满面!!
新建一个servet,名为ClearCart.java, 销毁session,实现清空购物车.
具体代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {    HttpSession session = request.getSession();    //利用session自己的方法结果掉session    session.invalidate();    response.sendRedirect("/day09-session/cart.jsp");}

我们来看看运行结果:

(1)商品预览页面

这里写图片描述

(2)跳转页面
StroeInCart.java体现的效果

这里写图片描述

(3)购物车界面
cart.jsp展现的效果,结算页面

这里写图片描述

(4)清空购物车之后的界面
ClearCart.java展现的效果

这里写图片描述

宝宝们,看到了吧! 购物车就这样清空了!!

*

剁剁剁~~~

*

1 0
原创粉丝点击