智能代码审查助手 - Java Web开发课程应用案例
💻 智能代码审查助手
基于 Cursor AI 的 Java Web 开发教学实践
📚 课程:Java Web 开发 | 👨🏫 樊光瑞
案例概述
在 Java Web 开发课程中,学生需要完成一个完整的 Web 项目(如在线购物系统、图书管理系统等)。本案例展示如何使用 Cursor 作为主要工具,配合 ChatGPT、GitHub Copilot 等 AI 辅助工具,实现智能化的代码审查和教学反馈。
🎯 教学目标
- 帮助学生掌握 Java Web 核心技术(Servlet、JSP、MVC、数据库操作)
- 培养代码规范意识和最佳实践
- 提高代码调试和问题解决能力
- 理解软件工程中的测试思维
- 学会使用现代 AI 辅助工具提升开发效率
🛠️ 技术栈与工具
📄 课程项目要求
📥 下载项目要求文档 (PDF)
完整工作流程
学生提交代码
学生在 Cursor 中完成项目模块开发,将代码推送到 GitHub 仓库的个人分支。
Git GitHubCursor AI 初步审查
使用 Cursor 的 AI 功能(Ctrl+K / Cmd+K)对代码进行快速扫描,识别语法错误、潜在 bug 和代码异味。
Cursor运行测试用例
执行预设的 JUnit 测试用例,检查功能实现的正确性和完整性。
JUnit 5 Maven知识点对照检查
对照课程大纲,使用 Cursor 的代码搜索和分析功能,检查学生是否正确应用了要求的知识点。
Cursor生成反馈报告
结合 ChatGPT,生成详细的代码审查报告,包括问题说明、改进建议和学习资源推荐。
ChatGPT Cursor学生迭代改进
学生根据反馈,使用 Cursor 的 AI 辅助功能理解问题并改进代码,重新提交。
Cursor GitHub CopilotCursor 使用详解
🎓 教学中的典型使用场景
学生选中一段不理解的代码,使用
Ctrl+L 打开 Cursor Chat,询问:"这段代码是做什么的?为什么要这样写?"当代码报错时,使用
Ctrl+K 选择错误代码,输入提示词:"分析这个错误的原因,并给出修复建议"完成一个功能后,使用 Cursor 询问:"审查这个 Servlet 的代码,检查是否有安全问题、性能问题或不符合最佳实践的地方"
📝 Cursor 提示词示例(Java Web 项目)
请审查这个 UserServlet 的代码,重点检查以下几点: 1. 【知识点应用】 - 是否正确使用了 Servlet 生命周期方法 - 是否正确处理了 HTTP 请求和响应 - 是否使用了 MVC 模式(Model-View-Controller) 2. 【代码质量】 - 代码是否遵循 Java 命名规范 - 是否有重复代码需要提取 - 异常处理是否完善 3. 【安全性】 - 是否存在 SQL 注入风险 - 是否对用户输入进行了验证 - 密码是否加密存储 4. 【性能】 - 数据库连接是否正确关闭 - 是否有不必要的数据库查询 请给出具体的问题位置和改进建议,并说明为什么这样改进。
分析这个学生的 Java Web 项目代码,识别以下问题: 1. 哪些课程要求的知识点已经正确应用? 2. 哪些知识点使用不够规范,需要改进? 3. 哪些知识点完全缺失,需要补充? 对于每个问题,请: - 指出具体的代码位置(文件名和行号) - 说明为什么这是个问题 - 提供一个简短的代码示例展示正确做法 - 推荐相关的学习资源(教材章节或在线资料)
测试用例设置
测试用例是代码审查的重要组成部分。我们使用 JUnit 5 为每个项目模块预设测试用例,学生代码必须通过这些测试才算完成基本要求。
🎯 测试用例设计原则
功能完整性测试
测试所有要求的功能是否实现(如用户注册、登录、商品查询等)
边界条件测试
测试特殊输入情况(空值、超长字符串、特殊字符等)
异常处理测试
测试错误情况下的处理(数据库连接失败、文件不存在等)
知识点覆盖测试
确保学生使用了课程要求的技术点(如 PreparedStatement 防 SQL 注入)
📌 测试用例示例:用户登录功能
package com.example.test; import org.junit.jupiter.api.*; import static org.junit.jupiter.api.Assertions.*; /** * 用户登录功能测试 * 测试知识点:Servlet、Session、数据库操作、密码加密 */ public class UserLoginTest { @Test @DisplayName("测试正确的用户名和密码登录") public void testValidLogin() { // 测试学生是否正确实现了用户验证逻辑 String username = "testuser"; String password = "Test@123"; boolean result = userService.login(username, password); assertTrue(result, "有效的用户名和密码应该登录成功"); } @Test @DisplayName("测试 SQL 注入防护") public void testSQLInjectionPrevention() { // 重要:检查学生是否使用 PreparedStatement String maliciousInput = "admin' OR '1'='1"; String password = "anything"; boolean result = userService.login(maliciousInput, password); assertFalse(result, "应该防止 SQL 注入攻击"); } @Test @DisplayName("测试密码加密存储") public void testPasswordEncryption() { // 检查密码是否经过加密(MD5/SHA-256) String rawPassword = "Test@123"; String storedPassword = userDAO.getPasswordByUsername("testuser"); assertNotEquals(rawPassword, storedPassword, "密码不应该明文存储在数据库中"); assertTrue(storedPassword.length() >= 32, "加密后的密码长度应符合加密算法要求"); } @Test @DisplayName("测试 Session 管理") public void testSessionManagement() { // 验证登录后是否正确设置了 Session MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); loginServlet.doPost(request, response); assertNotNull(request.getSession().getAttribute("user"), "登录成功后应该在 Session 中存储用户信息"); } }
结合课程大纲检查知识点
除了功能测试,更重要的是检查学生是否正确应用了课程要求的知识点。我们使用 Cursor 的代码分析能力,对照课程大纲逐项检查。
📚 Java Web 开发课程大纲(核心知识点)
知识点 1:Servlet 基础与生命周期
检查项:是否正确继承 HttpServlet,是否重写了 doGet/doPost 方法,是否理解 init、service、destroy 的作用
知识点 2:请求与响应处理
检查项:是否正确使用 request.getParameter(),是否设置了正确的 Content-Type,是否处理了中文乱码
知识点 3:MVC 模式应用
检查项:是否将业务逻辑分离到 Service 层,是否使用 DAO 模式访问数据库,是否使用 JSP 作为视图层
知识点 4:数据库连接与 JDBC
检查项:是否使用 PreparedStatement(防 SQL 注入),是否正确关闭资源(try-with-resources),是否使用连接池
知识点 5:Session 和 Cookie 管理
检查项:是否正确使用 Session 存储用户状态,是否设置了 Session 超时,是否理解 Cookie 的作用
知识点 6:异常处理与日志
检查项:是否使用 try-catch 处理异常,是否记录了错误日志,是否给用户友好的错误提示
知识点 7:安全性考虑
检查项:是否对用户输入进行验证,是否加密存储敏感信息,是否防止了 XSS 攻击
知识点 8:Filter 和 Listener
检查项:是否使用 Filter 处理编码、权限验证等横切关注点,是否理解 Listener 的应用场景
🔍 使用 Cursor 自动检查知识点
分析这个 Java Web 项目,对照以下课程大纲检查知识点应用情况: 【必须应用的知识点】 1. Servlet 的正确使用(继承 HttpServlet,正确重写方法) 2. MVC 模式(Controller-Service-DAO 三层架构) 3. JDBC 数据库操作(使用 PreparedStatement,正确关闭资源) 4. Session 管理(用户登录状态保持) 5. 请求转发与重定向的正确使用 6. 中文乱码处理 7. 基本的异常处理 【加分项】 1. 使用数据库连接池(如 HikariCP) 2. 使用 Filter 实现编码过滤器和权限验证 3. 密码加密存储 4. 使用日志框架(Log4j/SLF4J) 5. 代码注释完整,命名规范 请对每个知识点给出: - ✅ 已正确应用 / ⚠️ 应用不规范 / ❌ 缺失 - 具体的代码位置(文件名:行号) - 如果有问题,说明为什么不符合要求 - 提供改进建议和示例代码 最后给出一个综合评分(0-100分)和总结性评价。
📄 示例检查报告
📥 下载示例检查报告 (PDF)