tomcat原始碼解讀 2 容器責任鏈模式的實現

2022-08-20 15:03:09 字數 1176 閱讀 8440

責任鏈模式:責任鏈模式可以用在這樣的場景,當乙個request過來的時候,需要對這個request做一系列的加工,使用責任鏈模式可以使每個加工元件化,減少耦合。也可以使用在當乙個request過來的時候,需要找到合適的加工方式。當乙個加工方式不適合這個request的時候,傳遞到下乙個加工方法,該加工方式再嘗試對request加工。

其中containerbase實現自container,圖中為了簡潔沒有標示出來。

valve中有三個關鍵的方法:

public valve getnext();//

返回下乙個valve

public

void setnext(valve valve);//

設定下乙個valve

public

void

invoke(request request, response response)

throws ioexception, servletexception;//

invoke為實際要執行的**

pipeline中有兩個關鍵方法,getfirst()獲取閥門鏈中第乙個valve

public

void addvalve(valve valve);//

增加閥門

public valve getfirst();//

獲取閥門鏈中第乙個閥門

container中有乙個關鍵方法:

public pipeline getpipeline();//

獲取乙個閥門管道

當乙個請求過來的時候,會呼叫standardengine中的getpipeline,然後依次執行其中valve;

初始開始的**在coyteadapter的407行,如下:

connector.getservice().getcontainer().getpipeline().getfirst().invoke(request, response);
connector.getservice().getcontainer()獲得是的standardengine的例項。

假設最後要訪問的servlet為testservlet可以看到有如下呼叫。

Tomcat原始碼執行流程解讀

1 tomcat架構圖 開局一張圖,內容全靠編。2 從tomcat架構圖可以看出tomcat的本質就是乙個伺服器 server 然後下面有多個服務 service 每個服務下面又包含多個聯結器 connector connector是連線外部網路的紐帶。engine這個引擎下面又有多個host,而h...

解讀tomcat原始碼之tomcat的啟動過程

tomcat 我們經常用到,但是有時候我們卻感到對他無比陌生,出了錯都不知道是什麼原因引起的。這個就比較尷尬,不過好在tomcat是開源免費的,我們可以看到其原始碼,那麼問題就簡單了,我們看看原始碼什麼迷惑就沒有了。最近對於tomcat有諸多不解,故看看原始碼來解惑,理解可能有些偏差,還請大神不吝賜...

CYYMysql 原始碼解讀 2

執行緒同步類 lock.h檔案和lock.cpp檔案實現比較簡單,使用的是臨界區,臨界區是使用者態的執行緒間切換消耗不是很大,而事件核心物件 訊號量 互斥量都是核心態的,呼叫的時候會切換到核心態,所以盡量使用臨界區來同步執行緒間操作。詳細資訊可以檢視windows核心程式設計,上面講解的很詳細。pr...