本篇文章,我們不打算對server.xml進行深入的講解。因爲就大多數實際開發者而言,對server.xml進行配置的操作少之又少。但是,作爲
tomcat服務器的核心配置文件,server.xml中配置了一些我們開發中需要關注的關鍵的點。比如tomcat服務器的監聽端口port="8080"。這篇文章的
目的就是從整體上介紹server.xml,對server.xml進行一個整體的認知。這樣一來,“進”我們可以對server.xml進行配置,“退”我們可以說自己是
一名合格的程序猿。
一個基本的server.xml通常包含以下元素:Server、Service、Engine、Connector、Host、Context。這6大元素,通常是一個server.xml對外提供
服務的最簡單配置,當然,Context元素並非必須,有些應用並沒有配置Context元素節點。這樣一看,server.xml配置文件也挺簡單的嘛。好了,我們
來看一下這6大元素的相互之間的關聯和配置說明。
只看理論,難免枯燥,先附上最近項目的一個demo的server.xml的部分配置代碼:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8009" shutdown="SHUTDOWN">
<!-- Comment these entries out to disable JMX MBeans support used for the administration web application -->
<Listener className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
<!-- Global JNDI resources -->
<GlobalNamingResources>
<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users -->
<Resource
auth="Container"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
name="UserDatabase"
pathname="conf/tomcat-users.xml"
type="org.apache.catalina.UserDatabase"/>
<Resource
driverClassName="com.ibm.db2.jcc.DB2Driver"
maxActive="4"
maxIdle="2"
maxWait="5000"
name="DefaultDataSource"
password="aaa111"
type="javax.sql.DataSource"
url="jdbc:db2://127.0.0.1:50000/"
username="test"/>
</GlobalNamingResources>
<!-- Define the Tomcat Stand-Alone Service -->
<Service name="Catalina">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector
URIEncoding="UTF-8"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"
enableLookups="false"
maxHttpHeaderSize="8192"
maxSpareThreads="75"
maxThreads="150"
minSpareThreads="5"
port="8080"
redirectPort="8443"/>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector URIEncoding="UTF-8" enableLookups="false" port="8008" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false"></Host>
</Engine>
</Service>
</Server>
一,6大元素的關聯
跟節點Server:一個server.xml有且僅有一個跟節點<Server></Server>
Service:一個Server跟節點可以包含多個Service節點。Service節點是tomcat對外提供服務的基本單元。一個Service節點可以包含多個Connector
節點,但是隻能包含一個Engine節點。
Engine:處理接收的請求。
Connector:從客戶端接收請求。
Host:Host是Engine的子容器。一個Engine可以包含一個或者多個Host節點。每個Host節點代表一個虛擬主機。Host虛擬主機的功能是運行web應用,
包括裝載、啓動、結束web應用。每一個Host虛擬主機對應一個網絡域名實體。
Context:Context節點代表指定虛擬主機上的一個web應用。Context是Host的子容器,一個Host節點可以包含一個或者多個Context節點。有些項目的
server.xml中沒有配置Context節點,是因爲Host節點配置了自動部署autoDeploy="true",關於這點,在下面還會提到。
二,6大元素的屬性配置詳解
1,跟節點Server:最常見的屬性就是port和shutdown了,shutdown屬性表示關閉Server的指令,port屬性表示Server接收shutdown指令的端口號。
2,Service:最常見的屬性就是name,通常的配置是name="Catalina"。
3,Engine:最常見屬性是name和defaultHost,name屬性用於日誌和錯誤信息,在整個Server中是全局唯一的,defaultHost屬性指定了默認的host
名稱,當發往本機的請求指定的host名稱不存在時,一律使用defaultHost指定的host進行處理。因此defaultHost的值必須與Engine節點下的某一個
Host節點的name屬性值相同。
4,Connector:最常見屬性有四個:port、protocol、connectionTimeout、redirectPort。port屬性表示連接請求的端口號。protocol屬性表示
連接請求的協議。connectionTimeout屬性表示連接請求的超時時間。redirectPort屬性表示當強制要求https而請求時http時,重定向至端口號爲8443
的Connector。
5,Host:最常見屬性有四個:name、unpackWARs、appBase、autoDeploy。name屬性表示虛擬主機的主機名,注意,其中一個Host節點的name值與
Engine節點的defaultHost值相同。unpackWARs屬性表示是否將代表web應用的WAR文件解壓。如果值爲true,則通過解壓後的文件結構運行該web應用。
如果值爲false,則直接使用WAR文件運行web應用。appBase屬性表示web應用所在的目錄,默認值是webapps,這是一個相對路徑,代表的是tomcat跟
目錄下webapps文件夾。autoDeploy屬性表示開啓web應用的自動部署,如果值爲true,則tomcat在運行期間,定時檢查新的web應用和更新。
6,Context:最常見的屬性有三個:docBase、path、reloadable。docBase屬性表示該web應用的WAR包所在路徑或者說應用的目錄,在自動部署場
景下,docBase不在appBase目錄中,才需要指定,如果docBase指定的WAR包或應用目錄就在appBase中,則不需要在指定docBase。因爲tomcat會自動
掃描appBase中的WAR包和應用目錄,指定了反而會造成問題。path屬性表示訪問該web應用的上下文路徑,tomcat會根據web應用的path和URI來選擇web
應用處理請求(例如/projectName/index.html)。reloadable屬性表示tomcat是否在運行時監控/WEB-INF/classes和WEB-INF/lib目錄下class文件的改
動,如果值爲true,則當class文件改動時,tomcat會重新加載應用。在開發環境中reloadable設置爲true便於調試,但是在生產環境中reloadable設置
爲true則會影響服務器的性能,因此reloadable屬性的默認值爲false。
本篇文章到此爲止,接下來,有時間小編還會和大家分享一下server.xml中其他非核心元素的配置細節,詳情請參考小編的後續博文
《tomcat核心配置文件server.xml其他非核心元素的配置》