引言
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