日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tomcat源码分析(一)------ 架构

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat源码分析(一)------ 架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話少說,拉代碼,導入eclipse開干,具體步驟可以參考http://hi.baidu.com/hateeyes/blog/item/7f44942a20ad8f9d023bf66d.html

下面談談我對Tomcat架構的理解

總體架構:

  • 面向組件架構
  • 基于JMX
  • 事件偵聽

1)面向組件架構

tomcat代碼看似很龐大,但從結構上看卻很清晰和簡單,它主要由一堆組件組成,如Server、Service、Connector等,并基于JMX管理這些組件,另外實現以上接口的組件也實現了代表生存期的接口Lifecycle,使其組件履行固定的生存期,在其整個生存期的過程中通過事件偵聽LifecycleEvent實現擴展。Tomcat的核心類圖如下所示:

Catalina:與開始/關閉shell腳本交互的主類,因此如果要研究啟動和關閉的過程,就從這個類開始看起。

Server:是整個Tomcat組件的容器,包含一個或多個Service。

Service:Service是包含Connector和Container的集合,Service用適當的Connector接收用戶的請求,再發給相應的Container來處理。

Connector:實現某一協議的連接器,如默認的有實現HTTP、HTTPS、AJP協議的。

Container:可以理解為處理某類型請求的容器,處理的方式一般為把處理請求的處理器包裝為Valve對象,并按一定順序放入類型為Pipeline的管道里。Container有多種子類型:Engine、Host、Context和Wrapper,這幾種子類型Container依次包含,處理不同粒度的請求。另外Container里包含一些基礎服務,如Loader、Manager和Realm。

Engine:Engine包含Host和Context,接到請求后仍給相應的Host在相應的Context里處理。

Host:就是我們所理解的虛擬主機。

Context:就是我們所部屬的具體Web應用的上下文,每個請求都在是相應的上下文里處理的。

Wrapper:Wrapper是針對每個Servlet的Container,每個Servlet都有相應的Wrapper來管理。

可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper這些核心組件的作用范圍是逐層遞減,并逐層包含。

下面就是些被Container所用的基礎組件:

Loader:是被Container用來載入各種所需的Class。

Manager:是被Container用來管理Session池。

Realm:是用來處理安全里授權與認證。

分析完核心類后,再看看Tomcat啟動的過程,Tomcat啟動的時序圖如下所示:

?

從上圖可以看出,Tomcat啟動分為init和start兩個過程,核心組件都實現了Lifecycle接口,都需實現start方法,因此在start過程中就是從Server開始逐層調用子組件的start過程。

2)基于JMX

Tomcat會為每個組件進行注冊過程,通過Registry管理起來,而Registry是基于JMX來實現的,因此在看組件的init和start過程實際上就是初始化MBean和觸發MBean的start方法,會大量看到形如:

Registry.getRegistry(null, null).invoke(mbeans, "init", false);

Registry.getRegistry(null, null).invoke(mbeans, "start", false);

這樣的代碼,這實際上就是通過JMX管理各種組件的行為和生命期。

3)事件偵聽

各個組件在其生命期中會有各種各樣行為,而這些行為都有觸發相應的事件,Tomcat就是通過偵聽這些時間達到對這些行為進行擴展的目的。在看組件的init和start過程中會看到大量如:

lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null);這樣的代碼,這就是對某一類型事件的觸發,如果你想在其中加入自己的行為,就只用注冊相應類型的事件即可。


from:?http://blog.csdn.net/cutesource/article/details/5006062

總結

以上是生活随笔為你收集整理的Tomcat源码分析(一)------ 架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。