IDEA 中 Tomcat 部署 Java Web 項目(Maven 多模塊 非 Maven 通用版)(linux+windows)

引言

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 &quot;%r&quot; %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 &quot;%r&quot; %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 &quot;%r&quot; %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.jarmysql-connector-java-5.1.5.jar)。
③ 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 &quot;%r&quot; %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 &quot;%r&quot; %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 &quot;%r&quot; %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 &quot;%r&quot; %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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/910077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/910077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/910077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 React Native Web 實現三端統一開發

使用 React Native Web 實現三端統一開發 關鍵點 React Native Web 簡介&#xff1a;React Native Web 是一個允許開發者使用 React Native 組件和 API 構建 Web 應用的庫&#xff0c;支持在 iOS、Android 和 Web 上使用同一套代碼。架構&#xff1a;通過 React DOM 渲染 Rea…

分享一個git上基于std::array實現的循環隊列(Cycle Queue)模板類庫

為充分利用向量空間,克服“假溢出”現象的方法是:將向量空間想象為一個首尾相接的圓環,并稱這種向量為循環向量。存儲在其中的隊列稱為循環隊列(Circular Queue)。循環隊列是把順序隊列首尾相連,把存儲隊列元素的表從邏輯上看成一個環,成為循環隊列。 網上有很多關于循…

三維視頻融合平臺:如何構建動態感知的數字空間

分享大綱&#xff1a; 你的三維平臺為何不能承載動態視頻捷碼打造三維視頻融合平臺的三步法則為何選擇捷碼 在智慧城市建設過程中&#xff0c;將實時視頻與三維空間結合&#xff0c;已經成為一種主流趨勢。傳統視頻監控模式&#xff0c;經常面臨視頻分散、操作復雜等問題。然而…

【AI Study】第五天,Matplotlib(5)- 顏色映射

文章概要 本文詳細介紹 Matplotlib 的顏色映射功能&#xff0c;包括&#xff1a; 顏色映射類型顏色映射設置數據標準化顏色條 顏色映射類型 pcolormesh import matplotlib.pyplot as plt import numpy as np# 創建網格數據 x np.linspace(-3, 3, 100) y np.linspace(-3,…

DB2中合理使用INCLUDE關鍵字創建索引

DB2中合理使用 INCLUDE 關鍵字創建索引 1. 為何還需要 INCLUDE&#xff1f;——從索引的兩大痛點說起 查詢想“只讀索引不回表”&#xff0c;卻又不想把列都做鍵 → 聯合索引空間膨脹&#xff0c;更新放大。唯一索引定位快&#xff0c;但只能返回鍵列數據 → 仍需 I/O 跳回數據…

基于Spring Boot的民宿管理系統設計與實現

目錄 一.&#x1f981;前言二.&#x1f981;開源代碼與組件使用情況說明三.&#x1f981;核心功能1. ?算法設計2. ?Spring Boot框架3. ?Vue.js框架4. ?部署項目 四.&#x1f981;演示效果1. 管理員模塊1.1 瀏覽后臺首頁1.2 預訂信息管理1.3 入住信息管理1.4 退房信息管理1.…

大數據系統架構實踐(一):Zookeeper集群部署

大數據系統架構實踐&#xff08;一&#xff09;&#xff1a;Zookeeper集群部署 文章目錄 大數據系統架構實踐&#xff08;一&#xff09;&#xff1a;Zookeeper集群部署一、Zookeeper簡介二、部署前準備三、部署Zookeeper集群1. 下載并解壓安裝包2. 配置zoo.cfg3. 設置日志目錄…

《道德經》:探尋古老智慧中的哲學之光

我強烈推薦4本可以改變命運的經典著作&#xff1a; 《壽康寶鑒》在線閱讀白話文《欲海回狂》在線閱讀白話文《陰律無情》在線閱讀白話文《了凡四訓》在線閱讀白話文 《道德經》作為道家經典&#xff0c;短短五千言&#xff0c;卻字字珠璣&#xff0c;蘊含著超越時空的哲學智慧。…

科技賦能民生:中建海龍為民生改善注入新動力

在社會發展的進程中&#xff0c;民生改善始終占據著核心地位。住房、基礎設施建設等民生領域的進步&#xff0c;直接關系到民眾的生活質量與幸福感。中建海龍科技有限公司&#xff08;以下簡稱“中建海龍”&#xff09;作為建筑行業的創新引領者&#xff0c;憑借其強大的科技實…

BI 賦能,打造數據可視化看板新體驗

BI 賦能&#xff0c;打造數據可視化看板新體驗 引言 在當今數字化時代&#xff0c;數據成為企業決策的重要依據。如何從海量的數據中提取有價值的信息&#xff0c;并以直觀、易懂的方式呈現出來&#xff0c;是企業面臨的重要挑戰。商業智能&#xff08;BI&#xff09;工具的出…

vue2設置自定義域名跳轉

需求&#xff1a;首次登錄域名為aa.com&#xff0c;之后登錄系統后在系統內某個模塊設置三級域名為second&#xff0c;之后退出登錄到aa.com,登錄進入系統后域名自動變為second.aa.com&#xff0c;最后退出的域名也是second.aa.com&#xff0c;通過不同的域名配置動態的登錄頁面…

“地標界愛馬仕”再拓疆域:世酒中菜聯袂赤水金釵石斛定義中國GI

“地標界愛馬仕”再拓疆域&#xff1a;世酒中菜聯袂赤水金釵石斛&#xff0c;定義中國GI奢侈品新高度 ——中世國際與貴州斛滿多戰略合作簽約儀式在赤水舉行 赤水市&#xff0c;2025年5月18日——被譽為“地標界愛馬仕”的頂級奢侈品牌世酒中菜 &#xff08;世界酒中國菜全球…

零基礎、大白話,Vue3全篇通俗療法(上):基礎知識【看得懂】

前言 最近有個小朋友想了解Vue前端技術&#xff0c;但他只懂一些HTML基礎&#xff0c;讓我用最簡單的方式講解。于是就有了這篇面向初學者的博文。 老手請繞行&#xff0c;本文專為新手準備。如果發現用詞不當的地方歡迎留言指正&#xff0c;覺得對新手有幫助的話請收藏點贊。 …

JavaScript性能優化實戰

JavaScript性能優化實戰技術文章大綱 性能優化的重要性 解釋為什么性能優化對用戶體驗和業務指標至關重要討論核心Web指標&#xff08;LCP、FID、CLS&#xff09;與JavaScript性能的關系 代碼層面優化 減少DOM操作&#xff0c;使用文檔片段或虛擬DOM避免頻繁的重繪和回流&a…

考研英語作文評分標準專業批改

考研英語作文專業批改經過官方評分標準嚴格對標&#xff0c;徹底改變你的作文提升方式&#xff0c;打開 懂試帝小程序 直達批改。 &#x1f3af; 批改服務核心優勢 ? 官方標準嚴格對標 完全按照考研英語官方五檔評分制&#xff0c;從內容完整性、組織連貫性、語言多樣性到語…

智能群躍小助手發布說明

1.初次登陸需要授權碼 2.社群維護頁面 3.產品營銷頁面

SAM2論文解讀-既實現了視頻的分割一切,又比圖像的分割一切SAM更快更好

code&#xff1a;https://github.com/facebookresearch/sam2/tree/main demo:https://sam2.metademolab.com/ paper:https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/ 這是SAM 這是SAM2 Facebook出品&#xff0c;繼SAM在圖像上分割…

WPF 的RenderTransform使圖標旋轉180°

只是記錄一下思想&#xff1a; 本來想找兩個對稱的圖標給按鈕用&#xff0c;但是另一個找不到&#xff0c;就想到可不可以旋轉180實現另一個圖標的效果&#xff0c;問了一下DeepSeek&#xff1a; <Path Width"30" Height"30" Margin"1"Data…

Matplotlib 繪圖庫使用技巧介紹

目錄 前言 Matplotlib 簡介 快速入門 圖形結構解剖 常用繪圖函數 子圖與布局 單行多列子圖&#xff1a; 網格布局&#xff1a; 自定義位置&#xff1a; 樣式與標注 中文字體與科學計數 圖例、網格、坐標軸 動態圖與動畫 三維繪圖 常見問題與技巧 前言 Matplotli…

【Java基礎算法】1.相向指針練習

??博客主頁:程序員葵安 ??感謝大家點贊????收藏?評論??? 一、兩數之和 Ⅱ(167) 1.1 題目介紹 給你一個下標從 1 開始的整數數組 numbers ,該數組已按 非遞減順序排列 ,請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 nu…