引言
Java Web 开发中,Tomcat 是最常用的 Servlet 容器,而项目类型通常分为 Maven 管理(依赖自动处理、多模块聚合) 和 非 Maven 纯手工管理(手动引入 jar 包、配置项目结构)。本文覆盖 两种项目类型 的 Tomcat 部署全流程,从 IDEA 配置到问题排查,手把手教你打通开发到运行的闭环,解决 90% 部署痛点!
一、环境准备(通用基础)
1. 核心环境
- JDK:确保安装
JDK 1.8+
(示例用1.8 Oracle OpenJDK
),通过java -version
验证。 - Tomcat:本地安装
Tomcat 8.5+
(如apache-tomcat-8.5.29
),记住安装目录(后续配置用)。 - IDEA:旗舰版或社区版(社区版需手动配置部分功能,本文以旗舰版为例)。
二、场景 1:Maven 多模块 Java Web 项目部署
1. 项目特征
- 含
pom.xml
,通过 Maven 管理依赖和多模块(如父模块hami_parent
+ 子模块hami_protal
)。 - 构建流程:
clean
→install
自动编译、打包,适合复杂聚合项目。 依次为每个部分添加本地tomcat-server
修改名字,热部署,端口号,jdk都不要填错
这里添加相应的
点击apply ->ok 运行tomcat
(2)Maven 构建:生成 War 包
- 右侧打开 Maven 面板,找到父模块(如
hami_parent [root]
):- 先双击
Lifecycle → clean
(清理旧构建产物)。 - 再双击
Lifecycle → install
(编译代码 → 打包成war
→ 安装到本地仓库)。
- 先双击
- 控制台输出
BUILD SUCCESS
后,检查子模块target
目录,生成xxx.war
和xxx.war exploded
(部署用解压包)。
(3)将生成的war包与jar包一并复制到tomcat的webapps路径下
(4)配置server.xml文件
将下面的代码插入到server.xml文件中,注意这是我们自定义的<Service>,要与 自带的分开,防止嵌套
<Service name="Catalina1"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8083" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8011" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_console-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina2"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8084" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8012" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_file-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina3"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8085" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8013" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_protal-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service>
(5)启动tomcat
发现我们的端口号启动成功:
并且 webapps目录下生成了相应的war,jar包目录,现在我们就可以 url直接访问我们的项目
这就说明部署成功了
三、场景 2:非 Maven Java Web 项目部署(以 BookShop 为例)
1. 项目特征
- 无
pom.xml
,手动管理 jar 包(如commons-codec-1.9.jar
放WEB-INF/lib
)。 - 需手动配置项目结构、依赖、Web 模块,适合简单 Demo 或旧项目迁移。
2. 关键配置步骤
(1)Project Structure 全流程配置
- 打开
File → Project Structure
,按以下标签逐步配置:
① Project 标签(基础环境)
Name
:项目名(如BookShop
)。SDK
:选JDK 1.8
。Language level
:选8 - Lambdas, type annotations
。
② Modules 标签(模块与依赖)
- 选项目模块(如
BookShop
):- Sources:标记
src
为源码目录(蓝色),test
为测试目录(绿色,可选)。 - Dependencies:
- 点击
+ → JARS or directories
,引入WEB-INF/lib
下的所有 jar 包(如commons-codec-1.9.jar
、mysql-connector-java-5.1.5.jar
)。
- 点击
- Sources:标记
③ Facets 标签(Web 模块识别)
- 点击
+ → Web
,关联项目的web.xml
(路径:WebContent/WEB-INF/web.xml
):- 确认
Deployment Descriptors
中web.xml
路径正确。 - 配置
Web Resource Directories
(如WebContent
目录,作为静态资源根路径)。
- 确认
④ Artifacts 标签(部署产物配置)
- 点击
+ → Web Application: Exploded → From Modules...
,选项目模块(如BookShop
):- 生成
BookShop:war exploded
(解压后的 Web 应用目录,用于 Tomcat 部署)。 - 检查
Output Layout
,确保WEB-INF/classes
(编译输出)和WEB-INF/lib
(jar 包)已包含。
- 生成
选中自己的项目
2)Tomcat Server 配置(与 Maven 项目类似)
- 顶部
Run → Edit Configurations
→ 新建Tomcat Server → Local
:- Server 标签:同 Maven 项目(选 Tomcat 目录、JDK、端口)。
- Deployment 标签:
- 点击
+ → Artifact
,选BookShop:war exploded
(非 Maven 项目的解压部署包)。
- 点击
- 热部署:同 Maven 项目(选
Update classes and resources
)。
(3)启动验证
- 启动 Tomcat 后,访问
http://localhost:8085/BookShop/
(路径与Application context
一致),验证页面或接口。
3.将项目部署到tomcat
在idea部署项目之后会产生一个classes文件夹,找到里面的_war_exploded文件夹
复制到tomcat的webapps里
配置server.xml文件
<Service name="Catalina1"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8088" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8010" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="qcby2502_war_exploded" path="/" reloadable="true"/></Host></Engine></Service>
启动tomcat,查看日志 8088端口启动成功
验证:
部署成功了
四、场景 3: 非 Maven Java Web 项目部署(linux)
首先要配置好linux环境:配置云服务器环境(腾讯云为例)_腾讯云服务器配置-CSDN博客
运行linux的工具:
1)将war_exploded文件夹打包进webapps目录并解压
2)配置server.xml
3) 开放配置的端口号(我这里配置的是8087)
云服务器中:
linux系统中:
//添加8087端口规则
sudo iptables -A INPUT -p tcp --dport 8087 -j ACCEPT
//验证规则
sudo iptables -L -n | grep 8087
4)启动tomcat(注意要在bin目录中启动)
5)验证结果 :
部署成功
五、场景 3: Maven Java Web 项目部署(linux)
1)首先我们把生成的jar包,war包传到linux
2)配置server.xml文件(注意端口号和AJP端口不要冲突)
<Service name="Catalina2"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8083" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8014" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_console-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina3"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8084" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8012" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_file-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina4"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8085" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8013" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t "%r" %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_protal-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service>
3)开放端口
4)验证 :
部署成功!
六、总结
- Maven 项目:依赖管理便捷,适合复杂多模块,通过
clean
/install
自动构建,部署流程更标准化。 - 非 Maven 项目:需手动配置依赖和结构,适合简单场景或旧项目,重点关注
Facets
和Artifacts
配置。
无论哪种类型,掌握 Tomcat 热部署 和 Project Structure 核心配置 是关键!遇到问题先检查日志(IDEA 控制台 + Tomcat catalina.out
),结合本文解决方案,部署效率直接拉zhizhi