# 实验 2-2 Vibe Coding 及 Vibe Learning
**Repository Path**: javaweb-dev-tech/lab2_2
## Basic Information
- **Project Name**: 实验 2-2 Vibe Coding 及 Vibe Learning
- **Description**: Vibe Coding 及 Vibe Learning。
Vibe Coding :使用AI编程工具trae,完成图书管理系统的后端开发,测试。
Vibe Learning:使用Skill进行对JDBC及CRUD知识点进行学习。初步了解 Agent Skill
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-28
- **Last Updated**: 2026-04-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 实验 2-2:Vibe Coding 及 Vibe Learning —— 基于 AI 辅助的图书管理系统开发
---
## 一、实验目的
1. **Vibe Learning**:利用 AI 编程助手(Trae AI IDE / Claude Code 等)学习 JDBC、数据库连接池、Servlet 等 Java Web 核心技术,掌握"AI 引导 + 自己编码"的高效学习模式。
2. **Vibe Coding**:通过 AI 辅助完成一个完整的后端系统开发,理解 MVC 架构、分层设计(Controller / Service / DAO)、RESTful API 设计等工程实践。
3. **Agent Skill 概念**:了解和使用 AI Agent 的 Skill 配置,为后续使用 Claude Code、Codex 等更强大的 AI 编程工具打下基础。
4. **接口测试**:掌握 Postman 接口测试方法,理解前后端分离开发中的联调流程。
---
## 二、实验环境
| 工具 / 技术 | 版本要求 | 说明 |
|:------------|:--------:|------|
| JDK | 17+ | Java 开发工具包 |
| Apache Maven | 3.8+ | 项目构建工具 |
| Apache Tomcat | 11.0+ | Web 服务器(Jakarta Servlet 6.0) |
| MySQL | 8.0+ | 数据库(可选,未安装可使用实验提供的远程数据库) |
| Trae AI IDE | 最新版 | AI 辅助编程 IDE |
| Postman | 最新版 | API 接口测试工具 |
| Navicat / DBeaver | 任意 | 数据库可视化管理工具 |
| IDEA | 2025.2 | 运行调试代码 |
---
## 三、实验准备
### 3.1 安装 Trae AI IDE
1. 下载并安装 [Trae AI IDE](https://www.trae.cn/)
2. 登录 Trae 账号,确保 AI 功能可用
### 3.2 配置 Java 和 Maven 环境变量
Trae 工具在生成代码后会执行 Maven 编译命令验证代码,因此必须确保命令行能直接调用 Java 和 Maven:
```bash
# 验证环境
java -version
mvn -version
```
如果命令行无法识别 `java` 或 `mvn`,请先配置环境变量。
### 3.3 项目结构说明
```
lab2_2/
├── vibe_learning/ # 模块 1:Vibe Learning 学习环境
│ ├── .trae/skills/ # 已配置好的 AI Agent Skills
│ │ ├── ai-assisted-jdbc-learning/ # JDBC 学习引导 Skill
│ │ └── frontend-design/ # 前端设计 Skill
│ ├── src/main/java/ # 学生练习代码目录
│ └── pom.xml # Maven 配置
│
├── book_template/ # 模块 2:图书管理系统模板工程
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/ # 后端 Java 代码(学生在此开发)
│ │ │ ├── webapp/ # 前端页面(已提供,无需修改)
│ │ │ │ ├── user/ # 用户端页面
│ │ │ │ ├── admin/ # 管理员端页面
│ │ │ │ └── js/common.js # 公共 API 工具模块
│ │ │ └── resources/ # 数据库配置文件
│ │ └── test/ # 测试代码
│ ├── doc/ui界面设计/ # UI 设计参考图
│ ├── API.md # API 接口文档(重要)
│ ├── 项目需求及设计文档.md # 完整的需求和设计说明(重要)
│ ├── A-校园图书管理系统.postman_collection.json # Postman 测试集合
│ └── pom.xml # Maven 配置(含 Jakarta Servlet 依赖)
│
└── README.md # 本文件
```
---
## 四、实验模块 1:Vibe Learning
### 4.1 Agent Skill 的概念与配置
**什么是 Agent Skill?**
Agent Skill 是 AI 编程助手的可复用能力模块。每个 Skill 包含一个 `SKILL.md` 文件,定义了 AI 在特定场景下的行为模式。配置好后,只需在对话中输入简短指令即可触发对应的专业工作流。
**Trae 中的 Skill 配置**
`vibe_learning` 目录下已预置了 `.trae/skills/` 目录:
| Skill 名称 | 文件 | 用途 |
|:-----------|:-----|------|
| AI 辅助 JDBC 学习 | `ai-assisted-jdbc-learning/SKILL.md` | 8 步结构化工作流引导学习 Java Web 开发 |
| 前端UI设计 | `ui-ux-pro-max/SKILL.md` | 生成高质量、独特风格的前端界面 |
**验证步骤**:
1. 使用 Trae AI IDE 打开 `vibe_learning` 目录
2. 在 Trae 的 AI 对话框中输入查看 Skill 列表
3. 确认上述两个 Skill 已正确加载
### 4.2 学习任务:JDBC 与数据库连接池
利用 `ai-assisted-jdbc-learning` Skill,完成以下学习路径:
1. **JDBC 基础**:了解 JDBC 的工作原理,掌握 `Connection`、`Statement`、`ResultSet` 的使用
2. **PreparedStatement**:理解参数化查询,防止 SQL 注入
3. **DAO 模式**:学习数据访问对象模式,分离数据库操作与业务逻辑
4. **数据库连接池**:了解连接池的概念,学习使用 Druid 等连接池工具
> 在 Trae 中通过 Skill 引导,按照"概念讲解 → 最小示例 → 代码讲解 → 引导重构 → 代码审核 → 工程化升级 → 练习生成 → 作业审核"的 8 步循环进行。
### 4.3 学习任务:图书模块 CRUD 操作
在 `vibe_learning` 项目中,独立完成以下练习:
1. 设计并创建 `books` 数据库表
2. 使用 JDBC 实现图书的增删改查(DAO 层)
3. 使用 Servlet 实现图书列表和详情查询的 API
4. 使用连接池优化数据库连接
### 4.4 使用 Skill 优化界面 UI 风格
在 `ui-ux-pro-max` Skill 的帮助下,可以快速为前端页面生成专业风格的 UI。
**操作步骤**:
1. 在 Trae AI 对话框中输入以下指令:
```text
使用技能 ui-ux-pro-max,帮我修改登录页 login.html 的风格,采用正式、简洁的官方风格
```
2. 等待 AI 生成并预览修改后的页面效果
3. 满意后可将生成的代码应用到实际项目中
> **提示**:除了登录页,你也可以使用该 Skill 为图书管理系统的其他页面(如首页、管理后台等)统一调整 UI 风格。
---
## 五、实验模块 2:Vibe Coding —— 图书管理系统后端开发
> **说明**:若在之前的课程中已完成图书管理系统后端开发的同学,可以使用自己之前的代码为基础继续完成本实验。请使用 AI 生成你项目的 API 接口文档,并依据该文档生成 Postman 接口测试集合(JSON 文件)。然后导入到 Postman 中进行接口测试。
### 5.1 实验背景
通过 AI 编程助手完成一个完整的 **校园图书管理系统** 后端开发。
**已提供的内容**(无需修改):
- 项目需求及设计文档,已位于 `book_template/项目需求及设计文档.md`
- API 接口文档,位于 `book_template/API.md`
- 完整的 UI 设计稿,位于 `book_template/doc/ui界面设计/`
- 全部前端页面(HTML/CSS/JS),位于 `book_template/src/main/webapp/`
- 前端对接后端的公共 API 模块(`js/common.js`),基于 Fetch API
- Postman 接口测试集合,位于 `book_template/A-校园图书管理系统.postman_collection.json`
**需要完成的内容**:
- 后端 Java 代码(Servlet + JDBC)
- 数据库配置
- 全部 25+ 个 API 接口的实现
### 5.2 技术栈
| 层级 | 技术 | 说明 |
|:-----|:-----|------|
| 前端 | HTML / CSS / JavaScript | 已提供,无需修改 |
| 后端 | Java 17 + Servlet(Jakarta 6.0) | 学生开发 |
| 数据库 | MySQL 8.0 + JDBC | 学生开发 |
| Web 服务器 | Apache Tomcat 11.0+ | 运行环境 |
| 构建工具 | Maven | 项目构建 |
| AI 工具 | Trae AI IDE | 辅助开发 |
### 5.3 开发步骤
#### Step 1:数据库建表
**数据库选择**(二选一):
| 方式 | 适用场景 | 说明 |
|:----:|:--------:|:-----|
| 本地数据库(推荐) | 已安装 MySQL 8.0+ | 性能更好,开发调试方便 |
| 远程数据库 | 未安装 MySQL | 使用实验提供的数据库服务器 |
**方式一:使用本地 MySQL 数据库**
如果你的电脑已安装 MySQL 8.0+,建议使用本地数据库:
1. 启动本地 MySQL 服务
2. 创建数据库:`CREATE DATABASE book_management DEFAULT CHARACTER SET utf8mb4;`
3. 在 `db.properties` 中配置本地数据库连接:
```properties
jdbc.url=jdbc:mysql://localhost:3306/book_management?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
jdbc.username=root
jdbc.password=你的MySQL密码
jdbc.driver=com.mysql.cj.jdbc.Driver
```
**方式二:使用实验提供的远程数据库**
如果你的电脑未安装 MySQL,可以使用实验提供的数据库服务器:
| 配置 | 适用环境 | 主机 | 端口 | 用户名 | 密码 | 数据库 |
|:----:|:--------:|:-----|:----:|:-------|:-----|:-------|
| 配置一(校园网) | 校内网络 | `10.50.79.225` | `3306` | `user_学号` | `学号` | `app_学号` |
| 配置二(外网) | 校外网络 | `8.140.216.36` | `29206` | `user_学号` | `学号` | `app_学号` |
> **说明**:两种配置数据相同。校园网环境推荐使用配置一(性能更好),校外环境使用配置二。提交 war 包时建议使用校园网配置。
**建表步骤**:
1. 使用 Navicat 或 DBeaver 连接数据库(本地或远程)
2. 参照 `book_template/项目需求及设计文档.md` **附录 B:数据库设计**,创建以下三张表:
| 表名 | 说明 |
|:-----|------|
| `users` | 用户表(存储管理员和普通用户) |
| `books` | 图书表(含多复本管理) |
| `borrow_records` | 借阅记录表 |
3. 插入初始数据(默认管理员账号 `admin/123456` 和测试图书数据)
> **提示**:可让 AI 生成 SQL 初始化脚本,或参考文档手动创建。
#### Step 2:项目配置及初始化
1. **打开项目**:使用 Trae AI IDE 打开 `book_template` 目录进行 AI 辅助编程;同时使用 IDEA 打开项目进行调试。
2. **配置数据库连接**:在 `src/main/resources/db.properties` 中配置数据库连接:
**使用本地数据库**:
```properties
# 本地 MySQL 配置
jdbc.url=jdbc:mysql://localhost:3306/book_management?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
jdbc.username=root
jdbc.password=你的MySQL密码
jdbc.driver=com.mysql.cj.jdbc.Driver
```
**使用远程数据库**(替换 `{YOUR_STUDENT_ID}` 为你的学号):
```properties
# 校园网配置(推荐)
jdbc.url=jdbc:mysql://10.50.79.225:3306/app_{YOUR_STUDENT_ID}?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
jdbc.username=user_{YOUR_STUDENT_ID}
jdbc.password={YOUR_STUDENT_ID}
jdbc.driver=com.mysql.cj.jdbc.Driver
# 外网配置(校外环境使用,取消注释即可)
#jdbc.url=jdbc:mysql://8.140.216.36:29206/app_{YOUR_STUDENT_ID}?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
#jdbc.username=user_{YOUR_STUDENT_ID}
#jdbc.password={YOUR_STUDENT_ID}
#jdbc.driver=com.mysql.cj.jdbc.Driver
```
#### Step 3:使用 Trae AI IDE 生成代码
1. **打开 Trae AI IDE**:在 `book_template` 目录下打开 Trae AI IDE。
2. **输入编程指令**:例如 **根据 `项目需求及设计文档.md` 中的需求及设计,`API.md`接口文档,完成后端功能开发。**
3. **生成代码**:观察右侧窗口,AI规划执行代码生成任务,等待生成完成。
4. **查看生成代码**:在 AI 生成的代码窗口中查看后端 Java 代码。
5. **调试代码**:在 IDEA 中运行项目,检查生成的代码是否正常工作。
**提示**:可根据需求调整 AI 生成的代码,或参考文档手动实现。
### 5.4 关键技术要点
> 以下内容可借助 AI Skill 学习,但必须自己理解和实现。
1. **Session 认证**:登录后将用户信息存入 Session,后续请求通过过滤器检查 Session 有效性。管理员接口额外检查 `role == "admin"`。
2. **密码加密**:使用 MD5 对密码进行加密存储(教学简化方案)。
3. **借阅业务规则**:
- 每人最多借阅 5 本(借阅中状态)
- 借阅期限 30 天
- 有超期未还记录时禁止借阅
- 可借复本为 0 时禁止借阅
4. **删除限制**:
- 有借阅记录的用户不可删除
- 有借阅记录的图书不可删除(`available_copies < total_copies`)
- 管理员账号不可删除
5. **编码规范**:所有 Servlet 响应设置 `request.setCharacterEncoding("UTF-8")` 和 `response.setContentType("application/json;charset=UTF-8")`。
### 5.5 业务规则速查
```
借阅检查流程:
1. 用户是否已登录? → 未登录返回 401
2. 当前借阅数 < 5? → 已达上限返回 400
3. 有无超期未还记录? → 有超期记录返回 400
4. 图书可借复本 > 0? → 无复本返回 400
5. 校验通过 → 创建借阅记录,available_copies - 1
归还流程:
1. 查找借阅记录(status = 'borrowing')
2. 更新 status = 'returned',return_date = NOW()
3. 图书 available_copies + 1
```
---
## 六、接口测试
### 6.1 Postman 接口测试
1. **导入测试集合**:打开 Postman,导入 `book_template/A-校园图书管理系统.postman_collection.json`
2. **配置环境变量**:在 Postman 新建环境,name: `A-校园图书管理系统` ,并在配置以下变量:
- `ip`:Tomcat 服务器地址(如 `localhost`)
- `port`:Tomcat 运行端口(如 `8080`)
- `context`:应用上下文(如 `/book`)
3. **启动项目**:在 IDEA 中配置 Tomcat 并运行项目
4. **测试 API**:按模块逐个测试接口
**测试顺序建议**:
```
认证模块(注册 → 登录 → 验证 Session)
↓
用户模块(获取个人信息 → 修改密码 → 修改邮箱)
↓
图书模块(列表 → 详情 → 搜索 → 分类)
↓
借阅模块(检查资格 → 借阅 → 查看记录 → 归还)
↓
管理员模块(图书管理 → 用户管理 → 借阅管理)
```
### 6.2 Web 界面测试
启动 Tomcat 后,访问以下页面进行功能验证(将 `{context}` 替换为你的应用上下文,如 `/book`):
| 页面 | 访问地址 | 测试功能 |
|:-----|:---------|----------|
| 登录页 | `http://localhost:8080{context}/user/login.html` | 登录、跳转 |
| 用户首页 | `http://localhost:8080{context}/user/index-user.html` | 图书浏览、搜索、分类筛选、借阅 |
| 图书详情 | `http://localhost:8080{context}/user/book_detail.html?id=1` | 查看详情、借阅操作 |
| 我的借阅 | `http://localhost:8080{context}/user/my-borrowing.html` | 查看记录、归还图书 |
| 个人中心 | `http://localhost:8080{context}/user/profile.html` | 查看信息、修改密码 |
| 管理员首页 | `http://localhost:8080{context}/admin/admin-index.html` | 统计数据、快捷入口 |
| 图书管理 | `http://localhost:8080{context}/admin/book-manage.html` | 新增、编辑、删除图书 |
| 用户管理 | `http://localhost:8080{context}/admin/user-manage.html` | 查看用户、删除用户 |
| 借阅管理 | `http://localhost:8080{context}/admin/borrow-records.html` | 查看全部记录、手动归还、超期查看 |
**功能检查清单**:
- [ ] **用户认证模块**
- [ ] 注册新用户(学号格式验证、唯一性验证)
- [ ] 正常登录 / 密码错误登录失败
- [ ] 退出登录
- [ ] 未登录访问受保护页面自动跳转登录页
- [ ] **普通用户模块**
- [ ] 用户首页图书列表展示
- [ ] 按书名/作者搜索图书
- [ ] 按分类筛选图书
- [ ] 查看图书详情
- [ ] 借阅图书(满足所有条件时成功)
- [ ] 借阅上限校验(5 本限制)
- [ ] 查看我的借阅记录
- [ ] 归还图书
- [ ] 查看历史借阅
- [ ] 个人中心查看和修改密码
- [ ] **管理员模块**
- [ ] 管理员首页统计数据
- [ ] 新增图书(设置复本数)
- [ ] 编辑图书信息(不修改复本数)
- [ ] 删除图书(无人借阅时可删,有借阅时不可删)
- [ ] 查看所有用户列表
- [ ] 删除用户(无借阅记录时可删)
- [ ] 查看所有借阅记录
- [ ] 手动代为归还
- [ ] 查看超期借阅记录
---
## 七、作业提交要求
**必做:提交实验报告**
- **实验报告要求**:
1. 使用实验报告 Word 模板,个人信息填写完整
2. 内容完整,包含:实验目的、实验原理、实验设备仪器、实验方法步骤及数据、实验总结归纳分析体会
- **提交主要内容**(Word 文档):
- 任务一 Vibe Learning:
- Vibe Learning 部分核心代码
- 与 AI 关键对话截图: 例如 向 AI 询问 JDBC 概念、让 AI 生成最小可运行 JDBC 代码 Demo、让 AI 生成知识点相关编程练习Demo 等
- Vibe Learning 模块学习过程与心得体会
- 任务二 Vibe Coding
- Vibe Coding 部分核心代码
- 与 AI 关键对话截图: 例如 向 AI 下达编码任务、测试遇到问题让 AI 修复等
- Postman 接口测试截图(至少覆盖 5 个核心接口)
- 系统核心功能截图(登录页、用户首页图书列表、用户借阅图书、管理员首页、管理员图书管理、管理员用户管理、管理员借阅管理等关键页面)
- Vibe Coding 模块开发过程(遇到的问题及解决方案)、对 AI 辅助编程的体会和反思等
- **提交方式**:提交至学习通作业
---
**选做:额外20% 加分项(提交项目源码和 WAR 包)**
> 完成加分项后,你的项目将会部署到服务器上,可以通过公网 http://tomcat.chende.top/{你项目的上下文}
例如:http://tomcat.chende.top/stu_20240101048_assign_1 或者校园网访问。
**加分项配置步骤**:
1. **修改 Maven 打包配置**:在 `pom.xml` 中替换为你的学号:
```xml
stu_{YOUR_STUDENT_ID}_assign_1
org.apache.maven.plugins
maven-war-plugin
3.4.0
```
2. **配置 IDEA Tomcat 上下文**:在 IDEA 中配置 Tomcat 时,将应用上下文(Application Context)设置为 `/{YOUR_STUDENT_ID}_assign_1`,例如 `/stu_25204149_assign_1`。
3. **修改前端 API 路径**:在 `src/main/webapp/js/common.js` 中,将 `baseURL` 修改为:
```javascript
const baseURL = '/stu_{YOUR_STUDENT_ID}_assign_1/api';
```
4. **配置数据库连接**:在 `src/main/resources/db.properties` 中配置数据库连接,**必须使用提供的远程数据库连接**(确保服务器可访问)。
5. **IDEA 调试运行**:先本地调试运行项目,确保所有功能正常。
6. **打包 WAR 文件**:在 IDEA 中使用 Maven 打包,生成 WAR 文件,命名格式:`stu_学号_assign_1.war`
**提交方式**:
- **作业提交系统地址**(二选一):
- 公网地址:http://tomcat.chende.top/expsub/
- 校园网地址:http://10.50.79.225:8080/expsub/(上传速度更快)
- **登录账号**:你的学号
- **登录密码**:`jzxy#javaweb`
**提交内容**:
- **项目源码压缩包**:将完整目录(包含 `vibe_learning` 和 `book_template` 项目源码)压缩为 zip 文件,命名格式:`stu_学号_assign_1.zip`
- **WAR 包**:命名格式:`stu_学号_assign_1.war`
**部署后访问地址**:
- 公网地址:http://tomcat.chende.top/stu_你的学号_assign_1/
例如:http://tomcat.chende.top/stu_20240101048_assign_1/
- 校园网地址:http://10.50.79.225:8080/stu_你的学号_assign_1/
例如:http://10.50.79.225:8080/stu_25204149_assign_1/
> **重点注意**:上下文配置和数据库配置必须正确,才能确保你的项目被正确部署。
---
## 八、常见问题
### Q1:Tomcat 11 报 `jakarta.servlet` 相关错误?
A:Tomcat 10+ 已切换到 Jakarta EE 规范。代码中必须使用 `jakarta.servlet.*` 而非 `javax.servlet.*`。Maven 依赖中也需使用 `jakarta.servlet-api`。
### Q2:中文乱码?
A:确保三点:① 数据库字符集 `utf8mb4`;② JDBC 连接参数加 `characterEncoding=utf8`;③ Servlet 中设置请求/响应编码。
### Q3:Session 登录状态丢失?
A:`js/common.js` 中使用 `sessionStorage` 存储用户信息,关闭浏览器或刷新后失效。这是开发调试阶段的设计。每次重新登录会创建新的服务器端 Session。
### Q4:Maven 编译失败?
A:检查 `pom.xml` 中 JDK 版本配置(本项目要求 JDK 17+),以及 `jakarta.servlet-api` 的 `scope` 是否为 `provided`。
### Q5:密码加密用哪种?
A:教学阶段使用 MD5 简化即可(`java.security.MessageDigest`)。实际项目中应使用 BCrypt。
---
## 附录:参考资料
- [项目需求及设计文档](book_template/项目需求及设计文档.md) —— 完整的需求说明和 API 接口参考
- [API 接口文档](book_template/API.md) —— 每个接口的详细请求/响应格式
- [Postman 测试集合](book_template/A-校园图书管理系统.postman_collection.json) —— 接口测试用