个人博客
教学论坛系统 - 个人博客
一、项目整体介绍
教学论坛系统是一个基于 Java Web 开发的交流平台,主要功能包括用户注册登录、发布帖子、回复帖子、点赞、搜索、附件上传下载,以及管理员审核帖子和用户管理。项目采用三层架构设计(表现层、业务逻辑层、数据访问层),使用 MySQL 数据库存储数据,Tomcat 作为服务器。
项目 Git 地址:https://gitee.com/java-forum-1127/
团队博客链接:https://www.cnblogs.com/forum-1127/p/20861394
二、个人负责模块
本次课程设计中,本人负责以下三个模块:
| 序号 | 模块名称 | 主要功能 |
|---|---|---|
| 1 | 用户模块 | 用户注册、登录、退出、权限拦截 |
| 2 | 活跃度统计模块 | 本周/本月活跃度排名统计 |
| 3 | 资源上传下载模块 | 附件上传、下载、下载次数统计 |
三、个人负责模块详解
1. 用户模块
简述:
用户模块主要负责用户的注册、登录和登录状态管理。密码使用 MD5 加密存储,登录成功后通过 Session 保持登录状态。
技术要点:
- MD5 密码加密
- HttpSession 会话管理
- Filter 过滤器实现权限拦截
难点及解决方法:
- 登录状态保持:登录成功后使用 session.setAttribute("loginUser", user) 存储用户信息,其他页面通过 session.getAttribute 校验登录态
- 权限拦截:通过 Filter 过滤器拦截受限页面,未登录用户自动跳转到登录页
- 密码安全:使用 MD5 加密,数据库中不存储明文密码
截图位置:


2. 活跃度统计模块
简述:
活跃度排名根据用户一周/一月内的发帖数和回帖数计算得分,公式:活跃度 = 发帖数 × 3 + 回帖数 × 1。使用 UNION ALL 合并 post 和 reply 表数据,按用户分组聚合后排序取前10名。
技术要点:
- UNION ALL 多表合并
- GROUP BY 分组聚合
- 日期范围查询
难点及解决方法:
发帖数据在 post 表,回帖数据在 reply 表,需要合并两张表的数据才能统计。使用 UNION ALL 先合并 post 和 reply 的数据(各自补充缺失字段),再用 GROUP BY 按用户分组聚合。这样不管用户只有发帖还是只有回帖,都能正常统计。
截图位置:
3. 资源上传下载模块
简述:
用户在帖子详情页可上传附件,其他用户可下载。使用 UUID 生成唯一文件名防止重名覆盖,下载时处理中文文件名乱码。
技术要点:
- @MultipartConfig 文件上传
- UUID 唯一文件名
- 文件流读写
- 中文文件名编码转换
难点及解决方法:
- 文件重名覆盖:使用 UUID.randomUUID().toString() 生成唯一文件名
- 中文文件名乱码:下载时通过 new String(fileName.getBytes("UTF-8"), "ISO-8859-1") 转换编码
- 文件大小限制:@MultipartConfig(maxFileSize = 10 * 1024 * 1024)
截图位置:
四、技术总结
| 技术 | 应用 |
|---|---|
| Java Servlet | 处理 HTTP 请求、控制页面跳转 |
| JSP | 动态页面渲染 |
| JDBC | 数据库连接与操作 |
| MySQL | 数据存储 |
| DAO 模式 | 数据访问层解耦 |
| MD5 | 密码加密 |
| HttpSession | 用户登录状态保持 |
| Filter | 请求拦截与权限控制 |
五、课程设计感想
这次课程设计我主要负责用户登录注册、活跃度排名和附件上传下载三个模块。
遇到的最大困难是活跃度排名的跨表统计。发帖数据在 post 表,回帖数据在 reply 表,需要把两张表的数据合并起来统计。一开始尝试用 JOIN,但发现如果某个用户只有发帖没有回帖,或者反过来,数据就会丢失。后来查到用 UNION ALL 可以合并两张表的结构,再配合 GROUP BY 分组聚合,才解决了这个问题。
中文文件名乱码也折腾了挺久。下载时直接在响应头里写中文名,浏览器显示的是乱码。后来查到需要用 new String(fileName.getBytes("UTF-8"), "ISO-8859-1") 转一下编码,这才正常。
通过这次实践,我对三层架构(DAO-Service-Servlet)有了更具体的理解。各层职责分明,代码更清晰,以后做项目也会坚持这种组织方式。
六、展望
当前还存在一些不足:活跃度统计需要手动刷新数据、没有使用数据库连接池、文件上传缺少类型校验。后续想学习 Spring 框架和 MyBatis,用更成熟的技术重构这个项目。
博客撰写日期:2026年6月28日







浙公网安备 33010602011771号