【 <一> 煉丹初探:JavaWeb 的起源與基礎】之 Tomcat 的工作原理:從啟動到請求處理的流程

?<前文回顧>

點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link

<今日更新>

一、Tomcat 的啟動:從“開機”到“待機”

Tomcat[1] 的啟動流程,說白了就是從“開機”到“待機”的過程。啟動時,Tomcat 會加載配置、初始化組件、啟動服務啥的,最后進入“待機”狀態,等著處理請求。

1.?加載配置:Tomcat 的“開機自檢”

Tomcat 啟動時,首先會加載配置文件,比如?server.xmlweb.xml?啥的。這些配置文件決定了 Tomcat 的行為,比如端口號、上下文路徑、線程池大小啥的。

XML Code

<!-- server.xml 配置端口號 -->

<Connector port="8080" protocol="HTTP/1.1"

???????????connectionTimeout="20000"

???????????redirectPort="8443" />

2.?初始化組件:Tomcat 的“組裝零件”

Tomcat 加載完配置后,會初始化各種組件,比如?ConnectorEngineHostContext?啥的。這些組件是 Tomcat 的“零件”,它們各司其職,共同處理請求。

Java Code

// Connector 初始化

Connector connector = new Connector("HTTP/1.1");

connector.setPort(8080);

connector.setProtocol("HTTP/1.1");

3.?啟動服務:Tomcat 的“點火啟動”

Tomcat 初始化完組件后,會啟動各種服務,比如?ConnectorEngine?啥的。啟動服務后,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 的主要組件包括?ConnectorEngineHostContext?啥的。

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 的“總控臺”,它負責管理?HostContext?啥的。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 的“工作臺”,它負責管理?ServletFilter?啥的。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 的“玩法”更加靈活。


專有名詞解釋:

  1. Tomcat:Apache Tomcat,一個開源的 JavaWeb 服務器,用于運行 Servlet 和 JSP。
  2. Connector:Tomcat 的組件,負責接收請求、解析請求、發送響應等。
  3. Engine:Tomcat 的組件,負責管理 Host、Context 等。
  4. Host:Tomcat 的組件,負責管理 Context 等。
  5. Context:Tomcat 的組件,負責管理 Servlet、Filter 等。
  6. Servlet:Java 編寫的服務器端程序,用于處理客戶端請求并生成動態 Web 內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71958.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GPT入門】第11課 FunctionCall調用本地代碼入門

【GPT入門】第11課 FunctionCall調用代碼入門 1. 手撕FunctionCall2.代碼3.functionCall的結果 1. 手撕FunctionCall 為了了解&#xff0c;funcationCall底層&#xff0c;手寫一個functionCall多方法&#xff0c;并調用&#xff0c;體驗 思路&#xff1a; 任務&#xff1a;讓…

MySQL主從架構配合ShardingJdbc實現讀寫分離

文章目錄 目錄架構搭建讀寫分離pom.xmlfdy-live-user-provider 模塊application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目錄 架構搭建 基于Docker去創建MySQL的主從架構 讀寫分離 pom.xml <dependency><groupId>mysql…

計網面試準備

正確理解網絡數據傳輸過程 同一路由器的不同接口屬于不同局域網&#xff0c;廣播只能在同一個局域網

NLP常見任務專題介紹(1)-關系抽取(Relation Extraction, RE)任務訓練模板

?? 關系抽取(Relation Extraction, RE)任務訓練示例 本示例展示如何訓練一個關系抽取模型,以識別兩個實體之間的關系。 1?? 任務描述 目標:從文本中提取兩個實體之間的語義關系,例如 “人物 - 組織”、“藥物 - 疾病”、“公司 - 創始人” 等。輸入:句子 + 標注的實…

【技術白皮書】內功心法 | 第二部分 | Telnet遠程登錄的工作原理

遠程登錄的工作原理 背景介紹遠程登錄遠程登錄的服務模式遠程登錄服務的實現基礎遠程登錄服務的運行模式Telnet服務為什么不被操作系統管理 Telnet協議的原理網絡虛終端&#xff08;NVT&#xff09;結束標示NVT的原理NVT屏蔽差異 背景介紹 絕大多數計算機都是運行多用戶操作系…

在 Spring Boot 中實現基于 TraceId 的日志鏈路追蹤

1 前言 1.1 什么是 TraceId? TraceId 是一個唯一的標識符,用于跟蹤分布式系統中的請求。每個請求從客戶端發起到服務端處理,再到可能的多個微服務調用,都會攜帶這個 TraceId,以便在整個請求鏈路中進行追蹤和調試。 1.2 日志鏈路追蹤的意義 日志鏈路追蹤可以幫助開發者…

游戲引擎學習第150天

回顧與當天計劃 我們在這里完全不使用任何庫&#xff0c;所以我們完全是引擎和庫免疫的, 正如大家所知道的&#xff0c;我們正在編寫自己的資源處理系統&#xff0c;準確來說&#xff0c;是一個資源加載系統。過去一周我們已經完成了很多工作&#xff0c;現在只剩下最后幾步&a…

Flutter中stream學習

Flutter中stream學習 概述Stream的基礎概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

基于javaweb的SSM房屋租賃管理系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

物聯網商業模式

物聯網商業模式是一種戰略規劃&#xff0c;它融合了物聯網技術來創造價值并獲取收入。它與傳統商業模式的不同之處在于&#xff0c;它利用互聯設備來改善運營、提升客戶體驗以及優化服務項目。在當今由科技驅動的世界中&#xff0c;這種商業模式通過利用實時數據來提供創新服務…

從0開始的操作系統手搓教程45——實現exec

目錄 建立抽象 實現加載 實現sys_execv &#xff01;&#xff01;&#xff01;提示&#xff1a;因為實現問題沒有測試。所以更像是筆記&#xff01; exec 函數的作用是用新的可執行文件替換當前進程的程序體。具體來說&#xff0c;exec 會將當前正在運行的用戶進程的進程體&…

【python爬蟲】酷狗音樂爬取練習

注意&#xff1a;本次爬取的音樂僅有1分鐘試聽&#xff0c;僅作學習爬蟲的原理&#xff0c;完整音樂需要自行下載客戶端。 一、 初步分析 登陸酷狗音樂后隨機選取一首歌&#xff0c;在請求里發現一段mp3文件&#xff0c;復制網址&#xff0c;確實是我們需要的url。 復制音頻的…

Linux開發工具----vim

目錄 Linux編輯器-vim使用 1. vim的基本概念 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 底行模式(last line mode) 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. vim操作總結 (本篇文章相當于vim常用命令字典) Linux編輯器-vim使用 我們先來看…

基于云函數的自習室預約微信小程序+LW示例參考

全階段全種類學習資源&#xff0c;內涵少兒、小學、初中、高中、大學、專升本、考研、四六級、建造師、法考、網賺技巧、畢業設計等&#xff0c;持續更新~ 文章目錄 [TOC](文章目錄) 1.項目介紹2.項目部署3.項目部分截圖4.獲取方式 1.項目介紹 技術棧工具&#xff1a;云數據庫…

卷積神經網絡與計算機視覺:從數學基礎到實戰應用

卷積神經網絡與計算機視覺&#xff1a;從數學基礎到實戰應用 摘要 本文深入解析卷積神經網絡&#xff08;CNN&#xff09;的核心原理及其在計算機視覺中的應用。首先介紹卷積與互相關的數學定義及在神經網絡中的實際應用差異&#xff0c;接著從系統設計視角分析卷積的線性代數…

從Manus到OpenManus:多智能體協作框架如何重構AI生產力?

文章目錄 Manus&#xff1a;封閉生態下的通用AI智能體OpenManus&#xff1a;開源社區的閃速復刻挑戰與未來&#xff1a;框架落地的現實邊界當前局限性未來演進方向 OpenManus使用指南1. 環境配置2. 參數配置3. 替換搜索引擎4. 運行效果 協作框架開啟AI生產力革命 Manus&#xf…

js 使用 Web Workers 來實現一個精確的倒計時,即使ios手機鎖屏或頁面進入后臺,倒計時也不會暫停。

## 效果如上 <!-- 將 main.js 和 worker.js 放在同一個目錄下&#xff0c;然后在 HTML 文件中引入 main.js --><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&q…

深入理解 Linux 中的 -h 選項:讓命令輸出更“人性化”

在 Linux 系統中&#xff0c;命令行工具是系統管理員和普通用戶最常用的交互方式之一。然而&#xff0c;命令行輸出往往充滿了技術性術語和數字&#xff0c;對于初學者或非技術用戶來說可能顯得晦澀難懂。幸運的是&#xff0c;許多 Linux 命令都提供了一個非常實用的選項&#…

Docker Compose國內鏡像一鍵部署dify

克隆代碼 git clone https://github.com/langgenius/dify.git進入docker目錄 cd docker修改.env部分 # 將環境模版文件變量重命名 cp .env.example .env # 修改 .env,修改nginx的host和端口,避免端口沖突 NGINX_SERVER_NAME192.168.1.223 NGINX_PORT1880 NGINX_SSL_PORT1443…

紅隊OPSEC(安全運營)個人總結

OPSEC又稱&#xff1a;運營安全&#xff0c;是指在紅隊的視角下&#xff0c;藍隊對我方的威脅。 OPSEC漏洞的五個流程&#xff1a; 關鍵信息識別&#xff1a;指紅隊的關鍵信息不泄露&#xff0c;包括但不限于紅隊的攻擊意圖&#xff0c;能力&#xff0c;人員&#xff0c;活動及…