服务器上tomcat发布成功为什么访问不了?tomcat启动成功无法访问网页怎么办?
- 云服务器
- 2026-08-30
- 6
Tomcat发布成功但浏览器访问不了,绝大多数情况下不是代码问题,而是端口占用、防火墙拦截或访问路径写错这三个原因造成的,按顺序排查五分钟内就能解决。
先确认你的访问地址真的写对了
很多朋友在Tomcat里把项目部署得明明白白,war包也解压了,控制台也没报错,但浏览器就是打不开,这时候先别急着怀疑环境,百分之七八十的访问失败是输错了URL路径。
- 默认端口是8080,如果你改过server.xml里的Connector端口,那就要用新端口访问。
- 访问路径要区分大小写,Tomcat对URL是大小写敏感的,/MyApp和/myapp可能指向两个完全不同的结果。
- 如果你把war包命名为demo.war,那么访问路径就是http://localhost:8080/demo/
- 如果你把项目放在webapps/ROOT目录下,那么直接访问http://localhost:8080/
可以用一个最简单的验证方法:在浏览器里访问http://localhost:8080
端口冲突和防火墙是最常见的拦路虎
端口被别的进程占用了
Tomcat默认监听8080端口,但这个端口经常被其他软件抢走,比如你电脑上装了Oracle数据库、Zabbix监控,或者之前启动过另一个Tomcat实例没有正常关闭,都会导致端口冲突。
排查命令很简单,在Linux服务器上执行:
netstat -tlnp | grep 8080
或者Windows下执行:
netstat -ano | findstr 8080
如果看到有其他PID占用了8080,你就得决定是杀掉那个进程,还是把Tomcat的端口改成8081、8082之类的其他空闲端口,改端口的地方在conf/server.xml,找到<Connector port="8080" protocol="HTTP/1.1"这一行,把port改掉就行。
还有一种情况是Tomcat启动时报了端口冲突但日志被你的启动脚本刷掉了,没注意到,所以建议启动时用catalina.sh run(Linux)或catalina.bat run(Windows)在前台运行,这样所有日志都会直接打在控制台里,一旦端口被占就能立刻看到明确报错。

服务器防火墙没放行端口
云服务器上特别容易踩这个坑,本地开发环境能访问,但一部署到简米云、西西云或自建机房,外网就是访问不到,这时候要检查两层防火墙:
- 云安全组:登录云控制台,看安全组规则里有没有放行你Tomcat使用的端口,很多云厂商默认只放行了22、80、443等端口,8080根本没开。
- 系统防火墙:CentOS用iptables或firewalld,Ubuntu用ufw,以CentOS 7为例:
firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload
放行后再用telnet或者curl从外部测一下端口通不通。行业共识认为,云服务器上发布失败有接近一半的原因是安全组配置漏掉了端口,这个顺序一定要排在检查代码前面。
看Tomcat日志比猜问题高效得多
当端口没问题、防火墙也放行了,但访问还是报错,那就去看日志,Tomcat的日志目录是logs/,重点看这三个文件:
- catalina.out:Tomcat的主日志,启动信息、异常堆栈都在这。
- localhost.log:显示站点部署和请求处理时的异常。
- 本地站点名.log:比如localhost.2026-01-01.log,这里面记录的是具体应用抛出的错误。
打开日志后,按ERROR和Exception关键词搜索,常见的报错有这样几类:
- java.net.BindException: Address already in use:端口被占用,按上面说的换端口。
- ClassNotFoundException或NoClassDefFoundError:依赖的jar包没放对位置,检查项目的lib目录。
- java.sql.SQLException:数据库连接失败,可能是JNDI数据源配置错误或数据库没启动。
- OutOfMemoryError:内存不够,需要调整catalina.sh里的JAVA_OPTS参数。
一个很实用的排查技巧:部署前先跑一遍curl -I http://localhost:8080/

域名绑定和反向代理要注意的细节
如果你不是用IP加端口直接访问,而是通过域名或者Nginx转发,那访问不了的原因就要多一层思考了。
没有配置Hosts或DNS解析
在自己电脑上测试时,经常有人直接改/etc/hosts或C:WindowsSystem32driversetchosts,把域名映射到服务器IP,如果访问不了,检查这两点:
- 服务器上Tomcat的server.xml里,<Engine>标签下有没有配置defaultHost,如果你用域名访问,需要把域名加进<Host>标签的name属性里。
- Nginx代理时,proxy_pass后面的地址必须能通过curl直接访问到,比如Nginx把http://example.com
项目根路径和Nginx location匹配
如果你的项目访问路径是http://IP:8080/app
location /app { proxy_pass http://127.0.0.1:8080;
这里有个容易踩坑的地方:proxy_pass后面如果加了URI(比如http://127.0.0.1:8080/
多实例部署和Tomcat发布失败的常见误区
同一个服务器装多个版本Tomcat
有些朋友一台机器上装了Tomcat 8和Tomcat 9,发布的时候不小心把war包扔错了目录,先确认你启动的是哪个版本的Tomcat,用ps -ef | grep tomcat查看进程对应的启动路径,别搞混了。

热部署没生效
IDE里点了“部署”或者通过Tomcat Manager上传war包,看起来像是发布成功了,但实际没生效。比较可靠的做法是:先把旧项目从webapps目录下删除,然后把新的war包传进去,触发Tomcat自动解压,如果不想重启Tomcat,可以等几秒钟后看日志里有没有Deployment of web application archive ... has finished这行提示。
访问时浏览器缓存作怪
这个现象不多但确实存在,部署了新版本,前端页面却还是旧的,或者一直转圈,可以强制刷新(Ctrl+F5)或者用无痕模式打开,排除缓存干扰,如果无痕模式下能正常访问,那就是浏览器缓存问题,不用动服务器。
怎么从零到一确认Tomcat部署是否成功
给你一套完整的手动操作路径,照着做能快速定位到具体环节。
| 操作步骤 | 命令或操作 | 预期结果 |
|---|---|---|
| 检查进程 | ps -ef | grep java | Tomcat进程存在且无ERROR |
| 检查端口 | netstat -tlnp | grep 8080 | 端口处于LISTEN状态 |
| 本地访问 | curl -I http://localhost:8080/ | 返回200 |
| 项目页面 | 访问http://localhost:8080/ | 能看到首页或接口返回JSON |
| 外部访问 | 换一台设备或4G网络访问公网IP | 能正常加载页面 |
如果上面每一步都符合预期但还是访问不了,再检查一下你访问的URL里是不是带了奇怪的端口,有些人用http://IP:8080
Tomcat发布成功但访问不了这个问题,绝大部分都藏在上述这几个细节里,想一次解决的话,按照“先curl本机,再查端口,再查防火墙,再查日志”的路子走,基本不会跑偏,记住核心判断标准:Tomcat自己能不能访问到,项目日志里有没有致命异常,外部网络是不是被拦截,弄明白这三件事,这类问题以后再也难不倒你。
Q&A
问:tomcat发布成功但访问显示404,怎么快速解决?
先确认你是不是用了正确的项目路径访问,war包名称决定了访问路径,比如test.war对应http://IP:8080/test/
问:本地能访问tomcat,但服务器上发布成功外部访问不了,是哪里问题?
优先检查两层防火墙:一是云服务商的安全组规则是否放行Tomcat端口(比如8080),二是服务器系统自带的防火墙有没有开放这个端口,都放行后,在服务器本地执行curl http://localhost:8080