基于 Java Web + MySQL 的全栈电商平台,模拟小米商城核心购物流程

QFShop 是一个功能完整的 B2C 电商平台,实现了用户注册登录、商品浏览、购物车、订单管理、支付等核心电商流程。界面风格模拟小米商城,基于经典 Java Web 技术栈(Servlet + JSP + MVC)构建,无需任何框架即可运行。
qfshop/
├── src/com/itqf/
│ ├── controller/ # Servlet 控制器层
│ │ ├── BaseServlet.java # 反射路由基类
│ │ ├── UserContraller.java
│ │ ├── ProductController.java
│ │ ├── CartController.java
│ │ ├── OrdersController.java
│ │ ├── AddressController.java
│ │ └── TypeController.java
│ │
│ ├── service/ # 业务逻辑层
│ │ ├── impl/
│ │ └── *.java
│ │
│ ├── dao/ # 数据访问层
│ │ ├── impl/
│ │ └── *.java
│ │
│ ├── entity/ # 实体类
│ │ ├── User.java
│ │ ├── Product.java
│ │ ├── Cart.java
│ │ ├── Orders.java
│ │ ├── Item.java # 订单项
│ │ ├── Address.java
│ │ └── Type.java
│ │
│ └── utils/ # 工具类
│ ├── C3P0Utils.java # C3P0 连接池
│ ├── MD5Utils.java # 密码加密
│ ├── PaymentUtil.java # 支付工具(易宝/微信)
│ ├── EmailUtils.java # 邮件发送
│ ├── Base64Utils.java
│ └── RandomUtils.java
│
├── web/ # 前端页面
│ ├── index.jsp # 首页
│ ├── login.jsp # 登录
│ ├── register.jsp # 注册
│ ├── goodsList.jsp # 商品列表
│ ├── goodsDetail.jsp # 商品详情
│ ├── cart.jsp # 购物车
│ ├── order.jsp # 确认订单
│ ├── orderList.jsp # 订单列表
│ ├── orderDetail.jsp # 订单详情
│ ├── confirm.jsp # 支付确认
│ ├── pay.jsp # 支付页面
│ ├── self_info.jsp # 个人信息
│ ├── admin/ # 后台管理
│ │ ├── admin.jsp # 管理主页
│ │ ├── addGoods.jsp # 添加商品
│ │ ├── showGoods.jsp # 商品管理
│ │ ├── showAllOrder.jsp # 订单管理
│ │ └── userList.jsp # 用户管理
│ └── error/ # 错误页面
│
├── WEB-INF/lib/ # 依赖包
│ ├── c3p0-0.9.1.2.jar
│ ├── mysql-connector-java-5.0.8-bin.jar
│ ├── commons-dbutils-1.4.jar
│ ├── gson-2.2.1.jar
│ └── ...
│
└── README.md
| 功能 |
说明 |
| 用户注册 |
邮箱激活码注册,MD5 密码加密 |
| 用户登录 |
验证码校验,Cookie 自动登录(14天有效) |
| 邮箱激活 |
激活码 Base64 编码,激活状态管理 |
| 注销登录 |
Session 清除 + Cookie 覆盖 |
| 个人信息 |
查看/管理收货地址 |
| 功能 |
说明 |
| 商品列表 |
分类展示,分页功能(每页6件) |
| 商品详情 |
商品信息、价格、描述展示 |
| 热门商品 |
按 pstate 热度指数排序 |
| 分类浏览 |
按商品类别 tid 筛选 |
| 功能 |
说明 |
| 添加购物车 |
登录校验,商品 PID + 用户 UID 关联 |
| 查看购物车 |
实时小计计算(数量 × 单价) |
| 修改数量 |
动态更新小计 |
| 删除商品 |
按购物车项 cid 删除 |
| 清空购物车 |
按用户 UID 清空 |
| 功能 |
说明 |
| 确认订单 |
选择收货地址 + 购物车商品结算 |
| 创建订单 |
生成订单号,扣减库存 |
| 订单状态 |
0未付款 → 1已付款 → 2已发货 → 3待评价 → 4完成 / 5退货 |
| 订单详情 |
订单项(Item)列表展示 |
| 功能 |
说明 |
| 微信支付 |
扫码支付(WeiXin API 集成) |
| 易宝支付 |
网关支付(Hmac MD5 签名验签) |
| 支付回调 |
异步通知,订单状态变更 |
| 功能 |
说明 |
| 商品管理 |
添加/查看/下架商品 |
| 订单管理 |
查看所有订单,状态管理 |
| 用户管理 |
查看注册用户,账号禁用 |
| 分类管理 |
添加/管理商品分类 |
请求 → Filter(编码/登录) → Servlet(Controller)
→ Service(业务逻辑)
→ Dao(CRUD) → C3P0 → MySQL
| 技术 |
用途 |
| Servlet 3.0 |
@WebServlet 注解路由 |
| 反射 + BaseServlet |
一个 Servlet 处理多个方法(method 参数分发) |
| BeanUtils |
Map → Entity 自动映射 |
| C3P0 |
数据库连接池(配置文件自动读取) |
| JSTL + EL |
JSP 表达式语言,替代 Scriptlet |
| Bootstrap 3 |
响应式前端框架 |
| Cookie + Session |
登录态与自动登录 |
| MD5 |
用户密码单向加密存储 |
| Base64 |
激活码编解码 |
| JavaMail |
注册邮件激活 |
| Gson |
JSON 序列化(微信支付回调) |
- JDK 8+
- Apache Tomcat 8+
- MySQL 5.x
- Maven 或普通 Web 项目导入
-- 创建数据库
CREATE DATABASE qfshop CHARACTER SET utf8;
-- 用户表
CREATE TABLE user (
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE,
upassword VARCHAR(32), -- MD5 加密
usex VARCHAR(10),
ustatus CHAR(1) DEFAULT '0', -- 0 未激活,1 已激活
code VARCHAR(32), -- 激活码
email VARCHAR(100),
urole CHAR(1) DEFAULT '0' -- 0 普通用户,1 管理员
);
-- 商品表
CREATE TABLE product (
pid INT PRIMARY KEY AUTO_INCREMENT,
tid INT,
pname VARCHAR(100),
ptime DATE,
pimage VARCHAR(200),
pstate INT DEFAULT 0, -- 热门指数
pinfo TEXT,
pprice DECIMAL(10,2)
);
-- 购物车表
CREATE TABLE cart (
cid INT PRIMARY KEY AUTO_INCREMENT,
uid INT,
pid INT,
cnum INT DEFAULT 1
);
-- 订单表
CREATE TABLE orders (
oid VARCHAR(50) PRIMARY KEY,
uid INT,
aid INT,
ocount DECIMAL(10,2),
otime DATETIME,
ostate INT DEFAULT 0 -- 0~5 状态流转
);
-- 订单项表
CREATE TABLE item (
itemid INT PRIMARY KEY AUTO_INCREMENT,
oid VARCHAR(50),
pid INT,
count INT,
subtotal DECIMAL(10,2)
);
-- 地址表
CREATE TABLE address (...);
-- 分类表
CREATE TABLE type (...);
- 导入
web 目录到 Eclipse/IDEA 作为 Web 项目
- 配置 MySQL 数据库连接(C3P0 自动读取
c3p0-config.xml)
- 部署到 Tomcat 8+
- 访问
http://localhost:8080/qfshop/
// 一个 Servlet 处理多个方法,通过 method 参数分发
@WebServlet("/product")
public class ProductController extends BaseServlet {
public String show(HttpServletRequest request, ...) {
return Constants.FORWARD + "/goodsList.jsp";
}
public String detail(HttpServletRequest request, ...) {
return Constants.FORWARD + "/goodsDetail.jsp";
}
}
public BigDecimal getCcount() {
BigDecimal pprice = product.getPprice();
BigDecimal bigDecimal = new BigDecimal(cnum);
return pprice.multiply(bigDecimal); // 单价 × 数量
}
0(未付款) → 1(已付款) → 2(已发货) → 3(待评价) → 4(已完成)
↓
5(退货中)
User (1) ←→ (N) Cart
User (1) ←→ (N) Orders
User (1) ←→ (N) Address
Product (1) ←→ (N) Cart
Product (1) ←→ (N) Item
Orders (1) ←→ (N) Item
Orders (N) ←→ (1) Address
Product (N) ←→ (1) Type
本项目仅供学习交流使用。