[Tomcat原始碼系列]結構解析 1)總體結構預覽
一、從範例開始
在開始分析之前,我們先使用Tomcat元件來組裝一個完整的WebContainer。
1)準備好目錄結構
準備好如下目錄結構
BaseDir(C:/tomcattest/)
--conf
--webapps
--conf
--webapps
- 從{tomcat目錄}/conf目錄下的拷貝web.xml到如上的conf目錄(可選,支援JSP和welcome file)
- 拷貝tomcat的examle應用到如上的webapps目錄作為範例
2)範例(注意如下的程式碼說明部分)
package ray.tomcat.test;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardService;
import org.apache.catalina.startup.HostConfig;
public class TomcatMainV5
{
public static void main(String[] args) throws Exception
{
// 設定基目錄,使用這種方式貌似不夠幽雅
System.setProperty("catalina.base", "C:/tomcattest/");
// Connector
Connector connector = new Connector("HTTP/1.1");
connector.setPort(8080);
// 請求處理器(Engine+Host)
// Host
StandardHost standardHost = new StandardHost();
standardHost.setName("localhost");
standardHost.setAppBase("webapps");
// HostConfig負責解析Context配置,並將Context加入到Host中,
standardHost.addLifecycleListener(new HostConfig());
// Engine
StandardEngine standardEngine = new StandardEngine();
standardEngine.setName("Catalina");
//此處可以看到Host是Engine的Child
standardEngine.addChild(standardHost);
standardEngine.setDefaultHost("localhost");
// Connector+請求處理器 組裝成webserver
StandardService standardService = new StandardService();
standardService.setName("Catalina");
//設定接收請求Connector,可支援多個Connector
standardService.addConnector(connector);
//設定請求處理器
standardService.setContainer(standardEngine);
// 開始初始化
standardService.start();
while (true)
{
Thread.sleep(60000);
System.out.println("still active");
}
}
}
3)訪問http://localhost:8080/examples,可以看到examples應用生效了
二、總體結構預覽
從如上的範例,我們大概可以對Tomcat的主要組成有了基本的瞭解,包括其他一些在如上無法反映出來的元件,Tomcat由如下元件組成
1)請求連線接收和分發元件
- Connector(org.apache.catalina.connector.Connector):包括我們在上一篇 中瞭解的各種Protocol
2)請求處理元件
- Engine(org.apache.catalina.Engine):Engine是請求處理的入口,一個Engine會包含多個Host,我們看看Tomcat中關於Engine的定義
An Engine is a Container that represents the entire Catalina servlet engine.
- Host(org.apache.catalina.Host):Host代表了一個虛擬主機(virtual host),一個Host會包含多個Context,我們看看Tomcat關於Host的定義
A Host is a Container that represents a virtual host in the Catalina servlet engine.
- Context:Context代表了一個獨立的應用,一個Context會包含多個請求處理器(Wrapper),我們看看Tomcat關於Context的定義
A Context is a Container that represents a servlet context, and therefore an individual web application, in the Catalina servlet engine.
- Wrapper:Wraper代表了一個Servlet,我們看看Tomcat關於Wrapper的定義
A Wrapper is a Container that represents an individual servlet definition from the deployment descriptor of the web application.
3)組合元件
- Service:Service通過管理多個Connector和請求處理引擎,處理各Connector進入的請求,並由同一個請求處理引擎進行處理
三、結束語
本篇通過一個範例對Tomcat的主體結構做一個預覽,具體的細節我們在後面的篇章《生命期控制結構》、《請求處理結構》中更詳細地分析。
相關文章
- 【Tomcat 原始碼系列】Tomcat 整體結構Tomcat原始碼
- 【Tomcat 原始碼系列】原始碼構建 TomcatTomcat原始碼
- Tomcat目錄結構解析Tomcat
- objc原始碼解析-ObjectiveC物件結構原始碼Object物件
- [原始碼解析] TensorFlow 分散式環境(1) --- 總體架構原始碼分散式架構
- Kubernetes原始碼系列:Kubernetes目錄結構原始碼
- Redis資料結構概覽(原始碼分析)Redis資料結構原始碼
- HashMap底層資料結構原始碼解析HashMap資料結構原始碼
- 死磕Tomcat系列(1)——整體架構Tomcat架構
- 比特幣原始碼研讀(1)bitcoin原始碼結構比特幣原始碼
- PE檔案結構解析1
- 原始碼分析三:OkHttp(1)—總體架構原始碼HTTP架構
- Tomcat-結構原理Tomcat
- Tomcat目錄結構Tomcat
- MySQL體系結構概覽MySql
- vuex 原始碼:原始碼系列解讀總結Vue原始碼
- Redis系列(九):資料結構Hash(ZipList、HashTable)原始碼解析和HSET、HGET命令Redis資料結構原始碼
- 架構演化思考總結(1)架構
- 結構體-*選夫婿1結構體
- 1、JVM體系結構JVM
- Android技能樹 - Rxjava原始碼(1) 之 初步結構AndroidRxJava原始碼
- Tomcat總體架構(一)Tomcat架構
- Tomcat結構原理詳解Tomcat
- 演算法與資料結構解析-- 系列文章彙總篇演算法資料結構
- 樹結構總結
- Redis系列(十一):資料結構Set原始碼解析和SADD、SINTER、SDIFF、SUNION、SPOP命令Redis資料結構原始碼
- 人人都能懂的Vue原始碼系列(一)—Vue原始碼目錄結構Vue原始碼
- PostgreSQL:原始碼目錄結構SQL原始碼
- 0、Java集合體繫結構—最全總結Java
- PostgreSQL Page頁結構解析(5)- B-Tree索引儲存結構#1SQL索引
- Spring原始碼閱讀-ApplicationContext體系結構分析Spring原始碼APPContext
- ElementUI 原始碼簡析——原始碼結構篇UI原始碼
- 結構體中套用其他_結構體結構體
- Android技術棧(五)核心資料結構原始碼解析Android資料結構原始碼
- struct結構體專案1Struct結構體
- PostgreSQL Page頁結構解析(1)-基礎SQL
- 15_解析Oracle os header結構(1)OracleHeader
- Redis系列(五):資料結構List雙向連結串列中基本操作操作命令和原始碼解析Redis資料結構原始碼
- Vite 原始碼解讀系列(圖文結合) —— 構建篇Vite原始碼