Java Web 网上衣橱商城系统:JSP+Servlet+MySQL 实现
基于 JSP、Servlet 和 MySQL 实现的网上衣橱商城系统,采用 MVC 架构,包含前台用户端与后台管理端。功能涵盖用户注册登录、商品浏览、购物车管理、订单处理及后台商品与用户管理。文章详细展示项目结构、数据库表设计、部署步骤、核心代码示例及常见问题解决方案,适合 Java Web 课程设计或毕业设计参考。

基于 JSP、Servlet 和 MySQL 实现的网上衣橱商城系统,采用 MVC 架构,包含前台用户端与后台管理端。功能涵盖用户注册登录、商品浏览、购物车管理、订单处理及后台商品与用户管理。文章详细展示项目结构、数据库表设计、部署步骤、核心代码示例及常见问题解决方案,适合 Java Web 课程设计或毕业设计参考。

基于 JSP + Servlet + JDBC + MySQL 实现的网上衣橱商城系统,采用 MVC 架构,包含前台用户端和后台管理端,功能完整,适合 Java Web 课程设计、毕业设计参考学习。
| 技术 | 说明 |
|---|---|
| JSP | 视图层,页面展示 |
| Servlet | 控制层,处理请求 |
| JDBC | 数据访问层 |
| MySQL 8.0 | 数据库 |
| Tomcat 9.x | Web 服务器 |
| HTML/CSS/JS | 前端页面 |
01_MUI/
├── src/com/sxt/
│ ├── controller/ # Servlet 控制器
│ │ ├── LoginServlet.java
│ │ ├── RegisterServlet.java
│ │ ├── ClothesServlet.java
│ │ ├── CartServlet.java
│ │ ├── OrderServlet.java
│ │ ├── AddressServlet.java
│ │ └── AdminServlet.java
│ ├── dao/ # 数据访问层接口
│ │ ├── UserDao.java
│ │ ├── ClothesDao.java
│ │ ├── CartDao.java
│ │ ├── OrderDao.java
│ │ └── AddressDao.java
│ ├── dao/impl/ # DAO 实现类
│ ├── service/ # 业务逻辑层接口
│ ├── service/impl/ # Service 实现类
│ ├── pojo/ # 实体类
│ │ ├── User.java
│ │ ├── Clothes.java
│ │ ├── Cart.java
│ │ ├── Order.java
│ │ ├── OrderItem.java
│ │ └── Address.java
│ └── util/
│ └── JDBCUtil.java # 数据库工具类
├── web/
│ ├── admin/ # 后台管理页面
│ │ ├── index.jsp
│ │ ├── clothes.jsp
│ │ ├── clothesEdit.jsp
│ │ ├── orders.jsp
│ │ ├── users.jsp
│ │ └── userEdit.jsp
│ ├── 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 # 数据库脚本
| 模块 | 功能 | 页面 |
|---|---|---|
| 用户模块 | 注册、登录、退出 | login.jsp、register.jsp |
| 商品浏览 | 商品列表、商品详情、分类筛选 | clothesList.jsp、clothesDetail.jsp |
| 购物车 | 添加商品、修改数量、删除商品 | cart.jsp |
| 订单管理 | 提交订单、查看订单、订单详情 | checkout.jsp、orders.jsp、orderDetail.jsp |
| 个人中心 | 收货地址管理、个人信息 | profile.jsp |
| 模块 | 功能 | 页面 |
|---|---|---|
| 商品管理 | 商品列表、添加、编辑、删除、图片上传 | clothes.jsp、clothesEdit.jsp |
| 订单管理 | 订单列表、发货处理 | orders.jsp |
| 用户管理 | 用户列表、添加、编辑、删除 | users.jsp、userEdit.jsp |
用户 (User) 1 ──── N 购物车 (Cart)
N ──── 1 商品 (Clothes)
│
│
│ 1
│ N
│
│ N
│
订单 (Orders) 1 ──── N 订单明细 (OrderItem)
└──┘
│ N
│
收货地址 (Address)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| username | VARCHAR(50) | 用户名,唯一 |
| password | VARCHAR(50) | 密码 |
| role | VARCHAR(20) | 角色:user/admin |
| phone | VARCHAR(20) | 手机号 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| name | VARCHAR(100) | 商品名称 |
| category | VARCHAR(50) | 分类 |
| price | DECIMAL(10,2) | 价格 |
| stock | INT | 库存 |
| image | VARCHAR(200) | 图片路径 |
| description | TEXT | 商品描述 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| user_id | INT | 用户 ID,外键 |
| clothes_id | INT | 商品 ID,外键 |
| quantity | INT | 数量 |
| selected | TINYINT | 是否选中 |
| create_time | DATETIME | 创建时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| 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 | 下单时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| 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 | IntelliJ IDEA / Eclipse |
# 登录 MySQL
mysql -u root -p
# 创建数据库
CREATE DATABASE wardrobesystem DEFAULT CHARACTER SET utf8mb4;
# 使用数据库
USE wardrobesystem;
# 导入 SQL 文件
SOURCE /path/to/wardrobesystem.sql;
打开 src/com/sxt/util/JDBCUtil.java,修改数据库连接信息:
public class JDBCUtil {
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"; // 修改为你的密码
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);
}
}
前台首页:http://localhost:8080/01_MUI/login.jsp
后台管理:http://localhost:8080/01_MUI/admin/index.jsp
| 角色 | 用户名 | 密码 |
|---|---|---|
| 管理员 | admin | admin123 |
| 普通用户 | user1 | 123456 |
| 普通用户 | user2 | 123456 |
@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);
}
}
}
public class User {
private Integer id;
private String username;
private String password;
private String role;
private String phone;
private Date createTime;
// 构造方法
public User() {}
public User(String username, String password, String role, String phone) {
this.username = username;
this.password = password;
this.role = role;
this.phone = phone;
}
// Getter 和 Setter 方法省略...
}
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();
}
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录 - 网上衣橱</title>
</head>
<body>
<div>
<h2>用户登录</h2>
<% if(request.getAttribute("error") != null) { %>
<div><%= request.getAttribute("error") %></div>
<% } %>
<form action="LoginServlet" method="post">
<div>
<label>用户名</label>
<input type="text" name="username" placeholder="请输入用户名" required>
</div>
<div>
<label>密码</label>
<input type="password" name="password" placeholder="请输入密码" required>
</div>
<button type="submit">登录</button>
</form>
<div>
还没有账号?<a href="register.jsp">立即注册</a>
</div>
</div>
</body>
</html>
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户登录 │ ──▶ │ 浏览商品 │ ──▶ │ 商品详情 │
└─────────────┘ └─────────────┘ └─────────────┘
│ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 订单完成 │ ◀── │ 提交订单 │ ◀── │ 购物车 │
└─────────────┘ └─────────────┘ └─────────────┘
┌──────────┐ 请求 ┌──────────────┐ 调用 ┌──────────────┐
│ 浏览器 │ ─────────▶ │ Servlet │ ────────▶ │ Service │
│ (View) │ │ (Controller) │ │ (Model) │
└──────────┘ └──────────────┘ └──────────────┘
▲ │ │
│ │ ▼ │
│ │ 转发/重定向 │
┌──────────────┐ └─────────────────────────┘
│ DAO │
└──────────────┘
│ ▼
┌──────────────┐
│ MySQL │
└──────────────┘
解决方案:
解决方案:
<%@ page contentType="text/html;charset=UTF-8" %>request.setCharacterEncoding("UTF-8");characterEncoding=utf8解决方案:
本项目是一个完整的 Java Web 商城系统,涵盖了:
适合作为 Java Web 入门学习、课程设计、毕业设计的参考项目。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online