https://www.bilibili.com/video/BV1J3411k7Xc/?spm_id_from=333.337.search-card.all.click&vd_source=36145f3620bdf21c0f1a843352e603fb
JavaWeb開發必看!Tomcat架構及工作原理(8分鐘)
分闡明了Tomcat的工作原理。
一、Tomcat的核心架構
00:16
Tomcat的目錄結構
(1)bin
在bin目錄下存放的是可執行的二進制文件——jar格式文件和批處理文件。
其中startup.bat用來啟動服務器,shutdown.bat用來停止服務器。
學習批處理文件的網站:
1.https://www.yiibai.com/batch_script/batch_script_files.html
2.https://blog.csdn.net/helaisun/article/details/93218241
(2)conf
00:38
conf目錄下存放的是配置文件,其中“server.xml”存放了一些服務器的關鍵配置信息。
(3)lib
00:47
lib目錄存放jar包。
(4)webapps
00:50
webapps目錄下存放了一臺主機的網絡內容。
(5)logs
logs目錄存放日志文件。
(6)temp
temp目錄存放臨時文件。
【特別注意】
這里說的主機指的是一臺Tomcat管理的虛擬主機,而并非是一臺物理上發電腦。
通常,我們在瀏覽器地址欄中輸入地址的第一部分就是虛擬主機的名字。
在這個意義上,域名就是虛擬主機的名字,每一個虛擬主機的內容都存放于自己的文件夾。
01:28
問題引入
視頻中的電腦的Tomcat管理了兩臺虛擬主機
一臺虛擬主機的名字叫localhost,對應的文件夾是Webapps,另一臺虛擬主機的名字叫CaptainJack,對應的文件夾是wptwebapps。
【問題】一臺電腦只有一個IP,都用8080端口,為什么能掛兩個網站?
二、Tomcat核心框架及其工作原理
查看conf文件夾下的server.xml
02:13
【代碼】
<?xml version="1.0" encoding="UTF-8"?>
Server
這是一個樹形目錄,Server根節點只會實例化一次。
02:30
Server容器下可以包含多個service節點,但通常只有一個,它的名字叫Catalina。
02:35
service類在Server容器中充當組件,它的作用就是對外提供服務。
02:40
Service內部包含一組連接器(Connector)和一個引擎(Engine),連接器負責通信,引擎負責處理請求。
02:52
注冊連接器時,需要指定監聽端口(port=“8090”),以及所采用的通信協議(protocol=“HTTP/1.1”)。
02:56
每個連接器監聽一個端口:
->采用HTTP協議的連接器的監聽端口是80端口
->采用HTTPS協議的監聽端口是443端口
【問】為什么要用協議傳輸信息?
->保證信息的完整性和避免語義產生二義性。
03:08
連接器的功能
1)監聽網絡接口
2)接收網絡請求
3)讀取請求中的網絡字節流
4)將請求字節流轉換成response對象
5)調用Servlet容器(指的是Engine),獲取response對象
6)將response對象轉換成響應字節流
7)將響應字節流發給瀏覽器
03:46
引擎
引擎也是一個容器,里面包含一個或多個host對象,即虛擬主機。
04:00
問題引入
在配置文件中應該指定虛擬主機的主機名(name=“localhost”),以及它的內容所存放的文件夾(appBase=“localhost”),視頻中的電腦注冊了兩臺虛擬主機。
04:29
【問】如何使瀏覽器訪問主機名時訪問本機的IP地址?
在C:\Windows\System32\drivers\etc下的hosts文件的末尾增添“IP地址 域名”的條目,就可以在本地進行該域名解析。
了解更多:https://www.cnblogs.com/mybilibili/p/10536783.html
【注】這時,瀏覽器可以通過相同的IP地址和相同的端口號訪問到兩個不同的虛擬主機。
【問】為什么一臺電腦能部署多個網站?
05:06
通過網絡抓包可以發現,瀏覽器發出的HTTP請求消息里面包含有要訪問的主機名(在響應頭中)。
請求消息中的主機名被連接器給識別出來,并且放到了Request對象里面。
引擎通過Request對象里面的目標主機名,將Request對象派發給相應的主機來處理,因此一臺電腦能部署多個網站。
05:35
host
一臺虛擬主機中通常掛著多個應用,一個應用對應著一個context對象。
05:42
Context
在配置文件(server.xml)中,需要將應用設為主機的子節點。
配置應用節點context的時候,有兩個關鍵參數:
1)docBase(物理地址)
2)path(URL地址)
例如:
06:27
Wrapper
通常一個應用又包含多個不同的Servlet,每個Servlet可以有一個或多個實例。
同一個Servlet的所有實例被放在容器wrapper中進行管理。
【注】Engine host Context Wrapper都是容器
總結
通過這些容器,電腦上的Servlet被進行了詳細的分類管理。
連接器給出的request(請求對象)里面,包含了他要訪問的servlet的詳細路徑,具體地說就是主機名、應用名(路徑)和servlet名(路徑),因此各級容器收到了對象之后,就能夠把它正確的派發給下一級容器,最后達到目標servlet對象。
這個request對象的層層轉發過程,本質上是函數的層層調用過程。
調用完成之后,連接器將得到一個response對象,連接器將response對象轉換為字節流返回給瀏覽器,這就是Tomcat的核心架構和工作原理。
【問】什么是類、組件、容器?
類:
https://baike.baidu.com/item/%E7%B1%BB/6824577
組件:具有高內聚,低耦合的特性
https://blog.csdn.net/touzani/article/details/1619472
容器:
https://www.cnblogs.com/qcloud1001/p/9273549.html