客戶端用戶點擊瀏覽器服務鏈接,瀏覽器經過客戶端底層服務經過路由傳送報文,目標服務器獲取解析報文,Tomcat監聽程序觸發處理請求web
bin: 服務相關腳本,例如:啓動、關閉等瀏覽器
conf: 存放不一樣的配置文件,列如:server.xml、web.xmltomcat
lib: tomcat 運行須要的庫文件服務器
logs: 運行的日誌文件網絡
webapps: web部署的根目錄app
work :存放jsp編譯後的class文件webapp
Engine下能夠配置多個虛擬主機Virtual Host,每一個虛擬主機都有一個域名jsp
當Engine得到一個請求時,它把該請求匹配到某個Host上,而後把該請求交給該Host來處理代理
Engine有一個默認虛擬主機,當請求沒法匹配到任何一個Host上的時候,將交給該默認Host來處理日誌
4.2 Host
表明一個Virtual Host,虛擬主機,每一個虛擬主機和某個網絡域名Domain Name相匹配
每一個虛擬主機下均可以部署(deploy)一個或者多個Web App,每一個Web App對應於一個Context,有一個Context path。
當Host得到一個請求時,將把該請求匹配到某個Context上,而後把該請求交給該Context來處理。
匹配的方法是「最長匹配」,因此一個path==""的Context將成爲該Host的默認Context。
全部沒法和其它Context的路徑名匹配的請求都將最終和該默認Context匹配。
4.3 Context
一個Context對應於一個Web Application,一個Web Application由一個或者多個Servlet組成。
Context在建立的時候將根據配置文件WEBAPP_HOME/WEB-INF/web.xml載入Servlet類。
當Context得到請求時,將在本身的映射表(mapping table)中尋找相匹配的Servlet類,若是找到,則執行該類,得到請求的迴應,並返回。
一個Context對應於一個Web App,每一個Web App是由一個或者多個servlet組成的
當一個Web App被初始化的時候,它將用本身的ClassLoader對象載入「部署配置文件web.xml」中定義的每一個servlet類
它首先載入在$CATALINA_HOME/conf/web.xml中部署的servlet類
而後載入在本身的Web App根目錄下的WEB-INF/web.xml中部署的servlet類
web.xml文件有兩部分:servlet類定義和servlet映射定義
每一個被載入的servlet類都有一個名字,且被填入該Context的映射表(mapping table)中,和某種URL PATTERN對應
當該Context得到請求時,將查詢mapping table,找到被請求的servlet,並執行以得到請求迴應
分析一下全部的Context共享的web.xml文件,在其中定義的servlet被全部的Web App載入
Tomcat Server處理一個http請求的過程
假設來自客戶的請求爲:
http://localhost:8080/wsota/wsota_index.jsp
請求被髮送到本機端口8080,被在那裏偵聽的Coyote HTTP/1.1 Connector得到
Connector把該請求交給它所在的Service的Engine來處理,並等待來自Engine的迴應
Engine得到請求localhost/wsota/wsota_index.jsp,匹配它所擁有的全部虛擬主機Host
Engine匹配到名爲localhost的Host(即便匹配不到也把請求交給該Host處理,由於該Host被定義爲該Engine的默認主機)
localhost Host得到請求/wsota/wsota_index.jsp,匹配它所擁有的全部Context
Host匹配到路徑爲/wsota的Context(若是匹配不到就把該請求交給路徑名爲""的Context去處理)
path="/wsota"的Context得到請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet
Context匹配到URL PATTERN爲*.jsp的servlet,對應於JspServlet類
構造HttpServletRequest對象和HttpServletResponse對象,做爲參數調用JspServlet的doGet或doPost方法
Context把執行完了以後的HttpServletResponse對象返回給Host
Host把HttpServletResponse對象返回給Engine
Engine把HttpServletResponse對象返回給Connector
Connector把HttpServletResponse對象返回給客戶browser