導讀 | tomcat安裝配置詳解第三部分,配置文件詳解及tomcat配置 |
三,配置文件詳解html
四、Engine組件前端
Engine是Servlet處理器的一個實例,即servlet引擎,默認爲定義在server.xml中的Catalina。Engine須要defaultHost屬性來爲其定義一個接收全部發往非明肯定義虛擬主機的請求的host組件。如前面示例中定義的:java
<Engine name=」Catalina」 defaultHost=」localhost」>mysql
經常使用的屬性定義:linux
defaultHost:Tomcat支持基於FQDN的虛擬主機,這些虛擬主機能夠經過在Engine容器中定義多個不一樣的Host組件來實現;但若是此引擎的鏈接器收到一個發往非非明肯定義虛擬主機的請求時則須要將此請求發往一個默認的虛擬主機進行處理,所以,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;web
name:Engine組件的名稱,用於日誌和錯誤信息記錄時區別不一樣的引擎;正則表達式
Engine容器中能夠包含Realm、Host、Listener和Valve子容器。sql
五、Host組件數據庫
位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面示例中的定義:apache
<Host name=」localhost」 appBase=」webapps」 unpackWARs=」true」 autoDeploy=」true」 xmlValidation=」false」 xmlNamespaceAware=」false」> </Host>
經常使用屬性說明:
1) appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可使用基於$CATALINA_HOME的相對路徑;
2) autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true;
3) unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;
虛擬主機定義示例:
<Engine name=」Catalina」 defaultHost=」localhost」> <Host name=」localhost」 appBase=」webapps」> <Context path=」」 docBase=」ROOT」/> <Context path=」/bbs」 docBase=」/web/bss」 #path路徑是定義在defaultHost背後的 reloadable=」true」 crossContext=」true」/> </Host> <Host name=」mail.magedu.com」 appBase=」/web/mail」> <Context path=」」 docBase=」ROOT」/> </Host> </Engine>
主機別名定義:
若是一個主機有兩個或兩個以上的主機名,額外的名稱都可以以別名的形式進行定義,以下:
<Host name=」www.ttlsa.com」 appBase=」webapps」 unpackWARs=」true」> <Alias>feiyu.com</Alias> </Host>
六、Context組件:
Context在某些意義上相似於apache中的路徑別名,一個Context定義用於標識tomcat實例中的一個Web應用程序;以下面的定義:
<!– Tomcat Root Context –> <Context path=」」 docBase=」/web/webapps」/> <!– buzzin webapp –> <Context path=」/bbs」 docBase=」/web/threads/bbs」 reloadable=」true」> </Context> <!– chat server –> <Context path=」/chat」 docBase=」/web/chat」/> <!– darian web –> <Context path=」/darian」 docBase=」darian」/>
在Tomcat6中,每個context定義也可使用一個單獨的XML文件進行,其文件的目錄爲$CATALINA_HOME/conf//。能夠用於Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。
七、Realm組件
一個Realm表示一個安全上下文,它是一個受權訪問某個給定Context的用戶列表和某用戶所容許切換的角色相關定義的列表。所以,Realm就像是一個用戶和組相關的數據庫。定義Realm時唯一必需要提供的屬性是classname,它是Realm的多個不一樣實現,用於表示此Realm認證的用戶及角色等認證信息的存放位置。
<Realm className=」org.apache.catalina.realm.UserDatabaseRealm」 resourceName=」UserDatabase」/>
下面是一個使用JDBC方式獲取用戶認證信息的配置:
<Realm className=」org.apache.catalina.realm.JDBCRealm」 debug=」99″ driverName=」org.gjt.mm.mysql.Driver」 connectionURL=」jdbc:mysql://localhost/authority」 connectionName=」test」 connectionPassword=」test」 userTable=」users」 userNameCol=」user_name」 userCredCol=」user_pass」 userRoleTable=」user_roles」 roleNameCol=」role_name」 />
八、Valve組件
Valve相似於過濾器,它能夠工做於Engine和Host/Context之間、Host和Context之間以及Context和Web應用程序的某資源之間。一個容器內能夠創建多個Valve,並且Valve定義的次序也決定了它們生效的次序。Tomcat6中實現了多種不一樣的Valve: AccessLogValve:訪問日誌Valve ExtendedAccessValve:擴展功能的訪問日誌Valve JDBCAccessLogValve:經過JDBC將訪問日誌信息發送到數據庫中; RequestDumperValve:請求轉儲Valve; RemoteAddrValve:基於遠程地址的訪問控制; RemoteHostValve:基於遠程主機名稱的訪問控制; SemaphoreValve:用於控制Tomcat主機上任何容器上的併發訪問數量;
<Context path=」/probe」 docBase=」probe」> <Valve className=」org.apache.catalina.valves.RemoteAddrValve」 allow=」127\.0\.0\.1″/> </Context>
其中相關屬性定義有:
1) className:相關的java實現的類名,相應於分別應該爲org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;
2) allow:以逗號分開的容許訪問的IP地址列表,支持正則表達式,所以,點號「.」用於IP地址時須要轉義;僅定義allow項時,非明確allow的地址均被deny;
3) deny: 以逗號分開的禁止訪問的IP地址列表,支持正則表達式;使用方式同allow;
九、GlobalNamingResources
應用於整個服務器的JNDI映射,此能夠避免每一個Web應用程序都須要在各自的web.xml建立,這在web應用程序以WAR的形式存在時尤其有用。它一般能夠包含三個子元素:Environment,
Resource、
ResourceEnvRef。
十、WatchedResource
WatchedResource能夠用於Context中監視指定的webapp程序文件的改變,而且可以在監視到文件內容發生改變時從新裝載此文件。
十一、Listener
Listener用於建立和配置LifecycleListener對象,而LifecycleListener一般被開發人員用來建立和刪除容器。
十二、Loader
Java的動態裝載功能是其語言功能強大表現之一,Servlet容器使用此功能在運行時動態裝載servlet和它們所依賴的類。Loader能夠用於Context中控制java類的加載。
1三、Manager
Manger對象用於實現HTTP會話管理的功能,Tomcat6中有5種Manger的實現:
1) StandardManager
Tomcat6的默認會話管理器,用於非集羣環境中對單個處於運行狀態的Tomcat實例會話進行管理。當Tomcat關閉時,這些會話相關的數據會被寫入磁盤上的一個名叫SESSION.ser的文件,並在Tomcat下次啓動時讀取此文件。
2) PersistentManager
當一個會話長時間處於空閒狀態時會被寫入到swap會話對象,這對於內存資源比較吃緊的應用環境來講比較有用。
3)DeltaManager
用於Tomcat集羣的會話管理器,它經過將改變了會話數據同步給集羣中的其它節點實現會話複製。這種實現會將全部會話的改變同步給集羣中的每個節點,也是在集羣環境中用得最多的一種實現方式。
4)BackupManager
用於Tomcat集羣的會話管理器,與DeltaManager不一樣的是,某節點會話的改變只會同步給集羣中的另外一個而非全部節點。
5)SimpleTcpReplicationManager
Tomcat4時用到的版本,過於老舊了。
1四、Stores
PersistentManager必須包含一個Store元素以指定將會話數據存儲至何處。這一般有兩種實現方式:FileStore和JDBCStore。
1五、Resources
常常用於實如今Context中指定須要裝載的但不在Tomcat本地磁盤上的應用資源,如Java類,HTML頁面,JSP文件等。
1六、Cluster
專用於配置Tomcat集羣的元素,可用於Engine和Host容器中。在用於Engine容器中時,Engine中的全部Host均支持集羣功能。在Cluster元素中,須要直接定義一個Manager元素,這個Manager元素有一個其值爲org.apache.catalina.ha.session.DeltaManager或org.apache.catalina.ha.session.BackupManager的className屬性。同時,Cluster中還須要分別定義一個Channel和ClusterListener元素。
16.一、Channel
用於Cluster中給集羣中同一組中的節點定義通訊「信道」。Channel中須要至少定義Membership、Receiver和Sender三個元素,此外還有一個可選元素Interceptor。
16.二、Membership
用於Channel中配置同一通訊信道上節點集羣組中的成員狀況,即監控加入當前集羣組中的節點並在各節點間傳遞心跳信息,並且能夠在接收不到某成員的心跳信息時將其從集羣節點中移除。Tomcat6中Membership的實現是org.apache.catalina.tribes.membership.McastService。
16.三、Sender
用於Channel中配置「複製信息」的發送器,實現發送須要同步給其它節點的數據至集羣中的其它節點。發送器不須要屬性的定義,但能夠在其內部定義一個Transport元素。
16.4 Transport
用於Sender內部,配置數據如何發送至集羣中的其它節點。Tomcat6有兩種Transport的實現:
1) PooledMultiSender
基於Java阻塞式IO,能夠將一次將多個信息併發發送至其它節點,但一次只能傳送給一個節點。
2)PooledParallelSener
基於Java非阻塞式IO,即NIO,能夠一次發送多個信息至一個或多個節點。
16.5 Receiver
用於Channel定義某節點如何從其它節點的Sender接收復制數據,Tomcat6中實現的接收方式有兩種BioReceiver和NioReceiver。
web.xml文件
web.xml基於Java Servlet規範,可被用於每個Java servlet容器,一般有兩個存放位置,$CATALINA_BASE/conf和每一個Web應用程序(一般是WEB-INF/web.xml)。Tomcat在deploy一個應用程序時(包括重啓或從新載入),它首先讀取conf/web.xml,然後讀取WEB-INF/web.xml。
Tomcat 的配置層次,各組件之間的關係
<server> <service> <connector /> 簡單組件,不須要封裝 <engine> <host> <context> </context> </host> <host> </host> </engine> </service> </server>
頂級組件:位於整個配置的頂層;<server>
容器類:能夠包含其它組件的組件;<service>
鏈接器組件:鏈接用戶請求至tomcat;<connector />
被嵌套類的組件:位於一個容器當中,不能包含其它組件;
容器類:
engine: 核心容器,catalina引擎,負責經過connector接收用戶請求
host: 相似於httpd中的虛擬主機;支持基於FQDN的虛擬主機
context: 最內層的容器類組件,一個context表明一個web應用程序;配置context的主要目的,指定對應的webapp的根目錄;還能爲webapp指定額外的屬性,如部署方式等;
服務:service, 將鏈接器關聯至engine;所以一個service內部能夠有多個connector,但只能有一個engine;
頂級組件:server,表示一個運行於JVM中的tomcat實例;
嵌套類組件:
valve: 攔截請求並在將其轉至對應的webapp以前進行某種處理操做;能夠用於任何容器中;
access log valve: 響應前先記錄日誌
remote address filter value: 基於IP作訪問控制
logger: 日誌記錄器,用於記錄組件 內部的狀態信息;
可用於除context以外的任何容器中
realm: 能夠用於任何容器類的組件中,關聯一個用戶認證庫,實現認證和受權;
UserDatabaseRealm: 使用JNDI自定義的用戶認證庫;
MemoryRealm: tomcat-users.xml中
JDBCRealm: 基於JDBC鏈接至數據庫中查找用戶;
webapp體系結構:
webapp有特定的組織格式,是一種層次型目錄結構;一般包含了servlet代碼文件、jsp頁面文件、類文件、部署描述符文件等等,通常會打包成歸檔格式;
/: web應用程序的根目錄 ,ROOT爲根目錄
/WEB-INF: 包含當前webapp的deploy描述符,如全部的servlets和JSP等動態文件的詳細信息,會話超時時間和數據源等;所以,其也一般用於定義當前webapp特有的資源,一般web.xml和context.xml均放置於此目錄;
/WEB-INF/classes: 包含全部服務器端類及當前應用程序相關的其它第三方類等;;
/WEB-INF/lib: 包含JSP所用到的JAR文件,此webapp自有可以被打包爲jar格式的類;
Tomcat的鏈接器分爲兩類:HTTP鏈接器和Web服務器鏈接器。
Tomcat的HTTP鏈接器有三種:
1) 基於java的HTTP/1.1鏈接器,這也是Tomcat6默認使用的鏈接器,即Coyote;它是Tomcat做爲standalone模式工做時所用到的鏈接器,可直接響應來自用戶瀏覽器的關於JSP、servlet和HTML的請求;此鏈接器是一個Java類,定義在server.xml當中,默認使用8080端口;
2) Java開發的高性能NIO HTTP/1.1鏈接器,它支持非阻塞式IO和Comnet,在基於庫向tomcat發起請求時,此鏈接器表現不俗;但其實現不太成熟,有嚴重bug存在;
3) C/C++開發的native APR HTTP/1.1鏈接器;在負載較大的場景中,此鏈接器能夠提供很是好的性能;APR即Apache Portable Runtime,它是一個能讓開發者採用與平臺無關的風格的方式來開發C/C++代碼本地庫,它可以很好的跨Windows, Linux和Unix平臺工做。此鏈接器從三個主要方面優化了系統性能並提高了系統的伸縮能力:
(1)使用sendfile()內核模式調用發送大的靜態文件;
(2) 僅使用一個native code保持大量的鏈接;
(3) 使用可以加速SSL請求處理的OpenSSL本地代碼;
啓用APR鏈接器的條件:
1) 將鏈接器的protocol屬性設定爲org.apache.coyote.http11.Http11AprProtocol,即 2) APR的庫文件已經在系統庫文件的搜索路徑內,必須額外編譯安裝apr;
基於鏈接器提升Tomcat性能的方法:
1) 設置tcpNoDelay屬性值爲「true」;
2) 經過maxKeepAliveRequest屬性調整容許keep-alive功能的請求的最大數目,值爲1時表示禁用;
3) 調整socketBuffer屬性的值以改變套接字緩衝的大小;
4) 將enableLookups設置爲false以禁用DNS反解;
5) Tomcat是一個多線程的Servlet容器,使用線程池能對服務器性能帶去很大影響;這主要經過maxThreads、maxSpareThreads和minSpareThreads來定義;
6) 經過JAVA_OPTS,如-Xms和-Xmx設定JVM相關的參數以定義其使用內存的能力;
AJP(Apache JServ Protocol)鏈接器 :AJP是面向數據包的基於TCP/IP的協議,它在Apache和Tomcat的實例之間提供了一個專用的通訊信道。目前經常使用AJP協議的版本是1.3,它主要有如下特徵:
1) 在快速網絡有着較好的性能表現,支持數據壓縮傳輸;
2) 支持SSL,加密及客戶端證書;
3) 支持Tomcat實例集羣;
4) 支持在apache和tomcat之間的鏈接的重用;
四,配置Tomcat
定義虛擬主機,將虛擬主機定義在/www/webapps 下,在配置文件中的 Engine 組件中添加:
<Host name=」ttlsa.com」 appBase=」/www/webapps」 unpackWARs=」true」 autoDeploy=」true」> <Context path=」」 docBases=」」 /> <Valve className=」org.apache.catalina.valves.AccessLogValve」 directory=」logs」 prefix=」ttlsa_access_log.」 suffix=」.txt」 pattern=」%h %l %u %t "%r" %s %b」 /> </Host>
註釋掉上面的虛擬主機,修改server.xml,做以下修改,在/webapps/目錄下建立test目錄,並添加測試頁面index.jsp:
<Host name=」buy.ttlsa.com」 appBase=」webapps」 unpackWARs=」true」 autoDeploy=」true」> <Context path=」」 docBase=」test」 reloadable=」true」 /> <Valve className=」org.apache.catalina.valves.AccessLogValve」 directory=」logs」 prefix=」buy_access_log.」 suffix=」.txt」 pattern=」%h %l %u %t "%r" %s %b」 /> </Host>
本文原創地址:https://www.linuxprobe.com/tomcat-install-configure3.html