[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物件
- Myth原始碼解析系列之九-總結原始碼
- Myth原始碼解析系列之二-專案結構介紹原始碼
- [原始碼解析] TensorFlow 分散式環境(1) --- 總體架構原始碼分散式架構
- Redis資料結構概覽(原始碼分析)Redis資料結構原始碼
- oracle體系結構總結Oracle
- HashMap底層資料結構原始碼解析HashMap資料結構原始碼
- 體系結構1
- 《React原始碼解析》系列完結!React原始碼
- 原始碼分析三:OkHttp(1)—總體架構原始碼HTTP架構
- PE檔案結構解析1
- 比特幣原始碼研讀(1)bitcoin原始碼結構比特幣原始碼
- tcc分散式事務框架原始碼解析系列(一)之專案結構分散式框架原始碼
- CLUSTER內部結構的總結(1)
- Flex Viewer 解析(二)Flex Viewer原始碼包結構FlexView原始碼
- oracle體系結構梳理---redo和undo解析1Oracle
- MySQL體系結構概覽MySql
- oracle體系結構概覽Oracle
- 死磕Tomcat系列(1)——整體架構Tomcat架構
- 結構體-*選夫婿1結構體
- 1、JVM體系結構JVM
- oracle體系結構(1)Oracle
- vuex 原始碼:原始碼系列解讀總結Vue原始碼
- Redis系列(九):資料結構Hash(ZipList、HashTable)原始碼解析和HSET、HGET命令Redis資料結構原始碼
- nodejs express 框架解密1-總體結構NodeJSExpress框架解密
- 樹結構總結
- PostgreSQL:原始碼目錄結構SQL原始碼
- 圖示 Zepto 原始碼結構原始碼
- Apache原始碼目錄結構Apache原始碼
- Android 原始碼結構分析Android原始碼
- 結構體中套用其他_結構體結構體
- WTL體系結構(1) (轉)
- jQuery整體架構原始碼解析jQuery架構原始碼
- 人人都能懂的Vue原始碼系列(一)—Vue原始碼目錄結構Vue原始碼
- 0、Java集合體繫結構—最全總結Java