目錄
一、Tomcat的基本介紹
1、Tomcat是什么?
2、Tomcat的配置文件詳解
3、Tomcat的構成組件
4、Tomcat的頂層架構
5、Tomcat的核心功能
6、Tomcat的請求過程
一、Tomcat的基本介紹
1、Tomcat是什么?
- Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。
- 對于一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。
- 際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的訣竅是,當配置正確時,Apache 為HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS等Web服務器一樣,具有處理HTML頁面的功能,另外它還是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。
- 不過,Tomcat處理靜態HTML的能力不如Apache服務器。
2、Tomcat的配置文件詳解
目錄名字 | 功能 | |
bin | 存放啟動和關閉 Tomcat 的腳本文件,比較常用的是 catalina.sh、startup.sh、shutdown.sh 三個文件 | |
conf | 存放 Tomcat 服務器的各種配置文件,比較常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四個文件。 | |
conf 子目錄 注意: 配置文件對于大小寫敏感 | 文件名 | 說明 |
server.xml | 主配置文件 全局生效 | |
web.xml | 每個webapp只有“部署"后才能被訪問,它的部署方式通常由web.xml進行定義,其存放位置為WEB-INF/目錄中;此文件為所有的webapps提供默認部署相關的配置,每個web應用也可以使用專用配置文件,來覆蓋全局文件 | |
context.xml | 用于定義所有web應用均需加載的Context配置,此文件為所有的webapps提供默認配置,每個web應用也可以使用自已專用的配置,它通常由專用的配置文件context.xml來定義,其存放位置為WEB-INF/目錄中,覆蓋全局的文件 | |
tomcat-users.xml | 用戶認證的賬號和密碼文件 | |
catalina.policy | 當使用security選項啟動omcat時,用于為tomcat設置安全策略 | |
catalina.properties | Tomcat環境變量的配置,用于設定類加載器路徑,以及一些與JVM調優相關參數 | |
logging.properties | Tomcat日志系統相關的配置,可以修改日志級別和日志路徑等 | |
lib | 存放 Tomcat 服務器的 jar 包,一般不作任何改動,除非連接第三方服務, 比如 redis,那就需要添加相對應的 jar 包 | |
logs | 存放 Tomcat 日志 | |
temp | 存放 Tomcat 運行時產生的文件 | |
webapps | 存放項目資源的目錄 | |
work | Tomcat 工作目錄,一般清除 Tomcat 緩存的時候會使用到(升級版本時注意要刪除里面的緩存) |
3、Tomcat的構成組件
Tomcat 由一系列的組件構成,其中核心的組件有三個:
3.1? Web 容器:完成 Web 服務器的功能。(https請求)
- 負責底層的HTTP協議
3.2? Servlet 容器:名字為 catalina,用于處理 Servlet 代碼。(具體的任務)
- Servlet 是Java Servlet 的簡稱,可以理解為是一個服務連接器,是用 Java 編寫的服務器端程序,具有獨立于平臺和協議的特性, 簡單的理解:servlet 就是一個中間件,包含了接口和方法,將客戶端和數據庫連接,從而實現動態網頁的創建。
3.3? JSP 容器:用于將 JSP 動態網頁翻譯成 Servlet 代碼
- JSP 全稱 Java Server Pages,是一種動態網頁開發技術。它使用 JSP 標簽在HTML網頁中插入 Java 代碼。標簽通常以 <% 開頭,以 %> 結束。
- JSP 是一種 Java servlet,主要用于實現 Java web 應用程序的用戶界面部分。
- JSP 通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然后動態地創建網頁。
- 因此 Tomcat 是 Web 應用服務器,也是一個 Servlet/JSP 容器。Tomcat 作為 Servlet 容器,負責處理客戶請求,把請求傳送給 Servlet,并將 Servlet 的響應傳送回給客戶。
4、Tomcat的頂層架構
- Tomcat中最頂層的容器是Server,代表著整個服務器,一個Server可以包含至少一個Service,用于具體提供服務。
- Service主要包含兩個部分:Connector和Container。Tomcat的心臟就是這兩個組件,這兩個組件的作用:Connector用于處理連接相關的事情,并提供Socket與Request和Response相關的轉化; Conta iner用于封裝和管理Servlet,以及具體處理Request請求。
- 一個Tomcat中只有一個Server,一個Server可以包含多個Service,一個Service只有一個Container,但是可以有多個Connectors,因為一個服務可以有多個連接,如同時提供Http和Https鏈接,也可以提供向相同協議不同端口的連接。
- 多個Connector和一個Container就形成了一個Service,有了Service就可以對外提供服務了,但是Service還要一個生存的環境,必須要有人能夠給它生命、掌握其生死大權,那就非Server莫屬了!所以整個Tomcat的生命周期由Server控制。另外,上述的包含關系或者說是父子關系,都可以在tomcat的conf目錄下的server .xml配置文件中看出。
- server.xm1中定義<Server port="8005" shutdown="SHUTDOWN">這會讓Tomcat6啟動一個server實例(即一個JVM),它監聽在8005端口以接收“SHUTDOWN”命令,如果接收到了就會關閉Tomcat。各Server的定義不能使用同一個端口,這意味著如果在同一個物理機上啟動了多個Server實例,必須配置它們使用不同的端口。
5、Tomcat的核心功能
Tomcat 的核心功能有兩個,分別是負責接收和反饋外部請求的連接器 Connector,和負責處理請求的容器 Container。 其中連接器和容器相輔相成,一起構成了基本的 web 服務 Service。每個 Tomcat 服務器可以管理多個 Service。
- Connector:負責對外接收和響應請求。它是Tomcat與外界的交通樞紐,監聽端口接收外界請求,并將請求處理后傳遞給容器做業務處理,最后將容器處理后的結果響應給外界。
- Container:負責對內處理業務邏輯。其內部由 Engine、Host、Context和Wrapper 四個容器組成,用于管理和調用 Servlet 相關邏輯。
- Service:對外提供的 Web 服務
Container 結構分析:
每個 Service 會包含一個 Container 容器。在 Container 內部包含了 4 個子容器:
4個子容器的作用分別是:
- Engine:引擎,用來管理多個虛擬主機,一個 Service 最多只能有一個 Engine;
- Host:代表一個虛擬主機,也可以叫站點,通過配置 Host 就可以添加站點;
- Context:代表一個 Web 應用,包含多個 Servlet 封裝器;
- Wrapper:封裝器,容器的最底層。每一 Wrapper 封裝著一個 Servlet,負責對象實例的創建、執行和銷毀功能。
Engine、Host、Context 和 Wrapper,這四個容器之間屬于父子關系。
容器 由一個引擎可以管理多個虛擬主機。每個虛擬主機可以管理多個 Web 應用。每個 Web 應用會有多個 Servlet 封裝器。
6、Tomcat的請求過程
- 用戶在瀏覽器中輸入該網址,請求被發送到本機端口8080,被在那里監聽的Coyote HTTP/1.1 Connector獲得;
- Connector把該請求交給它所在的Service的Engine (Container) 來處理,并等待Engine的回應;
- Engine獲得請求localhost/test/index.jsp,匹配所有的虛擬主機Host;
- Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機),名為localhostHost獲得請求/test/index.jsp,匹配它所擁有的所有Context。Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為“”的Context去處理);
- path="/test"的Context獲得請求/ index. jsp,在它的mapping table中尋找出對應的Servlet。Context 匹配到URLPattern為* .jsp的Servlet,對應于JspServlet類;
- 構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet()或doPost(),執行業務邏輯、數據存儲等
- Context把執行完之后的HttpServletResponse對象返回給Host; .
- Host把HttpServletResponse對象返回給Engine;
- Engine把HttpServletResponse對象返回Connector;
- Connector把HttpServletResponse對象返回給客戶Browser