tomcat--目錄結構和文件組成

目錄結構

目錄說明
bin服務啟動,停止等相關程序和文件
conf配置文件
lib庫目錄
logs日志記錄
webapps應用程序,應用部署目錄
workjsp編譯后的結果文件,建議提前預熱訪問

/usr/local/apache-tomcat-8.5.100/work/Catalina/localhost/ROOT/org/apache/jsp更新時在這里刪除緩存

配置文件

官方文檔:Apache Tomcat 8 (8.5.100) - Documentation Index

文件名說明
server.xml主配置文件
web.xml每個webapp只有“部署”后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置,每個web應用也可以使用專用配置文件,來覆蓋全局文件
context.xml用于定義所有web應用均需加載的Context配置,此文件為所有的webapps提供默認配置,每個web應用也可以使用自已專用的配置,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,覆蓋全局的文件
tomcat-users.xml用戶認證的賬號和密碼文件
catalina.policy當使用security選項啟動tomcat時,用于為tomcat設置安全策略
catalina.propertiesTomcat 環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數
logging.propertiesTomcat 日志系統相關的配置,可以修改日志級別和日志路徑等

日志文件

參考文檔:Logging - Apache Tomcat - Apache Software Foundation

日志格式: Apache Tomcat 9 Configuration Reference (9.0.89) - The Valve Component

參數

%a - 遠程IP地址。另見%{xxx}a,下方有更多說明。
%A - 本地IP地址
%b - 不包括HTTP頭部的發送字節數,如果為零則顯示'-'。
%B - 不包括HTTP頭部的發送字節數。
%D - 處理請求所花費的時間(毫秒)。注意:在httpd中%D表示微秒。Tomcat 10及以后版本將與httpd的行為保持一致。
%F - 提交響應所花費的時間,以毫秒為單位。
%h - 遠程主機名(如果連接器的enableLookups為false,則為IP地址)
%H - 請求協議
%I - 當前請求線程的名稱(可用于后續與堆棧跟蹤比較)
%l - 從identd獲取的遠程邏輯用戶名(始終返回'-')
%m - 請求方法(GET、POST等)
%p - 接收到此請求的本地端口。另見%{xxx}p,下方有更多說明。
%q - 查詢字符串(如果存在,則以'?'開頭)
%r - 請求的第一行(方法和請求URI)
%s - 響應的HTTP狀態碼
%S - 用戶會話ID
%t - 日期和時間,采用通用日志格式
%T - 處理請求所花費的時間,以秒為單位。注意:這個值有毫秒級的精度,而在httpd中是秒級精度。Tomcat 10及以后版本將與httpd的行為對齊。
%u - 經過認證的遠程用戶(如果有的話),否則為'-'(如需可轉義)
%U - 請求的URL路徑
%v - 本地服務器名
%X - 響應完成后連接的狀態:X = 連接在響應完成前被中止。+ = 響應發送后連接可能保持活動。- = 響應發送后連接將關閉。
%{xxx}a - 寫入遠程地址(客戶端)(xxx等于remote時)或連接對等端地址(xxx等于peer時)
%{xxx}i - 寫入名為xxx的傳入頭部的值(如需可轉義)
%{xxx}o - 寫入名為xxx的傳出頭部的值(如需可轉義)
%{xxx}c - 寫入名為xxx的Cookie值(逗號分隔,如需可轉義)
%{xxx}r - 寫入名為xxx的ServletRequest屬性的值(如需可轉義,如果request為null則值為??)
%{xxx}s - 寫入名為xxx的HttpSession屬性的值(如需可轉義,如果request為null則值為??)
%{xxx}p - 寫入本地(服務器)端口(xxx等于local時)或遠程(客戶端)端口(xxx等于remote時)
%{xxx}t - 使用增強的SimpleDateFormat模式xxx格式化請求結束時的時間戳并寫入

?文件

[root@localhost ~]# ls /usr/local/apache-tomcat-8.5.100/logs/ -1
catalina.2024-05-14.log?? tomcat服務日志
catalina.out?????? tomcat服務日志
host-manager.2024-05-14.log? host manager管理日志
localhost.2024-05-14.log????? 默認主機日志
localhost_access_log.2024-05-14.txt????? 默認主機訪問日志
manager.2024-05-14.log???? manager 管理日志

?文件格式

[root@localhost ~]# tail /usr/local/apache-tomcat-8.5.100/conf/server.xml
???????????? Documentation at: /docs/config/valve.html
???????????? Note: The pattern used is equivalent to using pattern="common" -->
??????? <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" />

????? </Host>
??? </Engine>
? </Service>
</Server>

?查看訪問文件

組件

分層和分類

參考:Tomcat的配置文件_tomcat配置文件-CSDN博客

頂級組件

Server,代表整個Tomcat容器,一臺主機可以啟動多tomcat實例,需要確保端口不要產生沖突

服務類組件

Service,實現組織Engine和Connector,建立兩者之間關聯關系, service 里面只能包含一個Engine

className: 用于實現service的類名,一般都org.apache.catalina.core.StandardService。
name:此服務的名稱,默認為Catalina;

連接器組件

Connector,有HTTP(默認端口8080/tcp)、HTTPS(默認端口8443/tcp)、AJP(默認端口
8009/tcp)協議的連接器,AJP(Apache Jserv protocol)是一種基于TCP的二進制通訊協議。

address:指定連接器監聽的地址,默認為所有地址,即0.0.0.0;
maxThreads:支持的最大并發連接數,默認為200;
port:監聽的端口,默認為0;
protocol:連接器使用的協議,默認為HTTP/1.1,定義AJP協議時通常為AJP/1.3;
redirectPort:如果某連接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;
connectionTimeout:等待客戶端發送請求的超時時間,單位為毫秒,默認為60000,即1分鐘;
enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認為true;
acceptCount:設置等待隊列的最大長度;通常在tomcat所有處理線程均處于繁忙狀態時,新發來的請求將被放置于等待隊列中;

容器類

Engine、Host(虛擬主機)、Context(上下文件,解決路徑映射)都是容器類組件,可以嵌入其它組件,內部配置如何運行應用程序。

Engine:

defaultHost:Tomcat支持基于FQDN的虛擬主機,這些虛擬主機可以通過在Engine容器中定義多個不同的Host組件來實現;但如果此引擎的連接器收到一個發往非非明確定義虛擬主機的請求時則需要將此請求發往一個默認的虛擬主機進行處理,因此,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;
name:Engine組件的名稱,用于日志和錯誤信息記錄時區別不同的引擎

Host:

name : 主機名(FQDN)
appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔后的WAR文件的目錄路徑;可以使用基于$CATALINA_HOME的相對路徑;
autoDeploy:在Tomcat處于運行狀態時放置于appBase目錄中的應用程序文件是否自動進行deploy;默認為true;
unpackWars:在啟用此webapps時是否對WAR格式的歸檔文件先進行展開;默認為true;

Context:

docBase:相應的Web應用程序的存放位置;也可以使用相對路徑,起始路徑為此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關系,比如,如果appBase為deploy,而docBase絕不能為deploy-bbs類的名字;
path:相對于Web服務器根路徑而言的URI;如果為空“”,則表示為此webapp的根路徑;如果context定義在一個單獨的xml文件中,此屬性不需要定義;
reloadable:是否允許重新加載此context相關的Web應用程序的類;默認為false

內嵌類

可以內嵌到其他組件內,valve、logger、realm、loader、manager等。以logger舉例,在不同容器組件內分別定義。

valve類型:

AccessLogValve:訪問日志Valve
ExtendedAccessValve:擴展功能的訪問日志Valve
JDBCAccessLogValve:通過JDBC將訪問日志信息發送到數據庫中;
RequestDumperValve:請求轉儲Valve;
RemoteAddrValve:基于遠程地址的訪問控制;
RemoteHostValve:基于遠程主機名稱的訪問控制;
SemaphoreValve:用于控制Tomcat主機上任何容器上的并發訪問數量;
JvmRouteBinderValve:在配置多個Tomcat為以Apache通過mod_proxy或mod_jk作為前端的集群架構中,當期望停止某節點時,可以通過此Valve將用記請求定向至備用節點;使用此Valve,必須使用JvmRouteSessionIDBinderListener;
ReplicationValve:專用于Tomcat集群架構中,可以在某個請求的session信息發生更改時觸發session數據在各節點間進行復制;
SingleSignOn:將兩個或多個需要對用戶進行認證webapp在認證用戶時連接在一起,即一次認證即可訪問所有連接在一起的webapp;
ClusterSingleSingOn:對SingleSignOn的擴展,專用于Tomcat集群當中,需要結合ClusterSingleSignOnListener進行工作;

RemoteHostValve和RemoteAddrValve可以分別用來實現基于主機名稱和基于IP地址的訪問控制,控制本身可以通過allow或deny來進行定義,這有點類似于Apache的訪問控制功能;

參數:

className:相關的java實現的類名,相應于分別應該為org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;
allow:以逗號分開的允許訪問的IP地址列表,支持正則表達式,因此,點號“.”用于IP地址時需要轉義;僅定義allow項時,非明確allow的地址均被deny;
deny: 以逗號分開的禁止訪問的IP地址列表,支持正則表達式;使用方式同allow;

realm:

JAASRealm:基于Java Authintication and Authorization Service實現用戶認證;
JDBCRealm:通過JDBC訪問某關系型數據庫表實現用戶認證;
JNDIRealm:基于JNDI使用目錄服務實現認證信息的獲取;
MemoryRealm:查找tomcat-user.xml文件實現用戶信息的獲取;
UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)實現用戶認證,它實現是一個完全可更新和持久有效的MemoryRealm,因此能夠跟標準的MemoryRealm兼容;它通過JNDI實現;

manager:

StandardManager
Tomcat6的默認會話管理器,用于非集群環境中對單個處于運行狀態的Tomcat實例會話進行管理。當Tomcat關閉時,這些會話相關的數據會被寫入磁盤上的一個名叫SESSION.ser的文件,并在Tomcat下次啟動時讀取此文件。
PersistentManager
當一個會話長時間處于空閑狀態時會被寫入到swap會話對象,這對于內存資源比較吃緊的應用環境來說比較有用。
DeltaManager
用于Tomcat集群的會話管理器,它通過將改變了會話數據同步給集群中的其它節點實現會話復制。這種實現會將所有會話的改變同步給集群中的每一個節點,也是在集群環境中用得最多的一種實現方式。
BackupManager
用于Tomcat集群的會話管理器,與DeltaManager不同的是,某節點會話的改變只會同步給集群中的另一個而非所有節點。
SimpleTcpReplicationManager

集群類組件

listener、cluste

內部組成

名稱說明
Server服務器,Tomcat 運行的進程實例,一個Server中可以有多個service,但通常就一個
Service服務,用來組織Engine和Connector的對應關系,一個service中只有一個Engine
Connector連接器,負責客戶端的HTTP、HTTPS、AJP等協議連接。一個Connector只屬于某一個Engine
Engine即引擎,用來響應并處理用戶請求。一個Engine上可以綁定多個Connector
Host即虛擬主機,可以實現多虛擬主機,例如使用不同的主機頭區分
Context應用的上下文,配置特定url路徑映射和目錄的映射關系:url => director

每一個組件都由一個Java“類”實現,這些組件大體可分為以下幾個類型:

頂級組件:Server
服務類組件:Service
連接器組件:http, https, ajp(apache jserv protocol)
容器類:Engine, Host, Context
被嵌套類:valve, logger, realm, loader, manager, ...
集群類組件:listener, cluster, ...

?核心組件

  • Tomcat啟動一個Server進程。可以啟動多個Server,即tomcat的多實例, 但一般只啟動一個
  • 創建一個Service提供服務。可以創建多個Service,但一般也只創建一個
  1. 每個Service中,是Engine和其連接器Connector的關聯配置
  • 可以為這個Service提供多個連接器Connector,這些Connector使用了不同的協議,綁定了不同的
  • 端口。其作用就是處理來自客戶端的不同的連接請求或響應
  • Service 內部還定義了Engine,引擎才是真正的處理請求的入口,其內部定義多個虛擬主機Host
  1. Engine對請求頭做了分析,將請求發送給相應的虛擬主機
  2. 如果沒有匹配,數據就發往Engine上的defaultHost缺省虛擬主機
  3. Engine上的缺省虛擬主機可以修改
  • Host 定義虛擬主機,虛擬主機有name名稱,通過名稱匹配
  • Context 定義應用程序單獨的路徑映射和配置
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN"><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"
/><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"><Context ><Context /></Host></Engine></Service>
</Server>

tomcat 處理請求過程

  • 瀏覽器端的請求被發送到服務端端口8080,Tomcat進程監聽在此端口上。通過偵聽的HTTP/1.1Connector獲得此請求。
  • Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的響應
  • Engine獲得請求localhost:8080/test/index.jsp,遍歷它所有虛擬主機Host
  • Engine匹配到名為localhost的Host。如果匹配不到,就把請求交給該Engine中的defaultHost處理
  • localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
  • Host匹配到路徑為/test的Context
  • path=/test的Context獲得請求index.jsp,在它的mapping table中尋找對應的servlet
  • Context匹配到URL PATTERN為 *.jsp 的servlet,對應于JspServlet類構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法。
  • Context把執行完了之后的HttpServletResponse對象返回給Host
  • Host把HttpServletResponse對象返回給Engine
  • Engine把HttpServletResponse對象返回給Connector
  • Connector把HttpServletResponse對象返回給瀏覽器端

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

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

相關文章

c++string類型

概述 string類型是c的字符串類型&#xff0c;其繼承自basic_string類。使用string需要導入頭文件#include <string>,并且在命名空間std下。cstring是否是寫時復制? (像Qt的string一樣)? 經過自己的測試&#xff0c;推斷&#xff0c;c的方式不是寫時復制&#xff0c;其在…

PingCAP 戴濤:構建面向未來的金融核心系統

作者&#xff1a;戴濤 導讀 近日&#xff0c;平凱星辰解決方案技術部總經理戴濤在 2024 數據技術嘉年華活動中&#xff0c;做了主題為“構建面向未來的金融核心系統”的分享&#xff0c;本文為戴濤演講實錄的全文。 文章分析了中國金融行業的發展趨勢&#xff0c;并且基于這…

在 Mac OS 上使用 Homebrew 打造便捷的軟件安裝體驗:apt-get install 就是brew install:

標題&#xff1a;在 Mac OS 上使用 Homebrew 打造便捷的軟件安裝體驗 在 Mac OS 系統中&#xff0c;雖然不支持 apt-get install&#xff0c;但我們有幸擁有 Homebrew 這樣出色的包管理器。它為我們在 Mac 上安裝各種所需軟件提供了極大的便利。 一、安裝 Homebrew 要安裝 Home…

算法提高之加成序列

算法提高之加成序列 核心思想&#xff1a;迭代加深 dfs 從上往下逐漸增大depth 這樣下面沒有用的方案就不用遍歷了 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110;int n;int path[N];//當前求哪個位置…

PDF編輯閱讀器PDF Expert for Mac v3.10.1中文激活版

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器&#xff0c;專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀&#xff0c;突出顯示和標記文本&#xff0c;填寫表格以及簽署數字文檔。它…

STL----resize

resize的作用 設置容器元素個數和初始值。 resize和reserve resize即改變容器元素個數&#xff0c;也改變容器容量。 reserve只改變容器容量&#xff0c;不改變容器元素個數。 reserve有什么用 reserve---存儲&#xff0c;容量&#xff0c;保留。 1&#xff0c;設置容器容…

Python實現麥克風錄音保存到wav

功能展示&#xff1a; 運行環境&#xff1a; Python: 3.10.4 64-bit 操作系統&#xff1a; 截圖環境&#xff1a;win10 64-bit 視頻錄屏環境&#xff1a;win10 64-bit 功能說明&#xff1a; 點擊界面開始按鈕開始錄音&#xff0c;點擊停止按鈕結束錄音。 源碼文件列表&…

十二生肖Midjourney繪畫大挑戰:釋放你的創意火花

隨著AI藝術逐漸進入大眾視野&#xff0c;使用Midjourney繪制十二生肖不僅能夠激發我們的想象力&#xff0c;還能讓我們與傳統文化進行一場新式的對話。在這里&#xff0c;我們會逐一提供給你創意滿滿的繪畫提示詞&#xff0c;讓你的作品別具一格。而且&#xff0c;我們還精選了…

掃碼槍與Input的火花

文章目錄 前言一、需求&#xff1a;交互細節二、具體實現兩個核心的函數&#xff1a;自動聚焦 三&#xff0c;擴展知識input 與 change的區別 前言 在瀏覽器掃描條形碼獲取條形的值&#xff0c;再操作對應的邏輯。這是比較常見的業務&#xff0c;這里記錄實際操作。 其中PC端…

2023年國賽高教杯數學建模C題蔬菜類商品的自動定價與補貨決策解題全過程文檔及程序

2023年國賽高教杯數學建模 C題 蔬菜類商品的自動定價與補貨決策 原題再現 在生鮮商超中&#xff0c;一般蔬菜類商品的保鮮期都比較短&#xff0c;且品相隨銷售時間的增加而變差&#xff0c;大部分品種如當日未售出&#xff0c;隔日就無法再售。因此&#xff0c;商超通常會根據…

JSON 轉為json串后出現 “$ref“

問題描述 轉為JSON 串時出現 "$ref":"$.RequestParam.list[0]" $ref&#xff1a; fastjson數據重復的部分會用引用代替&#xff0c;當一個對象包含另一個對象時&#xff0c;fastjson就會把該對象解析成引用 “$ref”:”..” 上一級 “$ref”:”” 當前對…

2、架構-服務間的通信

遠程服務將計算機程序的工作范圍從單機擴展至網絡&#xff0c;從本地延 伸至遠程&#xff0c;是構建分布式系統的首要基礎。而遠程服務又不僅僅是為 分布式系統服務的&#xff0c;在網絡時代&#xff0c;瀏覽器、移動設備、桌面應用和服 務端的程序&#xff0c;普遍都有與其他設…

分布式搜索-elaticsearch基礎 安裝es

這里是在虛擬機的Linux系統里安裝es的教程: 1.創建網絡 在Finashell終端輸入指令 docker network create es-net 2.將es.tar安裝包放入tmp的目錄下 輸入指令加載鏡像&#xff1a;docker load -i es.tar 3.再運行docker 命令 docker run -d \--name es \-e "ES_JAVA_O…

UE4_照亮環境_光束light beam

學習筆記&#xff0c;不喜勿噴&#xff0c;侵權立刪&#xff01;祝愿生活越來越好&#xff01; 光束&#xff1a;模擬大氣中散射的光線。利用定向光源模擬真實曙暮光效果或大氣散射的陰影&#xff0c;即可生成 光束 。這些光線為場景添加深度和真實度。 一&#xff1a;一些參數…

RabbitMQ部署指南.md

RabbitMQ部署指南 1.單機部署 我們在Centos7虛擬機中使用Docker來安裝。 1.1.下載鏡像 方式一&#xff1a;在線拉取 docker pull rabbitmq:3.8-management方式二&#xff1a;從本地加載 在課前資料已經提供了鏡像包&#xff1a; 上傳到虛擬機中后&#xff0c;使用命令加載…

ASP.NET銀行大廳自助信息系統的開發與實現

摘 要 本畢業設計在基于銀行業務大廳現有業務的基礎上&#xff0c;針對自助銀行的概念和其獨有特點&#xff0c;通過.NETSQL技術&#xff0c;開發一個簡單的銀行大廳自助信息系統&#xff0c;完成一些自助銀行的業務需求如帳戶信息查詢、帳戶掛失、自助交費、留言、新聞查詢…

jmeter中java請求,解決不支持協議和元件,實現自定義元件

目錄 java請求 作用場景 JavaTest類源碼分析 編寫java請求樣例 新建java工程&#xff0c;導入jmeter主要依賴。 編寫java請求類&#xff0c;繼承AbstractJavaSamplerClient, 導入工程為jar包&#xff0c;放置jmeter安裝目錄下lib/ext目錄 重啟jmeter&#xff0c;添加ja…

3D,點云下采樣

文章目錄 一、隨機采樣1、算法原理2、步驟二、格點采樣格點采樣的特點三、均勻采樣1、類似體素網格采樣2、固定間隔采樣3、最遠點采樣四、曲率采樣曲率采樣的特點:參考資料:對于大規模點云處理而言,直接對點云進行特征提取能較好地保留三維結構信息。但由于點云的無序性,直…

flutter開發實戰-log日志存儲zip上傳,發送釘釘機器人消息

flutter開發實戰-log日志存儲zip上傳&#xff0c;發送釘釘機器人消息 當我們需要Apk上傳的時候&#xff0c;我們需要將日志打包并上傳到七牛&#xff0c;上傳之后通過釘釘通知我們日志下載地址。 這里我使用的是loggy來處理日志 一、引入loggy日志格式插件 在工程的pubspec.…

【經驗總結】超算互聯網服務器 transformers 加載本地模型

1. 背景 使用 超算互聯網 的云服務&#xff0c;不能連接外網&#xff0c;只能把模型下載到本地&#xff0c;再上傳上去到云服務。 2. 模型下載 在 模型中 https://huggingface.co/models 找到所需的模型后 點擊下載 config.json pytorch_model.bin vocab.txt 3. 上傳模型文…