找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1517|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

tomcat源碼分析之一《架構(gòu)》

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:107189 發(fā)表于 2016-3-5 18:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Tomcat是apache基金會下非常重要并且使用非常普遍的項目,任何使用java開發(fā)的程序員基本上都使用過tomcat。興趣使然,抽了時間對tomcat 6.0的源碼和架構(gòu)進行了閱讀和分析,通過對源碼的閱讀,希望能對tomcat和更加清晰的認識,對java應(yīng)用服務(wù)器的原理有個大致的理解,更重要的是希望在閱讀別人的代碼的過程中,吸取別人的寶貴和獨到的觀點和想法。廢話不多說。
先來看一下server.xml文件:



從server.xml文件我們就可以基本上看出tomcat的組件化架構(gòu)。介紹一下tomcat中主要的組件和概念:

Server

它表示的就是整個tomcat J2EE容器。包含了所有的服務(wù)以及服務(wù)上下文環(huán)境。
在tomcat中server只有一個。

Service

它表示tomcat提供的一個服務(wù)。
所謂服務(wù),就是包含一至多個連接器(Connector)的組件,并且是能夠?qū)τ脩粽埱笞鞒鲰憫?yīng)的組件。
在tomcat的server中,可以有一至多個service。

Connector

它表示與用戶請求建立連接的連接者;诟鞣N協(xié)議的請求訪問tomcat時,都會首先都會通過Connector進行處理。
Tomcat中定義了兩種 Connector,一個是基于Http協(xié)議,處理普通的http請求;
一個是AJP協(xié)議,用戶處理有其他應(yīng)用服務(wù)器(如apache,IIS)轉(zhuǎn)發(fā)而來的請求。

Engine

它表示的是一個真正處理用戶請求的處理引擎。
在tomcat中一個 Engine是個容器,繼承自org.apache.catalina.Container,因為只會處理servlet請求,即就是一個 servlet 容器。
引擎(Engine)從連接器(Connector)那里接收到請求,并對請求進行相應(yīng)的處理,返回結(jié)果給連接器,最終返回給客戶端。

Host

它在tomcat中代表的就是一個虛擬主機。Host也是個容器,繼承自org.apache.catalina.Container。
一個引擎可以包含很多的主機(Host),一個虛擬主機中可以包含多個Web應(yīng)用(Context組件)。

Context

   它表示一個具體的web應(yīng)用。一個主機可包含多個Web應(yīng)用,所以可有多個Web應(yīng)用上下文,不同的上下文可用不同路徑來表示。

下面在看一下uml結(jié)構(gòu):



反映到架構(gòu)圖上就是這樣的:  




總結(jié)一下,tomcat采用了清晰的組件化的架構(gòu)
位于頂端的server代表了整個tomcat服務(wù)器;
server中包含一到多個service提供各種服務(wù),默認的是名稱為catalina的服務(wù)
service提供請求服務(wù)首先是根據(jù)不同協(xié)議的客戶端請求選擇相應(yīng)的Connector來進行處理的,
Connector對請求進行分析后,轉(zhuǎn)而交給真正的處理引擎(Engine),即Servlet容器。
處理引擎(Engine)內(nèi)部實例化一個至多個虛擬主機(Host),
對應(yīng)不同的域名請求。每個虛擬主機又包含多個web應(yīng)用和上下文環(huán)境(Context),
上下文中的web應(yīng)用收到客戶端請求后對請求進行解析處理,
返回響應(yīng)結(jié)果給Connector,并最終返回給客戶端。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表