tomcat是一款基於servlet規範開發的應用服務器。(http服務器+servlet容器)
概述
整體架構包含兩個核心組建 連接器和容器。連接器對外 處理連接,容器對內處理業務請求
連接器使用ProtocalHandler接口封裝通信協議和IO模型的差異
連接器
主要有三塊
【endpoint】底層socket維護,維護連接,解析tcp ip協議 把字節流送給processor
【processor】應用層解析器 解析http/ajp/之類,把請求處理成TomcatRequest傳給adapter
【adapter】連接器和容器的橋樑,把tomcatRequest轉換成servletRequest
容器
tomcat的容器主要分四個組建,基本都是1對N的關係。
host域名/context代表一個web服務/wrapper就是servlet。這幾個使用的是組合模式,都有一個父接口Container。
來簡單看下外部請求是如何定位到具體的servlet的。
請求過來一定是先建立連接的,這個時候Connector就被確認了,connector屬於一個service,一個service裏面只有一個容器。
現在容器也確定了,後面按照 url context就能找到context,再根據conetxt的web.xml按照映射配置找到servlet
tomcat server.xml片段
<Server>
<Service>
<Connector>
</Connector>
<Engine>
<host>
<Context></Context>
</host>
</Engine>
</Service>
</Server>
web.xml片段
<!--****************************servlet映射關係配置*************************--> <servlet>
<servlet-name>XxServlet</servlet-name>
<servlet-class>com.xx.XxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XxServlet</servlet-name>
<url-pattern>/xx</url-pattern>
</servlet-mapping>