經過學習Tomcat的源碼還能夠更加深刻地瞭解JEE規範,學習常見的設計模式。本系列的文章,將會介紹Tomcat的核心功能是如何實現的,一方面做爲本身學習的總結,另外一方面也但願給學習Tomcat的朋友提供一點幫助材料。web
本文首先介紹Tomcat的基本配置,涉及的配置文件就是\conf\server.xml文件。Tomcat自己經過一系列的鏈接器和內部組件來分別實現網絡請求的監聽和處理。一個示例性的server.xml以下:apache
從下面的配置咱們中,位於配置文件頂層的是Server和Service元素,其中Server元素是整個配置文件的根元素,而Service元素則是配置服務器的核心元素。設計模式
在Service元素內部,定義了一系列的鏈接器和內部容器類的組件。如今分別對其進行簡單的介紹,後續的文章將會對其進行逐一分析。瀏覽器
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/> </Host> </Engine> </Service> </Server>
<Server>元素對應的是整個Servlet容器,是整個配置的頂層元素,由org.apache.catalina.Server接口來定義,默認的實現類是org.apache.catalina.core. StandardServer。該元素可配置的屬性主要是port和shutdown,分別指的是監聽shutdown命令的端口和命令(這兩個屬性沒玩過,後續試試)。在該元素中能夠定義一個或多個<Service>元素,除此之外還能夠定義一些全局的資源或監聽器。tomcat
<Service>元素由org.apache.catalina.Service接口定義,默認的實現類爲org.apache.catalina.core. StandardService。在該元素中能夠定義一個<Engine>元素、一個或多個<Connector>元素,這些<Connector>元素共享同一個<Engine>元素來進行請求的處理。服務器
<Engine>元素由org.apache.catalina.Engine元素來定義,默認的實現類是org.apache.catalina.core. StandardEngine。<Engine>元素會用來處理<Service>中全部<Connector>接收到的請求,在<Engine>中能夠定義多個<Host>元素做爲虛擬主機。<Engine>是Tomcat配置中第一個實現org.apache.catalina.Container的接口,所以能夠在其中定義一系列的子元素如<Realm>、<Valve>。網絡
<Connector>元素由org.apache.catalina.connector. Connector類來定義。< Connector>是接受客戶端瀏覽器請求並向用戶最終返回響應結果的組件。該元素位於< Service>元素中,能夠定義多個,在咱們的示例中配置了兩個,分別接受AJP請求和HTTP請求,在配置中,須要爲其制定服務的協議和端口號。app
<Host>元素由org.apache.catalina.Host接口來定義,默認實現爲org.apache.catalina.core. StandardHost,該元素定義在<Engine>中,能夠定義多個。每一個<Host>元素定義了一個虛擬主機,它能夠包含一個或多個Web應用(經過<Context>元素來進行定義)。由於<Host>也是容器類元素,因此能夠在其中定義子元素如<Realm>、<Valve>。webapp
<Context>元素由org.apache.catalina.Context接口來定義,默認實現類爲org.apache.catalina.core. StandardContext。該元素也許是你們用的最多的元素,在其中定義的是Web應用。一個<Host>中能夠定義多個<Context>元素,分別對應不一樣的Web應用。該元素的屬性,你們常常會用到如path、reloadable等,能夠在<Context>中定義子元素如<Realm>、<Valve>。學習
以上簡單介紹了Tomcat元素的配置,使咱們可能對這個龐大的產品有個總體的瞭解,後續會對每一個部分進行詳細的介紹,下部分會首先介紹Tomcat的啓動流程。