這里對tomcat7的server.xml文件進行解釋一下,方便在分析啟動源碼的時候理解Digester做的事情。
<?xml version='1.0' encoding='utf-8'?><Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.security.SecurityListener" /> <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" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <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"> <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> <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.authenticator.SingleSignOn" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service></Server>
Server
tomcat中Server代表一個tomcat實例,所以只會存在一個Server,而在配置文件中也是作為頂級元素出現,代碼如下:
<Server port="8005" shutdown="SHUTDOWN">。。。</Server>
Listener
監聽器,用來監聽某些事件的發生。
VersionLoggerListener,啟動時對tomcat,java,操作系統信息打印日志。
SecurityListener,啟動tomcat時,做一些安全檢查。
AprLifecycleListener,用來監聽Apache服務器相關的。
JasperListener,Jasper 2 JSP 引擎,主要負責對更新之后的jsp進行重新編譯。
JreMemoryLeakPreventionListener,防止內存溢出的監聽器。
GlobalResourcesLifecycleListener,初始化定義在元素GlobalNamingResources下的全局JNDI資源
ThreadLocalLeakPreventionListener,防止ThreadLocal溢出監聽器。
GlobalNamingResources
GlobalNamingResources定義Server的全局JNDI資源??梢詾樗械囊鎽贸绦蛞?。
<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>
配置文件中定義了一個JNDI,名為UserDatabase,通過conf/tomcat-users.xml
的內容,來得到一個用于授權用戶的數據庫,是一個內存數據庫。
Service
<Service name="Catalina">。。。</Service>
Server下面可以有多個Service,Service下面有多個Connector和一個Engine。這里默認的Service名字為Catalina,下面有兩個Connector:Http和AJP。
Connector
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
上面是用來處理http請求的Connector。
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
上面是使用線程池,處理http請求。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
上面處理ssl請求,端口是8443。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
上面處理AJP請求,可以將tomcat和apache的http服務器一起運行。
Engine
Engine是容器,一個Service中只包含一個Engine:
<Engine name="Catalina" defaultHost="localhost">...</Engine>
Engine下面可以包含一個多或者多個Host。Engine從http請求的頭信息中的主機名或者ip映射到真確的主機上。
Cluster
集群相關的配置。tomcat支持服務器集群,可以復制整個集群的回話和上下文屬性,也可以部署一個war包到所有的集群上。
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
Realm
<Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/></Realm>
Realm是一個包含user、password、role的數據庫,Realm可以定義在任何容器中。這里通過外部資源UserDatabase進行認證。
Host
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /></Host>
Host虛擬主機,定義在Engine下面,一個Engine下面可以有多個Host,在一個Host下面可以有多個Context。
Value
<Valve className="org.apache.catalina.authenticator.SingleSignOn" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
Value在這里是閥門的意思,可以攔截http請求,可以定義在任何容器中。
SingleSignOn 是單點登錄,AccessLogValve是訪問日志的記錄。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答
圖片精選