☰
基于Java SSM MySQL的博客系统源码部署与二次开发指南
2026/10/1 10:50:50 网站建设 项目流程

简介:基于Java+SSM+MySQL的博客系统开发资源,面向计算机专业毕业生、课程设计及期末大作业场景,提供一套经过调试、可完整运行的博客网站前后端工程。系统功能覆盖文章发布、分类管理、评论交互等常见模块,界面简洁,适合作为高分毕业设计的参考蓝本。压缩包共775个文件,包括98个Java后端源文件、54个Vue前端组件、160个JavaScript脚本、52个CSS样式表、163个SVG图标及数据库SQL脚本,整体约34.87MB,结构清晰便于导入IDE和部署。附带的论文文档、数据库设计及bat批处理工具可辅助快速启动项目,省去环境配置与代码联调的时间。目前已有69人学习下载,适合需要直接获取完整可运行项目并对博客系统二次开发的开发者。

1. 基于 java + ssm + mysql 的博客系统:这份源码为什么值得直接下载

说实话,我拆毕业设计源码最怕遇到一种情况:作者写文档时说得天花乱坠,结果拿回来连数据库脚本都缺,光环境就配三天。这套基于 Java + SSM + MySQL 的博客系统是近期拆过比较省心的一个——源码、数据库脚本、论文三个部分都在压缩包里,前后端代码也齐,MySQL 8.0 的库脚本导入就能用,Tomcat 起来之后直接看效果。它解决的事情很明确:给你一条完整的博客系统实现路径,能登录、能发文章、能分类、能评论,后台管理界面也是现成的。适合正在做毕设想省时间的学生、要交 Java 课程设计的人,以及想搞懂 SSM 三层架构到底怎么串起来的人。下面按我实际跑通的顺序,把环境、数据库、启动、打包到避坑一路讲到底。

2. SSM 组合的逻辑:为什么这类博客毕设还选 Spring + SpringMVC + MyBatis

2.1 三层架构和博客系统的功能映射:为什么不是 Spring Boot

先回答一个很多人会问的问题:现在新项目都上 Spring Boot 了,为什么这套毕设还在用 SSM?答案很现实:毕设答辩时老师喜欢问「你了解 SSM 整合吗」,Spring Boot 把配置全藏起来了,反而不容易讲出深度。SSM 的代码路径非常清晰:Controller 收到请求 → Service 处理业务 → Mapper 执行 SQL,每一层都能在源码里明确指出来,这在答辩时是加分项。

把 SSM 的三个框架拆开看,它们和博客系统的功能点是天然对应的:

层次框架在博客系统里负责什么
表现层SpringMVC接收 /login、/article/detail 这类请求,绑定参数,返回 JSP 页面或 JSON
业务层Spring管理 Service 对象,控制事务边界,比如发布文章时要同时更新文章表和分类表
持久层MyBatis把 Mapper 接口映射到 XML 里的 SQL,执行用户、文章、评论的增删改查
数据库MySQL 8.0存储用户、文章、分类、标签、评论的最终数据

这套博客系统的核心链路我都走了一遍:用户在登录页输入账号密码,SpringMVC 的 LoginController 接住参数,交给 UserService 校验,UserService 再调 UserMapper 里的 selectByUsernameAndPassword 方法,最后把结果返回到 Session。新手跟着这条链路读代码,一个星期能把 SSM 整合理解得七七八八,而且这套组合也是 java 面试题里的常客,跑通一个真实项目比背十道八股文有用。

2.2 版本矩阵:JDK、MySQL、Tomcat、Maven 怎么对齐

摘要里明确写了技术组成:Java、IDEA、MySQL 8.0、Tomcat 7.x 或 8.x、Maven、Navicat。我实际跑的时候用的版本组合如下,照着配最不容易出问题:

组件建议版本说明
JDK1.8(8u201 以上)毕设环境里最稳的组合,别上 JDK 17,部分老依赖会不兼容
MySQL8.0数据库脚本是按 8.0 写的,5.7 可能在某些语法上不兼容
Tomcat8.5.x(7.0.9x 也可以)别用 Tomcat 10,javax.servlet 命名空间被改成 jakarta.servlet,SSM 老项目直接起不来
Maven3.6.x3.8+ 对中央仓库的访问策略有变化,配好镜像即可
IDEA2020 及以上打开项目后等 Maven 依赖导入完成再动代码,别急着编译
Navicat15 及以上老版本连 MySQL 8 的默认认证插件会报 2059 错误

安装顺序也有讲究:先装 JDK,再装 Maven,接着是 MySQL,最后是 Tomcat 和 IDEA。每个装完立刻在命令行验证一遍,不要攒到最后一起排查:

java -version mvn -v mysql --version

三个命令都能正常输出版本号,再继续下一步。MySQL 我只建议从官网下载 Community Server 8.0 安装包,不要在第三方站点找安装包,MySQL 安装教程网上很多,但版本要对得上。

2.3 装环境最常踩的三个点:变量、镜像与认证插件

第一个坑是 JAVA_HOME 配错。有同学把 JAVA_HOME 指到了 jre 目录而不是 jdk 目录,结果 Tomcat 能起来但编译总报错。还有一个常见问题是 PATH 里没加%JAVA_HOME%\bin,命令行里 java 命令都找不到。配完环境变量后要重新打开命令行窗口才生效,这是最容易忽略的。

第二个坑是 Maven 默认用中央仓库下载依赖,国内网络环境下又慢又容易断。解决办法是改 Maven 的 settings.xml,在 mirrors 节点里加阿里云镜像:

<mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <name>Aliyun Maven Mirror</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>

改完之后跑一次mvn clean compile,如果依赖能顺利拉下来,后面所有操作都会顺畅很多。

第三个坑和 MySQL 8.0 的认证插件有关。MySQL 8 默认用 caching_sha2_password,老版本的 Navicat 直接连不上,报错信息是 2059。解决方式要么升级 Navicat,要么在 MySQL 里把用户的认证方式改回 mysql_native_password,这个后面避坑章节详细说。装 MySQL 的时候还有一步容易被跳过:选服务类型时建议选「Developer Default」,字符集要选 utf8mb4,这样和中国业务系统的匹配度最高。

3. 数据库初始化:从 .sql 脚本到能连上的 blog 库

3.1 表结构清单:用户、文章、分类、标签与评论

压缩包里的数据库脚本一般是 blog.sql,导入之前先打开看一眼结构,别直接就执行。我用 Navicat 打开脚本文件,第一件事是确认三样东西:建库语句、字符集、初始数据。

这套博客系统的表设计是典型的 SSM 毕设风格,总共六张核心表:

表名作用关键字段
t_user用户与管理员账号id, username, password, nickname, avatar, role
t_type文章分类id, name
t_blog文章主体id, title, content, summary, type_id, user_id, create_time, view_count, status
t_tag标签id, name
t_blog_tag文章-标签关联表blog_id, tag_id
t_comment评论id, blog_id, user_id, content, create_time, parent_id

这几张表之间的关系很清楚:t_blog 通过 user_id 关联 t_user 拿到作者信息,通过 type_id 关联 t_type 拿到分类名;t_blog_tag 是文章和标签的多对多中间表;t_comment 通过 blog_id 关联文章,parent_id 字段支持楼中楼回复。status 字段在 t_blog 里控制文章是草稿还是已发布。

初始数据一般包含一个管理员账号、一个测试用户,外加几篇示例博文。管理员账号的密码通常是 123456 这种简单值,而且是用 MD5 加密后存进数据库的,直接在 SQL 里能看到加密串。这一步我建议确认清楚,后面登录要用。

3.2 导入步骤:Navicat 图形化与命令行两种方式

Navicat 图形化导入是最省事的,我用的步骤是:

  1. 新建连接,主机填 localhost,端口 3306,用户名 root,密码填你自己设的 MySQL 密码
  2. 新建数据库,库名建议用 blog,字符集选 utf8mb4,排序规则选 utf8mb4_unicode_ci
  3. 右键 blog 库,选择「运行 SQL 文件」,选中压缩包里的 .sql 脚本,开始执行

如果你更习惯命令行,也可以用 MySQL 自带客户端操作:

mysql -u root -p CREATE DATABASE IF NOT EXISTS blog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE blog; SOURCE /path/to/blog.sql;

两点需要特别说明。字符集用 utf8mb4 而不是 utf8,是因为 utf8mb4 能存 emoji 表情,而且对中文的兼容性更好;排序规则里 unicode_ci 对中文的排序准确度比 general_ci 高。另外脚本里如果写的是CREATE TABLE IF NOT EXISTS,重复执行不会报错;如果写的是DROP TABLE IF EXISTS然后重建,那脚本执行时会把现有数据清掉,生产库千万别这么干,本地开发无所谓。

3.3 jdbc.properties 连接参数:驱动、时区与字符集

数据库建好之后,项目的数据库连接配置要改。SSM 项目的数据库配置一般放在 src/main/resources 目录下的 jdbc.properties 文件里,打开后长这样:

jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai jdbc.username=root jdbc.password=你的MySQL密码

四个参数每个都可能翻车,逐个说清楚。

driver 那行:MySQL 8 的官方驱动把类名改了,老项目里写的com.mysql.jdbc.Driver在 MySQL 8.0 的驱动包下直接报 ClassNotFoundException,必须要改成com.mysql.cj.jdbc.Driver。

URL 里的 characterEncoding=utf8mb4 保证中文不会乱码;useSSL=false 是因为 MySQL 8 的驱动默认会尝试 SSL 握手,本地开发如果没配证书,某些版本会在连接日志里打 SSL 告警甚至报错,索性关掉。serverTimezone=Asia/Shanghai 必须写,MySQL 8 驱动要求显式指定时区,不写会报「The server time zone value 'CST' is unrecognized」的错,这个报错信息在搜索引擎里很常见。

username 和 password 填你自己 MySQL 的账号密码。改完这个文件要重启 Tomcat 才生效,改数据库密码也一样。

4. 三个 bat 脚本:从环境预检到 WAR 包部署的完整链路

很多同学拿到压缩包里的 1-install.bat、2-run.bat、3-build.bat 就当黑匣子双击,报错了也不知道去哪看日志。其实这三个脚本只做三件事:装依赖、跑开发服务器、打部署包。我逐个拆开讲,包内实际脚本内容如果和我下面给的示例有出入,以包内为准,实现逻辑基本等价。

4.1 1-install.bat:环境预检与依赖装入本地仓库

第一个脚本的功能是环境预检和依赖安装,常见写法是这样的:

@echo off rem 检查 Maven 是否可用 mvn -v >nul 2>&1 if errorlevel 1 ( echo Maven 未安装或 PATH 未配置,请先配置环境变量 pause exit /b 1 ) echo 环境检查通过,开始安装依赖到本地仓库... mvn clean install -DskipTests pause

mvn -v >nul 2>&1的意思是执行版本检查,把正常输出和错误输出都丢到空设备,这样屏幕上不会刷一堆版本信息;errorlevel 1是 Windows 批处理里判断上一条命令是否失败的标准写法,如果 Maven 没装就提示并退出。mvn clean install -DskipTests是核心操作,把项目依赖安装到本地 Maven 仓库,-DskipTests跳过测试减少时间。

这一步如果 pom.xml 里的依赖有缺失或版本冲突,会直接在这里红。看到 BUILD SUCCESS 再往下走。

4.2 2-run.bat:开发期一键启动

第二个脚本是开发期启动用的,最常见的是调用 Maven 内置 Tomcat 插件:

@echo off rem 用 Maven 内置 Tomcat 插件启动,端口默认 8080 mvn tomcat7:run -Dmaven.tomcat.port=8080 pause

注意命令行的端口参数是-Dmaven.tomcat.port=8080,如果想换端口直接在后面改。执行后控制台会滚动输出日志,看到类似Starting ProtocolHandler或者INFO: Server startup in xxx ms就说明启动成功了,浏览器访问http://localhost:8080就能打开首页。

这个模式适合开发期调试,代码改了之后 Maven 插件会自动重新加载,不需要手动重启 Tomcat。如果项目里配置了热部署,改 JSP 页面直接刷新浏览器就能看到效果。

4.3 3-build.bat:打成 WAR 包并部署到 Tomcat

第三个脚本用于生产部署,核心是打包和复制:

@echo off rem 跳过测试打包 mvn clean package -DskipTests rem 把 war 复制到外部 Tomcat 的 webapps 目录,路径按你本机改 copy target\blog.war D:\apache-tomcat-8.5.99\webapps\ pause

mvn clean package会在 target 目录产出 war 包,war 包的名字由 pom.xml 里的 artifactId 决定。copy命令把 war 包扔到外部 Tomcat 的 webapps 目录,启动 Tomcat 后它会自动解压部署。如果 Tomcat 已经在运行,可以等它自动热部署,或者手动重启一下更稳妥。

如果 2-run.bat 用的是 Maven 插件方式,那 3-build.bat 这条链路其实就是把项目从「开发模式」切到「部署模式」。对外展示的时候,Tomcat 独立部署比 Maven 插件更接近真实生产环境。

4.4 浏览器验证链路:从登录到发文的完整路径

启动成功之后,我习惯按下面这条链路完整走一遍,确认每个模块都正常:

  1. 打开首页,注册一个新账号,测试注册流程
  2. 用初始管理员账号登录后台,看角色权限是否区分
  3. 新建一个分类,写一篇测试文章,上传封面图
  4. 退出后台,在前台首页看文章是否能正常展示
  5. 点击文章详情页,在评论区发一条评论

提示:首次登录用管理员账号,具体用户名密码以数据库脚本里 t_user 表的初始数据为准,常见的样例是 admin / 123456,也有项目改成 admin / admin。

走链路的过程中盯着 Tomcat 控制台,每操作一步都会有对应的 SQL 日志刷出来,比如插入文章的 insert 语句、查询分类的 select 语句。这一步能顺便验证 MyBatis 的 SQL 映射是否正常。

5. 避坑指南:跑这套源码时最常见的 5 个翻车点

环境问题很多时候看着像玄学,实际上排错顺序是固定的。以下五条是我在拆这个项目时真实遇到过的坑,每一条都有对应的解决方案,建议直接收藏。

5.1 驱动类找不到:ClassNotFoundException: com.mysql.jdbc.Driver

现象:Tomcat 启动时,Spring 创建数据源报错,堆栈里出现ClassNotFoundException: com.mysql.jdbc.Driver。

原因:MySQL 8.0 之后官方驱动把类名改成了com.mysql.cj.jdbc.Driver,但 jdbc.properties 里还写的是旧类名;还有一种情况是 pom.xml 里的 mysql-connector-java 依赖版本是 5.x,本地 Maven 仓库装的是 8.x 的驱动,版本混了。

解决:把 jdbc.driver 改成com.mysql.cj.jdbc.Driver,同时检查 pom.xml 里 mysql-connector-java 的版本是不是 8.0.x。两个地方对齐后,这个问题基本消失。

5.2 Navicat 报 2059:caching_sha2_password 认证插件

现象:Navicat 连接 MySQL 8.0 时弹窗,报2059 - authentication plugin 'caching_sha2_password' cannot be loaded。

原因:MySQL 8 默认的认证插件是 caching_sha2_password,客户端版本太老不认识这个插件。

解决:最省事的是换 Navicat 16 及以上版本;如果暂时不想换客户端,也可以把 root 用户的认证方式改回 mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;

改完之后 Navicat 旧版本也能正常连。注意localhost要换成你实际连接的主机名,远程连接的话是'root'@'%'。

5.3 本地连不上 MySQL:error 2002 (HY000)

现象:启动项目时数据库连接失败,控制台报error 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'。

原因:在 Linux 环境下,MySQL 服务没启动,或者 socket 文件路径和客户端配置不一致。在 Windows 环境下则可能是 MySQL 服务没在服务管理器里启动,或者 3306 端口被其他进程占了。

解决:分系统处理。Linux 上先执行service mysql start或者systemctl start mysqld,再看/etc/my.cnf里的 socket 路径;Windows 上打开服务管理器找到 MySQL80,确认状态是「正在运行」。最后用netstat -ano | findstr 3306确认端口没被别的程序占用。

5.4 Tomcat 启动闪退:8080 端口被占用

现象:双击 Tomcat 的 startup.bat,窗口一闪而过,什么日志都没看到。

原因:8080 端口被其他进程占用,Tomcat 绑定端口失败直接退出。

解决:在命令行执行netstat -ano | findstr 8080,拿到占用端口的 PID,然后在任务管理器里结束对应进程;或者改 Tomcat 的 conf/server.xml,把 Connector 的 port 改成 8081。如果用的是 2-run.bat 的 Maven 插件方式,直接改-Dmaven.tomcat.port参数即可。

5.5 页面样式全裸:CSS 资源 404

现象:页面 HTML 能正常显示,但没有任何样式,浏览器 F12 打开网络面板,CSS 请求全部 404。

原因:项目部署后 context path 带了项目名,页面里的静态资源路径写死了/css/xxx.css,实际访问路径变成了/项目名/css/xxx.css,找不到文件。还有可能是打 WAR 包时 webapp 下的静态资源没被包含。

解决:前端页面里的资源路径用${pageContext.request.contextPath}拼接,同时在 SpringMVC 配置里放行静态资源:

<mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/images/**" location="/images/" />

包内那批样式文件,包括 bootstrap.min.css、element.min.css、front-kaoshi-style.css 等,就是要被这两个配置放行的。如果误删了这些文件或者没打进 WAR 包,页面就会全裸,所以解压压缩包时不要把目录结构改了。

6. 二次开发:把项目从「能跑」改到「答辩有得讲」

把项目跑通只是底线,要想在答辩时有东西可讲,得动点手脚。我建议至少做三个改造点,每个都不难,但都能在答辩时展开讲。

第一个改造点是给文章列表加分页。原始项目如果没做分页,文章一多页面就拉不到底。引入 PageHelper 插件,改造量很小:

<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.3.0</version> </dependency>

Service 层调用分页的方式是:

PageHelper.startPage(pageNum, pageSize); List<Blog> blogList = blogMapper.selectBlogList(); PageInfo<Blog> pageInfo = new PageInfo<>(blogList);

PageHelper.startPage()只对下一条查询生效,PageInfo里封装了 total、pages、list 这些分页数据。答辩时可以讲清楚 PageHelper 的底层原理是拦截器拦截了 Executor 的查询方法,自动拼 limit 语句。

第二个改造点是让博文正文支持 Markdown。原始项目大概率是纯文本展示,而 Markdown 是博客系统的标配。方案是在前端引入 marked.js 的本地文件,后端存原始 Markdown 文本,前端展示前调用marked.parse()转成 HTML。这样数据表不用动,只改展示层。

第三个改造点是把论文和源码对应起来。答辩时老师最常问「你这系统有哪些功能、数据库怎么设计的」,论文里的需求分析章节就对应前台注册登录、发文章、评论这条链路;数据库设计章节就对应 t_user、t_blog、t_tag 这几张表的关系;系统测试章节把跑通过程中的截图按模块贴进去,测试用例表格里写功能点、预期结果、实际结果。把论文的三章和源码的功能点一一对应,答辩时随便抽问都能答上来。

这三个改造点是我跑完这套 SSM 博客系统之后实际动手改过的方向,工程量都不大,但每个都能在「功能创新」和「技术深度」上各占一分。这也算我拆 SSM 项目的血泪经验:拿到一套能跑的源码,第一件事不是改功能,而是先确认 jdbc.properties 里的驱动和时区,再看 Tomcat 端口是不是被占用,最后才动业务代码。这套博客系统把这三个习惯都帮我练出来了。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询