个人博客

教学论坛系统 - 个人博客

一、项目整体介绍

教学论坛系统是一个基于 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 过滤器实现权限拦截

难点及解决方法

  1. 登录状态保持:登录成功后使用 session.setAttribute("loginUser", user) 存储用户信息,其他页面通过 session.getAttribute 校验登录态
  2. 权限拦截:通过 Filter 过滤器拦截受限页面,未登录用户自动跳转到登录页
  3. 密码安全:使用 MD5 加密,数据库中不存储明文密码

截图位置

  • image

  • image

02-用户登录

03-用户注册

2. 活跃度统计模块

简述

活跃度排名根据用户一周/一月内的发帖数和回帖数计算得分,公式:活跃度 = 发帖数 × 3 + 回帖数 × 1。使用 UNION ALL 合并 post 和 reply 表数据,按用户分组聚合后排序取前10名。

技术要点

  • UNION ALL 多表合并
  • GROUP BY 分组聚合
  • 日期范围查询

难点及解决方法

发帖数据在 post 表,回帖数据在 reply 表,需要合并两张表的数据才能统计。使用 UNION ALL 先合并 post 和 reply 的数据(各自补充缺失字段),再用 GROUP BY 按用户分组聚合。这样不管用户只有发帖还是只有回帖,都能正常统计。

截图位置

  • image

  • image

3. 资源上传下载模块

简述

用户在帖子详情页可上传附件,其他用户可下载。使用 UUID 生成唯一文件名防止重名覆盖,下载时处理中文文件名乱码。

技术要点

  • @MultipartConfig 文件上传
  • UUID 唯一文件名
  • 文件流读写
  • 中文文件名编码转换

难点及解决方法

  1. 文件重名覆盖:使用 UUID.randomUUID().toString() 生成唯一文件名
  2. 中文文件名乱码:下载时通过 new String(fileName.getBytes("UTF-8"), "ISO-8859-1") 转换编码
  3. 文件大小限制:@MultipartConfig(maxFileSize = 10 * 1024 * 1024)

截图位置

  • image

  • image

四、技术总结

技术 应用
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日

posted @ 2026-06-28 00:25  论坛forum  阅读(4)  评论(0)    收藏  举报