用ssm写的系统需要用安装了JDK、MySQL和Tomcat这三件套的环境才能打开运行,最直接的方式就是本地装一个Tomcat服务器,把项目打包成war包扔进去启动。这套组合是SSM框架的标配运行条件,缺一个系统都跑不起来,下面把从环境准备到部署上线的完整路径拆开讲清楚。
ssm项目部署需要哪些环境
SSM是Spring、SpringMVC和MyBatis三个框架的缩写,本质上是Java Web项目,只要是Java Web项目,运行环境就绕不开Java运行库、Web容器和数据库这三样东西。
JDK版本选择要匹配项目编译级别
用ssm写的系统用什么服务器打开,第一步先确认JDK版本,项目在别人电脑上能跑,到你这里启动报错,十有八九是JDK版本不匹配,检查项目里的pom.xml文件:
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
如果这里写的是1.8,本地就装JDK 8,装高了会出现类版本错误,装低了直接编译不过,命令行里输入java -version可以快速确认当前版本,不是目标版本就改环境变量JAVA_HOME指向正确的JDK路径。
Tomcat还是Jetty:选哪个更省事
行业共识认为,Tomcat是SSM项目最常见的部署容器,原因很简单:SSM框架生成的war包天然适配Tomcat的目录结构,Jetty也能跑,但对SpringMVC的兼容性调试起来更麻烦,没必要给自己找事。
Tomcat版本选8.5或9.0,配JDK 8毫无压力,Tomcat 10以上是Jakarta EE规范,包名从javax变成了jakarta,老项目直接扔进去会报ClassNotFoundException,到时候排查起来头大。
MySQL版本影响SQL语法兼容性
SSM项目的数据层用的是MyBatis,SQL语句的写法跟MySQL版本有微妙关系,MySQL 5.7和8.0在驱动类名、时区处理、排序规则上都有差异,看一下项目里jdbc.properties文件的数据库连接配置,注意driverClassName是com.mysql.jdbc.Driver(5.x驱动)还是com.mysql.cj.jdbc.Driver(8.x驱动),然后安装匹配的MySQL版本,8.x驱动连接5.7数据库没问题,反过来就不行了。
本地运行SSM系统的具体操作步骤
环境装齐后,打开SSM项目的方式有两种:IDE内启动和外部Tomcat部署,新手建议用IDE内启动,调试方便。
用IDEA导入Maven项目并调整配置
打开IntelliJ IDEA,选择Open,定位到项目的pom.xml文件,以Maven项目方式导入,等待依赖下载完成后,按以下路径操作:
- 打开Project Structure(快捷键Ctrl+Alt+Shift+S),确认Project SDK指向本地JDK
- 点击Add Framework Support,勾选Web Application
- 打开Run/Debug Configurations,点加号新建Tomcat Server Local
- 在Deployment选项卡里点加号,选Artifact,选择war exploded包
- Application context填项目的访问路径,比如
/ssm_demo
点启动按钮,IDEA会自动启动Tomcat并把项目挂上去,浏览器输入http://localhost:8080/ssm_demo就能看到系统首页。

启动前必查的四大配置项
启动报错是常态,排查顺序按下面来:
- 数据库连接:确认applicationContext.xml或者spring-mvc.xml里配置的数据库地址、账号、密码跟本地MySQL一致
- Redis连接:如果项目里用到了Redis做缓存,检查redis.host和redis.port配置,Redis服务没启动系统会卡在初始化阶段
- 图片上传路径:有文件上传功能的项目,检查配置里写的本地存储路径是否存在,不存在就手动创建
- 端口占用:Tomcat默认8080端口,被占用了会在启动日志里看到
Port 8080 was already in use,改Tomcat的server.xml里的port值,或者杀掉占用进程
Maven打包与外部Tomcat部署
用IDEA左侧Maven面板,找到项目名,展开Lifecycle,双击clean再双击package,构建成功后target目录下会生成一个war文件。
把这个war包拷贝到Tomcat安装目录下的webapps文件夹,然后进入bin目录双击startup.bat(Windows)或者执行startup.sh(Linux/Mac),Tomcat会自动解压war包,浏览器访问http://localhost:8080/项目名/就能打开。
这种方式的优点是完全模拟生产环境,缺点是想改源码得重新打包,日常开发调试用IDEA内启动,给客户演示或者测试环境部署用war包,两种方式各有适用场景。
怎么把SSM系统放到云服务器上
本地跑通了,下一步就是部署到云服务器让其他人也能访问,用ssm写的系统用什么服务器打开这个问题,在服务器场景下答案依然是Tomcat,只是多了几个前置步骤。
Linux服务器上安装环境四步走
以CentOS 7.6为例,按顺序执行:
# 安装JDK 8 yum install -y java-1.8.0-openjdk # 安装MySQL 5.7 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm yum install -y mysql-community-server # 安装Tomcat 9 cd /usr/local tar -zxvf apache-tomcat-9.0.xx.tar.gz # 开放8080端口 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload
装MySQL时注意,5.7版本初始密码是随机生成的,查看/var/log/mysqld.log文件里的temporary password字段,登录后立刻改密码。
用nginx反向代理解决域名访问问题
直接IP加端口访问能用,但有的生产环境要求用域名访问且默认80端口,在nginx配置里加一个代理转发:
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
改完配置执行nginx -s reload生效,这样用户访问http://your-domain.com就直接转发到Tomcat的8080端口,从用户视角看就是一个正经网站,不用在网址里带端口号。
云服务器部署ssm项目的数据库迁移
本地开发完要把数据同步到服务器,用MySQL自带的mysqldump工具最稳:

# 本地导出 mysqldump -u root -p ssm_database > ssm_database.sql # 上传到服务器后导入 mysql -u root -p -e "create database ssm_database character set utf8mb4" mysql -u root -p ssm_database < ssm_database.sql
导入完成后修改服务器上项目里的jdbc.properties,把数据库地址从localhost:3306改成服务器地址,账号密码改成服务器MySQL的,步骤是:解压war包 → 修改配置 → 重新打包 → 放到webapps目录,或者用解压后的目录直接部署。
部署时常见的坑和快速排查方法
本地能跑服务器上404
大多情况下是Tomcat的webapps目录里项目上下文路径不对,检查访问URL的项目名是否与war包文件名完全一致,大小写敏感。ROOT.war部署在根路径,访问http://IP:8080/不需要项目名。
日志文件怎么看故障原因
Tomcat的日志在logs目录下,catalina.out是主日志,排查流程:
# 查看实时日志 tail -f /usr/local/tomcat/logs/catalina.out # 搜索异常关键字 grep -i "exception|error" /usr/local/tomcat/logs/catalina.out
看到ClassNotFoundException就补对应依赖,看到Connection refused就检查数据库和Redis,看到OutOfMemoryError就调JVM堆内存参数,在catalina.sh里加JAVA_OPTS="-Xms512m -Xmx1024m"。
MySQL连接失败和端口不通的解决方法
连接失败时先分清楚是网络层面还是认证层面:
- 服务器上执行
telnet 127.0.0.1 3306,连不上就是MySQL没启动或配置了skip-networking - 远程连接失败先看云服务商安全组是否放行3306端口,再看防火墙状态
- MySQL 8.0默认认证插件是caching_sha2_password,老版本客户端连不上需要执行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; - 每次改完MySQL配置要执行
systemctl restart mysqld重启服务才能生效
代码用了某个新特性,本地行服务器不行
本地和服务器环境差异导致的问题很常见,操作路径是:分别查看两边的JDK和Tomcat版本,用java -version和catalina.sh version命令获取,版本不一致时以服务器版本为准调整代码,比如Java 8的List.of()方法在Java 7上不可用,这类兼容性问题在打包前用Maven的maven-compiler-plugin锁定编译级别可以提前发现。
本地访问与公网访问在代码上的区别
部署到公网后,项目里的静态资源路径和上传文件路径要做相应调整,本地开发时的C:/upload到服务器上就找不到了,要在配置里改成Linux路径,或者更合理的方式是用nginx映射静态资源目录,把上传文件挂载到/data/upload,nginx配置里加一个location /upload/指向这个目录,Tomcat只处理动态请求,静态文件交给nginx处理,负载更均衡。
另一个容易忽略的是跨域问题,如果前后端分离,前端页面部署在nginx上,接口在Tomcat上,需要在SpringMVC的配置里加跨域过滤器,允许的来源、方法、请求头都要配置正确,否则浏览器控制台会报CORS错误,看到这个错误先去检查这块配置。

SSM项目运行卡顿的性能优化方向
系统响应慢不一定是服务器配置低,多数情况下是连接池和缓存配置没调好:
- 数据库连接池的initialSize和maxActive根据并发量调整,连接数不够请求就在排队等连接
- MyBatis的mapper里SQL语句有没有N+1查询问题,日志开启后看执行了多少条SQL,一条列表查询触发几百条SQL就要改Mapper关联查询
- 静态资源有没有走缓存,nginx层面配置expires指令,图片和CSS、JS文件缓存一周,页面加载速度提升明显
- JVM堆内存太小导致频繁Full GC,观察GC日志,堆大小严格执行
-Xms和-Xmx设成相同值,避免动态扩容开销
常见问答
ssm项目一定要用Tomcat吗?用SpringBoot内置的Tomcat行不行
SSM是SSH之后主流的Java Web组合,它的部署方式没有锁定死Tomcat,但实际项目中Tomcat覆盖率最高,SpringBoot内嵌Tomcat的原理是把容器嵌进应用里,以jar包方式运行,如果项目是从SSM改造来的,用SpringBoot内置Tomcat确实省掉装容器的步骤,执行java -jar 项目.jar就启动服务,但要注意SSM项目里如果用了JSP页面,SpringBoot内置Tomcat默认不支持JSP,得加额外的依赖配置,这种情况建议还是用传统的外部Tomcat部署。
一台服务器能同时跑多个ssm项目吗
可以,有两种方式,第一种是用同一个Tomcat的webapps目录放多个war包,通过不同的项目名路径访问,比如http://IP:8080/project1和http://IP:8080/project2,第二种是开多个Tomcat实例,把catalina.sh里的端口号改掉,用不同的端口区分项目,适合项目之间需要完全隔离的场景,实际操作中用不同端口的多实例方式更安全,单个Tomcat挂了一个项目所有项目都受影响。
云服务器配置选择什么价位够用
SSM系统是传统的单体应用,对服务器资源要求不高,个人项目或者中小公司内部系统用入门级云服务器就够,简米云和酷番云的突发性能实例或轻量应用服务器,配置选2核4G内存,带宽按3M到5M计费,一年费用大致在几百到两千元这个区间(据主流云厂商公开价格),跑一个日活几百人的SSM系统绰绰有余,如果访问量增长,优先升带宽而不是升CPU,带宽瓶颈更常见,数据库用服务器自带的MySQL就行,没必要单独买云数据库RDS,那属于花冤枉钱。
SSM系统打开的方式归结起来就是:本地开发用IDEA加Tomcat插件,部署上线用外部Tomcat加war包,云服务器额外处理安全组、防火墙和nginx转发,按这个路线操作,一个完整的ssm系统从开发到上线就全部打通了,真正的关键动作是先把环境版本对齐,再处理数据库和路径配置,这两步做扎实了,系统启动就是水到渠成的事。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/805392.html

