tomcat原始碼解析一之設計模式

2021-10-07 11:54:35 字數 2230 閱讀 4791

service將聯結器和容器組合在一塊對外提供服務,

在外層,catalina將digester和server組合在一塊,解析xml屬性然後直接賦值給server.這樣整個容器初始化就完成了,包括聯結器.

利用pipeline+valve組成

當呼叫容器invoke方法時,父類預設方法

containerbase

protected pipeline pipeline =

newstandardpipeline

(this);

public

void

invoke

(request request, response response)

throws ioexception, servletexception

standardpipeline

public

void

invoke

(request request, response response)

throws ioexception, servletexception

遍歷執行每個value

public

void

invokenext

(request request, response response)

throws ioexception, servletexception

elseif(

(subscript == valves.length)

&&(basic != null)

)else

}

當呼叫value時,可呼叫傳入的valvecontext傳遞給下乙個value執行

public

void

invoke

(request request, response response, valvecontext valvecontext)

throws ioexception, servletexception

tomcat每個容器繼承生命週期介面,然後將每個生命週期階段繫結乙個事件進行傳送.

tomcat有趣的地方在於,套娃形式.每個大容器套乙個小容器,然後採用責任鏈的方式,每個管道最後都會有乙個兜底的value實現方法,用來呼叫子容器.這樣保證了整個容器的執行順序由上而下.如果需要擴充套件每個容器註冊乙個value到pipe上就行了.

然後每個容器都繼承了生命週期介面,可以註冊乙個***,用來監聽每個執行過程的事件,進行比如解析xml之內的玩意兒.

tomcat主要是基於元件的開發,可以在任意模組通過增加閥和***實現增強和擴充套件

spring主要基於對物件的生明週期管理,所以提供前置和後置增強就可以啦

mybatis和sharding-jdbc主要的功能是解析語法樹,然後在語法樹層面對sql進行優化.

Tomcat原始碼解析(6)

用來記錄訊息的元件。在catalina中,日誌記錄器需要與某個servlet容器相關聯。在org.apache.catalina.logger包下,tomcat提供幾種不同型別的日誌記錄器。與上一節的程式相比,只是 context和bootstrap類有變化。logger介面 提供了一些log 方法...

Tomcat原始碼解析(16)

部署器 使用乙個web應用程式,必須表示該應用程式的context例項,部署到乙個host例項。在tomcat中,可以用war檔案的形式來部署。對於部署的每個應用程式,可以包含乙個描述檔案。包含context例項的配置資訊 deployer介面 部署器與乙個host例項相關聯,用來安裝context...

Spring原始碼解析之 Aop原始碼解析(2)

spring aop 更多的是oop開發模式的乙個補充,幫助oop以更好的方式來解決對於需要解決業務功能模組之上統一管理 的功能 以一副圖來做為aop功能的說明更直觀些。對於類似系統的安全檢查,系統日誌,事務管理等相關功能,物件導向的開發方法並沒有更好的解決方法 aop引入了一些概念。更多的是spr...