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

引言

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端口啟動成功

驗證:

?

部署成功了

四、總結

  • Maven 項目:依賴管理便捷,適合復雜多模塊,通過?clean/install?自動構建,部署流程更標準化。
  • 非 Maven 項目:需手動配置依賴和結構,適合簡單場景或舊項目,重點關注?Facets?和?Artifacts?配置。

無論哪種類型,掌握?Tomcat 熱部署?和?Project Structure 核心配置?是關鍵!遇到問題先檢查日志(IDEA 控制臺 + Tomcat?catalina.out),結合本文解決方案,部署效率直接拉滿~

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

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

相關文章

當建筑學會“行走”:MiC建筑如何重塑醫療空間

當塔吊林立的工地被智能化工廠取代&#xff0c;當混凝土現澆的轟鳴被精密模塊的無聲拼接覆蓋&#xff0c;建筑行業正經歷著自鋼筋混凝土革命以來最深刻的范式轉移。模塊化集成建筑&#xff08;MiC&#xff09;技術&#xff0c;這場以“制造組裝”為核心的新型工業化浪潮&#x…

計算機網絡八股第二期

計算機網絡八股第二期 1.講一講從輸入網址到網頁顯示之間發生了什么&#xff08;從網絡的角度&#xff09; 想想一下你從網店買一本書&#xff0c;從輸入網址到網頁顯示其實和你從網店買一本書差不多&#xff0c;網店發給你的是實體而網絡傳輸的是文字&#xff0c;圖片等等資…

FPGA基礎 -- Verilog 的值變轉儲文件(VCD:Value Change Dump)

Verilog 的“值變轉儲文件&#xff08;VCD&#xff1a;Value Change Dump&#xff09;”&#xff0c;這是一項在仿真調試中至關重要的技術&#xff0c;可以幫助你“看見”RTL中每個信號隨時間的變化過程。 一、什么是 Verilog 的值變轉儲文件&#xff08;VCD&#xff09; VCD …

流水燈芯片74HC138 → 74HC164 → 74HC595核心功能、引腳作用及芯片定位

一、74HC138&#xff1a;精準的“8選1開關” 核心作用 用3根控制線&#xff08;A0-A2&#xff09;實現8路嚴格單選&#xff0c;同一時刻僅1路輸出低電平&#xff08;其他7路高電平&#xff09;。 &#x1f4cc; 本質&#xff1a;二進制地址譯碼器&#xff0c;不是數據寄存器。…

鴻蒙Next倉頡語言開發實戰教程:懶加載

今天要分享的是倉頡開發語言中的懶加載。 先和初學者朋友們解釋一下什么是懶加載。懶加載在代碼中叫做LazyForEach&#xff0c;看到名字你一定能猜到它和ForEach的功能類似。只不過和ForEach的一次性加載所有數據不同&#xff0c;懶加載會根據屏幕可使區域按需加載數據&#x…

Linux 內核同步管理全解:原理 + 實戰 + 考點

&#x1f525; 推薦&#xff1a;《Yocto項目實戰教程&#xff1a;高效定制嵌入式Linux系統》 京東正版促銷&#xff0c;歡迎支持原創&#xff01; 鏈接&#xff1a;https://item.jd.com/15020438.html 一、為什么需要同步機制&#xff1f; Linux 是一個支持 多核并發 搶占式調…

效果成本雙突破!快手提出端到端生成式推薦系統OneRec!

近日&#xff0c;快手推薦模型團隊提出了一個端到端生成式推薦系統OneRec&#xff0c;該系統采用Encoder-Decoder架構&#xff0c;引入了基于獎勵機制的偏好對齊方法&#xff0c;借助強化學習增強模型效果&#xff0c;可在獎勵模型引導下直接生成契合用戶偏好的視頻內容。通過極…

flex布局 項目屬性

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 項目屬性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…

SpringBoot擴展——應用Web Service!

應用Web Service Web Service是一個SOA&#xff08;面向服務的編程&#xff09;架構&#xff0c;這種架構不依賴于語言&#xff0c;不依賴于平臺&#xff0c;可以在不同的語言之間相互調用&#xff0c;通過Internet實現基于HTTP的網絡應用間的交互調用。Web Service是一個可以…

EasyExcel學習筆記

EasyExcel學習 一、EasyExcel簡介 一、EasyExcel是什么 EasyExcel是一個基于Java的簡單、省內存的讀寫Excel的阿里開源項目。在盡可能節約內存的情況下支持讀寫百M的Excel。 官網&#xff1a;https://easyexcel.opensource.alibaba.com/ 學習Easyexcel前需要了解導入和導出…

day4課程

1整體認識和路由配置 2二級分類面包屑導航實現 3基礎商品列表渲染 4列表篩選功能實現 5列表無限加載功能實現 6定制路由滾動行為 7詳情頁整體認識和路由配置 8詳情頁基礎數據渲染 9詳情頁基礎組件封裝和數據渲染 10適配不同title和數據列表 11小圖切換大圖 12滑塊跟隨鼠標移動 …

kubeadm worker節點加入master失敗

文章目錄 1、操作2、問題現象3、問題原因4、問題解決4.1、重新生成token4.2、重新生成hash值 5、驗證 1、操作 執行以下命令&#xff0c;讓worker節點加入到master節點 kubeadm join 103.123.222.241:6443 --token vxe3v1.wzpnks8v1vbbtsu0 --discovery-token-ca-cert-hash s…

二十二、【用戶管理與權限 - 篇四】后端權限定義:模型與 API 實現

【用戶管理與權限 - 篇四】后端權限定義:模型與 API 實現 前言準備工作第一部分:設計并創建 `Permission` 模型第二部分:更新 `Role` 模型以關聯 `Permission`第三部分:生成并應用數據庫遷移第四部分:創建 Serializers第五部分:創建 ViewSets第六部分:注冊 API 路由第七…

猜數字小游戲微信流量主小程序開源

這個智力小游戲采用了數字華容道的玩法&#xff0c;玩家需要通過移動數字方塊&#xff0c;將數字按順序排列完成游戲。代碼嚴格遵循微信小程序的目錄結構&#xff0c;包含以下部分&#xff1a; 完整的小程序配置文件&#xff08;app.js、app.json、app.wxss&#xff09; 游戲頁…

探秘阿里云EBS存儲:云計算的存儲基石

一、引言 在云計算時代&#xff0c;數據如同企業的生命線&#xff0c;數據存儲的重要性不言而喻。隨著企業數字化轉型的加速&#xff0c;海量數據的存儲與高效管理成為亟待解決的問題。云存儲以其卓越的靈活性、可擴展性和成本效益&#xff0c;逐漸成為眾多企業的首選方案。在…

音視頻之H.264的可伸縮編碼SVC

系列文章&#xff1a; 1、音視頻之視頻壓縮技術及數字視頻綜述 2、音視頻之視頻壓縮編碼的基本原理 3、音視頻之H.264/AVC編碼器原理 4、音視頻之H.264的句法和語義 5、音視頻之H.264/AVC解碼器的原理和實現 6、音視頻之H.264視頻編碼傳輸及其在移動通信中的應用 7、音視…

Anaconda安裝env,yml一直卡在Solving environment:不動

如果在使用conda env creat -f env.yml時候&#xff0c;anaconda一直卡住&#xff0c;如下 可以嘗試下面操作。 conda config --set solver libmamba # 使用libmamba引擎&#xff08;Conda≥22.11&#xff09; conda env create -f env.yaml # 重新嘗試

榕壹云婚戀相親系統:ThinkPHP+UniApp打造高效婚配平臺

引言 在數字化浪潮下,婚戀相親行業正加速向線上遷移。榕壹云公司基于市場需求與技術積累,開發一款功能完備、技術開源的婚戀相親小程序系統,為單身人士提供高效、安全的婚戀平臺。本文將圍繞系統背景、客戶定位、核心技術、功能模塊及優勢場景展開詳細解析,助力開發者與技…

查詢docker-compose 部署的milvus 請求日志

在 Docker Compose 部署的 Milvus 中,日志默認存儲在各個服務的容器內。以下是定位和查詢日志的方法: 1. 查看實時日志 使用 docker-compose logs 命令查看實時日志: bash # 查看所有服務的日志 docker-compose logs -f# 僅查看 Milvus 服務日志(服務名以 docker-compos…

Rsync實操

Rsync實操 一.rsync命令 #類似于cp[rootuser2 ~]# rsync info.sh root192.168.168.130:/rootroot192.168.168.130s password: [rootuser1 ~]# lsanaconda-ks.cfg ceph-release-1-1.el7.noarch.rpm info.sh 二、使用rsync備份push方式 服務器&#xff1a;server 192.168.168…