tomcat各個配置文件的做用:
前端
Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有如下幾個:web
server.xml:
apache
Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息;瀏覽器
web.xml:tomcat
遵循Servlet規範標準的配置文件,用於配置servlet,併爲全部的Web應用程序提供包括MIME映射等默認配置信息;安全
tomcat-user.xml:服務器
Realm認證時用到的相關角色、用戶和密碼等信息;Tomcat自帶的manager默認狀況下會用到此文件;在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現;併發
catalina.policy:app
Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力;webapp
catalina.properties:
Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制;Tomcat在啓動時會事先讀取此文件的相關設置;
logging.properties:
Tomcat6經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等;
context.xml:全部host的默認配置信息;
核心配置文件server.xml
Tomcat以面向對象的方式運行,它能夠在運行時動態加載配置文件中定義的對象結構,這有點相似於apache的httpd模塊的調用方式。server.xml中定義的每一個主元素都會被建立爲對象,並以某特定的層次結構將這些對象組織在一塊兒。下面是個樣樣例配置:
<Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.core.JasperListener" /> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <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" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host> </Engine> </Service> </Server> <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" /> <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"> <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" /> </Host> </Engine> </Service> </Server>
server.xml文件中可定義的元素很是多,包括Server, Service, Connector, Engine, Cluster, Host, Alias, Context, Realm, Valve, Manager, Listener, Resources, Resource, ResourceEnvRef, ResourceLink, WatchedResource, GlobalNameingResources, Store, Transaction, Channel, Membership, Transport, Member, ClusterListener等。
下面簡單介紹幾個經常使用組件:
一、Server組件
如上面示例文件中定義的:
<Server port=」8005」 shutdown=」SHUTDOWN」>
這會讓Tomcat6啓動一個server實例(即一個JVM),它監聽在8005端口以接收shutdown命令。各Server的定義不能使用同一個端口,這意味着若是在同一個物理機上啓動了多個Server實例,必須配置它們使用不一樣的端口。這個端口的定義用於爲管理員提供一個關閉此實例的便捷途徑,所以,管理員能夠直接telnet至此端口使用SHUTDOWN命令關閉此實例。不過,基於安全角度的考慮,這一般不容許遠程進行。
Server的相關屬性:
className: 用於實現此Server容器的徹底限定類的名稱,默認爲org.apache.catalina.core.StandardServer;
port: 接收shutdown指令的端口,默認僅容許經過本機訪問,默認爲8005;
shutdown:發往此Server用於實現關閉tomcat實例的命令字符串,默認爲SHUTDOWN;
二、Service組件:
Service主要用於關聯一個引擎和與此引擎相關的鏈接器,每一個鏈接器經過一個特定的端口和協議接收入站請求交將其轉發相當聯的引擎進行處理。困此,Service要包含一個引擎、一個或多個鏈接器。
如上面示例中的定義:
<Service name=」Catalina」>
這定義了一個名爲Catalina的Service,此名字也會在產生相關的日誌信息時記錄在日誌文件當中。
Service相關的屬性:
className: 用於實現service的類名,通常都是org.apache.catalina.core.StandardService。
name:此服務的名稱,默認爲Catalina;
三、Connector組件:
進入Tomcat的請求能夠根據Tomcat的工做模式分爲以下兩類:
Tomcat做爲應用程序服務器:請求來自於前端的web服務器,這多是Apache, IIS, Nginx等;
Tomcat做爲獨立服務器:請求來自於web瀏覽器;
Tomcat應該考慮工做情形併爲相應情形下的請求分別定義好須要的鏈接器才能正確接收來自於客戶端的請求。一個引擎能夠有一個或多個鏈接器,以適應多種請求方式。
定義鏈接器可使用多種屬性,有些屬性也只適用於某特定的鏈接器類型。通常說來,常見於server.xml中的鏈接器類型一般有4種:
1) HTTP鏈接器
2) SSL鏈接器
3) AJP 1.3鏈接器
如上面示例server.xml中定義的HTTP鏈接器:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/>
定義鏈接器時能夠配置的屬性很是多,但一般定義HTTP鏈接器時必須定義的屬性只有「port」,定義AJP鏈接器時必須定義的屬性只有"protocol",由於默認的協議爲HTTP。如下爲經常使用屬性的說明:
1) address:指定鏈接器監聽的地址,默認爲全部地址,即0.0.0.0;
2) maxThreads:支持的最大併發鏈接數,默認爲200;
3) port:監聽的端口,默認爲0;
4) protocol:鏈接器使用的協議,默認爲HTTP/1.1,定義AJP協議時一般爲AJP/1.3;
5) redirectPort:若是某鏈接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;
6) connectionTimeout:等待客戶端發送請求的超時時間,單位爲毫秒,默認爲60000,即1分鐘;
7) enableLookups:是否經過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認爲true;
8) acceptCount:設置等待隊列的最大長度;一般在tomcat全部處理線程均處於繁忙狀態時,新發來的請求將被放置於等待隊列中;
下面是一個定義了多個屬性的SSL鏈接器:
<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
四、Engine組件:
Engine是Servlet處理器的一個實例,即servlet引擎,默認爲定義在server.xml中的Catalina。Engine須要defaultHost屬性來爲其定義一個接收全部發往非明肯定義虛擬主機的請求的host組件。如前面示例中定義的:
<Engine name="Catalina" defaultHost="localhost">
經常使用的屬性定義:
defaultHost:Tomcat支持基於FQDN的虛擬主機,這些虛擬主機能夠經過在Engine容器中定義多個不一樣的Host組件來實現;但若是此引擎的鏈接器收到一個發往非非明肯定義虛擬主機的請求時則須要將此請求發往一個默認的虛擬主機進行處理,所以,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;
name:Engine組件的名稱,用於日誌和錯誤信息記錄時區別不一樣的引擎;
jvmRoute=
Engine容器中能夠包含Realm、Host、Listener和Valve子容器。
五、Host組件:
位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面示例中的定義:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
經常使用屬性說明:
1) appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可使用基於$CATALINA_BASE的相對路徑; 2) autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true; 3) unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;