# 实验5 测评模拟 **Repository Path**: javaweb-dev-tech/lab5 ## Basic Information - **Project Name**: 实验5 测评模拟 - **Description**: 第5次实验,根据所学知识完成servlet+JDBC框架下的系统接口开发和登录鉴权。 使用MySqlHelper及fastjson的JSON - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-01 - **Last Updated**: 2026-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验5 测评模拟 ## 项目简介 这是一个基于 Java Servlet 的轻量级 Web 应用程序实验项目,主要用于教学演示 Web 开发流程。项目实现了基本的 HTTP 请求处理与响应功能,采用传统分层架构设计,无 Spring 等高级框架依赖,贴近底层 Servlet 规范。 ## 技术栈 - **开发语言**: Java 8 - **Web 框架**: Java Servlet API 4.0.1(`javax.servlet`) - **数据库**: MySQL 8.0+ - **JSON 处理**: FastJSON 1.2.66 - **测试框架**: JUnit Jupiter 5.13.2 - **构建工具**: Maven - **打包方式**: WAR (Web Application Archive) - **依赖管理**: `lib/` 目录下的离线 jar 包(断网可用) ## 项目结构 ``` lab5/ ├── src/main/java/edu/wtbu/lab5/lab5/ │ ├── dao/ # 数据访问层 │ │ └── UserDao.java │ ├── helper/ # 数据库帮助类 │ │ └── MySqlHelper.java │ ├── pojo/ # 实体类 │ │ └── Result.java │ ├── servlet/ # Servlet 控制器 │ │ └── UserLoginServlet.java │ └── HelloServlet.java ├── src/main/webapp/ │ ├── WEB-INF/ │ │ └── web.xml │ └── index.jsp # 首页 ├── sql/ │ └── labdb.sql # 数据库脚本 ├── lib/ # 离线依赖 jar(断网构建必需) │ ├── fastjson-1.2.66.jar │ ├── javax.servlet-api-4.0.1.jar │ ├── jakarta.servlet-api-6.0.0.jar # 备用:适配 Tomcat 10+ 时切换 │ └── mysql-connector-java-8.0.16.jar └── pom.xml # Maven 配置文件(通过 systemPath 引用 lib/) ``` ## 环境要求 - **JDK**: 8 或更高版本(推荐 8/11/17) - **Maven**: 3.6+ - **MySQL**: 8.0+ - **Servlet 容器**: Tomcat 8.5 / 9(或其他支持 Java EE 8 / Servlet 4.0 的容器) - **操作系统**: Windows/Linux/macOS > 如需部署到 Tomcat 10+,请将代码中的 `javax.servlet` 改回 `jakarta.servlet`,并切换 `pom.xml` 中的 `lib` 依赖为 `lib/jakarta.servlet-api-6.0.0.jar`。 ## 快速开始 ### 1. 克隆项目 ```bash git clone cd lab5 ``` ### 2. 配置数据库 1. 创建 MySQL 数据库: ```sql CREATE DATABASE examdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 导入数据库脚本: ```bash mysql -u root -p examdb < sql/labdb.sql ``` ### 3. 配置数据库连接 修改 `MySqlHelper.java` 中的数据库连接参数(如果尚未配置): - 主机地址 - 端口号 - 数据库名 - 用户名和密码 ### 4. 构建项目 ```bash mvn clean package ``` 构建成功后会在 `target/` 目录下生成 `lab5-1.0-SNAPSHOT.war` 文件。 ### 5. 部署运行 将生成的 WAR 文件部署到 Tomcat 或其他 Servlet 容器中: ```bash # 复制到 Tomcat 的 webapps 目录 cp target/lab5-1.0-SNAPSHOT.war $CATALINA_HOME/webapps/ # 启动 Tomcat $CATALINA_HOME/bin/startup.sh # Linux/macOS %CATALINA_HOME%\bin\startup.bat # Windows ``` ### 6. 访问应用 打开浏览器访问: - 首页: http://localhost:8080/lab5-1.0-SNAPSHOT/ - Hello Servlet: http://localhost:8080/lab5-1.0-SNAPSHOT/hello-servlet - 用户登录接口: http://localhost:8080/lab5-1.0-SNAPSHOT/user/login ## 功能说明 ### 已实现功能 1. **基础 Servlet 示例** (`HelloServlet`) - 提供基本的 HTTP GET 请求处理 - 返回 "Hello World" 页面 2. **用户登录接口** (`UserLoginServlet`) - URL: `/user/login` - 支持 GET 和 POST 请求 - 返回 JSON 格式结果 - ⚠️ 注意:当前为示例实现,实际登录逻辑待完善(见代码中的 TODO) 3. **数据库操作基础** - `UserDao`: 用户数据访问对象(待完善) - `MySqlHelper`: MySQL 数据库连接辅助类 ### 数据库表结构 项目包含以下核心数据表: - **user**: 用户信息表 - uid, username, password - **department**: 部门信息表 - deptId, deptName, labId - **laboratory**: 实验室信息表 - labId, labName, location - **equipment**: 设备信息表 - eqId, eqName, deptId, status ## 开发指南 ### 运行测试 ```bash mvn test ``` ### 代码规范 - 使用 UTF-8 编码 - 遵循 Java 命名规范 - Servlet 使用注解方式配置 (`@WebServlet`) - 采用 MVC 分层架构 ### 添加新功能 1. 在 `servlet` 包中创建新的 Servlet 类 2. 使用 `@WebServlet` 注解配置访问路径 3. 在 `dao` 包中添加数据访问方法 4. 在 `pojo` 包中定义实体类 ## 常见问题 ### 1. 编译错误:找不到 javax.servlet 包 `pom.xml` 通过 `systemPath` 引用 `lib/` 下的 jar,确保: - `lib/javax.servlet-api-4.0.1.jar` 文件存在 - 在 IDE 中重新刷新 Maven 项目(`mvn clean install` 或 IDE 的 Reimport) ### 2. 部署到 Tomcat 10+ 时报 `ClassNotFoundException: javax.servlet...` Tomcat 10+ 已切换到 `jakarta.servlet` 命名空间。本项目默认面向 Tomcat 8.5/9。 - 方案 A:使用 Tomcat 8.5 或 9 部署 - 方案 B:将源码中所有 `javax.servlet` 改回 `jakarta.servlet`,并将 `pom.xml` 切换到 `lib/jakarta.servlet-api-6.0.0.jar` ### 3. 断网环境下构建失败 本项目所有第三方 jar 均放在 `lib/` 目录并通过 `systemPath` 引用,无需联网下载。如构建仍报缺包,请检查 `lib/` 目录下的 jar 是否完整。 ### 4. 数据库连接失败 检查: - MySQL 服务是否启动 - 数据库连接参数是否正确 - 数据库用户权限是否足够 ### 5. 中文乱码问题 确保: - 数据库使用 utf8mb4 字符集 - JSP 页面设置 `pageEncoding="UTF-8"` - Servlet 响应设置正确的 Content-Type ## 后续改进方向 - [ ] 完善用户登录验证逻辑 - [ ] 实现完整的 CRUD 操作 - [ ] 添加会话管理(Session) - [ ] 实现前端页面交互 - [ ] 添加输入验证和安全防护 - [ ] 编写单元测试用例 ## 许可证 本项目仅用于教学和学习目的。 ## 联系方式 如有问题,请联系课程教师或助教。