Tomcat系統架構分析

2021-08-30 15:26:00 字數 1452 閱讀 9177

下面看一下 standardservice 中主要的幾個方法實現的**,下面是 setcontainer 和 addconnector 方法的原始碼:

standardservice. setcontainer

public void setcontainer(container container) catch (lifecycleexception e) }

synchronized (connectors)

if (started && (oldcontainer != null) && (oldcontainer instanceof lifecycle)) catch (lifecycleexception e) }

support.firepropertychange("container", oldcontainer, this.container); }

這段**很簡單,其實就是先判斷當前的這個 service 有沒有已經關聯了 container,如果已經關聯了,那麼去掉這個關聯關係—— oldcontainer.setservice(null)。如果這個 oldcontainer 已經被啟動了,結束它的生命週期。然後再替換新的關聯、再初始化並開始這個新的 container 的生命週期。最後將這個過程通知感興趣的事件監聽程式。這裡值得注意的地方就是,修改 container 時要將新的 container 關聯到每個 connector,還好 container 和 connector 沒有雙向關聯,不然這個關聯關係將會很難維護。

standardservice. addconnector

public void addconnector(connector connector) catch (lifecycleexception e) }

if (started && (connector instanceof lifecycle)) catch (lifecycleexception e) }

support.firepropertychange("connector", null, connector); }

}上面是 addconnector 方法,這個方法也很簡單,首先是設定關聯關係,然後是初始化工作,開始新的生命週期。這裡值得一提的是,注意 connector 用的是陣列而不是 list 集合,這個從效能角度考慮可以理解,有趣的是這裡用了陣列但是並沒有向我們平常那樣,一開始就分配乙個固定大小的陣列,它這裡的實現機制是:重新建立乙個當前大小的陣列物件,然後將原來的陣列物件 copy 到新的陣列中,這種方式實現了類似的動態陣列的功能,這種實現方式,值得我們以後拿來借鑑。

最新的 tomcat6 中 standardservice 也基本沒有變化,但是從 tomcat5 開始 service、server 和容器類都繼承了 mbeanregistration 介面,mbeans 的管理更加合理。

Tomcat系統架構分析

當 connector 將 socket 連線封裝成 request 和 response 物件後接下來的事情就交給 container 來處理了。回頁首servlet 容器 container server.xml path library docbase d projects library d...

Tomcat系統架構分析

那麼這些容器是如何協同工作的呢?先看一下它們之間的關係圖 當 connector 接受到乙個連線請求時,將請求交給 container,container 是如何處理這個請求的?這四個元件是怎麼分工的,怎麼把請求傳給特定的子容器的呢?又是如何將最終的請求交給 servlet 處理。下面是這個過程的時...

tomcat目錄 系統架構

tomcat頂層結構圖如下 tomcat中最頂層的容器是server,代表著整個伺服器,從上圖中可以看出,乙個server可以包含至少乙個service,用於具體提供服務。service主要包含兩個部分 connector和container。從上圖中可以看出 tomcat 的心臟就是這兩個元件,他...