Java應用快速部署Tomcat指南

將Java應用部署到Apache Tomcat服務器是開發Web應用過程中常見的任務。Tomcat是一個免費且開源的Servlet容器,它為Java應用提供了運行環境。本文將介紹如何準備你的Java應用,并將其部署到Tomcat服務器上。

Java 應用部署

tomcat 的根目錄結構
Tomcat中默認網站根目錄是$CATALINA_BASE/webapps/
在Tomcat中部署主站應用程序和其他應用程序,和之前WEB服務程序不同
nginx
假設在nginx中部署2個網站應用eshop、forum,假設網站根目錄是/data/nginx/html,那么部署可以是這樣的,eshop解壓縮所有文件放到 /data/nginx/html/ 目錄下,forum 的文件放在 /data/nginx/html/forum/下
最終網站鏈接有以下對應關系

http://localhost/ 對應于eshop的應用,即 /data/nginx/html/
http://localhost/forum/ 對應于forum的應用,即/data/nginx/html/forum/

Tomcat
Tomcat中默認網站根目錄是CATALINA_BASE/webapps/
在Tomcat的webapps目錄中,有個非常特殊的目錄ROOT,它就是網站默認根目錄
將eshop解壓后的文件放到這個CATALINA_BASE/webapps/ROOT中
bbs解壓后文件都放在CATALINA_BASE/webapps/forum目錄下$CATALINA_BASE/webapps下面的每個目錄都對應一個Web應用,即WebApp
最終網站鏈接有以下對應關系

http://localhost/ 對應于eshop的應用WebApp,即$CATALINA_BASE/webapps/ROOT/目錄,
http://localhost/forum/ 對應于forum的應用WebApp,即$CATALINA_BASE/webapps/forum/

如果同時存在CATALINA_BASE /webapps/ROOT/forum,仍以$CATALINA_BASE/webapps/forum/ 優先生效。
每一個虛擬主機都可以使用appBase指令配置自己的站點目錄,使用appBase目錄下的ROOT目錄作為主站目錄。

主頁目錄和編碼

[root@ubuntu2404 ~]#cat /usr/local/src/tomcat/webapps/ROOT/index.html
<h1>你好</h1>
[root@ubuntu2404 ~]#curl 192.168.1.20:8080/index.html -I
HTTP/1.1 200
Accept-Ranges: bytes
ETag: W/"16-1746341360522"
Last-Modified: Sun, 04 May 2025 06:49:20 GMT
Content-Type: text/html     #tomcat無指定編碼,瀏覽器自動識別為GBK,可能會導致亂碼
Content-Length: 16
Date: Sun, 04 May 2025 06:50:04 GMT#瀏覽器的設置默認不是UTF-8,可能會導致亂碼,下載Chart插件可解決

在這里插入圖片描述
修改網頁指定編碼

[root@ubuntu2404 tomcat]#vim webapps/ROOT/index.html
<html>
<head>  
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>tomcat</title>
</head>
<h1>你好</h1>

在這里插入圖片描述

JSP WebApp目錄結構

CATALINA_BASE/webapps下面的每個目錄對應的WebApp,可能有以下子目錄,但下面子目錄是非必須的

  • 主頁配置:默認按以下順序查找主頁文件 index.html,index.htm、index.jsp
  • WEB-INF/:當前目錄WebApp的私有資源路徑,通常存儲當前應用使用的web.xml和context.xml 配置文件
  • META-INF/:類似于WEB-INF,也是私有資源的配置信息,和WEB-INF/目錄一樣瀏覽器無法訪問
  • classes/:類文件,當前webapp需要的類
  • lib/:當前應用依賴的jar包

主頁設置

全局配置實現修改默認主頁文件
默認情況下 tomcat 會在$CATALINA_BASE/webapps/ROOT/目錄下按以下次序查找文件,找到第一個則進行顯示
index.html
index.htm
index.jsp
可以通過修改 $CATALINA_BASE/conf/web.xml 中的下面標簽內容修改默認頁文件
修改默認主頁文件

[root@ubuntu2404 tomcat]#pwd
/usr/local/src/tomcat
[root@ubuntu2404 tomcat]#echo '<h1>www.caoge.com</h1>' > webapps/ROOT/index.html
[root@ubuntu2404 ~]#curl 192.168.1.20:8080
<h1>www.caoge.com</h1>[root@ubuntu2404 tomcat]#cat conf/web.xml <welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
[root@ubuntu2404 tomcat]#vim conf/web.xml<welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.html</welcome-file></welcome-file-list>
</web-app>
[root@ubuntu2404 tomcat]#systemctl restart tomcat
[root@ubuntu2404 ~]#curl 192.168.1.20:8080

WebApp的專用配置文件

將上面主配置文件conf/web.xml中的welcome-file-list標簽內容,復制到/usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml中,如下所示
針對主站點根目錄設置專用配置文件

[root@ubuntu2404 tomcat]#vim webapps/ROOT/WEB-INF/web.xml 
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaeehttps://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd"version="6.1"metadata-complete="true"><display-name>Welcome to Tomcat</display-name><description><welcome-file-list><welcome-file>index.html</welcome-file>   #修改三個文件的順序<welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></description></web-app>
#配置修改后,無需重啟tomcat服務,即可觀察首頁變化
[root@ubuntu2404 ~]#curl 192.168.1.20:8080
<h1>www.caoge.com</h1>

配置規則
webApp的專有配置優先于系統的全局配置
修改系統的全局配置文件,需要重新啟動服務生效
修改 webApp的專有配置,無需重啟即可生效

應用部署實現

WebApp應用的歸檔格式
.war:WebApp打包,類zip格式文件,通常包括一個應用的所有資源,比如jsp,html,配置文件等
.jar:EJB類文件的打包壓縮類zip格式文件,包括很多的class文件,網景公司發明
.rar:資源適配器類打包文件,目前已不常用
.ear:企業級WebApp打包,目前已不常用
傳統應用開發測試后,通常打包為war格式,這種文件部署到Tomcat的webapps目錄下,并默認會自動解包展開和部署上線

#conf/server.xml中文件配置
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

部署方式

部署Deploy:將webapp的源文件放置到目標目錄,通過web.xml和context.xml文件中配置的路徑就可以訪問該webapp,通過類加載器加載其特有的類和依賴的類到JVM上,即:最終用戶可以通過瀏覽器訪問該應用。
自動部署:Tomcat一旦發現多了一個web應用APP.war包,默認會自動把它解壓縮,加載并啟動起來。

手動部署

  • 冷部署:將webapp放到指定目錄,才去啟動Tomcat服務。
  • 熱部署:Tomcat服務不停止,需要依賴manager、ant腳本、tcd(tomcat client deployer)等工具。

反部署 undeploy:停止webapp運行,并從JVM上清除已經加載的類,從Tomcat應用目錄中移除部署的文件。
啟動 start:啟用 webapp 能夠訪問
停止 stop:禁用 webapp 不能訪問,不能提供服務,但是JVM并不清除它

部署WebApp的目錄結構

常見開發項目目錄組成

#目錄結構一般由開發用工具自動生成,以下模擬生成相關目錄
mkdir projects/myapp/{WEB-INF,META-INF,classes,lib} -pv
mkdir: 已創建目錄 "projects"
mkdir: 已創建目錄 "projects/myapp"
mkdir: 已創建目錄 "projects/myapp/WEB-INF"
mkdir: 已創建目錄 "projects/myapp/META-INF"
mkdir: 已創建目錄 "projects/myapp/classes"
mkdir: 已創建目錄 "projects/myapp/lib"#常見應用首頁,內容就用前面的test.jsp內部
vim projects/myapp/index.jsp#手動復制項目目錄到webapps目錄下去
cp -r projects/myapp/ /usr/local/tomcat/webapps/#注意權限和屬性
chown -R tomcat:tomcat /usr/local/tomcat/webapps/myapp#訪問http://YourIP:8080/myapp/

實戰案例:手動的應用部署

部署主頁目錄下的應用WebApp

[root@ubuntu2404 tomcat]#vim webapps/ROOT/status.jsp 
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>jsp例子</title>
</head>
<body>
后面的內容是服務器端動態生成字符串,最后拼接在一起
<%
out.println("hello jsp");
%>
<br>
<%=request.getRequestURL()%>
</body>
</html>
[root@ubuntu2404 ~]#curl 192.168.1.20:8080/status.jsp<!DOCTYPE html>
<html>
<head>

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

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

相關文章

Java 學習筆記(基礎篇2)

1. 分支結構① if 語句&#xff1a;(1) 雙分支&#xff1a;if (條件) {// 語句體1 } else {// 語句體2 }(2) 多分支if (條件1) {// 語句體1 } else if (條件2) {// 語句體2 } else {// 語句體N }② switch 語句&#xff1a;(1) 語法&#xff1a;如果都不是&#xff08;default&…

谷歌云代理商:用 AI 啟航,Gemini 重塑旅游酒店行業新體驗

本文由谷歌云谷歌地圖官方授權代理商、高級合作伙伴 CloudAce云一 整理發布。谷歌云谷歌地圖在中國授權代理商名單&#xff1a;Cloud Ace云一&#xff0c;全球20分公司&#xff0c;國內核心城市多個據點&#xff0c;谷歌云與谷歌地圖代理商、頂級合作伙伴&#xff08;Premier P…

springboot+vue實現通過poi完成excel

前端1、按鈕<el-buttontype"text"size"mini"click"handleExport">導出</el-button>2、方法//導出async handleExport() {if (!this.activityId) {this.$message.warning(活動ID不存在);return;}try {this.loading true;const res …

JMeter性能測試詳細版(適合0基礎小白學習--非常詳細)

01性能測試的概念 02性能測試的概念 基準測試 負載測試 穩定性測試 其他&#xff1a;并發測試、壓力測試、回歸測試等 壓力測試就是在系統強負載的情況下&#xff0c;是否會出現功能隱患問題&#xff0c;出現問題后是否可以盡快恢復 負載測試和壓力測試的區別: 1,核心目標不…

QT6(創建第一個QT項目)

編寫第一個QT項目 QT官網 安裝完QT后的界面 創建第一個項目 這里我們選擇第一個就好 下一步 下一步 選擇CMake&#xff0c;QMake是QT的CMAKE&#xff08;現在官方自己都不推薦了&#xff09; 下一步 選擇QWidget我們先創建一個最簡單的窗口程序 QMainWindow&#xff1a;主窗…

Golang指針操作

在 Go 語言&#xff08;Golang&#xff09;中&#xff0c;* 和 & 是與指針相關的兩個重要操作符。 理解它們對于掌握 Go 的內存管理和函數參數傳遞機制非常關鍵。 文章目錄一、& 操作符&#xff1a;取地址&#xff08;Address-of&#xff09;示例&#xff1a;二、* 操…

微服務從0到1

微服務從0到1實施步驟與注意事項一、核心實施步驟??需求分析與架構設計??明確業務邊界?&#xff1a;根據業務模塊&#xff08;如用戶管理、訂單系統&#xff09;劃分服務職責&#xff0c;避免服務職責重疊或耦合?。?定義接口契約?&#xff1a;通過 OpenAPI/Swagger 規范…

小程序排名優化:功能迭代如何助力排名攀升

小程序的功能不是一成不變的&#xff0c;持續的功能迭代不僅能滿足用戶不斷變化的需求&#xff0c;也是提升排名的重要途徑。平臺更傾向于推薦那些不斷更新、功能完善的小程序&#xff0c;因為它們能為用戶提供更優質的服務。合理規劃功能迭代方向和節奏&#xff0c;能讓小程序…

Unity TextMeshPro(二)優化

文章目錄前言一、字體打包優化二、ab打包冗余1、問題1、解決方法三、字體靜態優化四、擴展總結前言 優化TextMeshPro包體大小的方法記錄。 一、字體打包優化 游戲開發階段通常使用Fast打包方式&#xff0c;在正式項目發布的時候需要切換一下打包方式&#xff0c;重新將字體打…

C++ 之 【簡介 set、multiset、map、multimap 的使用】

目錄 1.序列式、關聯式容器 2.鍵值對 3.set 3.1set的簡介 3.2set的常用函數 4.multiset 5.map 5.1map的簡介 5.2map的常用函數 6.multimap 7.練習題 1.序列式、關聯式容器 vector、deque、list、forward_list、array等是CSTL中的序列式容器 其核心特性是 元素按插入…

數據結構——排序(升級篇:快速排序、堆排序、希爾排序、計數排序)

1. 快速排序&#xff08;Quick Sort&#xff09; 原理&#xff1a; 選擇一個基準值&#xff08;pivot&#xff09;將數組分成兩部分&#xff1a;小于 pivot 的放左邊&#xff0c;大于 pivot 的放右邊。然后遞歸處理 工作過程示例&#xff1a; 示例數組&#xff1a;[5, 3, 8, 4,…

C++:淺嘗gdb

hp window11 wsl ubuntu what is gdb&#xff1f; GNU調試器&#xff08;英語&#xff1a;GNU Debugger&#xff0c;縮寫&#xff1a;GDB&#xff09;&#xff0c;是GNU軟件系統中的標準調試器&#xff0c;此外GDB也是個具有移攜性的調試器&#xff0c;經過移攜需求的調修與…

Android輸入法一些常用的命令

Android開發過程可能會遇到Android輸入法異常的問題&#xff0c;可以通過如下命令來查看和修改系統的輸入法。方便調試。 獲取當下系統的所有輸入法 adb shell ime list獲取當前的可用輸入法 adb shell ime list -s獲取當前的輸入法 adb shell settings get secure default_inp…

Sklearn 機器學習 手寫數字識別 加載并查看數據

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 Sklearn 機器學習 手寫數字識別:加載并查看數據 在機器學習入門案例中,手寫數字識別…

衛星通信鏈路預算之七:上行載噪比計算

在前面的文章中我們介紹了衛星通信鏈路計算的基礎知識&#xff0c;包括&#xff1a; 信噪比分配&#xff1b; 帶寬和功帶平衡原則&#xff1b; EIRP和G/T&#xff1b; 輸入回退&#xff1b; 輸入飽和通量密度SFD&#xff1b; 輸出回退&#xff1b; 這次我們正式進入正題…

一文讀懂PDB格式

最近在做分子對接和分子模擬&#xff0c;涉及到了一些盲區&#xff0c;必去pdb文件是按照列位數儲存信息的&#xff0c;跟其他文件的空格或者制表符分割很不同&#xff0c;所以也可能出現一些錯誤&#xff0c;比如信息錯位&#xff0c;因此有必要了深入解下結構相關的格式pdb、…

進階:PGCE中級專家認證精要

PGCE中級認證的核心價值技術深度&#xff1a;掌控未來生態PostgreSQL不僅是傳統關系型數據庫的標桿&#xff0c;更是云原生、AI大模型訓練、物聯網平臺等前沿場景的核心支撐。通過PGCE認證&#xff0c;你將掌握&#xff1a;萬億級數據性能調優&#xff1a;從查詢優化器原理到執…

AI增強SEO關鍵詞表現

內容概要 隨著人工智能技術的不斷演進&#xff0c;其在搜索引擎優化領域展現出顯著潛力&#xff0c;尤其在關鍵詞表現優化方面發揮著核心作用。本文將從基礎概念入手&#xff0c;系統探討AI如何智能提升關鍵詞的搜索可見性、流量吸引力和轉化效率&#xff0c;從而驅動整體SEO策…

PG靶機 - PayDay

一、 初步偵察與服務探測 1.1 端口掃描與服務識別 首先&#xff0c;對目標主機 192.168.163.39 進行一次全面的端口掃描&#xff0c;以識別其上運行的各項服務。 sudo nmap 192.168.163.39 -p- --min-rate5000 -A圖 1: Nmap 掃描結果&#xff0c;顯示開放 80、445 和 995 等端口…

MySQLl中OFFSET 的使用方法

MySQLl中OFFSET 的使用方法基本語法SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET offset_value;number_of_rows&#xff1a;指定返回的記錄數量。offset_value&#xff1a;從第幾條記錄開始返回&#xff08;偏移量從 0 開始計數&#xff09;。示…