大綱css
1、前言html
2、安裝與配置Tomcat前端
3、Tomcat 目錄的結構java
4、Tomcat 配置文件mysql
注,本文的測試的操做系統爲CentOS 6.4 x86_64,軟件版本爲jdk-7u40、apache-tomcat-7.0.42。博文中的全部軟件請到這裏下載:http://yunpan.cn/QGBCLwrZnpLMS。linux
1、前言web
在上一篇博文中咱們主要講解的Tomcat的基礎知識以及相關的Java知識,對於不怎麼清楚的博友能夠參考一下:http://freeloda.blog.51cto.com/2033581/1298687。在這博客中咱們主要講解Tomcat的安裝與配置詳解。那下面咱們就來講一下吧!正則表達式
2、安裝與配置Tomcatsql
1.查看一下安裝文件數據庫
[root@tomcat src]# ls apache-tomcat-7.0.42.tar.gz jdk-7u40-linux-x64.rpm
2.同步一下時間
[root@tomcat java]# ntpdate 202.120.2.101
3.安裝JDK
[root@tomcat src]# rpm -ivh jdk-7u40-linux-x64.rpm
4.修改環境變量
[root@tomcat tomcat]# cat /etc/profile.d/java.sh export JAVA_HOME=/usr/java/jdk1.7.0_40 export PATH=$PATH:$JAVA_HOME/bin
5.測試一下
[root@tomcat java]# java -version java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
注:好了,到這裏咱們的jdk就安裝成功了。下面咱們來安裝一下Tomcat!
6.解壓並建立連接
[root@tomcat src]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/ [root@tomcat local]# ln -sv apache-tomcat-7.0.42 tomcat
7.修改環境變量
[root@tomcat tomcat]# cat /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:$CATALINA_HOME/bin
8.測試一下
[root@tomcat tomcat]# catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0_40 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
9.啓動tomcat
[root@tomcat tomcat]# catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/jdk1.7.0_40 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
10.查看啓動的端口
[root@tomcat tomcat]# netstat -ntulp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1044/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1121/master tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1155/sshd tcp 0 0 :::8080 :::* LISTEN 1464/java tcp 0 0 :::22 :::* LISTEN 1044/sshd tcp 0 0 ::1:25 :::* LISTEN 1121/master tcp 0 0 ::1:6010 :::* LISTEN 1155/sshd tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1464/java tcp 0 0 :::8009 :::* LISTEN 1464/java
11.測試訪問一下
注,好了到這裏咱們的Tomcat就安裝完成了,下面咱們就來看看咱們安裝的內容。
3、Tomcat 目錄的結構
1.Tomcat的安裝
其實對於徹底由Java寫成的Tomcat,Windows版本和Linux版本沒有多大區別,好比Linux版本,在Solaris下也沒有問題。這裏,主要以Linux版本做爲示例。
注,在安裝使用Tomcat以前,先安裝JDK,最好是Sun的JDK 1 .5 以上版。咱們上面已經安裝過了,這裏咱們就不在多說。
2.Tomcat的目錄結構
首先,咱們先來簡單查看一下目錄文件,
[root@tomcat ~]# cd /usr/local/tomcat/ [root@tomcat tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
下面咱們來簡單說明下,
bin ——Tomcat執行腳本目錄
conf ——Tomcat配置文件
lib ——Tomcat運行須要的庫文件(JARS)
logs ——Tomcat執行時的LOG文件
temp ——Tomcat臨時文件存放目錄
webapps ——Tomcat的主要Web發佈目錄(存放咱們本身的JSP,SERVLET,類)
work ——Tomcat的工做目錄,Tomcat將翻譯JSP文件到的Java文件和class文件放在這裏。
下面咱們來講一說各目錄中包含的文件,
bin目錄下的文件:
[root@tomcat tomcat]# ls bin/ bootstrap.jar commons-daemon.jar cpappend.bat setclasspath.bat startup.bat tool-wrapper.bat catalina.bat commons-daemon-native.tar.gz daemon.sh setclasspath.sh startup.sh tool-wrapper.sh catalina.sh configtest.bat digest.bat shutdown.bat tomcat-juli.jar version.bat catalina-tasks.xml configtest.sh digest.sh shutdown.sh tomcat-native.tar.gz version.sh
咱們來講說最主要主文件有,
catalina.sh 用於啓動和關閉tomcat服務器
configtest.sh 用於檢查配置文件
startup.sh 啓動Tomcat腳本
shutdown.sh 關閉Tomcat腳本
conf目錄下的文件:
[root@tomcat tomcat]# ls conf/ Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat-users.xml web.xml
最主要的配置文件有,
server.xml Tomcat 的全局配置文件
web.xml 爲不一樣的Tomcat配置的web應用設置缺省值的文件
tomcat-users.xml Tomcat用戶認證的配置文件
lib目錄下的文件:
[root@tomcat tomcat]# ls lib/ annotations-api.jar catalina-tribes.jar jasper.jar tomcat-coyote.jar tomcat-i18n-ja.jar catalina-ant.jar ecj-4.2.2.jar jsp-api.jar tomcat-dbcp.jar tomcat-jdbc.jar catalina-ha.jar el-api.jar servlet-api.jar tomcat-i18n-es.jar tomcat-util.jar catalina.jar jasper-el.jar tomcat-api.jar tomcat-i18n-fr.jar
包含被Tomcat使用的各類各樣的jar文件。在Linux/UNIX上,任何這個目錄中的文件將被附加到Tomcat的classpath中。
logs目錄下的文件:
[root@tomcat tomcat]# ls logs/ catalina.2013-09-18.log host-manager.2013-09-18.log localhost_access_log.2013-09-18.txt catalina.out localhost.2013-09-18.log manager.2013-09-18.log
主要的配置文件有,
localhost_access_log.2013-09-18.txt 訪問日誌
localhost.2013-09-18.log 錯誤和其它日誌
manager.2013-09-18.log 管理日誌
catalina.2013-09-18.log Tomcat啓動或關閉日誌文件
webapps目錄下的文件:
[root@tomcat tomcat]# ls webapps/ docs examples host-manager manager ROOT
含Web應用的程序 (JSP、Servlet和JavaBean等)
work目錄下的配置文件:
[root@tomcat tomcat]# ls work/ Catalina [root@tomcat tomcat]# ls work/Catalina/localhost/ _/ docs/ examples/ host-manager/ manager/
由Tomcat自動生成,這是Tomcat放置它運行期間的中間(intermediate)文件(諸如編譯的JSP文件)地方。 若是當Tomcat運行時,你刪除了這個目錄那麼將不可以執行包含JSP的頁面。
好了,Tomcat的目錄結構咱們就說到這了,下面咱們來講說Tomcat應用程序的組成。
3.Tomcat 應用程序的組成
注,上面的內容中咱們講解了Tomcat的目錄結構,其中有個目錄是webapps,主要存放Web應用程序。那咱們下面來講一說Web應用程序的組成。
按照Tomcat的規範,Tomcat的Web應用程序應該由以下目錄組成,
(1).頁面內容等文件的存放位置:*.html, *.jsp等能夠有許多目錄層次,由用戶的網站結構而定,實現的功能應該是網站的界面,也就是用戶主要的可見部分。除了HTML文件、JSP文件外,還有js(JavaScript)文件和css(樣式表)文件以及其餘多媒體文件等。
(2).Web-INF/web.xml 這是一個Web應用程序的描述文件。這個文件是一個XML文件,描述了Servlet和這個Web應用程序的其餘組件信息,此外還包括一些初始化信息和安全約束等等。
(3).Web-INF/classes/ 這個目錄及其下的子目錄應該包括這個Web應用程序的全部JavaBean及Servlet等編譯好的Java類文件(*.class)文件,以及沒有被壓縮打入JAR包的其餘class文件和相關資源。注意,在這個目錄下的Java類應該按照其所屬的包層次組織目錄(即若是該*.class文件具備包的定義,則該*.class文件應該放在.\WEB-INF\classes\包名下)。
(4).一般Web-INF/classes/ 這個目錄下的類文件也能夠打包成JAR文件,並能夠放到WEB-INF下的lib目錄下。如將 classes目錄下的各個*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*)
注,
WEB-INF目錄中包含應用軟件所使用的資源,可是WEB-INF卻不在公共文檔根目錄之中。在這個目錄中所包含的文件都不能被客戶機所訪問。
類目錄中(在WEB-INF下)包含運行Web應用程序時所需的Servlets,Beans等類。
lib目錄(在WEB-INF下)包含有Java archive files (JARs),例如標籤庫或者Servlets,Beans等類的*.jar文件。
若是一個類出如今JAR文件中同時也出如今類的目錄中,類加載器會加載位於類目錄中的那一個。
(5). common/lib/ 這個目錄下包含了全部壓縮到JAR文件中的類文件和相關文件。好比:第三方提供的Java庫文件、JDBC驅動程序等。
其中msbase.jar、mssqlserver.jar、msutil.jar文件爲SqlServer2000的JDBC驅動程序
其中servlet-api.jar和jsp-api.jar爲Servlet和JSP的API所在的包
好了,Tomcat的應用程序的能成咱們就基本說到這裏了,下面咱們來看一下默認Web程序的目錄結構。
[root@tomcat ~]# cd /usr/local/tomcat/ [root@tomcat tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work [root@tomcat tomcat]# cd webapps/ [root@tomcat webapps]# ls docs examples host-manager manager ROOT [root@tomcat webapps]# cd examples/ [root@tomcat examples]# ls index.html jsp servlets WEB-INF websocket [root@tomcat examples]# cd WEB-INF/ [root@tomcat WEB-INF]# ls classes jsp jsp2 lib tags web.xml
到這裏咱們的Tomcat的目錄結構就講解完成了,下面咱們得來詳細說說,Tomcat的配置文件。
4、Tomcat 配置文件
1.簡介
查看一下默認配置文件,
[root@tomcat ~]# cd /usr/local/tomcat/conf/ [root@tomcat conf]# ls Catalina catalina.policy catalina.properties context.xml logging.properties server.xml tomcat-users.xml web.xml
Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有如下幾個:
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息;
web.xml:遵循Servlet規範標準的配置文件,用於配置servlet,併爲全部的Web應用程序提供包括MIME映射等默認配置信息;
tomcat-user.xml:Realm認證時用到的相關角色、用戶和密碼等信息;Tomcat自帶的manager默認狀況下會用到此文件;在Tomcat中添加/刪除用戶,爲用戶指定角色等將經過編輯此文件實現;
catalina.policy:Java相關的安全策略配置文件,在系統資源級別上提供訪問控制的能力;
catalina.properties:Tomcat內部package的定義及訪問相關的控制,也包括對經過類裝載器裝載的內容的控制;Tomcat在啓動時會事先讀取此文件的相關設置;
logging.properties: Tomcat經過本身內部實現的JAVA日誌記錄器來記錄操做相關的日誌,此文件即爲日誌記錄器相關的配置信息,能夠用來定義日誌記錄的組件級別以及日誌文件的存在位置等;
context.xml:全部host的默認配置信息;
注,下面咱們對經常使用的配置文件進行詳解。
2.server.xml
首先,咱們來查看一下默認的server.xml文件,
Tomcat以面向對象的方式運行,它能夠在運行時動態加載配置文件中定義的對象結構,這有點相似於apache的httpd模塊的調用方式。server.xml中定義的每一個主元素都會被建立爲對象,並以某特定的層次結構將這些對象組織在一塊兒。下面是默認配置,
[root@tomcat conf]# cat server.xml <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Note: A "Server" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/server.html --> <Server port="8005" shutdown="SHUTDOWN"> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <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> <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools--> <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- A "Connector" using the shared thread pool--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- Define a SSL HTTP/1.1 Connector on port 8443 This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation --> <!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" /> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase". Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <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等。
下面簡單介紹幾個經常使用組件:
(1).Server組件
如上面示例文件中定義的:
<Server port=」8005」 shutdown=」SHUTDOWN」>
這會讓Tomcat啓動一個server實例(即一個JVM),它監聽在8005端口以接收shutdown命令。各Server的定義不能使用同一個端口,這意味着若是在同一個物理機上啓動了多個Server實例,必須配置它們使用不一樣的端口。這個端口的定義用於爲管理員提供一個關閉此實例的便捷途徑,所以,管理員能夠直接telnet至此端口使用SHUTDOWN命令關閉此實例。不過,基於安全角度的考慮,這一般不容許遠程進行。
Server的相關屬性:
className: 用於實現此Server容器的徹底限定類的名稱,默認爲org.apache.catalina.core.StandardServer;
port: 接收shutdown指令的端口,默認僅容許經過本機訪問,默認爲8005;
shutdown:發往此Server用於實現關閉tomcat實例的命令字符串,默認爲SHUTDOWN;
(2).Service組件
Service主要用於關聯一個引擎和與此引擎相關的鏈接器,每一個鏈接器經過一個特定的端口和協議接收入站請求交將其轉發相當聯的引擎進行處理。所以,Service要包含一個引擎、一個或多個鏈接器。
如上面示例中的定義:
<Service name=」Catalina」>
這定義了一個名爲Catalina的Service,此名字也會在產生相關的日誌信息時記錄在日誌文件當中。
Service相關的屬性:
className: 用於實現service的類名,通常都是org.apache.catalina.core.StandardService。
name:此服務的名稱,默認爲Catalina;
(3).Connector組件
進入Tomcat的請求能夠根據Tomcat的工做模式分爲以下兩類:
Tomcat做爲應用程序服務器:請求來自於前端的web服務器,這多是Apache, IIS, Nginx等;
Tomcat做爲獨立服務器:請求來自於web瀏覽器;
Tomcat應該考慮工做情形併爲相應情形下的請求分別定義好須要的鏈接器才能正確接收來自於客戶端的請求。一個引擎能夠有一個或多個鏈接器,以適應多種請求方式。
定義鏈接器可使用多種屬性,有些屬性也只適用於某特定的鏈接器類型。通常說來,常見於server.xml中的鏈接器類型一般有4種:
HTTP鏈接器
SSL鏈接器
AJP 1.3鏈接器
proxy鏈接器
如上面示例server.xml中定義的HTTP鏈接器:
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443"/>
定義鏈接器時能夠配置的屬性很是多,但一般定義HTTP鏈接器時必須定義的屬性只有「port」,定義AJP鏈接器時必須定義的屬性只有"protocol",由於默認的協議爲HTTP。如下爲經常使用屬性的說明:
address:指定鏈接器監聽的地址,默認爲全部地址,即0.0.0.0;
maxThreads:支持的最大併發鏈接數,默認爲200;
port:監聽的端口,默認爲0;
protocol:鏈接器使用的協議,默認爲HTTP/1.1,定義AJP協議時一般爲AJP/1.3;
redirectPort:若是某鏈接器支持的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的端口;
connectionTimeout:等待客戶端發送請求的超時時間,單位爲毫秒,默認爲60000,即1分鐘;
enableLookups:是否經過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名;默認爲true;
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" />
(4).Engine組件
Engine是Servlet處理器的一個實例,即servlet引擎,默認爲定義在server.xml中的Catalina。Engine須要defaultHost屬性來爲其定義一個接收全部發往非明肯定義虛擬主機的請求的host組件。如前面示例中定義的:
<Engine name="Catalina" defaultHost="localhost">
經常使用的屬性定義:
defaultHost:Tomcat支持基於FQDN的虛擬主機,這些虛擬主機能夠經過在Engine容器中定義多個不一樣的Host組件來實現;但若是此引擎的鏈接器收到一個發往非非明肯定義虛擬主機的請求時則須要將此請求發往一個默認的虛擬主機進行處理,所以,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名;
name:Engine組件的名稱,用於日誌和錯誤信息記錄時區別不一樣的引擎;
注,Engine容器中能夠包含Realm、Host、Listener和Valve子容器。
(5).Host組件
位於Engine容器中用於接收請求並進行相應處理的主機或虛擬主機,如前面默認配置文件中定義:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
經常使用屬性說明:
appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔後的WAR文件的目錄路徑;可使用基於$CATALINA_HOME的相對路徑;
autoDeploy:在Tomcat處於運行狀態時放置於appBase目錄中的應用程序文件是否自動進行deploy;默認爲true;
unpackWars:在啓用此webapps時是否對WAR格式的歸檔文件先進行展開;默認爲true;
下面是虛擬主機定義示例:
<Engine name="Catalina" defaultHost="localhost"> <Host name="localhost" appBase="webapps"> <Context path="" docBase="ROOT"/> <Context path="/bbs" docBase="/web/bss" reloadable="true" crossContext="true"/> </Host> <Host name="mail.test.com" appBase="/web/mail"> <Context path="" docBase="ROOT"/> </Host> </Engine>
主機別名定義:
若是一個主機有兩個或兩個以上的主機名,額外的名稱都可以以別名的形式進行定義,以下:
<Host name="www.test.com" appBase="webapps" unpackWARs="true"> <Alias>test.com</Alias> </Host>
(6).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"/>
在Tomcat中,每個context定義也可使用一個單獨的XML文件進行,其文件的目錄爲$CATALINA_HOME/conf/<engine name>/<host name>。能夠用於Context中的XML元素有Loader,Manager,Realm,Resources和WatchedResource。
經常使用的屬性定義有:
docBase:相應的Web應用程序的存放位置;也可使用相對路徑,起始路徑爲此Context所屬Host中appBase定義的路徑;切記,docBase的路徑名不能與相應的Host中appBase中定義的路徑名有包含關係,好比,若是appBase爲deploy,而docBase毫不能爲deploy-bbs類的名字;
path:相對於Web服務器根路徑而言的URI;若是爲空「」,則表示爲此webapp的根路徑;若是context定義在一個單獨的xml文件中,此屬性不須要定義;
reloadable:是否容許從新加載此context相關的Web應用程序的類;默認爲false;
(7).Realm組件
一個Realm表示一個安全上下文,它是一個受權訪問某個給定Context的用戶列表和某用戶所容許切換的角色相關定義的列表。所以,Realm就像是一個用戶和組相關的數據庫。定義Realm時唯一必需要提供的屬性是classname,它是Realm的多個不一樣實現,用於表示此Realm認證的用戶及角色等認證信息的存放位置。
JAASRealm:基於Java Authintication and Authorization Service實現用戶認證;
JDBCRealm:經過JDBC訪問某關係型數據庫表實現用戶認證;
JNDIRealm:基於JNDI使用目錄服務實現認證信息的獲取;
MemoryRealm:查找tomcat-user.xml文件實現用戶信息的獲取;
UserDatabaseRealm:基於UserDatabase文件(一般是tomcat-user.xml)實現用戶認證,它實現是一個徹底可更新和持久有效的MemoryRealm,所以可以跟標準的MemoryRealm兼容;它經過JNDI實現;
下面是一個常見的使用UserDatabase的配置:
<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" />
(8).Valve組件
Valve相似於過濾器,它能夠工做於Engine和Host/Context之間、Host和Context之間以及Context和Web應用程序的某資源之間。一個容器內能夠創建多個Valve,並且Valve定義的次序也決定了它們生效的次序。Tomcat中實現了多種不一樣的Valve:
AccessLogValve:訪問日誌Valve
ExtendedAccessValve:擴展功能的訪問日誌Valve
JDBCAccessLogValve:經過JDBC將訪問日誌信息發送到數據庫中;
RequestDumperValve:請求轉儲Valve;
RemoteAddrValve:基於遠程地址的訪問控制;
RemoteHostValve:基於遠程主機名稱的訪問控制;
SemaphoreValve:用於控制Tomcat主機上任何容器上的併發訪問數量;
JvmRouteBinderValve:在配置多個Tomcat爲以Apache經過mod_proxy或mod_jk做爲前端的集羣架構中,當指望中止某節點時,能夠經過此Valve將用記請求定向至備用節點;使用此Valve,必須使用JvmRouteSessionIDBinderListener;
ReplicationValve:專用於Tomcat集羣架構中,能夠在某個請求的session信息發生更改時觸發session數據在各節點間進行復制;
SingleSignOn:將兩個或多個須要對用戶進行認證webapp在認證用戶時鏈接在一塊兒,即一次認證便可訪問全部鏈接在一塊兒的webapp;
ClusterSingleSingOn:對SingleSignOn的擴展,專用於Tomcat集羣當中,須要結合ClusterSingleSignOnListener進行工做;
RemoteHostValve和RemoteAddrValve能夠分別用來實現基於主機名稱和基於IP地址的訪問控制,控制自己能夠經過allow或deny來進行定義,這有點相似於Apache的訪問控制功能;以下面的Valve則實現了僅容許本機訪問/probe:
<Context path="/probe" docBase="probe"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> </Context>
其中相關屬性定義有:
className:相關的java實現的類名,相應於分別應該爲org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;
allow:以逗號分開的容許訪問的IP地址列表,支持正則表達式,所以,點號「.」用於IP地址時須要轉義;僅定義allow項時,非明確allow的地址均被deny;
deny: 以逗號分開的禁止訪問的IP地址列表,支持正則表達式;使用方式同allow;
(9).GlobalNamingResources
應用於整個服務器的JNDI映射,此能夠避免每一個Web應用程序都須要在各自的web.xml建立,這在web應用程序以WAR的形式存在時尤其有用。它一般能夠包含三個子元素:
Environment;
Resource;
ResourceEnvRef;
(10).WatchedResource
WatchedResource能夠用於Context中監視指定的webapp程序文件的改變,而且可以在監視到文件內容發生改變時從新裝載此文件。
(11).Listener
Listener用於建立和配置LifecycleListener對象,而LifecycleListener一般被開發人員用來建立和刪除容器。
(12).Loader
Java的動態裝載功能是其語言功能強大表現之一,Servlet容器使用此功能在運行時動態裝載servlet和它們所依賴的類。Loader能夠用於Context中控制java類的加載。
(13).Manager
Manger對象用於實現HTTP會話管理的功能,Tomcat中有5種Manger的實現:
1) StandardManager
Tomcat的默認會話管理器,用於非集羣環境中對單個處於運行狀態的Tomcat實例會話進行管理。當Tomcat關閉時,這些會話相關的數據會被寫入磁盤上的一個名叫SESSION.ser的文件,並在Tomcat下次啓動時讀取此文件。
2) PersistentManager
當一個會話長時間處於空閒狀態時會被寫入到swap會話對象,這對於內存資源比較吃緊的應用環境來講比較有用。
3)DeltaManager
用於Tomcat集羣的會話管理器,它經過將改變了會話數據同步給集羣中的其它節點實現會話複製。這種實現會將全部會話的改變同步給集羣中的每個節點,也是在集羣環境中用得最多的一種實現方式。
4) BackupManager
用於Tomcat集羣的會話管理器,與DeltaManager不一樣的是,某節點會話的改變只會同步給集羣中的另外一個而非全部節點。
5)SimpleTcpReplicationManager
Tomcat4時用到的版本,過於老舊了。
(14).Stores
PersistentManager必須包含一個Store元素以指定將會話數據存儲至何處。這一般有兩種實現方式:FileStore和JDBCStore。
(15).Resources
常常用於實如今Context中指定須要裝載的但不在Tomcat本地磁盤上的應用資源,如Java類,HTML頁面,JSP文件等。
(16).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元素。
Channel 用於Cluster中給集羣中同一組中的節點定義通訊「信道」。Channel中須要至少定義Membership、Receiver和Sender三個元素,此外還有一個可選元素Interceptor。
Membership 用於Channel中配置同一通訊信道上節點集羣組中的成員狀況,即監控加入當前集羣組中的節點並在各節點間傳遞心跳信息,並且能夠在接收不到某成員的心跳信息時將其從集羣節點中移除。Tomcat中Membership的實現是org.apache.catalina.tribes.membership.McastService。
Sender 用於Channel中配置「複製信息」的發送器,實現發送須要同步給其它節點的數據至集羣中的其它節點。發送器不須要屬性的定義,但能夠在其內部定義一個Transport元素。
Transport 用於Sender內部,配置數據如何發送至集羣中的其它節點。Tomcat有兩種Transport的實現:
1) PooledMultiSender
基於Java阻塞式IO,能夠將一次將多個信息併發發送至其它節點,但一次只能傳送給一個節點。
2)PooledParallelSener
基於Java非阻塞式IO,即NIO,能夠一次發送多個信息至一個或多個節點。
Receiver 用於Channel定義某節點如何從其它節點的Sender接收復制數據,Tomcat中實現的接收方式有兩種BioReceiver和NioReceiver。
3.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服務器的安裝與配置以及各組件詳解就說到這裏了,但願你們有所收穫^_^…… 在前面的兩篇博客中咱們主要講解了,Tomcat相關的理論知識與相關組件的講解,從下一篇博客開始,咱們將講解Tomcat的相關操做,包括Nginx結合Tomcat、Apache結合Tomcat、Tomcat集羣講解等。