第?部分:Tomcat 系統(tǒng)架構與原理剖析1.1 瀏覽器訪問服務器的流程





1.2 Tomcat 系統(tǒng)總體架構





HTTP 服務器接收到請求之后把請求交給Servlet容器來處理, Servlet 容器通過Servlet接?調?業(yè)務" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > Tomcat學習筆記

Tomcat學習筆記

時間:2023-07-15 07:51:01 | 來源:網(wǎng)站運營

時間:2023-07-15 07:51:01 來源:網(wǎng)站運營

Tomcat學習筆記:

第?部分:Tomcat 系統(tǒng)架構與原理剖析

1.1 瀏覽器訪問服務器的流程







1.2 Tomcat 系統(tǒng)總體架構







HTTP 服務器接收到請求之后把請求交給Servlet容器來處理, Servlet 容器通過Servlet接?調?業(yè)務 類。 Servlet接?和Servlet容器這?整套內容叫作Servlet規(guī)范。
Tomcat的兩個重要身份 1) http服務器 2) Tomcat是?個Servlet容器







1.2.1 Tomcat Servlet容器處理流程

當?戶請求某個URL資源時 1) HTTP服務器會把請求信息使?ServletRequest對象封裝起來 2)進?步去調?Servlet容器中某個具體的Servlet 3)在 2)中, Servlet容器拿到請求后,根據(jù)URL和Servlet的映射關系,找到相應的Servlet 4)如果Servlet還沒有被加載,就?反射機制創(chuàng)建這個Servlet,并調?Servlet的init?法來完成初始化 5)接著調?這個具體Servlet的service?法來處理請求,請求處理結果使?ServletResponse對象封裝 6)把ServletResponse對象返回給HTTP服務器, HTTP服務器會把響應發(fā)送給客戶端







我們發(fā)現(xiàn)tomcat有兩個?常重要的功能需要完成 1)和客戶端瀏覽器進?交互,進?socket通信,將字節(jié)流和Request/Response等對象進?轉換 2) Servlet容器處理業(yè)務邏輯

Tomcat 設計了兩個核?組件連接器(Connector)容器(Container) 來完成 Tomcat 的兩?核? 功能。 連接器:負責對外交流: 處理Socket連接,負責?絡字節(jié)流與Request和Response對象的轉化; 容器:負責內部處理: 加載和管理Servlet,以及具體處理Request請求;

1.2.2 連接器組件 Coyote

客戶端通過Coyote與服務器建?連接、發(fā)送請求并接受響應。
(1) Coyote 封裝了底層的?絡通信(Socket 請求及響應處理) (2) Coyote 使Catalina 容器(容器組件)與具體的請求協(xié)議及IO操作?式完全解耦 (3) Coyote 將Socket 輸?轉換封裝為 Request 對象,進?步封裝后交由Catalina 容器進?處理,處 理請求完成后, Catalina 通過Coyote 提供的Response 對象將結果寫?輸出流 (4) Coyote 負責的是具體協(xié)議(應?層)和IO(傳輸層)相關內容

Coyote內部又包含了很多支撐組件







1.2.3 容器組件Catalina

Tomcat就是?個Catalina的實例,因為Catalina是Tomcat的核?。






第二部分:?寫實現(xiàn)迷你版 Tomcat

Minicat要做的事情:作為?個服務器軟件提供服務的,也即我們可以通過瀏覽器客戶端發(fā)送http請求, Minicat可以接收到請求進?處理,處理之后的結果可以返回瀏覽器客戶端。 1)提供服務,接收請求(Socket通信) 2)請求信息封裝成Request對象(Response對象) 3)客戶端請求資源,資源分為靜態(tài)資源(html)和動態(tài)資源(Servlet) 4)資源返回給客戶端瀏覽器

第三部分:核?流程源碼剖析

3.1 Tomcat啟動流程







3.3 Tomcat請求處理流程

請求處理流程分析







請求處理流程示意圖







根據(jù)url尋找對應的servlet,需要按照Host->Context->Wrapper->Servlet的順序一步一步定位。

而tomcat通過Mapper組件來保存Host、Context、Wrapper之間的關系







第四部分:Tomcat 類加載機制剖析

Tomcat類加載器沒有嚴格的遵從雙親委派機制,也可以說打破了雙親委派機制

因為如下情況:

有?個tomcat, webapps下部署了兩個應? app1/lib/a-1.0.jar com.lagou.edu.Abc app2/lib/a-2.0.jar com.lagou.edu.Abc 不同版本中Abc類的內容是不同的,代碼是不?樣的

按照雙親委派機制加載會出現(xiàn)有的應用中需要的類不被加載!







1、?先從 Bootstrap Classloader加載指定的類 2、如果未加載到,則從 /WEB-INF/classes加載 3、如果未加載到,則從 /WEB-INF/lib/*.jar 加載

4、如果未加載到,則依次從 System、 Common、 Shared 加載

第五部分:Tomcat 性能優(yōu)化

Tomcat優(yōu)化從兩個??進? 1) JVM虛擬機優(yōu)化(優(yōu)化內存模型) 2) Tomcat?身配置的優(yōu)化(?如是否使?了共享線程池? IO模型?)

5.1 虛擬機運?優(yōu)化(參數(shù)調整)

Java 虛擬機的運?優(yōu)化主要是內存分配和垃圾回收策略的優(yōu)化:




使用jhsdb map --heap --pid 8481查看

2) 垃圾回收(GC)策略jvm內存配置

垃圾回收性能指標







上述配置的更改在bin/catalina.sh的腳本中 , 追加對應的配置重啟tomcat即可。

5.2 Tomcat 配置調優(yōu)

調整tomcat線程池

使用共享線程池







調整tomcat的連接器







禁? AJP 連接器







調整 IO 模型

Tomcat8之前的版本默認使?BIO(阻塞式IO),對于每?個請求都要創(chuàng)建?個線程來處理,不適 合?并發(fā); Tomcat8以后的版本默認使?NIO模式(?阻塞式IO)

修改protocl屬性為對應的協(xié)議IO模型的全路徑名即可,如protocol=org.apache.coyote.http11.Http11Nio2Protocol







當Tomcat并發(fā)性能有較?要求或者出現(xiàn)瓶頸時,我們可以嘗試使?APR模式, APR(Apache Portable Runtime)是從操作系統(tǒng)級別解決異步IO問題,使?時需要在操作系統(tǒng)上安裝APR和Native(因為APR 原理是使?使?JNI技術調?操作系統(tǒng)底層的IO接?)。
動靜分離

可以使?Nginx+Tomcat相結合的部署?案, Nginx負責靜態(tài)資源訪問, Tomcat負責Jsp等動態(tài)資 源訪問處理(因為Tomcat不擅?處理靜態(tài)資源)。


文章來源:拉勾教育Java高薪訓練營15期

關鍵詞:筆記,學習

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉