怎么把java项目部署到tomcat服务器,部署后访问404怎么办?

把Java项目部署到Tomcat服务器,流程核心就三步:把项目打包成WAR包、把WAR包放进Tomcat的webapps目录、启动Tomcat让它自动解压运行。

无论你是刚学JavaWeb的学生,还是第一次负责上线功能的在职开发,整个部署过程都围绕这三个动作展开,下面我按实际操作的先后顺序,把每一步涉及的坑和细节都拆开讲清楚。

javaweb tomcat 404问题解决
加载中
javaweb tomcat 404问题解决
P
PyduckGo-计算机分享
1406--
原视频地址

java项目部署tomcat服务器步骤详解

部署前的准备工作:确认JDK与Tomcat版本匹配

动手拷贝文件之前,先确认机器上的基础环境,Tomcat本身是一个Servlet容器,它跑在JDK之上,如果JDK没装好,后面所有操作都会报错。

  • 检查JDK版本:在命令行输入java -version,确认显示1.8或更高版本,Tomcat 9及以下版本对JDK8支持最好,Tomcat 10以上版本对最新JDK的兼容性更友好,但大部分老项目还在用JDK8。
  • 确认JAVA_HOME环境变量:在Linux上执行echo $JAVA_HOME,在Windows上执行echo %JAVA_HOME%,如果输出为空,需要先配置环境变量,否则Tomcat启动脚本会提示找不到Java路径。
  • 下载Tomcat:官网下载核心发行版压缩包,Windows用户选.zip格式,Linux用户选.tar.gz格式,解压后目录结构要熟悉,重点记住三个目录:bin存放启动关闭脚本,conf存放端口和用户配置,webapps就是部署项目的落脚点。

打包Java项目为WAR包

Tomcat直接运行的是打包后的Web应用结构,最常用的打包格式是WAR包,WAR包本质上是一个压缩文件,里面包含项目的class文件、JSP页面、依赖的jar包以及web.xml配置文件。

如果你用Maven管理项目,打包操作很简单,在项目根目录执行:

mvn clean package

命令执行完毕后,在target目录下会生成.war文件,如果你用IDEA开发,右侧Maven工具面板里双击package也能达到同样效果。

打包过程中最常见的错误是测试用例失败导致打包中断,可以在打包命令后加-DskipTests跳过测试。

将WAR包放入Tomcat的webapps目录

这一步的操作逻辑很简单:把target目录下的.war文件复制到Tomcat的webapps目录下。

但有几个细节值得留意:

  • 停止正在运行的Tomcat:覆盖部署时,如果Tomcat正在运行,最好先执行shutdown.sh(Linux)或shutdown.bat(Windows)停掉服务,再替换文件,否则可能出现文件被占用或解压不完全的情况。
  • WAR包命名决定访问路径:访问一个部署到Tomcat的应用,URL格式是http://IP:端口/应用名/,应用名默认就是WAR包的文件名,比如你把包命名为blog.war,访问地址就是http://localhost:8080/blog/,想要通过根路径直接访问项目,可以把WAR包改名为ROOT.war。
  • WAR包会自动解压:Tomcat启动后会自动解压WAR包,生成一个同名的文件夹,如果解压过程中报错,优先看logs目录下的日志文件。

springboot项目部署tomcat详细教程:内嵌容器还是外置容器

近几年新项目普遍用SpringBoot开发,部署方式与传统SSH项目有所不同,SpringBoot默认内置了Tomcat,所以涉及一个选择问题,常见的部署方案有两种。

打成WAR包部署到外部Tomcat

这种方式的优点是便于用传统运维手段管理,适合公司内部有统一Tomcat集群环境的情况,操作步骤与上文基本一致,但需要额外修改三处代码:

  • 启动类继承SpringBootServletInitializer并重写configure方法
  • pom.xml中把spring-boot-starter-tomcat依赖的scope改为provided,避免和外部Tomcat冲突
  • 打包时使用war包类型

命令仍然是mvn clean package,生成的WAR包丢进Tomcat的webapps目录即可。

直接用内置Tomcat运行

SpringBoot项目可以用mvn spring-boot:run直接启动,也可以打成JAR包后用java -jar app.jar运行,项目启动时会自动拉起内置的Tomcat服务,不需要单独安装任何容器。

这种方式在DevOps场景和微服务架构中使用更广泛,因为不需要额外维护一套Tomcat环境,部署成本更低,也更容易和Docker、Kubernetes配合使用。

两种部署方式的优劣势对比

对比维度 外部Tomcat部署 内置Tomcat运行
部署步骤 需要额外安装配置Tomcat 直接运行JAR包,步骤简洁
传统项目兼容性 好 一般
运维管理 可复用已有Tomcat集群 需要重新梳理监控部署方式
上线速度 相对较慢 快
适用场景 老项目改造、统一容器管理 新项目、微服务架构

行业共识认为,如果是新启动的项目,优先考虑内置Tomcat的方式会省去很多运维工作量,也便于后续容器化改造,毕竟多一层Tomcat就多一个需要维护的点。

tomcat部署java项目常见问题排查

实际部署过程中,一次成功的情况其实并不多见,大多数情况是需要反复调试的,把高频问题汇总一下,遇到时按这个顺序排查。

页面报404错误

404是部署最常见的报错,先确认访问的路径是否正确,webapps目录下有没有对应的文件夹或WAR包,再看Tomcat启动日志里有没有报错信息,如果项目引用了额外的依赖jar包,确认它们是否都放在WEB-INF/lib目录下。

启动时报端口被占用

Tomcat默认端口是8080,如果机器上已有其他服务占用了这个端口,启动会直接失败,Linux下用netstat -tlnp | grep 8080查看占用情况,Windows下用netstat -ano | findstr 8080,不想冲突就改Tomcat的conf/server.xml端口配置,把<Connector port="8080"改成其他未被占用的端口。

内存溢出OutOfMemoryError

项目体量较大,或者并发量上来后,Tomcat默认的内存设置可能不够用,报错日志往往会看到java.lang.OutOfMemoryError,解决方法是在Tomcat的bin目录下新建setenv.sh(Linux)或setenv.bat(Windows),写入JVM参数配置,常见组合是:

-Xms512m -Xmx1024m -XX:MaxPermSize=256m

调整后重启Tomcat即可生效。

linux服务器部署java项目tomcat的具体操作流程

大多数生产环境跑在Linux服务器上,在这上面部署比Windows多几个步骤需要注意。

先上传WAR包到服务器任意目录,然后执行以下操作:

  1. 解压或直接移动:执行mv app.war /opt/tomcat/webapps/
  2. 给目录配置权限:Tomcat运行用户如果不是root,需要确认webapps目录有读写权限,执行chown -R tomcat:tomcat /opt/tomcat/
  3. 启动Tomcat:切到bin目录,执行./startup.sh
  4. 查看启动日志:用tail -f ../logs/catalina.out监控启动情况,看到Server startup in字样说明启动成功
  5. 确认防火墙放行端口:云服务器需要同时在安全组和本机防火墙放通8080或你自定义的端口

有几点容易踩坑,比如直接用root运行Tomcat虽然省事,但不太安全,被攻击后风险更高,建议用专用用户运行。

另一个常见问题是会话保持,如果部署了多个Tomcat节点做负载均衡,需要配置会话共享,否则用户登录状态会在节点间跳转时丢失。

部署方式怎么选:结合项目实际情况做决策

部署这个动作本身没有绝对的标准答案,关键看项目所处的场景。

如果是学习项目或内部演示系统,用WAR包部署到本地Tomcat即可,直观能看到效果,调试也方便。

如果是生产环境老项目,重点考虑平滑升级,每次发版前备份旧的WAR包,发布失败时可以快速回滚。

如果是微服务架构的新项目,跳过外部Tomcat部署,直接打JAR包配合容器平台发布。

不管选哪种方式,发布流程里都应该包含日志检查和回滚预案这两步,发布结束不代表事情做完了,观察几分钟日志和接口监控,确认系统状态正常才算真正完成。

java项目部署tomcat服务器有哪些坑

给新手几条具体的避坑建议:

  • WAR包不要用中文命名,Tomcat对特殊字符和中文路径处理容易出问题
  • 修改端口号时,确认server.xml中三处端口都改了,除了HTTP连接器端口,还有AJP端口和关闭端口,如果存在冲突,改一遍不如彻底改干净
  • webapps下同名文件夹残留会导致新包不生效,覆盖部署时先删除旧解压目录再放新包
  • 不要用杀毒软件扫描Tomcat目录,这会造成启动性能下降

部署Java项目到Tomcat之所以让很多人觉得繁琐,核心原因在于把不同环节的知识点混在一起了,把JDK环境、打包方式、目录结构、日志排查这几件事分开理解,整个流程自然脉络清晰,动手做一遍,比看十篇教程更靠谱。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/795174.html

赞 (0)
上一篇 2026年11月13日 08:54
下一篇 2026年11月13日 08:55

相关推荐

  • 感易智能校招金融工程师待遇好吗?2026年金融工程师薪资水平

    感易智能2026年校园招聘金融工程师岗位,核心要求具备扎实的量化建模能力与Python编程基础,薪资范围通常在月薪15k-25k之间,主要面向2026届海内外优秀毕业生,工作地点集中在北京、上海及深圳等一线城市,感易智能金融工程师岗位深度解析岗位核心职责与技能画像感易智能作为一家深耕金融科技领域的创新企业,其金……

    2026年5月28日
    3700
  • lol无法连接到服务器是怎么回事,怎么解决?

    lol无法连接到服务器,核心原因集中在本地网络链路、客户端文件状态和游戏服务器状态三方面,其中绝大多数情况下属于玩家本地网络与服务器之间的连接中断,直接重启路由器并进入游戏目录修复客户端,即可解决七成以上的连接失败问题,lol连接服务器失败的主要原因很多玩家遇到lol无法连接到服务器的情况时,第一反应是官方服务……

    程序编程 2026年11月13日
    200
  • 合肥服务器租用前必须确认哪些机房参数?,机房参数怎么选?

    合肥服务器租用前,必须确认机房带宽大小、峰值保障、电力冗余、BGP线路质量、IP数量及售后服务响应速度,这些参数直接决定了服务器实际使用体验和成本可控性,合肥服务器租用前必须确认的机房参数:电力与带宽的硬指标机房参数中,电力稳定性和带宽质量是决定服务器能否长期稳定运行的基础,很多人在租用服务器时只看配置和价格……

    2026年8月11日
    1700
  • 集群准入与网络策略如何协同治理,k8s网络策略怎么配置

    集群准入与网络策略的协同治理,本质上是把“谁能进”和“能去哪”绑定成一套完整的安全决策链先说结论:集群准入与网络策略的协同治理,是在容器编排环境里构建纵深防御体系的必经之路,前者管“门禁、验身份”,后者管“内部活动范围授权”,二者单独做都有明显盲区,必须联动才能把业务风险压到可接受水平,这个结论不是拍脑袋,业内……

    2026年9月10日
    500
  • ASP.NET发布如何正确操作?详细步骤与常见问题解决

    ASP.NET发布是开发人员将ASP.NET应用程序从开发环境迁移到生产服务器,确保应用安全、高效运行的关键过程,它涉及编译代码、配置服务器和优化性能,最终实现用户访问,无论使用ASP.NET Framework还是ASP.NET Core,正确发布能提升应用稳定性、安全性和用户体验,避免常见部署故障,理解AS……

    2026年2月13日
    11630
  • QQ视频上传服务器失败是怎么回事,怎么解决?

    qq视频上传服务器失败,绝大多数情况是网络连接不稳定、视频文件超过平台限制,或者手机存储空间不足导致上传进程被系统中断,这个问题在微信、抖音等平台很少出现,但在QQ上反而常见,因为QQ视频上传链路更长,涉及本地转码、文件校验、服务器接收三个环节,任何一个环节卡住都会报“上传失败”,下面按排查优先级说明真正原因和……

    2026年10月20日
    1000
  • 深圳云渲染GPU服务器租用注意什么,怎么选配置?

    深圳云渲染GPU服务器租用,核心要盯紧显卡型号、显存带宽、租用模式和数据安全这四个维度,其中显卡直接决定渲染速度,而租用模式和灾备方案则决定你的成本与项目安全,很多团队初期容易陷入只看“多少钱一张卡”的误区,结果项目渲染到一半,不是爆显存就是被限速,最后算下来综合成本反而更高,这篇文章就从实际部署角度,拆解在深……

    2026年10月9日
    500
  • 如何在ajax中添加js代码?ajax请求成功后执行js

    通过Ajax动态加载JS文件不仅能显著减少首屏渲染时间,还能实现按需加载,是现代前端开发中优化性能的关键手段,在传统的网页开发模式中,JavaScript文件通常被放置在HTML的头部或尾部,导致浏览器必须下载并解析所有脚本才能继续渲染页面,这种做法在资源较少时或许无伤大雅,但当项目复杂度提升,脚本体积庞大时……

    2026年5月31日
    4900
  • 视频播控服务器s3全切节目如何设置,设置步骤是什么

    视频播控服务器S3设置全切节目,核心在于将输出画布与节目源分辨率匹配为全屏模式,并启用无缝切换协议,确保多机同步时画面无黑场、无撕裂,全切节目在大型演出、舞台晚会中直接决定观众视觉体验,许多操作者刚接触时容易忽略同步与时序设置,视频播控服务器S3怎么设置全切节目设置全切节目需要分三个环节:输出配置、节目源设置……

    2026年8月12日
    1000
  • AJAX消息清除怎么做?如何彻底删除聊天记录

    AJAX消息清除的核心在于通过JavaScript精准定位DOM节点并移除或重置,而非简单刷新页面,这能显著提升用户体验并减少服务器负载,在现代Web开发中,用户与页面的交互不再局限于传统的整页刷新,当用户点击“发送”或“提交”按钮时,后台数据通过异步请求传输,前端则负责动态更新界面,如果处理不当,旧的消息残留……

    2026年5月31日
    4600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注