JSP+Servlet 电商系统实战项目
·
JSP+Servlet 电商系统实战项目
基于 JSP + Servlet + JDBC + MySQL 的 MVC 架构商城系统,包含前台用户端和后台管理端。
源码下载
https://tool.nineya.com/s/1jdlklf1s
技术栈
| 技术 | 说明 |
|---|---|
| JSP | 视图层 |
| Servlet | 控制层 |
| JDBC | 数据访问层 |
| MySQL 8.0 | 数据库 |
| Tomcat 9.x | Web 服务器 |
项目结构
01_MUI/
├── src/com/sxt/
│ ├── controller/ # Servlet 控制器
│ ├── dao/ # 数据访问层接口
│ ├── dao/impl/ # DAO 实现类
│ ├── service/ # 业务逻辑层接口
│ ├── service/impl/ # Service 实现类
│ ├── pojo/ # 实体类
│ └── util/
│ └── JDBCUtil.java # 数据库工具类
├── web/
│ ├── admin/ # 后台管理页面
│ ├── css/ # 样式文件
│ ├── img/ # 商品图片
│ ├── js/ # JavaScript
│ ├── login.jsp # 登录页
│ ├── register.jsp # 注册页
│ ├── index.jsp # 首页
│ ├── clothesList.jsp # 商品列表
│ ├── clothesDetail.jsp # 商品详情
│ ├── cart.jsp # 购物车
│ ├── checkout.jsp # 结算页
│ ├── orders.jsp # 订单列表
│ ├── orderDetail.jsp # 订单详情
│ └── profile.jsp # 个人中心
└── wardrobesystem.sql # 数据库脚本
功能模块
前台用户端
| 模块 | 功能 |
|---|---|
| 用户模块 | 注册、登录、退出 |
| 商品浏览 | 商品列表、详情、分类筛选 |
| 购物车 | 添加、修改数量、删除商品 |
| 订单管理 | 提交订单、查看订单详情 |
| 个人中心 | 收货地址、个人信息管理 |
后台管理端
| 模块 | 功能 |
|---|---|
| 商品管理 | 列表、增删改、图片上传 |
| 订单管理 | 订单列表、发货处理 |
| 用户管理 | 用户列表、增删改 |
数据库设计
E-R 关系
用户(User) 1 ──── N 购物车(Cart) N ──── 1 商品(Clothes)
│ │
│ 1 │ N
N │
订单(Orders) 1 ──── N 订单明细(OrderItem) ───┘
│
N
收货地址(Address)
数据表
用户表 (user)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| username | VARCHAR(50) | 用户名(唯一) |
| password | VARCHAR(50) | 密码 |
| role | VARCHAR(20) | 角色:user/admin |
| phone | VARCHAR(20) | 手机号 |
| create_time | DATETIME | 创建时间 |
商品表 (clothes)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| name | VARCHAR(100) | 商品名称 |
| category | VARCHAR(50) | 分类 |
| price | DECIMAL(10,2) | 价格 |
| stock | INT | 库存 |
| image | VARCHAR(200) | 图片路径 |
| description | TEXT | 商品描述 |
| create_time | DATETIME | 创建时间 |
购物车表 (cart)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| user_id | INT | 用户ID(外键) |
| clothes_id | INT | 商品ID(外键) |
| quantity | INT | 数量 |
| selected | TINYINT | 是否选中 |
| create_time | DATETIME | 创建时间 |
订单表 (orders)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| order_no | VARCHAR(32) | 订单号(唯一) |
| user_id | INT | 用户ID(外键) |
| total_amount | DECIMAL(10,2) | 订单总金额 |
| status | TINYINT | 0待付款/1已付款/2已发货/3已完成/4已取消 |
| receiver_name | VARCHAR(50) | 收货人 |
| receiver_phone | VARCHAR(20) | 收货电话 |
| receiver_address | VARCHAR(300) | 收货地址 |
| create_time | DATETIME | 下单时间 |
订单明细表 (order_item)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键自增 |
| order_id | INT | 订单ID(外键) |
| clothes_id | INT | 商品ID(外键) |
| clothes_name | VARCHAR(100) | 商品名称 |
| clothes_price | DECIMAL(10,2) | 商品单价 |
| quantity | INT | 购买数量 |
| subtotal | DECIMAL(10,2) | 小计金额 |
运行环境
| 环境 | 版本 |
|---|---|
| JDK | 1.8+ |
| Tomcat | 9.x |
| MySQL | 8.0+ |
| IDE | IDEA / Eclipse |
部署步骤
1. 导入数据库
CREATE DATABASE wardrobesystem DEFAULT CHARACTER SET utf8mb4;
USE wardrobesystem;
SOURCE /path/to/wardrobesystem.sql;
2. 修改数据库配置
编辑 src/com/sxt/util/JDBCUtil.java:
private static final String URL = "jdbc:mysql://localhost:3306/wardrobesystem?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
private static final String USER = "root"; // 你的用户名
private static final String PASSWORD = "123456"; // 你的密码
3. 配置并启动 Tomcat
在 IDE 中配置 Tomcat Server,部署项目后启动。
4. 访问系统
- 前台首页:
http://localhost:8080/01_MUI/login.jsp - 后台管理:
http://localhost:8080/01_MUI/admin/index.jsp
测试账号
| 角色 | 用户名 | 密码 |
|---|---|---|
| 管理员 | admin | admin123 |
| 普通用户 | user1 | 123456 |
核心代码
LoginServlet.java
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
User user = userService.login(username, password);
if (user != null) {
req.getSession().setAttribute("user", user);
if ("admin".equals(user.getRole())) {
resp.sendRedirect("admin/index.jsp");
} else {
resp.sendRedirect("ClothesServlet?action=list");
}
} else {
req.setAttribute("error", "用户名或密码错误");
req.getRequestDispatcher("login.jsp").forward(req, resp);
}
}
}
JDBCUtil.java
public class JDBCUtil {
private static final String URL = "jdbc:mysql://localhost:3306/wardrobesystem?useSSL=false&serverTimezone=Asia/Shanghai";
private static final String USER = "root";
private static final String PASSWORD = "123456";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
系统流程
用户购物流程
用户登录 → 浏览商品 → 商品详情 → 加入购物车 → 提交订单 → 订单完成
MVC 架构
浏览器(View) → Servlet(Controller) → Service(Model) → DAO → MySQL
常见问题
| 问题 | 解决方案 |
|---|---|
| 数据库连接失败 | 检查 MySQL 服务、用户名密码、数据库名、驱动包 |
| 中文乱码 | JSP 设置 charset=UTF-8,Servlet 设置编码,URL 添加 characterEncoding |
| 404 错误 | 检查 Tomcat 部署路径、web.xml 配置、JSP 文件路径 |
项目特点
- MVC 三层架构设计
- 用户认证与权限控制
- 商品管理 CRUD 操作
- 购物车与订单流程
- 文件上传功能
- 前后台分离设计
适合 Java Web 入门学习、课程设计、毕业设计参考。
更多推荐




所有评论(0)