把web工程部署到Tomcat服务器,最关键的一步就是搞清楚你的项目结构,然后按“打包→放到webapps→启动”这三步走,war包和目录拷贝都能跑通。
很多人第一次部署时,把项目文件夹直接丢进webapps,刷新一看全是404,其实Tomcat没你想的那么智能,它只认合法的Web应用结构,下面我从头到尾捋一遍,顺便把那些坑也指出来。
如何把web工程部署到tomcat服务器上:先分清你的工程类型
在动手之前,先看看你手里的是哪种web工程,因为部署方式不太一样。
- 传统动态web工程:有src目录、WebContent或webapp目录,里面带WEB-INF和web.xml,这种最简单,直接打包成war放进去就行。
- Maven工程:结构标准,用
mvn package就能生成war包。 - Spring Boot工程:它内部自带Tomcat,产出的是可执行jar,严格来说不需要外置Tomcat,如果你想部署到独立Tomcat,得改成war包并重写启动类,这属于特殊玩法,后面不展开。
大多数教程讲的都是前两种,下面我按最常见的war部署来说。
把web工程打包成war部署到tomcat的实操细节
webapps目录是Tomcat的“家”
Tomcat的根目录下有个webapps文件夹,它相当于应用仓库,你丢一个war进去,Tomcat启动时会自动解压并运行。
war包的命名很关键,因为它直接决定访问路径,比如你打包成myweb.war,部署后访问地址就是http://localhost:8080/myweb/,如果你想让项目直接跑在根路径,不用加项目名,那就把war包命名为ROOT.war。
用Maven打包war包
如果你的工程是Maven项目,在pom.xml里确认打包方式:
<packaging>war</packaging>
然后在项目根目录执行:
mvn clean package
命令跑完后,war包出现在target目录下,把这个war文件复制到Tomcat的webapps文件夹里,搞定。
用Eclipse或IDEA导出war包
Eclipse中右键项目→导出→选择WAR file,填好目标路径,点完成,IDEA里更简单,在Artifacts里配置好war包,然后Build→Build Artifacts,war包就在out目录下。
启动Tomcat并验证
Windows下运行bin/startup.bat,Linux或macOS下运行bin/startup.sh,看到“Server startup in xxx ms”的日志就说明成功了,浏览器访问http://localhost:8080/项目名/首页路径。
直接把web工程目录复制到webapps行不行两种方式对比
其实Tomcat也支持不打包,直接把整个项目目录丢进webapps,但这种做法有个前提:目录结构必须合法。
比如你的项目是myweb文件夹,里面必须包含:
WEB-INF/web.xmlWEB-INF/classes(编译后的class文件)- 静态资源(HTML、CSS、JS等)
如果结构不对,Tomcat会识别不出来,访问时还是404,我用一张表对比一下两种方式的适用场景:
| 部署方式 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| war包部署 | 标准规范,迁移方便,不会漏文件 | 每次修改要重新打包 | 正式环境、上线部署 |
| 目录直接拷贝 | 改完立刻生效,省去打包时间 | 容易残留多余文件,结构易出错 | 本机调试、临时演示 |
行业共识认为,生产环境老老实实用war包,目录拷贝只适合开发时图省事。
IDEA部署web工程到tomcat的另一种常见做法
很多人在IDE里开发时,不会手动去复制war包,而是借助IDEA的Tomcat集成功能。
具体路径是:Run菜单→Edit Configurations→点加号→选择Tomcat Server→Local,在Deployment页签里点击加号,选Artifact,IDEA会自动把工程部署到Tomcat的webapps下,这种方式其实是IDE帮你做了拷贝和解压,本质上跟手动放war包没区别。
这里有个细节值得注意:IDEA默认会生成一个带_war_exploded后缀的路径,如果你访问时出现奇怪的路径,去Deployment里把Application context改成或者你想要的项目名,否则每次访问都得带一串很长的URL。
部署后访问404?从这几个地方排查
部署遇到404太常见了,多数情况不是代码问题,而是路径或端口的问题,按照下面顺序查,基本能找到原因。
端口被占用
Tomcat默认端口是8080,如果你已经开了其他服务占用了8080,Tomcat会启动失败,修改方式:打开conf/server.xml,找到<Connector port="8080",改成别的端口,比如8081。
项目路径写错
访问地址里的项目名必须和war包文件名一致,如果你打包成demo.war,却访问localhost:8080/demo1/,那必然404。
缺web.xml或Servlet映射错误
老项目如果web.xml里的<servlet-mapping>配置不对,也会导致404,比如你写了个Servlet,映射路径是/hello,就得访问/项目名/hello,多一层少一层都不行。
字符乱码问题
部分中文环境部署后页面乱码,多半是Tomcat默认编码UTF-8和工程编码不匹配,可以在server.xml的Connector里加一句URIEncoding="UTF-8"。
本地Tomcat和云服务器部署的区别
经常有人问“部署到tomcat服务器要多少钱”,这里分两种情况。
- 本地电脑装Tomcat:完全免费,Tomcat是Apache开源项目,从官网下载解压就能用。
- 云服务器部署:成本取决于云厂商的实例配置,低配的VPS一年也就几百块,简米云、酷番云的新人机经常有优惠,无论哪种,Tomcat本身不收钱。
本地部署和云服务器部署在操作上没有本质区别,都是把war包放到webapps,唯一不同的是云服务器还要考虑安全组规则,得在控制台里开放8080端口,否则外部访问不了。
如果你用的是云服务器,还要注意系统防火墙,比如酷番云轻量服务器默认防火墙没开8080,你得上控制台添加一条规则。
web工程部署到tomcat的完整流程清单
最后给你一张速查清单,照着做就行:
- 确认项目结构完整,存在WEB-INF/web.xml
- 执行
mvn clean package生成war包 - 停止Tomcat(如果正在运行)
- 把war包复制到
webapps目录 - 启动Tomcat(
startup.sh或startup.bat) - 查看日志确认没有异常
- 浏览器访问
http://localhost:8080/项目名/
如果是更新部署,建议先停止Tomcat,删除旧的解压目录,再放入新war包,避免旧文件残留,业界有个常用说法:保留war包,让Tomcat自动解压,但旧目录最好删掉重来。
常见问题答疑:部署到tomcat的Web工程如何修改配置
我想换个端口部署,具体改哪里?
打开conf/server.xml,找到Connector节点,把port属性改成你要的端口,比如port="80",这样访问时就不用带端口号了,改完记得重启Tomcat。
war包已经放进去,但访问还是老的版本?
浏览器缓存或者Tomcat没有重新加载,先强制刷新浏览器(Ctrl+F5),如果还不行,停掉Tomcat,删除webapps下对应项目的解压文件夹,再重新启动,有时候IDE的热部署也会导致旧class残留,最好Clean一下再重启。
Tomcat启动一闪而过,没看到日志窗口?
Windows下双击startup.bat会闪退,最常见原因是JDK环境变量没配好,在命令行里手动运行startup.bat,就能看到具体报错,也有可能是端口冲突,Linux下可以看logs/catalina.out日志文件。
部署这事说破天就是文件拷贝加路径配置,多试几次就会了,war包放对目录,端口不冲突,路径别带多余后缀,你的web工程就能安安稳稳跑在Tomcat上。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/772809.html

