Tomcat原理系列之一 整體架構,抓住主線

2021-09-25 19:10:46 字數 1722 閱讀 4071

tomcat的主線

作為乙個web容器,請求在服務端的第一站,理解tomcat對我們今後理解spring,理解springmvc等等很多框架都有很大的幫助。

我們可以舉個生活場景來理解tomcat

工商局(tomcat)

這樣理解起來是否清晰呢?

tomcat的這種層次結構在**層面是如何體現的呢?

答:上層持有下層物件的引用,即下層作為上層的乙個屬性存在.

例如:server元件裡面持有 service的引用service services = new service[0]

public

final

class

standardserver

extends

lifecyclembeanbase

implements

server

為了維護這個關係:需要做什麼?需要在建立每層物件的時候也要把他的下層物件設定到自己屬性上。

如何維護這個關係

tomcat將這種關係維護在server.xml配置檔案中。

tomcat內部使用了digster工具將這種關係解析出來。

維護這個關係帶來哪些便利

因為有這種層級關係,所有tomcat在啟動,初始化的時候, 只需要啟動或者初始化最頂層的元件,就能將整個tomcat啟動起來。

即使像tomcat這樣大的架構,也逃不出main()作為入口的規範.

正如上面所說:我們只需要執行頂層的啟動方法就能層級呼叫將整個tomcat啟動起來

tomcat的啟動主要幹了3件事,load(),init(),start()抓住這3條主線。我們就基本上了解了tomcat整個架構的原理

main方法所在類是bootstrap.class中,從名字我們也可以得知,這是乙個啟動工具類,這個類也是三條主線的入口。boostrap在內部會通過反射例項化處乙個catalina類

catalina類真正開始三條主線的位置。

public

final

class

bootstrap

catch

(throwable var3)

daemon = bootstrap;

}else

try}

基於三條主線,畫出了相關時序圖。加深印象

建議配合時序圖,原始碼,跟一下tomcat原始碼這樣。會對tomcat整個原理有很深的理解。

(時序圖不是最完美的,但是我對流程的理解。人人都可以對照tomcat原始碼畫出乙個屬於自己的時序圖,如有不足請指出)

圖1:load()與init()時序圖

圖2start()時序圖

opencv學習系列教程之一 整體框架

現在就業人數最多的是計算機專業,而這個專業的很多人都是做深度學習,或者行為識別這塊,這講主要介紹一下很常用的乙個工具 opencv,很多人說,這是乙個程式,有些人這是很多演算法,其實我感覺描述的都有點片面性,它其實更像乙個工具,廢話少說,進主題 影象處理是計算機對影象進行一系列分析,然後得到想要的結...

MySQL系列文章(一)整體架構

mysql整體的體系架構圖有很多,這個圖就很形象的展示了大致的結構。mysql server自頂向下分為網路連線層 服務層 儲存引擎層和系統檔案層。1.1 網路連線層 主要提供與mysql伺服器建立連線的支援。1.2 服務層 快取 快取機制是由一系列小快取組成的。比如表快取 記錄快取 許可權花村 引...

spark原始碼解析之一 整體概述

任務提交後,指令碼會啟動使用者程式 初始化sparkcontext完成,使用者程式暫停執行,啟動driver程式 driver向集群管理器註冊應用程式 集群管理器根據此任務的配置檔案分配executor並啟動 driver獲取所需資源的同時,driver繼續執行使用者main函式,spark查詢為懶...