【JavaWeb项目】——外卖订餐系统用户购买餐品、查询购物车、取消购物车餐品操作

🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大二学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQLJava基础Rust

🎈热门专栏:🎊【PythonJavawebVue框架

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

🎯购买餐品

😎后端处理AddCarServlet部分

🎈代码

🎈解析

🎯查询购物车

😎后端处理UshowCarServlet部分

🎈代码

🎈解析

😎前端界面showCar2.jsp部分

🎈代码

🎈解析

🎯取消购物车餐品

😎后端处理DelCarServlet部分

🎈代码

🎈解析


🎯购买餐品

😎后端处理AddCarServlet部分

🎈代码

package com.dingcan.controller;

import com.dingcan.service.CarService;
import com.dingcan.service.Impl.CarServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "AddCarServlet", value = "/addCarServlet")
public class AddCarServlet extends HttpServlet {
    CarService carService=new CarServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String cname=req.getParameter("fname");
        int cprice=Integer.parseInt(req.getParameter("fprice"));
        int cfid=Integer.parseInt(req.getParameter("fid"));
        int cuid= (int) req.getSession().getAttribute("uid1");
        int cdid=Integer.parseInt(req.getParameter("fdianid"));
        if(carService.addCar(cname,cprice,cfid,cuid,cdid))
        {
            resp.sendRedirect("ushowCarServlet");
        }
        else
        {
            resp.sendRedirect("fail.jsp");
        }

    }
}

🎈解析

        这段Java代码是一个Servlet控制器,用于处理将新餐品添加到购物车的请求:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于 com.dingcan.controller 包。
  2. 导入服务类:

    • 导入了 com.dingcan.service.CarService 接口及其实现类 com.dingcan.service.Impl.CarServiceImpl
  3. @WebServlet 注解:

    • @WebServlet(name = "AddCarServlet", value = "/addCarServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问 /addCarServlet 路径时,这个Servlet会被调用。
  4. 类定义:

    • public class AddCarServlet extends HttpServlet: 定义了一个名为 AddCarServlet 的类,它继承自 HttpServlet
  5. 成员变量:

    • CarService carService = new CarServiceImpl();: 创建了 CarService 接口的实现类 CarServiceImpl 的实例。
  6. service 方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的 service 方法,用于处理客户端的请求。
  7. 获取请求参数:

    • 从请求中获取商品名称 (cname)、价格 (cprice)、商品ID (cfid)、用户ID (cuid) 和店铺ID (cdid)。
  8. 从会话中获取用户ID:

    • int cuid = (int) req.getSession().getAttribute("uid1");: 从会话中安全地获取用户ID。
  9. 添加商品到购物车:

    • if (carService.addCar(cname, cprice, cfid, cuid, cdid)): 使用 carService 的 addCar 方法尝试添加商品到购物车。
  10. 重定向:

    • 如果添加成功,使用 resp.sendRedirect("ushowCarServlet") 重定向到 ushowCarServlet,这将展示添加成功的反馈或购物车列表。
    • 如果添加失败,使用 resp.sendRedirect("fail.jsp") 重定向到错误页面。
  11. 异常处理:

    • 方法声明中包含了 throws ServletException, IOException,表示这个方法可能会抛出 ServletException 和 IOException 异常。

    AddCarServlet 的主要作用是接收用户提交的商品信息,调用服务层方法添加商品到购物车,并根据操作结果重定向到相应页面。这个过程中,它利用了会话管理来获取当前登录用户的ID,并与用户提交的商品信息一起存储到数据库中。如果添加失败,可能需要添加额外的逻辑来提供反馈信息给用户。

🎯查询购物车

😎后端处理UshowCarServlet部分

🎈代码

package com.dingcan.controller;


import cn.hutool.db.Entity;
import com.dingcan.service.CarService;
import com.dingcan.service.Impl.CarServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "UshowCarServlet", value = "/ushowCarServlet")
public class UshowCarServlet extends HttpServlet {
    CarService carService=new CarServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取session中的uid1
        int uid1= (int) req.getSession().getAttribute("uid1");
        List<Entity> list=carService.uFindCar(uid1);
        if (list!=null){
            req.setAttribute("list",list);
            req.getRequestDispatcher("/u1/showCar2.jsp").forward(req,resp);
        }

    }
}

🎈解析

        这段Java代码是一个Servlet控制器,用于展示用户购物车中的餐品信息:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于 com.dingcan.controller 包。
  2. 导入相关类:

    • 导入了 cn.hutool.db.Entity 用于数据库操作。
    • 导入了 com.dingcan.service.CarService 接口及其实现类 com.dingcan.service.Impl.CarServiceImpl
  3. @WebServlet 注解:

    • @WebServlet(name = "UshowCarServlet", value = "/ushowCarServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问 /ushowCarServlet 路径时,这个Servlet会被调用。
  4. 类定义:

    • public class UshowCarServlet extends HttpServlet: 定义了一个名为 UshowCarServlet 的类,它继承自 HttpServlet
  5. 成员变量:

    • CarService carService = new CarServiceImpl();: 创建了 CarService 接口的实现类 CarServiceImpl 的实例。
  6. service 方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的 service 方法,用于处理客户端的请求。
  7. 获取会话属性:

    • int uid1 = (int) req.getSession().getAttribute("uid1");: 从会话中获取用户ID (uid1)。
  8. 查询数据库:

    • List<Entity> list = carService.uFindCar(uid1);: 使用 carService 的 uFindCar 方法根据用户ID查询购物车中的商品信息。
  9. 检查查询结果:

    • if (list != null): 检查查询结果是否不为空。
  10. 设置请求属性:

    • req.setAttribute("list", list);: 将查询结果 list 设置为请求属性,这样就可以在JSP页面中通过 ${list} 访问这些数据。
  11. 请求转发:

    • req.getRequestDispatcher("/u1/showCar2.jsp").forward(req, resp);: 将请求转发到 /u1/showCar2.jsp 页面,携带请求属性。
  12. 异常处理:

    • 方法声明中包含了 throws ServletException, IOException,表示这个方法可能会抛出 ServletException 和 IOException 异常。

    UshowCarServlet 的主要作用是根据用户ID检索购物车中的商品信息,并将这些信息转发到 showCar2.jsp 页面进行展示。如果查询结果为空,则可能不会执行转发,这意味着在 showCar2.jsp 页面中需要对 list 可能为 null 的情况进行处理。使用 hutool 库的 Entity 类来处理数据库查询结果。这个Servlet通过转发请求到JSP页面,实现了MVC架构中的控制层功能。

😎前端界面showCar2.jsp部分

🎈代码

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 20/6/2024
  Time: 下午10:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>展示商家1登入的信息</title>
    <!-- 引入 Bootstrap -->
    <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <link href="css/uShow.css" rel="stylesheet">
</head>
<body>
<div class="first">
    <div class="one">
        <div class="two">
            <img src="image/four.jpg" alt="LOGO">
            <label>优质外卖订餐系统</label>
        </div>
        <div class="three">
            <a href="exitServlet" class="btn">注销</a>
        </div>
    </div>
    <div class="btn-group-vertical">
        <ul class="menuOne">
            <li>
                <a href="ushowFoodServlet?c=1" class="btn" role="button">老王火锅店</a>
                <ul class="menuTwo">
                    <li><a href="ushowFoodServlet?c=2" class="btn" role="button">肉类</a></li>
                    <li><a href="ushowFoodServlet?c=3" class="btn" role="button">菜类</a></li>
                    <li><a href="ushowFoodServlet?c=4" class="btn" role="button">其他</a></li>
                </ul>
            </li>
            <li>
                <a href="ushowFoodServlet?c=5" class="btn" role="button">精品零食店</a>
                <ul class="menuTwo">
                    <li><a href="ushowFoodServlet?c=6" class="btn" role="button">辣食</a></li>
                    <li><a href="ushowFoodServlet?c=7" class="btn" role="button">甜食</a></li>
                    <li><a href="ushowFoodServlet?c=8" class="btn" role="button">其他</a></li>
                </ul>
            </li>
            <li>
                <a href="ushowCarServlet" class="btn" role="button">我的购物车</a>
                <ul class="menuTwo">
                </ul>
            </li>
        </ul>
    </div>
    <div class="four">
        <table  class="table table-striped table-bordered table-condensed">
            <thead>
            <tr  class="warning">
                <td>餐名</td>
                <td>价格</td>
                <td>状态</td>
                <td>操作</td>
            </tr>
            </thead>
            <tbody>
            <c:forEach items="${list}" var="car">
                <tr  class="danger">
                    <td>${car.cname}</td>
                    <td>${car.cprice}</td>
                    <td>${car.cstate == 1 ? "发货中" : "未发货"}</td>
                    <td>
                        <a href="delCarServlet?cid=${car.cid}" class="btn btn-primary">取消</a>
                    </td>
                </tr>
            </c:forEach>
            </tbody>
        </table>
    </div>
</div>
<script src="js/ucaidan.js"></script>
</body>
</html>

🎈解析

        这段代码是一个JSP页面,用于展示用户登录后的信息,特别是他们购物车中的商品信息:

  1. JSP注释:

    • 页面顶部的注释由IntelliJ IDEA自动生成,提供了创建者、日期和时间。
  2. 页面指令:

    • <%@ page contentType="text/html;charset=UTF-8" language="java" %>: 设置页面的MIME类型为HTML,字符集为UTF-8,脚本语言为Java。
    • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>: 引入JSTL核心库,使用c作为前缀。
  3. HTML结构:

    • <html>: 根元素。
    • <head>: 包含页面的元数据,如标题和样式链接。
    • <title>: 页面标题为“展示用户购物车的信息”。
  4. Bootstrap和自定义CSS:

    • <link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">: 引入Bootstrap的CSS文件,用于页面样式。
    • <link href="css/uShow.css" rel="stylesheet">: 引入自定义的CSS样式文件。
  5. 页面内容:

    • <div class="first">: 包含整个页面的主要内容。
    • <div class="one">: 包含LOGO和系统名称。
    • <div class="two">: 包含LOGO图片和系统名称标签。
    • <div class="three">: 包含注销按钮,链接到exitServlet
  6. 导航菜单:

    • <div class="btn-group-vertical">: 垂直排列的按钮组,包含不同商家和分类的链接。
  7. 购物车商品列表:

    • <table class="table table-striped table-bordered table-condensed">: 使用Bootstrap样式的表格,展示购物车中的商品信息。
    • <thead>: 表格的头部,包含列标题。
    • <tbody>: 表格的主体,使用JSTL的<c:forEach>标签循环遍历list集合。
  8. JSTL标签:

    • <c:forEach items="${list}" var="car">: 用于遍历作为请求属性传递到页面的list集合。
  9. 表格行:

    • <tr>: 表格的一行,用于显示单个商品的信息。
    • <td>: 表格单元格,显示商品的名称(car.cname)、价格(car.cprice)、状态。
  10. 操作链接:

    • <a href="delCarServlet?cid=${car.cid}" class="btn btn-primary">取消</a>: 在操作列中,创建一个链接到delCarServlet的按钮,用于取消购物车中的某个商品。
  11. 状态显示:

    • ${car.cstate == 1 ? "发货中" : "未发货"}: 使用JSP表达式来显示商品的当前状态。
  12. Bootstrap类:

    • 页面使用了Bootstrap的类(如btnbtn-primarytable-stripedtable-borderedtable-condensedwarningdanger)来增强表单的布局和样式。
  13. 页面底部:

    • <script src="js/ucaidan.js"></script>: 引入JavaScript文件,可能用于页面的动态交互或效果。

        这个JSP页面提供了一个用户购物车信息展示的用户界面,允许用户查看商品信息,并提供了取消商品的链接。使用Bootstrap框架增强了用户界面的友好性和响应性。

🎯取消购物车餐品

😎后端处理DelCarServlet部分

🎈代码

package com.dingcan.controller;

import com.dingcan.service.CarService;
import com.dingcan.service.Impl.CarServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "DelCarServlet", value = "/delCarServlet")
public class DelCarServlet extends HttpServlet {
    CarService carService=new CarServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        int cid=Integer.parseInt(req.getParameter("cid"));
        boolean b=carService.delCar(cid);
        if(b){
            resp.sendRedirect("ushowCarServlet");
        }else{
            resp.sendRedirect("fail.jsp");
        }
    }
}

🎈解析

        这段Java代码是一个Servlet控制器,用于处理从用户购物车中删除商品的请求:

  1. 包声明:

    • package com.dingcan.controller;: 声明了这个类属于 com.dingcan.controller 包。
  2. 导入服务类:

    • 导入了 com.dingcan.service.CarService 接口及其实现类 com.dingcan.service.Impl.CarServiceImpl
  3. @WebServlet 注解:

    • @WebServlet(name = "DelCarServlet", value = "/delCarServlet"): 注解用于注册Servlet,定义了它的名称和URL映射。当访问 /delCarServlet 路径时,这个Servlet会被调用。
  4. 类定义:

    • public class DelCarServlet extends HttpServlet: 定义了一个名为 DelCarServlet 的类,它继承自 HttpServlet
  5. 成员变量:

    • CarService carService = new CarServiceImpl();: 创建了 CarService 接口的实现类 CarServiceImpl 的实例。
  6. service 方法:

    • @Override: 表示重写了父类的方法。
    • protected void service(HttpServletRequest req, HttpServletResponse resp): 这是Servlet的 service 方法,用于处理客户端的请求。
  7. 获取请求参数:

    • int cid = Integer.parseInt(req.getParameter("cid"));: 从请求中获取 cid 参数,即要删除的商品的唯一标识符,并转换为整数类型。
  8. 删除商品:

    • boolean b = carService.delCar(cid);: 使用 carService 的 delCar 方法尝试从数据库中删除ID为 cid 的商品。
  9. 重定向:

    • 如果删除成功 (b 为 true),使用 resp.sendRedirect("ushowCarServlet") 重定向到 ushowCarServlet,这将展示更新后的购物车列表。
    • 如果删除失败 (b 为 false),使用 resp.sendRedirect("fail.jsp") 重定向到错误页面。
  10. 异常处理:

    • 方法声明中包含了 throws ServletException, IOException,表示这个方法可能会抛出 ServletException 和 IOException 异常。

   DelCarServlet 的主要作用是接收商品ID,调用服务层方法删除购物车中的商品,并根据操作结果重定向到相应页面。这个过程中,它利用了服务层提供的业务逻辑和数据访问对象来实现数据的持久化。如果删除失败,可能需要添加额外的逻辑来提供反馈信息给用户。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Y小夜

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值