JavaWeb阶段Cookie和Session的案例详情介绍

该博客介绍了如何利用Cookie和Session在Web应用中实现商品浏览历史记录和购物车功能。通过CookieUtils工具类管理Cookie,GoodsInfoServlet处理商品浏览并保存历史,history.jsp展示历史记录。另外,AddCartServlet处理商品添加到购物车操作,cart.jsp展示购物车内容,所有操作都基于Session进行数据存储。
摘要由CSDN通过智能技术生成

Cookie案例

做一个商品页面,当我们访问后,在页面上点击查看商品浏览记录后,可以查看到以前浏览过的商品信息

前端商品界面(goods.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>商品列表</h3>
<a href="/goodsInfoServlet?name=小米10">小米10</a> <br>
<a href="/goodsInfoServlet?name=华为P40">华为P40</a> <br>
<a href="/goodsInfoServlet?name=iphoneSE">iphoneSE</a> <br>
<a href="/goodsInfoServlet?name=锤子T2">锤子T2</a> <br>
</body>
</html>

浏览记录界面(history.jsp)

<%@ page import="com.lifly.servlet.cookie案例.CookieUtils" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/6/14 0014
  Time: 15:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>history</title>
</head>
<body>
    <%
        //获取指定cookie对象
        Cookie cookie = CookieUtils.findByName("goods_name", request.getCookies());
        //判断是否存在浏览器
        if (cookie==null){
            out.write("暂无浏览记录。。。。。。");
        }else {
            out.write("浏览器记录如下:<br>");
            String value = cookie.getValue();
            for (String product:value.split("-")) {
                out.write(product+"<br>");
            }
        }
    %>
</body>
</html>

后端业务逻辑

cookie工具类

public class CookieUtils {

    /*
        根据指定名称,查找cookie对象
     */
    public static Cookie findByName(String name, Cookie[] cookies) {
        // 非空判断
        if (cookies != null && cookies.length > 0) {
            // 遍历
            for (Cookie cookie : cookies) {
                // 判断是否有指定名称的cookie
                if (name.equals(cookie.getName())) {
                    return cookie;
                }
            }
        }
        // 没找到返回null
        return null;
    }
}

CookieServlet

/**
 * @author lifly
 * @date 2021/6/14 0014 15:29
 */
@WebServlet("/goodsInfoServlet")
public class GoodsInfoServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 处理post请求乱码问题
        request.setCharacterEncoding("utf-8");
        // 设置响应数据的编码
        response.setContentType("text/html;charset=utf-8");
        // 获取浏览商品的名称
        String name = request.getParameter("name");
        // 展示商品
        response.getWriter().write("您当前浏览商品为:" + name);
        // 获取指定Cookie名称的对象
        Cookie cookie = CookieUtils.findByName("goods_name", request.getCookies());
        // 判断cookie是否存在
        if (cookie == null) {
            // 如果Cookie不存在,创建Cookie
            cookie = new Cookie("goods_name", name);
        }else{
            String value = cookie.getValue();
            // 添加浏览记录
            List<String> products = Arrays.asList(value.split("-"));
            if (!products.contains(name)) {
                // 如果不存在,则添加
                value= value+ "-" + name;
            }
            cookie = new Cookie("goods_name", value);
        }
        // 设置cookie的存活时间
        cookie.setMaxAge(60 * 60 * 24);
        // 响应给浏览器
        response.addCookie(cookie);
        response.getWriter().write("<br>");
        response.getWriter().write("<a href='goods.html'>继续浏览</a><br>");
        response.getWriter().write("<a href='history.jsp'>浏览记录</a>");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

效果展示

商品展示界面

在这里插入图片描述

继续浏览和浏览查看界面

在这里插入图片描述

浏览记录产看界面

在这里插入图片描述

Session购物车案例

通过一个商品界面,可以点击超链接将商品添加到购物车,还有一个超链接,点击它的时候可以查看购物车中商品信息

商品展示(goods.jsp)

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/6/14 0014
  Time: 14:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>good.jsp</title>
</head>
<body>
<h3>商品列表</h3>
<a href="/addCartServlet?name=电视机">电视机,加入购物车</a><br>
<a href="/addCartServlet?name=冰箱">冰箱,加入购物车</a><br>
<a href="/addCartServlet?name=洗衣机">洗衣机,加入购物车</a><br>
<a href="/addCartServlet?name=电脑">电脑,加入购物车</a><br>
</body>
</html>

购物车(cart.jsp)

<%@ page import="java.util.Map" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/6/14 0014
  Time: 14:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>cart</title>
</head>
<body>
<h3>购物车页面</h3>

<table border="1" width="200px" align="center">
    <tr>
        <th>商品</th>
        <th>数量</th>
    </tr>
        <%
    // 1.从session中获取购物车
    Map<String,Integer> cart = (Map<String, Integer>) request.getSession().getAttribute("cart");
    // 2.判断是否为空
    if(cart == null){
        out.write("购物车内暂时没有商品<br>");
    }else{
        for (String s : cart.keySet()) {
            out.write("<tr><td>"+s+"</td><td>"+cart.get(s)+"</td></tr>");
        }
    }

    %>
</table>
</body>
</html>

后台逻辑业务代码展示

/**
 * @author lifly
 * @date 2021/6/14 0014 14:43
 */
@WebServlet("/addCartServlet")
public class AddCartServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取请求参数
        String product = request.getParameter("name");
        //返回结果
        response.getWriter().write(product+",商品已成功加入购物车<br>");
        //从session中获取购物车
        Map<String,Integer>cart = (Map<String, Integer>) request.getSession().getAttribute("cart");
        //判断购物车是否为空
        if (cart==null){
            cart = new HashMap<>();
        }
        //判断购物车中是否包含本次添加的商品
        if (cart.containsKey(product)){ //存在,数量+1
            Integer oldCount = cart.get(product);
            cart.put(product,oldCount+1); //数量加1
        }else {
            //不存在,直接添加商品,数量为1
            cart.put(product,1);
        }
        //重新将购物车,写入到session中
        request.getSession().setAttribute("cart",cart);
        Set<Map.Entry<String, Integer>> entrySet = cart.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+":"+value);
        }

        //继续浏览
        response.getWriter().write("<a href='/goods.jsp'>继续浏览</a><br>");
        //查看购物车
        response.getWriter().write("<a href='/cart.jsp'>查看购物车</a>");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

商品展示界面

在这里插入图片描述

添加购物车界面

在这里插入图片描述

查看购物车界面

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值