乙個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 ...