JavaWeb22.MVC购物车功能补全

回顾:JavaWeb21.MVC购物车

目录

pojo包

Order.java

dao包

IOrderDao.java

IOrderItemDao.java

dao.impl包

OrderDaoImpl.java

OrderItemDaoImpl.java

biz包

OrderBiz.java

OrderItemBiz.java

biz.impl包

OrderItemBizImpl.java

OrderBizImpl.java

servlet包

CalcServlet.java

 OrderServlet.java

 ItemServlet.java

界面包

order.jsp

item.jsp


pojo包

Order.java

package com.zking.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@SuppressWarnings("all")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {

    private Integer id;
    private Integer userId;
    private Integer total;

}

dao包

IOrderDao.java

package com.zking.dao;

import com.zking.pojo.Order;

import java.util.List;

@SuppressWarnings("all")
public interface IOrderDao {

    int maxPK();

    int insert(Order order);

    List<Order> list(int userId);

}

IOrderItemDao.java

package com.zking.dao;

import com.zking.pojo.OrderItem;

import java.util.List;

@SuppressWarnings("all")
public interface IOrderItemDao {

    int maxPK();

    int insert(OrderItem item);

    List<OrderItem> list(Integer id);

}

dao.impl包

OrderDaoImpl.java

package com.zking.dao.impl;

import com.zking.dao.IOrderDao;
import com.zking.pojo.Goods;
import com.zking.pojo.Order;
import com.zking.util.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("all")
public class OrderDaoImpl implements IOrderDao {

    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    @Override
    public int maxPK() {
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order");
            rs = ps.executeQuery();
            if (rs.next()) {
               return rs.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }

    @Override
    public int insert(Order order) {
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("insert into car_order values(?,?,?)");
            ps.setInt(1,order.getId());
            ps.setInt(2,order.getUserId());
            ps.setInt(3,order.getTotal());
            return ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }

    @Override
    public List<Order> list(int userId) {
        List<Order> list = new ArrayList<>();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_order where user_id=?");
            ps.setInt(1,userId);
            rs=ps.executeQuery();
            while(rs.next()){
                Order order=new Order();
                order.setId(rs.getInt(1));
                order.setUserId(rs.getInt(2));
                order.setTotal(rs.getInt(3));
                list.add(order);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return list;
    }
}

OrderItemDaoImpl.java

package com.zking.dao.impl;

import com.zking.dao.IGoodsDao;
import com.zking.dao.IOrderItemDao;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.util.DBHelper;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings("all")
public class OrderItemDaoImpl implements IOrderItemDao {

    private IGoodsDao goodsDao=new GoodsDaoImpl();

    //定义资源
    private Connection con;
    private PreparedStatement ps;
    private ResultSet rs;

    @Override
    public int maxPK() {
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select nvl(max(id),0)+1 from car_order_item");
            rs = ps.executeQuery();
            if (rs.next()) {
                return rs.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }

    @Override
    public int insert(OrderItem item) {
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("insert into car_order_item values(?,?,?,?,?)");
            ps.setInt(1, item.getId());
            ps.setInt(2, item.getOrderId());
            ps.setInt(3, item.getGoods().getId());
            ps.setInt(4, item.getQuantity());
            ps.setInt(5, item.getTotal());
            return ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return 0;
    }

    @Override
    public List<OrderItem> list(Integer orderId) {
        List<OrderItem> list = new ArrayList<>();
        try {
            con = DBHelper.getCon();
            ps = con.prepareStatement("select * from car_order_item where order_id=?");
            ps.setInt(1,orderId);
            rs=ps.executeQuery();
            while(rs.next()){
                OrderItem item=new OrderItem();
                item.setId(rs.getInt(1));
                item.setOrderId(rs.getInt(2));
                item.setGoods(goodsDao.one(rs.getInt(3)));
                item.setQuantity(rs.getInt(4));
                item.setTotal(rs.getInt(5));
                list.add(item);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            DBHelper.close(con, ps, rs);
        }
        return list;
    }

}

biz包

OrderBiz.java

package com.zking.biz;

import com.zking.pojo.Order;

import java.util.List;

@SuppressWarnings("all")
public interface IOrderBiz {

    int maxPK();

    int insert(Order order);

    List<Order> list(int userId);

}

OrderItemBiz.java

package com.zking.biz;

import com.zking.pojo.OrderItem;

import java.util.List;

@SuppressWarnings("all")
public interface IOrderItemBiz {

    int maxPK();

    int insert(OrderItem item);

    List<OrderItem> list(Integer id);

}

biz.impl包

OrderItemBizImpl.java

package com.zking.biz.impl;

import com.zking.biz.IOrderItemBiz;
import com.zking.dao.IOrderItemDao;
import com.zking.dao.impl.OrderItemDaoImpl;
import com.zking.pojo.OrderItem;

import java.util.List;

@SuppressWarnings("all")
public class OrderItemBizImpl implements IOrderItemBiz {

    private IOrderItemDao orderItemDao=new OrderItemDaoImpl();

    @Override
    public int maxPK() {
        return orderItemDao.maxPK();
    }

    @Override
    public int insert(OrderItem item) {
        return orderItemDao.insert(item);
    }

    @Override
    public List<OrderItem> list(Integer id) {
        return orderItemDao.list(id);
    }

}

OrderBizImpl.java

package com.zking.biz.impl;

import com.zking.biz.IOrderBiz;
import com.zking.dao.IOrderDao;
import com.zking.dao.impl.OrderDaoImpl;
import com.zking.pojo.Order;

import java.util.List;

@SuppressWarnings("all")
public class OrderBizImpl implements IOrderBiz {

    private IOrderDao orderDao=new OrderDaoImpl();

    @Override
    public int maxPK() {
        return orderDao.maxPK();
    }

    @Override
    public int insert(Order order) {
        return orderDao.insert(order);
    }

    @Override
    public List<Order> list(int userId) {
        return orderDao.list(userId);
    }
}

servlet包

CalcServlet.java

package com.zking.servlet;

import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;
import org.apache.commons.codec.binary.StringUtils;

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;

@SuppressWarnings("all")
@WebServlet("/calc.do")
public class CalcServlet extends HttpServlet {

    private IOrderBiz orderBiz=new OrderBizImpl();
    private IOrderItemBiz orderItemBiz=new OrderItemBizImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //购物车在哪里?
        List<OrderItem> car = (List<OrderItem>)req.getSession().getAttribute("car");
        //获得用户
        User user = (User)req.getSession().getAttribute("user");
        //什么是结算? 将数据放到【订单】【订单项】
        if(car.isEmpty()){
            //返回购物车
            resp.sendRedirect("car.jsp");
            return;
        }
        //计算总和
        int sum=0;
        for (OrderItem item : car) {
            sum+=item.getTotal();
        }
        //优先结算订单
        Order order=new Order();
        order.setId(orderBiz.maxPK());
        order.setUserId(user.getId());
        order.setTotal(sum);
        //将订单放到数据库
        int i = orderBiz.insert(order);
        if(i>0){
            //如果订单插入成功了,则插入订单项
            for (OrderItem item : car) {
                //item没有id
                item.setId(orderItemBiz.maxPK());
                //也没有订单编号
                item.setOrderId(order.getId());
                orderItemBiz.insert(item);
            }
            //结算完毕
            car.clear();
            //清空价格
            req.getSession().setAttribute("total",0);
        }

        //返回购物车
        resp.sendRedirect("car.jsp");
    }

}

 OrderServlet.java

package com.zking.servlet;

import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;

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;

@SuppressWarnings("all")
@WebServlet("/order.do")
public class OrderServlet extends HttpServlet {

    private IOrderBiz orderBiz=new OrderBizImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得用户
        User user = (User)req.getSession().getAttribute("user");
        List<Order> list = orderBiz.list(user.getId());
        //放到请求作用域中
        req.setAttribute("list",list);
        //返回order.jsp
        req.getRequestDispatcher("order.jsp").forward(req,resp);
    }

}

 ItemServlet.java

package com.zking.servlet;

import com.zking.biz.IOrderBiz;
import com.zking.biz.IOrderItemBiz;
import com.zking.biz.impl.OrderBizImpl;
import com.zking.biz.impl.OrderItemBizImpl;
import com.zking.pojo.Order;
import com.zking.pojo.OrderItem;
import com.zking.pojo.User;

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;

@SuppressWarnings("all")
@WebServlet("/item.do")
public class ItemServlet extends HttpServlet {

    private IOrderItemBiz orderItemBiz=new OrderItemBizImpl();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接受订单的id
        Integer id = Integer.parseInt(req.getParameter("id"));
        //根据订单id查询对应的订单项
        List<OrderItem> list = orderItemBiz.list(id);
        //放到请求作用域中
        req.setAttribute("list",list);
        //返回order.jsp
        req.getRequestDispatcher("item.jsp").forward(req,resp);
    }

}

界面包

order.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${list == null}">
    <c:redirect url="order.do"/>
</c:if>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>我的订单</title>
</head>
<body>

<div class="container">

    <h1>
        您好, <small>这是订单界面</small>
    </h1>
    <h1>
        <a href="index.jsp" class="btn btn-default">继续购买</a>
        <a href="car.jsp" class="btn btn-default">返回购物车</a>
    </h1>
    <table class="table table-bordered table-striped">
        <tbody>
        <tr>
            <th>订单编号</th>
            <th>订单总价</th>
            <th>订单操作</th>
        </tr>
        <c:forEach items="${list}" var="order">
        <tr>
            <td>${order.id}</td>
            <td>${order.total}</td>
            <td>
                <a href="item.do?id=${order.id}" class="btn btn-default">查看详情</a>
            </td>
        </tr>
        </c:forEach>
        </tbody>
    </table>

</div>

</body>
</html>

item.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${list == null}">
    <c:redirect url="item.do"/>
</c:if>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/css/bootstrap.css">
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/jquery-3.5.1.js"></script>
    <script src="${pageContext.request.contextPath}/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>我的订单项</title>
</head>
<body>

<div class="container">
    <h1>
        您好, <small>这是订单项界面</small>
    </h1>
    <h1>
        <a href="index.jsp" class="btn btn-default">继续购买</a>
        <a href="car.jsp" class="btn btn-default">返回购物车</a>
    </h1>
    <table class="table table-bordered table-striped">
        <tbody>
        <tr>
            <th>订单项编号</th>
            <th>订单项商品名称</th>
            <th>订单项商品单价</th>
            <th>订单项下单数量</th>
            <th>订单项下单总价</th>
        </tr>
        <c:forEach items="${list}" var="item">
        <tr>
            <td>${item.id}</td>
            <td>${item.goods.name}</td>
            <td>${item.goods.price}</td>
            <td>${item.quantity}</td>
            <td>${item.total}</td>
        </tr>
        </c:forEach>
        </tbody>
    </table>

</div>

</body>
</html>

你要尽全力保护你的梦想。那些嘲笑你梦想的人,他们注定失败,他们想把你变成和他们一样。我坚信,只要心中有梦想,我就会与众不同。你也是。

购物车是一个常见的电商网站功能,可以让用户将感兴趣的商品添加到购物车中,在适当的时候一起结算购买。下面是使用JavaWeb设计购物车功能的一种简单方案。 1. 数据模型设计: 为了表示商品和购物车信息,我们需要设计两个JavaBean类:Product(商品)和CartItem(购物车条目)。Product类包含商品的各种属性(如名称、价格等),CartItem类包含商品和数量的关联信息。 2. 页面设计: 我们需要设计两个页面:商品列表页和购物车页。商品列表页展示所有的商品信息,并提供“添加到购物车”按钮;购物车页展示购物车中的商品和数量,并提供删除和结算功能。 3. 后端逻辑设计: (1)在商品列表页中,点击“添加到购物车”按钮时,将商品的信息和数量发送到后端Servlet。 (2)在后端Servlet中,获取到商品信息和数量后,判断购物车中是否已存在该商品。 - 如果存在,则更新购物车中该商品的数量。 - 如果不存在,则创建一个新的购物车条目,并添加到购物车中。 (3)在购物车页中,可以展示购物车中的商品和数量,并提供删除商品和结算购买的功能。 - 删除商品时,可以通过调用后端Servlet删除购物车中对应的购物车条目。 - 结算购买时,可以通过调用后端Servlet生成订单,并将购物车清空。 4. 数据持久化及访问: 购物车信息可以暂时存储在Java的一个List集合中,也可以将购物车信息存储在数据库中,以便用户下次登录时能够继续购买。可以使用JDBC或ORM框架(如Hibernate)来实现与数据库的交互。 以上是一个基本的购物车功能的设计思路,具体的实现可以根据需要进行调整和完善。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值