Spring 項目 基于 Tomcat容器進行部署

文章目錄

    • 一、前置知識
    • 二、本地Idea運行Spring項目
      • 1. 將寫好的 Spring 項目先打包成 war 包
      • 2. 查看項目工件(Artifact)是否存在
      • 3. 配置 Tomcat
        • 3.1 添加一個本地 Tomcat 容器
        • 3.2 將項目部署到 Tomcat
      • 4. 運行項目
    • 三、基于 Tomcat 部署及多實例部署
      • 1. Spring 項目 WAR 包的部署方式
        • 1.1 直接放到 Tomcat 的 `webapps` 目錄
        • 1.2 通過 Tomcat Manager 部署
        • 1.3 自定義部署路徑(不放在 `webapps` 下)
      • 2. 部署多個相同版本的 Tomcat
        • 2.1 復制多份 Tomcat 實現獨立部署
        • 2.2 使用多實例配置(共享 Tomcat 核心文件)
        • 2.3 使用 Docker 部署多個 Tomcat

盡管市場上許多新項目都已經轉向 Spring Boot,但對于一些老舊的 Spring 項目,尤其是維護期較長、涉及多個業務的系統,依然需要開發者掌握如何將這些項目正確地部署到 Tomcat 容器中。因此,撰寫這篇文章的目的就是為了幫助開發者和運維人員能夠在面對老的 Spring 項目時,快速而準確地完成部署任務。

一、前置知識

在傳統的 Java Web 項目中,靜態資源(如 HTML/CSS/JS/圖片等)通常存放在項目的 webapp 目錄下。Tomcat 作為常用的 Servlet 容器,會將 webapp 目錄作為默認的 Web 應用根目錄,并會直接暴露其中的靜態文件。

  • 默認行為
    如果在 webapp 目錄中存放了資源(例如 webapp/images/logo.png),則可以通過以下 URL 直接訪問:

    http://localhost:8080/images/logo.png
    

二、本地Idea運行Spring項目

1. 將寫好的 Spring 項目先打包成 war 包

首先,使用 IDE 或者命令行工具將 Spring 項目打包為 WAR 文件。這個過程將創建一個包含所有 Web 應用內容(包括靜態資源、配置文件等)的歸檔包。

image-20250109100040542

打包完成后,請確認目標路徑中確實產生了 .war 文件。

提示:如果使用 Maven,需要在 pom.xml 中將 <packaging>jar</packaging> 改為 <packaging>war</packaging>

2. 查看項目工件(Artifact)是否存在

在某些 IDE(例如 IntelliJ IDEA)中,項目打包后的產物(.war.jar)會被稱為 Artifact。因此,在部署到 Tomcat 前,需要先檢查該 Artifact 是否已經正常生成。

image-20250109100300580

如果工件(Artifact)不存在,需要手動創建。常見步驟:

  1. 打開 IntelliJ IDEA 的 Project StructureArtifacts
  2. 點擊左上角的 “+” 號,選擇 “Web Application: Archive (或 exploded)”。
  3. 將你項目的 webapp 目錄或輸出配置到對應的 Artifact 中。

下面是一個在 IntelliJ IDEA 中創建 webapp 對應源模塊作為工件的操作演示:

recording

小提示:創建好以后,名稱可以改成與你想要的 Context Path 相匹配的名稱,這樣前端或其他調用者就可以使用對應路徑訪問。

3. 配置 Tomcat

當 Artifact 準備完畢后,就可以將此 Artifact 部署到 Tomcat 容器中進行運行或調試。

3.1 添加一個本地 Tomcat 容器

在 IntelliJ IDEA 中,打開 RunEdit Configurations → 點擊 “+” 號,選擇 Tomcat ServerLocal

image-20250109101333089

在彈出的配置窗口中:

image-20250109101429013

  • 指定 Tomcat 安裝目錄
    你需要事先下載并解壓 Tomcat(可從 Tomcat 官網 獲取),然后將解壓路徑填入 Tomcat Home
  • 選擇合適的 JDK
    Tomcat 9 及以上版本通常兼容 JDK 8 或 11,具體根據你項目中使用的 Java 版本來決定。
3.2 將項目部署到 Tomcat

在配置好的 Tomcat Server 設置中,切換到 “Deployment” 選項卡:

image-20250109101832158

點擊 “+” → Artifact,選擇你在步驟 2 中創建或已有的 .war 文件(或 exploded 形式):

recording

  • Context Path
    在彈出的對話框里,你可以手動設置訪問路徑,例如 /myapp/demo
    若設置為 /,則相當于部署到根路徑,下次訪問就不需要帶上項目名。

注意:如果你改變了 Artifact 的名稱,最終在 Tomcat 中也可以將 Context Path 手動設置為你想要的值。這兩者相輔相成,但在實際生產環境中,需要根據前端或接口約定來決定合適的 Context Path。

配置完成后,你可以在 “Deployment” 頁面上看到該 Artifact 已經被添加到 Tomcat。

訪問的 URL 地址示例
如果 Tomcat 默認端口為 8080,并且 Context Path 設置為 /intelligenceCommand,那么訪問路徑往往形如:

http://localhost:8080/intelligenceCommand/

image-20250109103942160

4. 運行項目

最后,點擊 IntelliJ IDEA 上方的綠色運行按鈕(或 Debug 按鈕),啟動本地 Tomcat。若控制臺沒有報錯,說明部署成功,項目就能通過瀏覽器訪問。

image-20250109102848965

  • 控制臺輸出:

    如果看到如下信息,表示服務器已正常啟動:

    image-20250109104621817

  • 訪問測試
    在瀏覽器中輸入 http://localhost:8080/myapp(若 Context Path 是 myapp),就能看到你的應用首頁或者相關接口數據,說明部署成功。

常見問題

  1. 端口占用問題:如果 8080 端口被占用,你需要在 Tomcat 中修改端口或者關閉占用 8080 的應用。
  2. 資源無法訪問 404:檢查靜態資源是否正確放在 webapp 目錄下,并且確認在 .war 包中已經包含這些文件。

三、基于 Tomcat 部署及多實例部署

1. Spring 項目 WAR 包的部署方式

1.1 直接放到 Tomcat 的 webapps 目錄
  1. 打包成 WAR 包:

    • 使用 Maven 或 Gradle 將項目打包為 .war 文件。

    • Maven 示例命令:

      mvn clean package
      
    • 打包完成后,WAR 包通常在 target 目錄下,例如:myapp.war

  2. 將 WAR 包放入 Tomcat 的 webapps 目錄:

    • myapp.war 放入:

      <TOMCAT_HOME>/webapps/
      
  3. 啟動 Tomcat 并自動解壓:

    • 啟動 Tomcat 后,Tomcat 會自動解壓 myapp.war 并在 webapps 下生成同名目錄。

    • 部署完成后,可以通過瀏覽器訪問:

      http://<服務器地址>:<端口號>/myapp/
      

1.2 通過 Tomcat Manager 部署
  1. 啟用 Tomcat 的 Manager 應用:

    • 編輯 <TOMCAT_HOME>/conf/tomcat-users.xml 文件,添加以下內容:

      <role rolename="manager-gui"/>
      <user username="admin" password="admin" roles="manager-gui"/>
      
    • 重啟 Tomcat。

  2. 訪問 Tomcat Manager:

    • 打開瀏覽器,訪問:

      http://<服務器地址>:<端口號>/manager/html
      
    • 輸入用戶名和密碼登錄。

  3. 上傳 WAR 包部署:

    • WAR file to deploy 部分,選擇你的 .war 文件并點擊 Deploy

1.3 自定義部署路徑(不放在 webapps 下)
  1. 創建部署描述文件:

    • <TOMCAT_HOME>/conf/Catalina/localhost 下創建 myapp.xml 文件。
  2. 指定 WAR 包位置:

    <Context docBase="/path/to/myapp.war" reloadable="true" />
    
  3. 啟動 Tomcat:

    • 部署完成后,可以通過瀏覽器訪問:

      http://<服務器地址>:<端口號>/myapp/
      

2. 部署多個相同版本的 Tomcat

2.1 復制多份 Tomcat 實現獨立部署
  1. 復制多個 Tomcat 目錄:

    • 假設原始目錄為 D:\tomcat-8.5.91

    • 復制并重命名為:

      D:\tomcat-instance1
      D:\tomcat-instance2
      
  2. 修改每個實例的端口配置:

    • 打開 conf/server.xml,修改以下端口以避免沖突:

      • HTTP 端口(必須配置):

        • HTTP 端口是接收瀏覽器或客戶端通過 HTTP 協議訪問的主要入口。
        • 默認是 8080,如果部署多個 Tomcat 實例,需要為每個實例分配不同的 HTTP 端口(如 80818082)。
        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
        
      • AJP 端口(可選,通常不需要):

        • AJP 是一種用于代理服務器(如 Apache HTTP Server、Nginx)與 Tomcat 之間的通信協議。
        • 如果你沒有使用 Apache 或 Nginx 等代理工具來轉發請求,則 AJP 不會被用到
        • 默認是 8009,如果不需要,可以直接注釋掉相關配置。
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        
      • Shutdown 端口(必須配置):

        • Shutdown 端口用于通過命令關閉 Tomcat 實例。
        • 默認是 8005,在多個實例中需要確保每個 Shutdown 端口唯一,否則可能會導致關閉其他實例的問題。
        <Server port="8005" shutdown="SHUTDOWN">
        

        改為 80068007 等。

  3. 啟動各個實例:

    • 分別進入 instance1instance2 的 bin 目錄,運行:

      startup.bat
      

2.2 使用多實例配置(共享 Tomcat 核心文件)

如果需要節省磁盤空間,可以通過共享核心文件實現。

  1. 準備原始 Tomcat 核心目錄:

    • 假設核心目錄為 D:\tomcat-base
  2. 創建多個實例目錄:

    • 創建實例目錄,例如:

      D:\tomcat-instance1
      D:\tomcat-instance2
      

    每個目錄需包含以下子目錄:

    conf
    logs
    temp
    webapps
    work
    
  3. 配置 CATALINA_BASECATALINA_HOME

    • 修改每個實例的 startup.bat 腳本,添加以下內容:

      set CATALINA_HOME=D:\tomcat-base
      set CATALINA_BASE=D:\tomcat-instance1
      
    • 對 instance2,設置:

      set CATALINA_HOME=D:\tomcat-base
      set CATALINA_BASE=D:\tomcat-instance2
      
  4. 啟動實例:

    • 分別進入每個實例的 bin 目錄,運行:

      startup.bat
      

2.3 使用 Docker 部署多個 Tomcat
  1. 拉取 Tomcat 鏡像:

    docker pull tomcat:8.5
    
  2. 運行多個容器:

    • 第一個實例:

      docker run -d --name tomcat-instance1 -p 8080:8080 tomcat:8.5
      
    • 第二個實例:

      docker run -d --name tomcat-instance2 -p 8081:8080 tomcat:8.5
      
  3. 訪問容器:

    • 實例1:http://localhost:8080
    • 實例2:http://localhost:8081

注意事項

  1. 端口沖突:
    • 確保每個實例的 HTTP、AJP 和 Shutdown 端口不同。
  2. 資源分配:
    • 在同一服務器上運行多個實例時,合理分配 JVM 內存。
  3. 日志文件獨立:
    • 確保每個實例的日志文件路徑獨立,避免混淆。
  4. 負載均衡(可選):
    • 使用 Nginx 或 Apache 將請求分發到多個實例,提高可用性。

總結

  • 單個 Tomcat 部署: 推薦直接將 WAR 包放入 webapps,由 Tomcat 自動解壓和部署。
  • 多個 Tomcat 部署: 可通過復制多份目錄或共享核心文件實現,Docker 是更現代化的部署方式。

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

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

相關文章

usbredir學習

文章目錄 背景典型場景編譯usbredirparserusbredirfilterusbredirparser/usbredirproto usbredirhostusbredirect/usbredirtestclient參考 背景 usbredir 是一種用于通過網絡轉發 USB 設備流量的網絡協議。它也是一個軟件包的名稱&#xff0c;該軟件包提供了一個解析庫、一個 …

ESXI 安裝教程(3) ---?vCenter Server 安裝

不涉及復雜的操作此項可不安裝 1.鏡像加載到虛擬光盤 對應的網盤文件 2.打開文件路徑 雙擊運行文件installer.exe 3.調整安裝語言 4.點擊安裝 5. 6. 證書,有效問題導致此提示,非專業網絡管理人員,不知道如何處理,此處點是即可 證書有效開始時間是安裝時間8小時 證書有效結束…

【初識掃盲】逆概率加權

我們正在處理一個存在缺失數據的回歸模型&#xff0c;并且希望采用一種非參數的逆概率加權方法來調整估計&#xff0c;以應對這種缺失數據的情況。 首先&#xff0c;我們需要明確問題的背景。我們有樣本 { ( Y i , X i , r i ) : i 1 , … , n } \left\{\left(Y_i, \boldsym…

極客說|Azure AI Agent Service 結合 AutoGen/Semantic Kernel 構建多智能體解決?案

作者&#xff1a;盧建暉 - 微軟高級云技術布道師 「極客說」 是一檔專注 AI 時代開發者分享的專欄&#xff0c;我們邀請來自微軟以及技術社區專家&#xff0c;帶來最前沿的技術干貨與實踐經驗。在這里&#xff0c;您將看到深度教程、最佳實踐和創新解決方案。關注「極客說」&am…

【集成學習】Boosting算法詳解

文章目錄 1. 集成學習概述2. Boosting算法詳解3. Gradient Boosting算法詳解3.1 基本思想3.2 公式推導 4. Python實現 1. 集成學習概述 集成學習&#xff08;Ensemble Learning&#xff09;是一種通過結合多個模型的預測結果來提高整體預測性能的技術。相比于單個模型&#xf…

小米vela系統(基于開源nuttx內核)——如何使用信號量進行PV操作

如何使用信號量進行PV操作 前言信號量1. 信號量簡介2. NuttX中信號量的創建與使用2.1 Nuttx信號量的初始化和銷毀2.2 信號量的等待和發布 3. 信號量的實際應用&#xff1a;下載任務示例3.1 實際代碼3.2 代碼說明3.3 執行說明 4. 信號量的優勢與應用場景5. 常見應用場景&#xf…

CMake學習筆記(2)

1. 嵌套的CMake 如果項目很大&#xff0c;或者項目中有很多的源碼目錄&#xff0c;在通過CMake管理項目的時候如果只使用一個CMakeLists.txt&#xff0c;那么這個文件相對會比較復雜&#xff0c;有一種化繁為簡的方式就是給每個源碼目錄都添加一個CMakeLists.txt文件&#xff…

旅游網站設計與實現

文末附有完整項目代碼 在當今數字化時代&#xff0c;旅游網站成為人們獲取旅游信息的重要途徑。本文將詳細介紹旅游網站的設計與實現&#xff0c;讓你輕松了解其中的技術奧秘&#xff01; 一、項目背景 隨著社會經濟的發展&#xff0c;人們對精神消費愈發重視&#xff0c;旅游…

【C++】size_t究竟是什么?全面解析與深入拓展

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;一、什么是size_t&#xff1f;為什么需要size_t&#xff1f; &#x1f4af;二、size_t的特性與用途1. size_t是無符號類型示例&#xff1a; 2. size_t的跨平臺適應性示例對…

【物流管理系統 - IDEAJavaSwingMySQL】基于Java實現的物流管理系統導入IDEA教程

有問題請留言或私信 步驟 下載項目源碼&#xff1a;項目源碼 解壓項目源碼到本地 打開IDEA 左上角&#xff1a;文件 → 新建 → 來自現有源代碼的項目 找到解壓在本地的項目源代碼文件&#xff0c;點擊確定&#xff0c;根據圖示步驟繼續導入項目 查看項目目錄&#xff…

ssh2-sftp-client和ssh2配合使用js腳本快速部署項目到服務器

有時候因為服務器不能實現github或者gitlab的自動部署服務&#xff0c;所以就需要使用腳本來實現自動部署&#xff0c;可以省時省力&#xff0c;一勞永逸。這里就使用ssh2-sftp-client和ssh2來實現&#xff0c;即便是需要sudo權限&#xff0c;也是可以的。 1.先將本地打包后的…

深度解析Linux中的調試器gdb/cgdb的使用

Linux下我們編譯好的代碼&#xff0c;無法直接調試 gcc/g默認的工作模式是realse模式 程序要調試的話&#xff0c;必須是debug模式&#xff0c;也就是說編譯的時候要加-g選項 gdb攜帶調試信息的exe 我們現在在文件夾里面創建一個文件lesson11 里面創建一個累加的代碼&…

【Maui】動態菜單實現(綁定數據視圖)

前言 .NET 多平臺應用 UI (.NET MAUI) 是一個跨平臺框架&#xff0c;用于使用 C# 和 XAML 創建本機移動和桌面應用。 使用 .NET MAUI&#xff0c;可從單個共享代碼庫開發可在 Android、iOS、macOS 和 Windows 上運行的應用。 .NET MAUI 是一款開放源代碼應用&#xff0c;是 X…

Bash語言的語法糖

Bash語言的語法糖 引言 在現代編程語言中&#xff0c;“語法糖”是一個非常常見的術語&#xff0c;它指的是那些使代碼更加易讀、易寫的語法特性。盡管這些特性并不改變語言的功能&#xff0c;但它們能顯著提升開發者的編程體驗。在眾多編程語言中&#xff0c;Bash&#xff0…

linux---Nginx詳細教程(包含安裝,網站部署)

Nginx是一個高性能的HTTP和反向代理服務器&#xff0c;也可以用作郵件代理服務器&#xff0c;其以占有內存少、并發能力強、穩定性高、豐富的功能集、低系統資源消耗而聞名。以下是對Nginx的詳細教程&#xff1a; 一、Nginx簡介 Nginx由俄羅斯人開發&#xff0c;第一個公開版…

RNN之:LSTM 長短期記憶模型-結構-理論詳解-及實戰(Matlab向)

0.前言 遞歸&#xff01;循環神經網絡Recurrent Neural Network 循環神經網絡&#xff08;又稱遞歸神經網絡&#xff0c;Recurrent Neural Network&#xff0c;RNN&#xff09;。是一種用于處理序列數據的神經網絡結構&#xff0c;具有記憶功能&#xff0c;能夠捕捉序列中的時…

泛目錄和泛站有什么差別

啥是 SEO 泛目錄&#xff1f; 咱先來說說 SEO 泛目錄是啥。想象一下&#xff0c;你有一個巨大的圖書館&#xff0c;里面的書架上擺滿了各種各樣的書&#xff0c;每一本書都代表著一個網頁。而 SEO 泛目錄呢&#xff0c;就像是一個超級圖書管理員&#xff0c;它的任務就是把這些…

初識@ffmpeg/ffmpeg庫

前言 FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并且能夠利用它們來創建一個新的流媒體格式的自由軟件項目,它被廣泛應用在視頻處理、音頻處理以及直播領域。其中,@ffmpeg/ffmpeg 是一個將 FFmpeg 編譯為 WebAssembly(WASM)的庫,可支持幾乎所有的音視頻格式。 安裝…

【圖像去噪】論文復現:反向擴散中加入MAP將擴散模型從高斯去噪推廣到真實去噪!DiffusionVI的Pytorch源碼復現,跑通源碼,梳理理論,單卡可執行!

請先看【專欄介紹文章】:【圖像去噪(Image Denoising)】關于【圖像去噪】專欄的相關說明,包含適配人群、專欄簡介、專欄亮點、閱讀方法、定價理由、品質承諾、關于更新、去噪概述、文章目錄、資料匯總、問題匯總(更新中) 完整代碼和訓練好的模型權重文件下載鏈接見本文底…

Windows 藍牙驅動開發-簡介

藍牙(英語&#xff1a;Bluetooth)是一種無線通信技術標準&#xff0c;用來讓固定與移動設備&#xff0c;在短距離間交換資料&#xff0c;以形成個人局域網(PAN)。其使用短波特高頻(UHF)無線電波&#xff0c;經由2.4至2.485 GHz的ISM頻段來進行通信。1994年由電信商愛立信(Erics…