?<前文回顧>
<今日更新>
一、Tomcat 的啟動:從“開機”到“待機”
Tomcat[1] 的啟動流程,說白了就是從“開機”到“待機”的過程。啟動時,Tomcat 會加載配置、初始化組件、啟動服務啥的,最后進入“待機”狀態,等著處理請求。
1.?加載配置:Tomcat 的“開機自檢”
Tomcat 啟動時,首先會加載配置文件,比如?server.xml、web.xml?啥的。這些配置文件決定了 Tomcat 的行為,比如端口號、上下文路徑、線程池大小啥的。
XML Code |
<!-- server.xml 配置端口號 --> <Connector port="8080" protocol="HTTP/1.1" ???????????connectionTimeout="20000" ???????????redirectPort="8443" /> |
2.?初始化組件:Tomcat 的“組裝零件”
Tomcat 加載完配置后,會初始化各種組件,比如?Connector、Engine、Host、Context?啥的。這些組件是 Tomcat 的“零件”,它們各司其職,共同處理請求。
Java Code |
// Connector 初始化 Connector connector = new Connector("HTTP/1.1"); connector.setPort(8080); connector.setProtocol("HTTP/1.1"); |
3.?啟動服務:Tomcat 的“點火啟動”
Tomcat 初始化完組件后,會啟動各種服務,比如?Connector、Engine?啥的。啟動服務后,Tomcat 就進入“待機”狀態,等著處理請求。
Java Code |
// 啟動 Connector connector.start(); |
二、Tomcat 的請求處理:從“接單”到“交貨”
Tomcat 的請求處理流程,說白了就是從“接單”到“交貨”的過程。請求到達 Tomcat 后,Tomcat 會解析請求、匹配上下文、調用 Servlet 啥的,最后生成響應,返回給客戶端。
1.?解析請求:Tomcat 的“接單”
請求到達 Tomcat 后,Tomcat 會解析請求,提取請求頭、請求體啥的。解析請求后,Tomcat 就知道該“干啥”了。
Java Code |
// 解析請求 HttpServletRequest request = (HttpServletRequest) req; String method = request.getMethod(); String uri = request.getRequestURI(); |
2.?匹配上下文:Tomcat 的“找地方”
Tomcat 解析完請求后,會根據請求的 URL,匹配對應的上下文(Context)。上下文是 Tomcat 的“工作區”,里頭裝著 Servlet、Filter 啥的。
Java Code |
// 匹配上下文 Context context = host.findChild(contextPath); |
3.?調用 Servlet:Tomcat 的“干活”
Tomcat 匹配完上下文后,會調用對應的 Servlet,處理請求。Servlet 是 Tomcat 的“工人”,它負責處理業務邏輯,生成響應。
Java Code |
// 調用 Servlet Servlet servlet = context.map(request); servlet.service(request, response); |
4.?生成響應:Tomcat 的“交貨”
Servlet 處理完請求后,會生成響應,返回給客戶端。Tomcat 會把響應“包裝”成 HTTP 響應,發送給客戶端。
Java Code |
// 生成響應 HttpServletResponse response = (HttpServletResponse) res; response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("Hello, World!"); |
三、Tomcat 的組件:從“零件”到“機器”
Tomcat 的組件是它的“零件”,它們各司其職,共同處理請求。Tomcat 的主要組件包括?Connector、Engine、Host、Context?啥的。
1.?Connector:Tomcat 的“接線員”
Connector 是 Tomcat 的“接線員”,它負責接收請求、解析請求、發送響應啥的。Connector 的配置通常寫在?server.xml?里。
XML Code |
<!-- server.xml 配置 Connector --> <Connector port="8080" protocol="HTTP/1.1" ???????????connectionTimeout="20000" ???????????redirectPort="8443" /> |
2.?Engine:Tomcat 的“總控臺”
Engine 是 Tomcat 的“總控臺”,它負責管理?Host、Context?啥的。Engine 的配置通常寫在?server.xml?里。
XMl Code |
<!-- server.xml 配置 Engine --> <Engine name="Catalina" defaultHost="localhost"> ????<Host name="localhost" appBase="webapps" /> </Engine> |
3.?Host:Tomcat 的“車間”
Host 是 Tomcat 的“車間”,它負責管理?Context?啥的。Host 的配置通常寫在?server.xml?里。
XML Code |
<!-- server.xml 配置 Host --> <Host name="localhost" appBase="webapps"> ????<Context path="/myapp" docBase="myapp" /> </Host> |
4.?Context:Tomcat 的“工作臺”
Context 是 Tomcat 的“工作臺”,它負責管理?Servlet、Filter?啥的。Context 的配置通常寫在?server.xml?或者?web.xml?里。
XML COde |
<!-- server.xml 配置 Context --> <Context path="/myapp" docBase="myapp" /> |
四、Tomcat 的參數:從“默認值”到“調校”
Tomcat 的參數是它的“調校”,開發者能通過配置參數,調整 Tomcat 的性能、行為啥的。Tomcat 的主要參數包括端口號、線程池大小、連接超時啥的。
1.?端口號:Tomcat 的“門牌號”
端口號是 Tomcat 的“門牌號”,用戶得通過端口號訪問 Tomcat。Tomcat 的默認端口號是 8080,但生產環境通常得改成 80。
XML Code |
<!-- server.xml 配置端口號 --> <Connector port="80" protocol="HTTP/1.1" ???????????connectionTimeout="20000" ???????????redirectPort="8443" /> 運行 HTML |
2.?線程池:Tomcat 的“發動機”
線程池是 Tomcat 的“發動機”,Tomcat 用線程池處理請求。線程池的大小得根據硬件資源、請求量啥的“調校”。
XML Code |
<!-- server.xml 配置線程池 --> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" ??????????maxThreads="200" minSpareThreads="10" /> |
3.?連接超時:Tomcat 的“耐心”
連接超時是 Tomcat 的“耐心”,它決定了 Tomcat 等待客戶端請求的時間。連接超時通常得根據網絡狀況、請求量啥的“調校”。
XML Code |
<!-- server.xml 配置連接超時 --> <Connector port="8080" protocol="HTTP/1.1" ???????????connectionTimeout="20000" ???????????redirectPort="8443" /> |
五、Tomcat 的歷史:從“小工具”到“大機器”
Tomcat 從 1999 年誕生到現在,已經走過了 20 多個年頭。雖然現在 Tomcat 已經有點“過氣”了,但它的“歷史”還是挺“輝煌”的。
1.?Tomcat 3.x:初代“小工具”
Tomcat 3.x 在 1999 年發布,是 Tomcat 的“初代版本”。雖然功能簡單,但已經能滿足大部分開發需求了。
2.?Tomcat 4.x:引入 Catalina
Tomcat 4.x 在 2001 年發布,引入了?Catalina,讓 Tomcat 的架構更加“模塊化”。Catalina?的引入,讓 Tomcat 的“玩法”更加豐富。
3.?Tomcat 5.x:支持 Servlet 2.4
Tomcat 5.x 在 2003 年發布,支持?Servlet 2.4,讓 Tomcat 的功能更加強大。Servlet 2.4?的引入,讓 Tomcat 的“玩法”更加靈活。
4.?Tomcat 6.x:支持 Servlet 2.5
Tomcat 6.x 在 2006 年發布,支持?Servlet 2.5,讓 Tomcat 的功能更加強大。Servlet 2.5?的引入,讓 Tomcat 的“玩法”更加靈活。
5.?Tomcat 7.x:支持 Servlet 3.0
Tomcat 7.x 在 2011 年發布,支持?Servlet 3.0,讓 Tomcat 的功能更加強大。Servlet 3.0?的引入,讓 Tomcat 的“玩法”更加靈活。
6.?Tomcat 8.x:支持 Servlet 3.1
Tomcat 8.x 在 2014 年發布,支持?Servlet 3.1,讓 Tomcat 的功能更加強大。Servlet 3.1?的引入,讓 Tomcat 的“玩法”更加靈活。
7.?Tomcat 9.x:支持 Servlet 4.0
Tomcat 9.x 在 2018 年發布,支持?Servlet 4.0,讓 Tomcat 的功能更加強大。Servlet 4.0?的引入,讓 Tomcat 的“玩法”更加靈活。
專有名詞解釋:
- Tomcat:Apache Tomcat,一個開源的 JavaWeb 服務器,用于運行 Servlet 和 JSP。
- Connector:Tomcat 的組件,負責接收請求、解析請求、發送響應等。
- Engine:Tomcat 的組件,負責管理 Host、Context 等。
- Host:Tomcat 的組件,負責管理 Context 等。
- Context:Tomcat 的組件,負責管理 Servlet、Filter 等。
- Servlet:Java 編寫的服務器端程序,用于處理客戶端請求并生成動態 Web 內容。