# 实验提交系统 **Repository Path**: whutcs_chende/labsub ## Basic Information - **Project Name**: 实验提交系统 - **Description**: 实验提交系统 (Lab Submission System) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-29 - **Last Updated**: 2026-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验提交系统 (Experiment Submission System) JavaWeb 开发技术课程实验提交系统。学生通过 Web 界面上传 WAR 包和实验文档,系统自动将 WAR 包部署到 Tomcat,并将文档复制到指定目录供外部 AI 批改程序读取。 claude --resume 3009e7f7-4d45-4cc2-a67d-7d45e9ccd60a ## 功能特性 ### 学生端 - 登录/登出、修改密码 - 查看老师发布的实验列表 - 提交 WAR 包(自动部署到 Tomcat) - 同时上传多个实验文档(PDF/DOCX/ZIP/RAR/TXT/MD) - 查看自己的提交记录,支持重新提交覆盖 ### 教师端 - 登录/登出、修改密码 - 创建/删除实验(名称、说明、截止日期) - 查看所有学生的提交记录 ### 安全机制 - SHA-256 密码哈希存储 - 基于 Session 的认证 + 角色权限拦截 - 保留的 WAR 包名校验(禁止 ROOT、manager、host-manager 等) - 文件扩展名白名单校验 ## 技术栈 | 层级 | 技术 | |------|------| | 后端 | 纯 Servlet + JDBC(手写) | | Web 容器 | Tomcat 10.x (WAR 部署) | | 数据库 | MySQL 8.x | | 前端 | 原生 HTML/CSS/JS + Fetch API | | 构建 | Maven (WAR packaging) | | Java 版本 | Java 17 | | Servlet 规范 | Jakarta Servlet API 6.1 | ## 项目结构 ``` src/main/ ├── java/edu/wtbu/javaweb/expsub/ │ ├── dao/ # 数据访问层 │ │ ├── UserDAO.java │ │ ├── AssignmentDAO.java │ │ └── SubmissionDAO.java │ ├── model/ # 实体类 │ │ ├── User.java │ │ ├── Assignment.java │ │ └── Submission.java │ ├── servlet/ # Servlet 控制器 │ │ ├── AuthServlet.java │ │ ├── AssignmentServlet.java │ │ ├── SubmitServlet.java │ │ ├── SubmissionServlet.java │ │ └── AdminServlet.java │ ├── filter/ # 认证过滤器 │ │ └── AuthFilter.java │ └── util/ # 工具类 │ ├── DBUtil.java │ ├── JsonUtil.java │ ├── FileUtil.java │ └── DeployUtil.java ├── webapp/ │ ├── static/ │ │ ├── css/style.css │ │ └── js/ │ │ ├── auth.js │ │ ├── student.js │ │ └── admin.js │ ├── WEB-INF/ │ │ ├── web.xml │ │ └── config.properties │ ├── index.html │ ├── student.html │ └── admin.html └── resources/ └── sql/init.sql # 数据库初始化脚本 ``` ## API 接口 所有 API 返回 JSON,统一格式:`{ code: 0/1, message: "...", data: ... }` ### 认证模块 | Method | Path | 说明 | 请求体 | |--------|------|------|--------| | POST | `/api/auth/login` | 登录 | `{username, password}` | | POST | `/api/auth/logout` | 登出 | — | | GET | `/api/auth/session` | 检查登录状态 | — | | POST | `/api/auth/change-password` | 修改密码 | `{oldPassword, newPassword}` | ### 实验管理 | Method | Path | 角色 | 说明 | |--------|------|------|------| | GET | `/api/assignments` | 全部 | 获取实验列表 | | POST | `/api/assignments` | 老师 | 创建实验 | | GET | `/api/admin/assignments` | 老师 | 获取所有实验 | | DELETE | `/api/assignments/{id}` | 老师 | 删除实验 | ### 提交管理 | Method | Path | 角色 | 说明 | |--------|------|------|------| | POST | `/api/submit` | 学生 | 提交 WAR + 文档 (multipart) | | GET | `/api/submissions` | 全部 | 学生查看自己的,老师查看所有的 | | GET | `/api/admin/submissions` | 老师 | 查看所有提交记录 | ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - Tomcat 10.x - MySQL 8.x ### 1. 初始化数据库 ```bash mysql -u root -p < src/main/resources/sql/init.sql ``` ### 2. 配置数据库连接 编辑 `src/main/webapp/WEB-INF/config.properties`: ```properties db.url=jdbc:mysql://localhost:3306/expsub?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true db.user=root db.password=your_password tomcat.webapps.path=/path/to/tomcat/webapps upload.temp.path=./uploads/temp ai.grading.path=/path/to/ai-grading ``` ### 3. 构建 ```bash mvn clean package -DskipTests ``` ### 4. 部署 将 `target/expsub.war` 复制到 Tomcat `webapps` 目录,或直接在 IDEA 中配置 Tomcat 运行。 ### 5. 访问 浏览器打开:`http://localhost:8080/expsub/index.html` ### 测试账号 | 角色 | 学号/工号 | 密码 | |------|-----------|------| | 老师 | teacher01 | 123456 | | 学生 | student01 | 123456 | | 学生 | student02 | 123456 | ## WAR 自动部署原理 1. 学生上传 WAR 包到 `/api/submit` 2. Servlet 将 WAR 文件复制到 Tomcat `webapps/stu_{学生学号}_assign_{作业ID}.war` 例如: stu_25204149_assign_1 3. Tomcat 检测到新的 WAR 文件,自动解压并部署(热部署) ## AI 批改集成 学生上传的实验文档会同时复制到 AI 批改目录,路径规则如下: - **临时上传目录**:`{upload.temp.path}/docs/{学生序号}_{学生姓名}_{作业ID}/` - **AI 批改目录**:`{ai.grading.path}/{作业ID}/{学生序号}_{学生姓名}/` 例如学生序号 1、学号 25204149 提交作业 1,文档会被复制到 `1/1_25204149/` 目录下,外部 AI 程序直接读取该目录中的文件进行批改。 ## 重要说明 - 同一学生对同一实验重复提交会**覆盖**之前的内容(WAR 包和文档均会被替换) - 禁止上传文件名为 `ROOT`、`manager`、`host-manager`、`docs`、`expsub` 的 WAR 包,防止覆盖 Tomcat 自带的 Web 应用