javaweb简单实现购物车的功能

article/2025/10/17 22:48:18

功能简述

本例采用jsp+servlet+mysql+jdbc+c3p0+ajax简单实现一个购物车的功能。

  • 项目结构
    在这里插入图片描述
    service那层可以忽略,就不实现登录的功能了,还得加过滤器,主要就实现购物车就行了

JQ + jar包
链接:https://pan.baidu.com/s/1KN8EvSlraH_tHaynzW3znw
提取码:86je
复制这段内容后打开百度网盘手机App,操作更方便哦

项目源码:
链接:https://pan.baidu.com/s/1HjRL67r8JJg5KM2jhKthLA
提取码:4i2r
复制这段内容后打开百度网盘手机App,操作更方便哦

具体实现

在开发购物车之前,首先要把几个关键类之间的关系理清楚
首先各个类的意义:

  1. Product 产品
  2. User 用户
  3. Order 订单
  4. OrderItem 订单项

前3者都好理解,订单项需要解释一下。

比如阁下在某宝下了一次订单,这个订单包括了

黑色的丝袜 一条
娃娃 两个
抹布 三个
蜡烛 四个

一条记录就是一个订单项,对应一种商品,以及购买数量。

第一步建立product并且进行展示
在本地数据库中创建数据库cart

create database cart;
  • 建立商品表product
    CREATE TABLE product (
    id int(11) DEFAULT NULL,
    name varchar(50) DEFAULT NULL,
    price float DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 插入数据
    insert into product values(1,‘黑色的丝袜’,500);
    insert into product values(2,‘娃娃’,2500);
    insert into product values(3,‘抹布’,180);
    insert into product values(4,‘蜡烛’,0.20);

  • product实体类

  • jdbc工具类

package com.chenchangjie.utils;import com.mchange.v2.c3p0.ComboPooledDataSource;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCUtil {private static ComboPooledDataSource dataSource;static {dataSource = new ComboPooledDataSource("testc3p0");}public static Connection getConnection() throws SQLException {Connection connection = null;connection = dataSource.getConnection();return connection;}public static void Close(ResultSet resultSet, PreparedStatement statement,Connection connection) throws SQLException {if(resultSet != null)resultSet.close();if(statement != null)statement.close();if(connection != null)connection.close();}
}
  • c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?><c3p0-config><named-config name="testc3p0"><!--指定连接池的初始属性--><property name="jdbcUrl">jdbc:mysql://localhost:3306/cart?characterEncoding=utf-8&amp;serverTimezone=UTC</property><property name="user">root</property><property name="password">你的密码</property><property name="driverClass">com.mysql.cj.jdbc.Driver</property><!--初始化连接池中的连接数量--><property name="initialPoolSize">20</property><!--请求过多时能连接的最大数量--><property name="maxPoolSize">40</property><!--一次可以递增的连接数量--><!--当连接池中剩余两个就开始递增--><property name="acquireIncrement">10</property><!--当连接池中到达最低剩余数量时,开始递增--><property name="minPoolSize">2</property></named-config>
</c3p0-config>
package com.chenchangjie.eneity;public class Product {private int id;private String name;private float price;public Product(int id, String name, float price) {this.id = id;this.name = name;this.price = price;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}
}
  • 从数据库中查询商品的接口以及实现类(还有通过id获取商品后面会用到)
package com.chenchangjie.Repository;import com.chenchangjie.eneity.Product;import java.util.List;public interface ProductRepository {List<Product> returnProduct();Product getProductById(int id);
}

实现类ProductRepositoryImpl.java

package com.chenchangjie.Repository.impl;import com.chenchangjie.Repository.ProductRepository;
import com.chenchangjie.eneity.Product;
import com.chenchangjie.utils.JDBCUtil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class ProductRepositoryImpl implements ProductRepository {@Overridepublic List<Product> returnProduct() {List<Product> list = new ArrayList<>();Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {connection = JDBCUtil.getConnection();String sql = "select * from product order by id";statement = connection.prepareStatement(sql);resultSet = statement.executeQuery();while(resultSet.next()){list.add(new Product(resultSet.getInt("id"),resultSet.getString("name"),resultSet.getFloat("price")));}} catch (SQLException throwables) {throwables.printStackTrace();} finally {try {JDBCUtil.Close(resultSet,statement,connection);} catch (SQLException throwables) {throwables.printStackTrace();}}return list;}@Overridepublic Product getProductById(int id) {Product product = null;Connection connection = null;PreparedStatement statement = null;ResultSet resultSet = null;try {connection = JDBCUtil.getConnection();String sql = "select * from product where id = ?";statement = connection.prepareStatement(sql);statement.setInt(1,id);resultSet = statement.executeQuery();while (resultSet.next()){product = new Product(resultSet.getInt(1),resultSet.getString(2),resultSet.getFloat(3));}} catch (SQLException throwables) {throwables.printStackTrace();}return product;}
}
  • productServlet.java通过接收前端的数据和请求然后响应回去,响应的数据来源就是上面的
    ProductRepositoryImpl.java
package com.chenchangjie.servlet;import com.chenchangjie.Repository.ProductRepository;
import com.chenchangjie.Repository.impl.ProductRepositoryImpl;
import com.chenchangjie.eneity.Product;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("/productList")
public class ProductServlet extends HttpServlet {private ProductRepository productRepository = new ProductRepositoryImpl();@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {List<Product> list = productRepository.returnProduct();req.setAttribute("list",list);req.getRequestDispatcher("index.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {}
}
index.jsp```html
<%--Created by IntelliJ IDEA.User: 陈老CDate: 2020-12-9Time: 15:21To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head><title>Title</title><script type="text/javascript" src="/js/jquery-1.7.2.js"></script><script type="text/javascript">$(function () {// console.log("login");$("button.AddCartBtn").click(function () {// console.log("click");let num = parseInt($("input.num").val());let pid = parseInt($(this).attr("pid"));// console.log(num + "  " + pid);$.ajax({url:'/addOrderItem',type:'post',dataType:'text',data:'type=add&pid=' + pid + '&num=' + num,success:function (data) {alert("添加购物车成功")}});})});</script>
</head>
<body>
<c:if test="${!empty user}"><div align="center">当前用户: ${user.name}</div>
</c:if>
<table align='center' border='1' cellspacing='0'><tr><td>id</td><td>名称</td><td>价格</td><td>购买</td></tr><c:forEach items="${list}" var="product" varStatus="st"><tr><td>${product.id}</td><td>${product.name}</td><td>${product.price}</td><td>数量<input class="num" type="text" value="1" name="num">
<%--          <input id="addCart" type="submit" value="购买">--%><!--多个部件不用id选择器,用类选择器--><button class="AddCartBtn" pid="${product.id}">加入购物车</button></td></tr></c:forEach>
</table>
<a href="listOrderItem.jsp">购物车</a>
<%--<form action="/productList" method="get"><input type="submit" value="购物车"/>--%>
</body>
</html>

然后访问localhost:8080/productList就能看见商品
在这里插入图片描述
点击加入购物车按钮就会进入/addOrderItem进入相应的逻辑处理,这里是通过ajax异步请求到/addOrderItem里面;

  • OrderItemAddServlet.java
package com.chenchangjie.servlet;import com.chenchangjie.Repository.ProductRepository;
import com.chenchangjie.Repository.impl.ProductRepositoryImpl;
import com.chenchangjie.eneity.OrderItem;
import com.chenchangjie.eneity.Product;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.ArrayList;
import java.util.List;@WebServlet("/addOrderItem")
public class OrderItemAddServlet extends HttpServlet {private ProductRepository productRepository = new ProductRepositoryImpl();@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int num = Integer.parseInt(req.getParameter("num"));int pid = Integer.parseInt(req.getParameter("pid"));String type = req.getParameter("type");Product product = productRepository.getProductById(pid);OrderItem orderItem = new OrderItem(product,num);List<OrderItem> list = (List<OrderItem>) req.getSession().getAttribute("ois");if(list == null){list = new ArrayList<>();req.getSession().setAttribute("ois",list);}//检查是否有重复的数量boolean flag = false;for(OrderItem o : list){if(o.getProduct().getId() == product.getId()){o.setNum(o.getNum() + num);flag = true;break;}}if(!flag)list.add(orderItem);resp.sendRedirect("index.jsp");}
}
  • listOrderItem.jsp展示购物车里面的内容
<%--Created by IntelliJ IDEA.User: 陈老CDate: 2020-12-9Time: 17:14To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*" isELIgnored="false"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><h1 align="center" >购物车</h1>
<table align='center' border='1' cellspacing='0'><tr><td>商品名称</td><td>单价</td><td>数量</td><td>小计</td></tr><c:forEach items="${ois}" var="oi" varStatus="st"><tr><td>${oi.product.name}</td><td>${oi.product.price}</td><td>${oi.num}</td><td>${oi.product.price*oi.num}</td><td><a href="/deleteOrderItem?pName=${oi.product.name}" type="delete">删除</a></td></tr></c:forEach>
</table><a href="/productList">回到购物页面</a>

在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/h2BqDXdl.shtml

相关文章

jsp购物车简单实现思想(一)

目录 学习目标&#xff1a; 1.通过超链接a传参将所点击购买的商品id传到处理页面doShopCart.jsp进行处理 2.接收超链接a所传productid并进行处理 3.接收处理后的存储多个id的ArrayList aList购物车列表&#xff0c;通过ProItemDaoImp类的getProItemByIds(aList)方法从数据库…

servlet+jsp实现小小购物车功能

这个小小购物车功能是接上个实现浏览记录保存功能的,首先是建立连接池,然后就创建一个购物车实体类,购物车实体类需要有items商品与商品的数量,成员变量如下 //购物车商品的集合private HashMap<Items, Integer> goods; //购物车的总金额private double totalPrice; 然后…

Servlet/Jsp实现购物车

(1)用servlet实现简单的购物车系统&#xff0c;项目结构如下&#xff1a;&#xff08;新建web Project项目 只需要AddItemServlet &#xff0c; ListItemServlet&#xff0c;exam403.jsp三个文件即可&#xff0c;其他的不用管&#xff09; &#xff08;2&#xff09;exam403.j…

jsp实现简单购物车页面

壹 我们今天所设计的购物车页面所实现的功能是点击商品所对应的购买按钮即可在另一页面显示所购买的商品。 贰 &#xff08;1&#xff09;我们想象一下购物的整个过程&#xff0c;当我们进入超市后&#xff0c;会首先拿一个购物推车或者购物篮&#xff0c; &#xff08;2&#…

jsp设计简单的购物车应用案例

代码解释 <%request.setCharacterEncoding("UTF-8");if (request.getParameter("c1")!null)session.setAttribute("s1",request.getParameter("c1"));if (request.getParameter("c2")!null)session.setAttribute("…

jsp实现简易购物车

实现要求: &#xff08;a&#xff09;输入要购买的商品 &#xff08;b&#xff09;点击提交按钮后 &#xff08;c&#xff09;结账页面将所选择的商品全部列出 代码实现: b9_shopping.jsp <% page language"java" contentType"text/html; charsetUTF-8…

JSP-购物类网站(购物车功能,翻页功能,文件下载功能,文末有代码及数据库备份)

目录 网站功能框架 网站架构图 网站项目树 网站首页 注册登录页面 用户个人中心页面 商家个人中心页面 搜索结果页面 商品详细信息页面 手机端页面(部署后) 之前在校内参加过网站设计大赛&#xff0c;贡献全部代码&#xff0c;供jsp小白学习。 这是一个购物类网站,后…

基于Java、Jsp实现购物车的功能

先看效果图&#xff1a; 实现代码&#xff1a; index.jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"UTF-8&qu…

JSP——购物车

JSP—购物车 主页面&#xff08;buy.jsp&#xff09; <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> &l…

HTML代码实现简易购物车

网上关于购物车实现的代码非常多&#xff0c;本次的这篇文章主要是和大家分享了HTML代码实现简易购物车&#xff0c;有需要的小伙伴可以看一下&#xff0c;接下来讲解一下具体的实现。 1、用html实现内容&#xff1b; 2、用css修饰外观&#xff1b; 3、用js(jq)设计动效。 …

用jsp实现一个简单的购物车web应用系统。实现的添加购物商品,删除购物商品并且显示购物车信息。

用jsp实现一个简单的购物车web应用系统。实现的添加购物商品&#xff0c;删除购物商品并且显示购物车信息。 1. 在自己建立的WEB工程中,建立包shopcart.dto,在相应的包中添加类Product.java ,ShopCart.java /*类Product */package shopcart.dto;import java.io.Serializable;pu…

JSP | 简易购物车的实现

本程序共包含四部分文件&#xff0c;只包含jsp文件&#xff0c;将java代码嵌入到jsp文件中实现&#xff1a; loginID.jsp、shop.jsp、food.jsp、count.jsp&#xff0c;分别实现的功能是输入ID页面、超链接功能选择页面、购物页面和购物车页面。 login.jsp文件代码如下&#x…

Javaweb-购物商城实现展示商品,实现购物车购物,结算(Servlet+mysql+jsp+tomcat)

演示视频: 购物网站 代码: https://github.com/wu1369955/shopping 购物网站首页 首先说明:这个是花几天搭建出来玩的,从github上拉到找好看的框架组合的,效果还不错,主要是学习作用.源码之类的也会分享出来,希望一起进步,最好动手实践,可以参照逻辑做的更好, 简易购物商城设…

javascript购物车实现详细代码讲解

我们肯定都很熟悉商品购物车这一功能&#xff0c;每当我们在某宝某东上购买商品的时候&#xff0c;看中了哪件商品&#xff0c;就会加入购物车中&#xff0c;最后结算。购物车这一功能&#xff0c;方便消费者对商品进行管理&#xff0c;可以添加商品&#xff0c;删除商品&#…

JSP(6)简单购物车实现

两个jsp页面之间跳转需要通过Servlet控制器实现 1 创建数据库表 -- 创建一个序列&#xff0c;使book的id自增长 create sequence book_seq start with 1 increment by 1 minvalue 1 maxvalue 99999999999999 nocycle nocache -- 创建一个序列&#xff0c;使orders的id自增长…

用JSP实现的商城购物车模块

这两天&#xff0c;在学习JSP&#xff0c;正好找个小模块来练练手&#xff1a; 以下就是实现购物车模块的页面效果截图&#xff1a; 图1. 产品显示页面 通过此页面进行产品选择&#xff0c;加入到购物车 图2 .购物车页面 图3 . 商品数量设置 好了&#xff0c;先不贴图了&#x…

项目-Java Web购物车-JSP实现

文章目录 源码地址界面演示目录结构准备工作登录注册功能定义DaoBaseDaoProductDaoImp 定义EntityProductCartItem 商品列表与详情界面★购物车页面更多 源码地址 点击文章底部打赏后私信发送源码地址 界面演示 介绍(旧) 浏览器打开http://localhost:8080/ShopCart/login.j…

jsp购物车(session版)

目录 一、要用到的 js 和 css 文件 二、数据库表实体类Dao类 1、数据库表 2、实体类 3、Dao类方法(GoodsDao) 四、商品主页面&#xff08;index.jsp&#xff09; 1、代码分析 2、完整代码 五、购物车页面&#xff08;spcar.jsp&#xff09; 1、代码分析 2、完整代码 3、删除…

jsp实现购物车

文章目录 一、案例演示二、实现步骤1.info.jsp2.UserServlet3.cart.jsp4.UserServlet 一、案例演示 点击购买进入到购物车页面&#xff0c;增加减少数量都会对小计&#xff0c;总计产生影响&#xff0c;点击继续购买&#xff0c;回到挑选页面product_list.jsp 二、实现步骤 …

图像识别技术

图像识别算法实现收藏 <script type"text/javascript"></script> <script></script> 以往的图像处理函数实现&#xff0c;多是针对图像句柄。算法实现 需要操作复杂的图像文件。 但是&#xff0c;这种方式算法实现和调试的周期比较长。为了加…