詳細查看原文博客https://www.cnblogs.com/f-ck-need-u/p/8120008.html#1-web-
下面詳細介紹tomcat內部組件的作用:
Tomcat是一個servlet容器,實現了對Servlet和JSP的支持,除此之外,tomcat還可以作為
一個web應用服務器。獨立的Servlet容器是Tomcat的默認模式。管理和運行Servlet/JSP的
容器也稱為WEB容器。
Tomcat服務器接受客戶請求並做出響應的過程如下:
1)客戶端(通常都是瀏覽器)訪問Web服務器,發送HTTP請求。
2)Web服務器接收到請求后,傳遞給Servlet容器。
3)Servlet容器加載Servlet,產生Servlet實例后,向其傳遞表示請求和響應的對象。
4)Servlet實例使用請求對象得到客戶端的請求信息,然后進行相應的處理。
5)Servlet實例將處理結果通過響應對象發送回客戶端,容器負責確保響應正確送出,同時
將控制返回給Web服務器。
Servlet容器的作用:
負責處理客戶請求,當客戶請求來到時,Servlet容器獲取請求,然后調用某個
Servlet,並把Servlet的執行結果返回給客戶。
使用Servlet容器的原因:
通信支持:利用容器提供的方法,你能輕松的讓servlet與web服務器對話,而不用自己建
立serversocket、監聽某個端口、創建流等 等。容器知道自己與web服務器之間的協議,所
以你的servlet不用擔心web服務器(如Apache)和你自己的web代碼之間的API,只需要考
慮如何在servlet中實現業務邏輯(如處理一個訂單)。
生命周期管理:servlet容器控制着servlet的生與死,它負責加載類、實例化和初始化
servlet,調用servlet方法,以及使servlet實例被垃圾回收,有了servlet容器,你不需要太多
的考慮資源管理。
多線程支持:容器會自動為它所接收的每個servlet請求創建一個新的java線程。針對用戶
的請求,如果servlet已經運行完相應的http服務方法,這個線程就會結束。這並不是說你不
需要考慮線程安全性,其實你還會遇到同步問題,不過這樣能使你少做很多工作。
聲明方式實現安全:利用servlet容器,可以使用xml部署描述文件來配置和修改安全性,
而不必將其硬編碼寫到servlet類代碼中。
JSP支持:servlet容器負責將jsp代碼翻譯為真正的java代碼。
Tomcat的體系結構:
Tomcat服務器是由一系列可配置的組件構成的,其中核心組件是Catalina Servlet容器,
它是所有其他Tomcat組件的頂層容器。
<?xml version='1.0' encoding='utf8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF8"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost">
<Context path="" docBase="dlmj" reloadable="true"/>
</Host>
</Engine>
</Service>
</Server>
(1) Server
Server表示整個的Catalina Servlet容器。Tomcat提供了Server接口的一個默認實現,這通
常不需要用戶自己去實現。在Server容器中,可以包含一個或多個Service組件。
(2) Service
Service是存活在Server內部的中間組件,它將一個或多個連接器(Connector)組件綁定到
一個單獨的引擎(Engine)上。在Server中,可以包含一個或多個Service組件。Service也
很少由用戶定制,Tomcat提供了Service接口的默認實現,而這種實現既簡單又能滿足應
用。
(3) Connector
連接器(Connector)處理與客戶端的通信,它負責接收客戶請求,以及向客戶返回響應結
果。在Tomcat中,有多個連接器可以使用。
(4) Engine
在Tomcat中,每個Service只能包含一個Servlet引擎(Engine)。引擎表示一個特定的
Service的請求處理流水線。作為一個Service可以有多個連接器,引擎從連接器接收和處理
所有的請求,將響應返回給適合的連接器,通過連接器傳輸給用戶。用戶允許通過實現
Engine接口提供自定義的引擎,但通常不需要這么做。
(5) Host
Host表示一個虛擬主機,一個引擎可以包含多個Host。用戶通常不需要創建自定義的
Host,因為Tomcat給出的Host接口的實現(類StandardHost)提供了重要的附加功能。
(6) Context
一個Context表示了一個Web應用程序,運行在特定的虛擬主機中。什么是Web應用程序
呢?在Sun公司發布的Java Servlet規范中,對Web應用程序做出了如下的定義:“一個Web
應用程序是由一組Servlet、HTML頁面、類,以及其他的資源組成的運行在Web服務器上的
完整的應用程序。它可以在多個供應商提供的實現了Servlet規范的Web容器中運行”。一個
Host可以包含多個Context(代表Web應用程序),每一個Context都有一個唯一的路徑。用
戶 通 常 不 需 要 創 建 自 定 義 的 Context , 因 為 Tomcat 給 出 的 Context 接 口 的 實 ( 類
StandardContext)提供了重要的附加功能。
凡是實現了Servlet規范的都可以成為Servlet容器
理解ServletContext:
servlet容器需要在應用項目啟動時,給應用項目初始化一個ServletContext作為
公共環境容器存放公共信息。ServletContext中的信息都是由容器提供的。通常
的配置是web.xml,執行流程如下:
web.xml在<contextparam></contextparam>標簽中聲明應用范圍內的初始化參數
1.啟動一個WEB項目的時候,容器(如:Tomcat)會去讀它的配置文件web.xml.讀兩個節點:
<listener></listener> 和 <contextparam></contextparam>
2.緊接着,容器創建一個ServletContext(上下文)。在該應用內全局共享
3.容器將<contextparam></contextparam>轉化為鍵值對,並交給ServletContext
4. 容 器 創 建 <listener></listener> 中 的 類 實 例 ,即 創 建 監 聽 .該 監 聽 器 必 須 實 現 自
ServletContextListener接口
1、servlet容器啟動,為應用創建一個“全局上下文環境”:ServletContext
2、容器調用web.xml中配置的ContextLoaderListener,初始化
WebApplicationContext上下文環境(即IOC容器),加載contextparam指定的
配置文件信息到IOC容器中。WebApplicationContext在ServletContext中以鍵值
對的形式保存
3、容器初始化web.xml中配置的servlet,為其初始化自己的上下文信息
servletContext,並加載其設置的配置信息到該上下文中。將
WebApplicationContext設置為它的父容器。
4、此后的所有servlet的初始化都按照3步中方式創建,初始化自己的上下文環
境,將WebApplicationContext設置為自己的父上下文環境。
當Spring在執行ApplicationContext的getBean時,如果在自己context中找不
到對應的bean,則會在父ApplicationContext中去找。這也解釋了為什么我們可以
在DispatcherServlet中獲取到由ContextLoaderListener對應的ApplicationContext
中的bean。
---------------------
作者:vampire_Violet
來源:CSDN
原文:https://blog.csdn.net/qq_32332777/article/details/82225222
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!