一个基于 Spring MVC + MyBatis + JSP + Tomcat 的本地社区项目,覆盖贴吧帖子、统一发帖页、用户中心、通知、全站搜索、兴趣群组和 WebSocket 聊天室等核心链路。
项目当前采用单体 WAR 部署模式,后端与页面模板都位于 tieba/ 模块内,不存在额外的前端工程。
- 内容社区:首页发现流、版块列表、帖子详情、楼层回复、楼中楼回复
- 发帖能力:统一发帖页、帖子类型、标签、图文上传、首图封面
- 用户系统:注册、登录、退出、个人资料、头像上传、我的帖子、我的回复
- 社区互动:帖子点赞、通知中心、全站搜索
- 实时聊天:全站大厅、兴趣群组、房间加入、历史消息、WebSocket 推送
- 兼容策略:兼容
forum_user_profile.avatar和forum_user_profile.avatar_path两种历史字段
- Java
21 - Spring MVC
5.3.x - MyBatis
3.5.x - JSP + JSTL
- MySQL
8.x - Tomcat
9.x - Maven Wrapper
- WebSocket
javax.websocket
F:\zhao\chatroom\
├─ tieba\ # 主应用(WAR)
│ ├─ src\main\java\ # Controller / Service / Mapper / WebSocket
│ ├─ src\main\resources\ # Spring / MyBatis / application.properties
│ ├─ src\main\webapp\ # JSP、静态资源、web.xml
│ └─ src\test\java\ # 单元测试与契约测试
├─ sql\ # 建库脚本与增量迁移脚本
├─ data\uploads\ # 头像、帖子图片上传目录
├─ docs\ # 设计文档与环境文档
├─ start.bat # 构建、部署、启动一体化脚本
├─ TECHNICAL_DESIGN.md # 技术设计说明
└─ guestbook.sql # 历史库导出文件
- JDK 21 已安装并加入
PATH - MySQL 8.x 可访问
- Tomcat 9.x 已安装
- Windows PowerShell / CMD 环境
推荐先看环境文档:
推荐使用默认库名 tieba,这样无需修改应用默认 JDBC 配置。
- 执行 sql/schema.sql
- 检查是否存在
forum_like_log - 如果不存在,再按环境文档中的补丁 SQL 创建该表
说明:
- sql/schema.sql 已包含当前版本的大部分核心表、版块种子数据、兴趣分区和聊天室房间种子数据
v1.2、v1.3、v1.4主要用于老库增量升级,不是全新建库的首选入口
编辑 tieba/src/main/resources/application.properties:
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/tieba?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
upload.path=F:/zhao/chatroom/data/uploads
chat.history.limit=50
chat.rate.limit.per.minute=20
chat.message.max.length=200
chat.sensitive.words=傻逼,法轮功,反共,赌博至少确认这几项:
jdbc.urljdbc.usernamejdbc.passwordupload.path
在项目根目录运行:
cd F:\zhao\chatroom\tieba
.\mvnw.cmd test
.\mvnw.cmd clean package回到仓库根目录运行:
cd F:\zhao\chatroom
start.batstart.bat 会自动执行以下动作:
- 调用 Maven Wrapper 进行
clean package - 将
tieba.war复制到 Tomcatwebapps - 启动 Tomcat
- 轮询
http://localhost:8080/tieba - 就绪后自动打开浏览器
- 首页:
http://localhost:8080/tieba - 登录:
http://localhost:8080/tieba/auth/login - 注册:
http://localhost:8080/tieba/auth/register - 全站搜索:
http://localhost:8080/tieba/search - 个人中心:
http://localhost:8080/tieba/user/profile - 聊天大厅:
http://localhost:8080/tieba/chat/global - 兴趣群组:
http://localhost:8080/tieba/chat/rooms
cd F:\zhao\chatroom\tieba
.\mvnw.cmd testcd F:\zhao\chatroom\tieba
.\mvnw.cmd clean packagecd F:\zhao\chatroom
start.bat- 根配置:
upload.path - 头像上传目录:
${upload.path}/avatars/<userId>/ - 帖子图片目录:
${upload.path}/thread-images/<userId>/ - 静态映射:
/uploads/** -> file:${upload.path}/
- 头像单文件上限:
2MB - 帖子图片单文件上限:
5MB - 单帖图片数量上限:
9 - Servlet 请求总大小上限:
6MB
- 历史消息返回数量:
chat.history.limit - 每分钟发言限流:
chat.rate.limit.per.minute - 单条消息最大长度:
chat.message.max.length - 敏感词列表:
chat.sensitive.words - WebSocket 端点:
/ws/chat/rooms/{roomCode}
建议每次改动后至少执行:
cd F:\zhao\chatroom\tieba
.\mvnw.cmd test
.\mvnw.cmd clean package然后再执行:
cd F:\zhao\chatroom
start.bat启动后至少人工检查以下页面:
- 首页发现流
- 某个版块页
- 帖子详情页
- 登录页
- 个人中心
- 发帖页
- 全站大厅或兴趣群组页
schema.sql默认创建数据库tiebatieba_local_schema.sql默认创建数据库tieba_local- 当前应用默认 JDBC 指向
tieba - 两者字段细节略有差异,但代码做了部分历史兼容
不要混用后忘记修改 jdbc.url。
当前仓库中的全量脚本与增量脚本有历史分叉:
- 代码已经包含
LikeLogMapper - 但 sql/schema.sql 默认未创建
forum_like_log
因此新环境初始化时,请按环境文档补上该表。
脚本会按以下顺序寻找 Tomcat:
TOMCAT_HOMECATALINA_HOMEF:\zhao\chatroom\tomcatF:\zhao\chatroom\apache-tomcatF:\zhao\chatroom\apache-tomcat*
如果 Tomcat 已在运行,再次执行 start.bat 可能产生端口冲突或重复部署日志。建议先关闭旧实例,再重新执行。