Tomcat工作原理 五 tomcat容器

2021-07-25 15:42:21 字數 1276 閱讀 8892

乙個tomcat容器需要實現org.apache.catalina.container,你可以在tomcat的聯結器中使用setcontainer方法傳遞乙個容器給聯結器。

第一件需要注意的是在概念上tomcat有四種容器:

在這裡主要要討論的是其中的四個介面pipeline(任務流), valve(閥門), valvecontext, and contained。

乙個任務流包含了該容器要執行的所有任務。乙個閥門表示乙個特定的任務,在任務流中有乙個最基本的閥門,同時你也可以根據需要任意新增閥門,閥門的數目定義為新增的閥門的個數(不包括基本閥門)。閥門可以通過編輯server.xml來自己新增。

如果你已經理解了servlet過濾器,那麼任務流和它的閥門的工作方式不難想象。任務流就像過濾器鏈而閥門就像過濾器,跟過濾器一樣,乙個閥門可以操作傳遞給它的 request 和 response 方法。讓乙個閥門完成了處理,則進一步處理流水線中的下乙個閥門,基本閥門總是在最後才被呼叫。

乙個容器可以有乙個流水線。當容器的 invoke 方法被呼叫的時候,容器將會處理流水線中的閥門,並乙個接乙個的處理,直到所有的閥門都被處理完畢。可以想象流水線的 invoke 方法的偽**如下所示:

// 執行新增的閥門

for (int n=0; n... );

}// 執行基本閥門

basicvalve.invoke( ... );

但是, tomcat 的設計者選擇了一種不同的通過org.apache.catalina.valves.valvebase定義的方式來處理,在org.apache.catalina.valves包下,定義了各種不同的valves.他們繼承自valvebase,實現valve中的invoke方法。在建立乙個valve物件之後,閥門呼叫getnext繼續執行下乙個方法。

現在來看看各界面的細節:

the pipeline inte***ce 任務流介面

public

inte***ce pipeline

the valve inte***ce 閥門介面
public

inte***ce

valve

the contained inte***ce

乙個閥門可以選擇性的實現 org.apache.catalina.contained 介面。該介面定義了其實現類跟乙個容器相關聯

public

inte***ce contained

Tomcat工作原理

tomcat內存在乙個process連線池,有請求過來會去連線池內獲取process物件對該請求進行處理,連線池有最小連線數和最大連線數,當前請求數超過最大連線數後超出的連線請求將會被丟棄,如果最大連線數設定為負數,則表示無最大連線數限制。乙個process物件接收到請求後不對請求做任何處理,直接建...

Tomcat工作原理

總體結構 tomcat 的結構很複雜,但是 tomcat 也非常的模組化,找到了 tomcat 最核心的模組,您就抓住了 tomcat 的 七寸 下面是 tomcat 的總體結構圖 從 上圖中可以看出 tomcat 的心臟是兩個元件 connector 和 container,關於這兩個元件將在後面...

Tomcat工作原理

engine容器 engine 容器比較簡單,它只定義了一些基本的關聯關係,介面類圖如下 它的標準實現類是 standardengine,這個類注意一點就是 engine 沒有父容器了,如果呼叫 setparent 方法時將會報錯。新增子容器也只能是 host 型別的,如下 public void ...