文件目錄結(jié)構(gòu)以下是 Tomcat 8 主要目錄結(jié)構(gòu)

功能組件結(jié)構(gòu)Tomca" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Tomcat

Tomcat

時間:2023-07-15 23:18:02 | 來源:網(wǎng)站運營

時間:2023-07-15 23:18:02 來源:網(wǎng)站運營

Tomcat:

#博學(xué)谷IT學(xué)習(xí)技術(shù)支持#

Tomcat 整體架構(gòu)

Tomcat 是一個免費的、開源的、輕量級的 Web 應(yīng)用服務(wù)器。適合在并發(fā)量不是很高的中小企業(yè)項目中使用。

文件目錄結(jié)構(gòu)

以下是 Tomcat 8 主要目錄結(jié)構(gòu)

功能組件結(jié)構(gòu)

Tomcat 的核心功能有兩個,分別是負責(zé)接收和反饋外部請求的連接器 Connector,和負責(zé)處理請求的容器 Container。其中連接器和容器相輔相成,一起構(gòu)成了基本的 web 服務(wù) Service。每個 Tomcat 服務(wù)器可以管理多個 Service。

Tomcat 連接器核心原理

Tomcat 連接器框架——Coyote

連接器核心功能

一、監(jiān)聽網(wǎng)絡(luò)端口,接收和響應(yīng)網(wǎng)絡(luò)請求。

二、網(wǎng)絡(luò)字節(jié)流處理。將收到的網(wǎng)絡(luò)字節(jié)流轉(zhuǎn)換成 Tomcat Request 再轉(zhuǎn)成標準的 ServletRequest 給容器,同時將容器傳來的 ServletResponse 轉(zhuǎn)成 Tomcat Response 再轉(zhuǎn)成網(wǎng)絡(luò)字節(jié)流。

連接器模塊設(shè)計

為滿足連接器的兩個核心功能,我們需要一個通訊端點來監(jiān)聽端口;需要一個處理器來處理網(wǎng)絡(luò)字節(jié)流;最后還需要一個適配器將處理后的結(jié)果轉(zhuǎn)成容器需要的結(jié)構(gòu)。

對應(yīng)的源碼包路徑 org.apache.coyote 。對應(yīng)的結(jié)構(gòu)圖如下

Tomcat 容器核心原理

Tomcat 容器框架——Catalina

容器結(jié)構(gòu)分析

每個 Service 會包含一個容器。容器由一個引擎可以管理多個虛擬主機。每個虛擬主機可以管理多個 Web 應(yīng)用。每個 Web 應(yīng)用會有多個 Servlet 包裝器。Engine、Host、Context 和 Wrapper,四個容器之間屬于父子關(guān)系。

對應(yīng)的源碼包路徑 org.apache.coyote 。對應(yīng)的結(jié)構(gòu)圖如下

容器請求處理

容器的請求處理過程就是在 Engine、Host、Context 和 Wrapper 這四個容器之間層層調(diào)用,最后在 Servlet 中執(zhí)行對應(yīng)的業(yè)務(wù)邏輯。各容器都會有一個通道 Pipeline,每個通道上都會有一個 Basic Valve(如StandardEngineValve), 類似一個閘門用來處理 Request 和 Response 。其流程圖如下。

Tomcat 請求處理流程

上面的知識點已經(jīng)零零碎碎地介紹了一個 Tomcat 是如何處理一個請求。簡單理解就是連接器的處理流程 + 容器的處理流程 = Tomcat 處理流程。哈!那么問題來了,Tomcat 是如何通過請求路徑找到對應(yīng)的虛擬站點?是如何找到對應(yīng)的 Servlet 呢?

映射器功能介紹

這里需要引入一個上面沒有介紹的組件 Mapper。顧名思義,其作用是提供請求路徑的路由映射。根據(jù)請求URL地址匹配是由哪個容器來處理。其中每個容器都會它自己對應(yīng)的Mapper,如 MappedHost。不知道大家有沒有回憶起被 Mapper class not found 支配的恐懼。在以前,每寫一個完整的功能,都需要在 web.xml 配置映射規(guī)則,當(dāng)文件越來越龐大的時候,各個問題隨著也會出現(xiàn)

HTTP請求流程

打開 tomcat/conf 目錄下的 server.xml 文件來分析一個http://localhost:8080/docs/api 請求。

第一步:連接器監(jiān)聽的端口是8080。由于請求的端口和監(jiān)聽的端口一致,連接器接受了該請求。

第二步:因為引擎的默認虛擬主機是 localhost,并且虛擬主機的目錄是webapps。所以請求找到了 tomcat/webapps 目錄。

第三步:解析的 docs 是 web 程序的應(yīng)用名,也就是 context。此時請求繼續(xù)從 webapps 目錄下找 docs 目錄。有的時候我們也會把應(yīng)用名省略。

第四步:解析的 api 是具體的業(yè)務(wù)邏輯地址。此時需要從 docs/WEB-INF/web.xml 中找映射關(guān)系,最后調(diào)用具體的函數(shù)。

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">

<Service name="Catalina">

<!-- 連接器監(jiān)聽端口是 8080,默認通訊協(xié)議是 HTTP/1.1 -->

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

<!-- 名字為 Catalina 的引擎,其默認的虛擬主機是 localhost -->

<Engine name="Catalina" defaultHost="localhost">

<!-- 名字為 localhost 的虛擬主機,其目錄是 webapps-->

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true">

</Host>

</Engine>

</Service>

</Server>

關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉