Tomcat工作原理及簡單模擬實現

2021-09-12 19:49:14 字數 2989 閱讀 8109

tomcat應該都不陌生,我們經常會把寫好的**打包放在tomcat裡並啟動,然後在瀏覽器裡就能愉快的呼叫我們寫的**來實現相應的功能了,那麼tomcat是如何工作的?

一、tomcat工作原理

我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話:

bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法:

這個類有兩個作用 :

原始碼不過多贅述,我們在這裡只需要把握整體架構,有興趣的同學可以自己研究下原始碼。tomcat的server.xml配置檔案中可以對應構架圖中位置,多層的表示可以配置多個:

即乙個由 server->service->engine->host->context 組成的結構,從裡層向外層分別是:

server:伺服器tomcat的頂級元素,它包含了所有東西。

service:一組 engine(引擎) 的集合,包括執行緒池 executor 和聯結器 connector 的定義。

engine(引擎):乙個 engine代表乙個完整的 servlet引擎,它接收來自connector的請求,並決定傳給哪個host來處理。

container(容器):host、context、engine和wraper都繼承自container介面,它們都是容器。

connector(聯結器):將service和container連線起來,註冊到乙個service,把來自客戶端的請求**到container。

context(上下文 ): 即 web 應用程式,乙個 context 即對於乙個 web 應用程式。

二、tomcat實現思路

實現以上效果整體思路如下:

1.serversocket占用8080埠,用while(true)迴圈等待使用者發請求。

2.拿到瀏覽器的請求,解析並返回url位址,用i/o輸入流讀取本地磁碟上相應檔案。

3.讀取檔案,不存在構建響應報文頭、html正文內容,存在則寫到瀏覽器端。

三、實現tomcat

工程檔案結構和pom.xml檔案:

1.httpserver核心處理類,用於接受使用者請求,傳遞http請求頭資訊,關閉容器
public class httpservercatch (ioexception e)// 等待使用者發請求while (!shutdown)}

catch (exception e)

}

}

public static void main(string args)

}

public class request

public void parse()

catch (ioexception e)

for (int j=0; j

}

//列印讀取的socket中的內容

system.out.print(request.tostring());

url = parseurl(request.tostring());

}

private string parseurl(string requeststring)

return null;

}

public string geturl()

}

3.建立response類,響應請求讀取檔案並寫回到瀏覽器

public class response

public void setrequest(request request)

public void sendstaticresource() throws ioexception

}else

}

catch (exception e)

finally

}

}

四、擴充套件點

2.抽象servlet類來轉碼處理請求和響應的業務。發過來的請求會有很多,也就意味著我們應該會有很多的servlet,例如:registerservlet、loginservlet等等還有很多其他的訪問。可以用到類似於工廠模式的方法處理,隨時產生很多的servlet,來滿足不同的功能性的請求。

Tomcat工作原理

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

Tomcat工作原理

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

Tomcat工作原理

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