# servlet-mvc **Repository Path**: java-lesson/servlet-mvc ## Basic Information - **Project Name**: servlet-mvc - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-02 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Servlet MVC 英雄管理系统 ## 📖 项目简介 这是一个基于 **Java Servlet + JSP** 实现的 MVC 架构的 Web 应用程序,用于管理英雄(Hero)信息。项目展示了经典的 MVC 设计模式在 Java Web 开发中的应用,实现了英雄数据的增删改查(CRUD)功能,并支持分页显示。 ## 🎯 核心功能 - ✅ **英雄列表展示** - 支持分页浏览所有英雄信息 - ✅ **添加英雄** - 新增英雄记录 - ✅ **编辑英雄** - 修改现有英雄信息 - ✅ **删除英雄** - 删除指定的英雄记录 - ✅ **分页功能** - 每页显示 5 条记录,支持首页、上一页、下一页、末页导航 ## 🏗️ 技术栈 ### 后端技术 - **Java 25** - 编程语言 - **Jakarta Servlet 6.1.0** - Web 容器 API - **MySQL Connector/J 9.4.0** - MySQL 数据库驱动 - **JSTL 3.0** - JSP 标准标签库 ### 前端技术 - **JSP (JavaServer Pages)** - 动态网页技术 - **HTML/CSS** - 页面结构与样式 ### 构建工具 - **Maven** - 项目依赖管理和构建 - **maven-war-plugin 3.4.0** - WAR 包打包插件 ### 测试框架 - **JUnit 5.13.2** - 单元测试框架 ## 📁 项目结构 ``` servlet-mvc/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── model/ # 模型层(数据实体) │ │ │ │ └── Hero.java # 英雄实体类 │ │ │ ├── dao/ # 数据访问层 │ │ │ │ └── HeroDAO.java # 英雄数据访问对象 │ │ │ └── com/example/servlet/mvc/ # 控制器层(Servlet) │ │ │ ├── HeroListServlet.java # 列表查询控制器 │ │ │ ├── HeroAddServlet.java # 添加控制器 │ │ │ ├── HeroEditServlet.java # 编辑页面控制器 │ │ │ ├── HeroUpdateServlet.java # 更新控制器 │ │ │ └── HeroDeleteServlet.java # 删除控制器 │ │ ├── webapp/ # Web 资源目录 │ │ │ ├── list.jsp # 英雄列表页面 │ │ │ ├── add.jsp # 添加英雄页面 │ │ │ └── edit.jsp # 编辑英雄页面 │ │ └── resources/ │ │ └── META-INF/ │ │ └── beans.xml # CDI 配置 │ └── test/ # 测试代码目录 ├── pom.xml # Maven 配置文件 └── README.md # 项目说明文档 ``` ## 🗄️ 数据库设计 ### 数据库配置 - **数据库类型**: MySQL - **数据库名**: `sakila` - **连接地址**: `jdbc:mysql://127.0.0.1:3306/sakila?characterEncoding=UTF-8` - **用户名**: `root` - **密码**: `root` ### 数据表结构 **hero 表** | 字段名 | 类型 | 说明 | |--------|------|------| | id | INT | 主键,自增 | | name | VARCHAR | 英雄名称 | | hp | FLOAT | 生命值 | | damage | INT | 攻击力 | ### 建表 SQL ```sql CREATE TABLE hero ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, hp FLOAT, damage INT ); ``` ## 🚀 快速开始 ### 环境要求 - **JDK**: 25 或更高版本 - **Maven**: 3.6+ - **MySQL**: 5.7+ 或 8.0+ - **Web 服务器**: Tomcat 10+(支持 Jakarta EE) ### 安装步骤 #### 1. 克隆项目 ```bash git clone cd servlet-mvc ``` #### 2. 配置数据库 确保 MySQL 服务正在运行,并创建数据库和表: ```sql CREATE DATABASE IF NOT EXISTS sakila CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE sakila; CREATE TABLE hero ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, hp FLOAT, damage INT ); ``` #### 3. 修改数据库配置(如需要) 如果需要修改数据库连接信息,请编辑 [HeroDAO.java](file:///F:/java-lesson/servlet-mvc/src/main/java/dao/HeroDAO.java) 中的 `getConnection()` 方法: ```java public Connection getConnection() throws SQLException { return DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/sakila?characterEncoding=UTF-8", "root", // 修改为用户名 "root" // 修改为密码 ); } ``` #### 4. 编译项目 ```bash mvn clean compile ``` #### 5. 打包项目 ```bash mvn package ``` 生成的 WAR 文件位于 `target/servlet-mvc-1.0-SNAPSHOT.war` #### 6. 部署到 Tomcat 将 WAR 文件复制到 Tomcat 的 `webapps` 目录,或使用 IDE(如 IntelliJ IDEA)直接部署运行。 #### 7. 访问应用 打开浏览器访问: ``` http://localhost:8080/servlet-mvc-1.0-SNAPSHOT/hero/list ``` ## 📝 使用说明 ### 查看英雄列表 访问 `/hero/list` 查看所有英雄,支持分页浏览: - **首页**: 跳转到第一页 - **上一页**: 返回前一页 - **下一页**: 进入下一页 - **末页**: 跳转到最后一页 ### 添加英雄 1. 访问 `/add.jsp` 或从列表页点击"添加"链接 2. 填写英雄信息: - 姓名(name) - 生命值(hp) - 攻击力(damage) 3. 点击提交,自动返回列表页 ### 编辑英雄 1. 在列表页点击对应英雄的 "edit" 链接 2. 修改英雄信息 3. 点击提交保存更改 ### 删除英雄 在列表页点击对应英雄的 "delete" 链接,确认后删除该记录。 ## 🔍 架构设计 ### MVC 模式实现 #### Model(模型层) - **Hero.java**: 英雄实体类,包含属性和 getter/setter 方法 #### View(视图层) - **list.jsp**: 英雄列表页面,使用 JSTL 展示数据和分页 - **add.jsp**: 添加英雄表单页面 - **edit.jsp**: 编辑英雄表单页面 #### Controller(控制器层) - **HeroListServlet**: 处理列表查询和分页逻辑 - **HeroAddServlet**: 处理添加英雄请求 - **HeroEditServlet**: 处理编辑页面展示 - **HeroUpdateServlet**: 处理更新英雄请求 - **HeroDeleteServlet**: 处理删除英雄请求 #### DAO(数据访问层) - **HeroDAO.java**: 封装所有数据库操作,包括增删改查和分页查询 ### URL 映射 | URL 路径 | Servlet | 功能 | |---------|---------|------| | `/hero/list` | HeroListServlet | 查询英雄列表(支持分页) | | `/hero/add` | HeroAddServlet | 添加新英雄 | | `/hero/edit` | HeroEditServlet | 获取编辑页面的英雄数据 | | `/hero/update` | HeroUpdateServlet | 更新英雄信息 | | `/hero/delete` | HeroDeleteServlet | 删除英雄 | ## 🔧 开发指南 ### 添加新功能 1. 在 `model` 包中创建新的实体类(如需要) 2. 在 `dao` 包中创建对应的 DAO 类,实现数据库操作 3. 在 `com.example.servlet.mvc` 包中创建 Servlet 处理业务逻辑 4. 在 `webapp` 目录创建 JSP 页面展示数据 5. 在 `pom.xml` 中添加新的依赖(如需要) ### 代码规范 - 使用 UTF-8 编码 - Servlet 使用 `@WebServlet` 注解配置 URL 映射 - DAO 使用 try-with-resources 管理数据库资源 - JSP 页面统一使用 UTF-8 编码 - 遵循 MVC 分层架构,保持代码清晰 ## 🐛 常见问题 ### 1. 数据库连接失败 **问题**: 出现 `SQLException` 或无法连接数据库 **解决方案**: - 检查 MySQL 服务是否启动 - 确认数据库名、用户名、密码是否正确 - 确认 `hero` 表已创建 ### 2. 中文乱码 **问题**: 页面显示中文乱码 **解决方案**: - 确保所有 JSP 页面设置 `charset=UTF-8` - Servlet 中调用 `request.setCharacterEncoding("UTF-8")` - 数据库连接字符串包含 `characterEncoding=UTF-8` ### 3. 404 错误 **问题**: 访问页面时出现 404 **解决方案**: - 确认 WAR 包已正确部署 - 检查 URL 路径是否正确 - 确认 Tomcat 端口号(默认 8080) ### 4. JSTL 标签不工作 **问题**: JSP 中 JSTL 标签未解析 **解决方案**: - 确认 `pom.xml` 中已添加 JSTL 依赖 - 确认 JSP 页面顶部有 `<%@ taglib %>` 声明 - 重新编译并部署项目 ## 📚 学习资源 - [Jakarta Servlet 官方文档](https://jakarta.ee/specifications/servlet/) - [JSP 教程](https://jakarta.ee/specifications/pages/) - [Maven 使用指南](https://maven.apache.org/guides/) - [MySQL 官方文档](https://dev.mysql.com/doc/) ## 📄 许可证 本项目仅用于学习和教学目的。 ## 👨‍💻 作者 项目由开发者创建,用于演示 Servlet MVC 架构的最佳实践。 --- **注意**: 本项目使用 Jakarta EE 规范(而非传统的 Java EE),因此需要 Tomcat 10 或更高版本的服务器。