大綱 一,、前言 二,、安裝與配置Tomcat 三、Tomcat 目錄的結(jié)構(gòu) 四,、Tomcat 配置文件
注,,本文的測試的操作系統(tǒng)為CentOS 6.4 x86_64,軟件版本為jdk-7u40,、apache-tomcat-7.0.42,。博文中的所有軟件請到這里下載:http:///QGBCLwrZnpLMS。
一,、前言 在上一篇博文中我們主要講解的Tomcat的基礎(chǔ)知識以及相關(guān)的Java知識,,對于不怎么清楚的博友可以參考一下:http://freeloda.blog.51cto.com/2033581/1298687。在這博客中我們主要講解Tomcat的安裝與配置詳解,。那下面我們就來說一下吧,! 二、安裝與配置Tomcat 1.查看一下安裝文件 1 2 | [root@tomcat src] # ls
apache-tomcat-7.0.42. tar .gz jdk-7u40-linux-x64.rpm
|
2.同步一下時間 1 | [root@tomcat java] # ntpdate 202.120.2.101
|
3.安裝JDK 1 | [root@tomcat src] # rpm -ivh jdk-7u40-linux-x64.rpm
|
4.修改環(huán)境變量 1 2 3 | [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.測試一下 1 2 3 4 | [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.解壓并創(chuàng)建鏈接 1 2 | [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.修改環(huán)境變量 1 2 3 | [root@tomcat tomcat] # cat /etc/profile.d/tomcat.sh
export CATALINA_HOME= /usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME /bin
|
8.測試一下 1 2 3 4 5 6 | [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 1 2 3 4 5 6 | [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.查看啟動的端口
1 2 3 4 5 6 7 8 9 10 11 12 | [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就安裝完成了,,下面我們就來看看我們安裝的內(nèi)容。 三,、Tomcat 目錄的結(jié)構(gòu) 1.Tomcat的安裝 其實對于完全由Java寫成的Tomcat,,Windows版本和Linux版本沒有多大區(qū)別,比如Linux版本,,在Solaris下也沒有問題,。這里,主要以Linux版本作為示例,。 注,,在安裝使用Tomcat之前,先安裝JDK,,最好是Sun的JDK 1 .5 以上版,。我們上面已經(jīng)安裝過了,,這里我們就不在多說。 2.Tomcat的目錄結(jié)構(gòu) 首先,,我們先來簡單查看一下目錄文件,, 1 2 3 | [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執(zhí)行腳本目錄 conf ——Tomcat配置文件 lib ——Tomcat運行需要的庫文件(JARS) logs ——Tomcat執(zhí)行時的LOG文件 temp ——Tomcat臨時文件存放目錄 webapps ——Tomcat的主要Web發(fā)布目錄(存放我們自己的JSP,SERVLET,類) work ——Tomcat的工作目錄,,Tomcat將翻譯JSP文件到的Java文件和class文件放在這里,。
下面我們來說一說各目錄中包含的文件, bin目錄下的文件: 1 2 3 4 5 | [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
|
我們來說說最主要主文件有,, conf目錄下的文件: 1 2 | [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應(yīng)用設(shè)置缺省值的文件 tomcat-users.xml Tomcat用戶認證的配置文件
lib目錄下的文件: 1 2 3 4 5 | [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目錄下的文件: 1 2 3 | [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啟動或關(guān)閉日志文件
webapps目錄下的文件: 1 2 | [root@tomcat tomcat] # ls webapps/
docs examples host-manager manager ROOT
|
含Web應(yīng)用的程序 (JSP,、Servlet和JavaBean等) work目錄下的配置文件: 1 2 3 4 | [root@tomcat tomcat] # ls work/
Catalina
[root@tomcat tomcat] # ls work/Catalina/localhost/
_/ docs/ examples/ host-manager/ manager/
|
由Tomcat自動生成,,這是Tomcat放置它運行期間的中間(intermediate)文件(諸如編譯的JSP文件)地方。 如果當Tomcat運行時,,你刪除了這個目錄那么將不能夠執(zhí)行包含JSP的頁面,。 好了,Tomcat的目錄結(jié)構(gòu)我們就說到這了,,下面我們來說說Tomcat應(yīng)用程序的組成,。 3.Tomcat 應(yīng)用程序的組成 注,上面的內(nèi)容中我們講解了Tomcat的目錄結(jié)構(gòu),,其中有個目錄是webapps,,主要存放Web應(yīng)用程序。那我們下面來說一說Web應(yīng)用程序的組成,。 按照Tomcat的規(guī)范,,Tomcat的Web應(yīng)用程序應(yīng)該由如下目錄組成, (1).頁面內(nèi)容等文件的存放位置:*.html, *.jsp等可以有許多目錄層次,,由用戶的網(wǎng)站結(jié)構(gòu)而定,,實現(xiàn)的功能應(yīng)該是網(wǎng)站的界面,也就是用戶主要的可見部分,。除了HTML文件,、JSP文件外,還有js(JavaScript)文件和css(樣式表)文件以及其他多媒體文件等,。 (2).Web-INF/web.xml 這是一個Web應(yīng)用程序的描述文件,。這個文件是一個XML文件,描述了Servlet和這個Web應(yīng)用程序的其他組件信息,,此外還包括一些初始化信息和安全約束等等,。 (3).Web-INF/classes/ 這個目錄及其下的子目錄應(yīng)該包括這個Web應(yīng)用程序的所有JavaBean及Servlet等編譯好的Java類文件(*.class)文件,,以及沒有被壓縮打入JAR包的其他class文件和相關(guān)資源。注意,,在這個目錄下的Java類應(yīng)該按照其所屬的包層次組織目錄(即如果該*.class文件具有包的定義,,則該*.class文件應(yīng)該放在.\WEB-INF\classes\包名下)。 (4).通常Web-INF/classes/ 這個目錄下的類文件也可以打包成JAR文件,,并可以放到WEB-INF下的lib目錄下。如將 classes目錄下的各個*.class文件打包成WebMis.jar文件(jar cvf WebMis.jar *.*) 注,, WEB-INF目錄中包含應(yīng)用軟件所使用的資源,,但是WEB-INF卻不在公共文檔根目錄之中。在這個目錄中所包含的文件都不能被客戶機所訪問,。 類目錄中(在WEB-INF下)包含運行Web應(yīng)用程序時所需的Servlets,,Beans等類。 lib目錄(在WEB-INF下)包含有Java archive files (JARs),,例如標簽庫或者Servlets,,Beans等類的*.jar文件。 如果一個類出現(xiàn)在JAR文件中同時也出現(xiàn)在類的目錄中,,類加載器會加載位于類目錄中的那一個,。
(5). common/lib/ 這個目錄下包含了所有壓縮到JAR文件中的類文件和相關(guān)文件。比如:第三方提供的Java庫文件,、JDBC驅(qū)動程序等,。 其中msbase.jar、mssqlserver.jar,、msutil.jar文件為SqlServer2000的JDBC驅(qū)動程序 其中servlet-api.jar和jsp-api.jar為Servlet和JSP的API所在的包
好了,,Tomcat的應(yīng)用程序的能成我們就基本說到這里了,下面我們來看一下默認Web程序的目錄結(jié)構(gòu),。 1 2 3 4 5 6 7 8 9 10 11 12 | [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的目錄結(jié)構(gòu)就講解完成了,,下面我們得來詳細說說,Tomcat的配置文件,。 四,、Tomcat 配置文件 1.簡介 查看一下默認配置文件, 1 2 3 | [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主組件的相關(guān)配置信息; web.xml:遵循Servlet規(guī)范標準的配置文件,,用于配置servlet,,并為所有的Web應(yīng)用程序提供包括MIME映射等默認配置信息; tomcat-user.xml:Realm認證時用到的相關(guān)角色,、用戶和密碼等信息,;Tomcat自帶的manager默認情況下會用到此文件,;在Tomcat中添加/刪除用戶,為用戶指定角色等將通過編輯此文件實現(xiàn),; catalina.policy:Java相關(guān)的安全策略配置文件,,在系統(tǒng)資源級別上提供訪問控制的能力; catalina.properties:Tomcat內(nèi)部package的定義及訪問相關(guān)的控制,,也包括對通過類裝載器裝載的內(nèi)容的控制,;Tomcat在啟動時會事先讀取此文件的相關(guān)設(shè)置; logging.properties: Tomcat通過自己內(nèi)部實現(xiàn)的JAVA日志記錄器來記錄操作相關(guān)的日志,,此文件即為日志記錄器相關(guān)的配置信息,,可以用來定義日志記錄的組件級別以及日志文件的存在位置等; context.xml:所有host的默認配置信息,;
注,,下面我們對常用的配置文件進行詳解。 2.server.xml 首先,,我們來查看一下默認的server.xml文件,, Tomcat以面向?qū)ο蟮姆绞竭\行,它可以在運行時動態(tài)加載配置文件中定義的對象結(jié)構(gòu),,這有點類似于apache的httpd模塊的調(diào)用方式,。server.xml中定義的每個主元素都會被創(chuàng)建為對象,并以某特定的層次結(jié)構(gòu)將這些對象組織在一起,。下面是默認配置,, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | [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 >
|
注,看上去很復(fù)雜,。其實,,大部分都是注釋。下面是一個簡圖說明了各組件之間的關(guān)系,!
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組件 如上面示例文件中定義的:
1 | <Server port=”8005” shutdown =”SHUTDOWN”>
|
這會讓Tomcat啟動一個server實例(即一個JVM),,它監(jiān)聽在8005端口以接收shutdown命令,。各Server的定義不能使用同一個端口,這意味著如果在同一個物理機上啟動了多個Server實例,,必須配置它們使用不同的端口,。這個端口的定義用于為管理員提供一個關(guān)閉此實例的便捷途徑,,因此,管理員可以直接telnet至此端口使用SHUTDOWN命令關(guān)閉此實例。不過,,基于安全角度的考慮,,這通常不允許遠程進行。
Server的相關(guān)屬性: className: 用于實現(xiàn)此Server容器的完全限定類的名稱,,默認為org.apache.catalina.core.StandardServer,; port: 接收shutdown指令的端口,默認僅允許通過本機訪問,,默認為8005,; shutdown:發(fā)往此Server用于實現(xiàn)關(guān)閉tomcat實例的命令字符串,默認為SHUTDOWN,;
(2).Service組件 Service主要用于關(guān)聯(lián)一個引擎和與此引擎相關(guān)的連接器,,每個連接器通過一個特定的端口和協(xié)議接收入站請求交將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的引擎進行處理。因此,,Service要包含一個引擎,、一個或多個連接器,。 如上面示例中的定義: <Service name=”Catalina”> 這定義了一個名為Catalina的Service,,此名字也會在產(chǎn)生相關(guān)的日志信息時記錄在日志文件當中。 Service相關(guān)的屬性: className: 用于實現(xiàn)service的類名,,一般都是org.apache.catalina.core.StandardService,。 name:此服務(wù)的名稱,默認為Catalina,;
(3).Connector組件 進入Tomcat的請求可以根據(jù)Tomcat的工作模式分為如下兩類: Tomcat作為應(yīng)用程序服務(wù)器:請求來自于前端的web服務(wù)器,,這可能是Apache, IIS, Nginx等; Tomcat作為獨立服務(wù)器:請求來自于web瀏覽器,;
Tomcat應(yīng)該考慮工作情形并為相應(yīng)情形下的請求分別定義好需要的連接器才能正確接收來自于客戶端的請求,。一個引擎可以有一個或多個連接器,以適應(yīng)多種請求方式,。 定義連接器可以使用多種屬性,,有些屬性也只適用于某特定的連接器類型。一般說來,,常見于server.xml中的連接器類型通常有4種: HTTP連接器 SSL連接器 AJP 1.3連接器 proxy連接器
如上面示例server.xml中定義的HTTP連接器: 1 2 3 | <Connector port= "8080" protocol= "HTTP/1.1"
maxThreads= "150" connectionTimeout= "20000"
redirectPort= "8443" />
|
定義連接器時可以配置的屬性非常多,,但通常定義HTTP連接器時必須定義的屬性只有“port”,定義AJP連接器時必須定義的屬性只有"protocol",,因為默認的協(xié)議為HTTP,。以下為常用屬性的說明: address:指定連接器監(jiān)聽的地址,默認為所有地址,,即0.0.0.0,; maxThreads:支持的最大并發(fā)連接數(shù),默認為200,; port:監(jiān)聽的端口,,默認為0,; protocol:連接器使用的協(xié)議,默認為HTTP/1.1,,定義AJP協(xié)議時通常為AJP/1.3,; redirectPort:如果某連接器支持的協(xié)議是HTTP,當接收客戶端發(fā)來的HTTPS請求時,,則轉(zhuǎn)發(fā)至此屬性定義的端口,; connectionTimeout:等待客戶端發(fā)送請求的超時時間,單位為毫秒,,默認為60000,,即1分鐘; enableLookups:是否通過request.getRemoteHost()進行DNS查詢以獲取客戶端的主機名,;默認為true,; acceptCount:設(shè)置等待隊列的最大長度;通常在tomcat所有處理線程均處于繁忙狀態(tài)時,,新發(fā)來的請求將被放置于等待隊列中,;
下面是一個定義了多個屬性的SSL連接器:
1 2 3 4 | <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屬性來為其定義一個接收所有發(fā)往非明確定義虛擬主機的請求的host組件。如前面示例中定義的: <Engine name="Catalina" defaultHost="localhost"> 常用的屬性定義: defaultHost:Tomcat支持基于FQDN的虛擬主機,,這些虛擬主機可以通過在Engine容器中定義多個不同的Host組件來實現(xiàn),;但如果此引擎的連接器收到一個發(fā)往非非明確定義虛擬主機的請求時則需要將此請求發(fā)往一個默認的虛擬主機進行處理,因此,,在Engine中定義的多個虛擬主機的主機名稱中至少要有一個跟defaultHost定義的主機名稱同名,; name:Engine組件的名稱,用于日志和錯誤信息記錄時區(qū)別不同的引擎,;
注,,Engine容器中可以包含Realm、Host,、Listener和Valve子容器,。 (5).Host組件 位于Engine容器中用于接收請求并進行相應(yīng)處理的主機或虛擬主機,,如前面默認配置文件中定義:
1 2 3 4 | <Host name= "localhost" appBase= "webapps"
unpackWARs= "true" autoDeploy= "true"
xmlValidation= "false" xmlNamespaceAware= "false" >
< /Host >
|
常用屬性說明:
appBase:此Host的webapps目錄,即存放非歸檔的web應(yīng)用程序的目錄或歸檔后的WAR文件的目錄路徑,;可以使用基于$CATALINA_HOME的相對路徑,; autoDeploy:在Tomcat處于運行狀態(tài)時放置于appBase目錄中的應(yīng)用程序文件是否自動進行deploy;默認為true,; unpackWars:在啟用此webapps時是否對WAR格式的歸檔文件先進行展開,;默認為true;
下面是虛擬主機定義示例: 1 2 3 4 5 6 7 8 9 10 | <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 >
|
主機別名定義: 如果一個主機有兩個或兩個以上的主機名,,額外的名稱均可以以別名的形式進行定義,,如下:
1 2 3 | <Host name= "www.test.com" appBase= "webapps" unpackWARs= "true" >
<Alias> test .com< /Alias >
< /Host >
|
(6).Context組件
Context在某些意義上類似于apache中的路徑別名,一個Context定義用于標識tomcat實例中的一個Web應(yīng)用程序,;如下面的定義: 1 2 3 4 5 6 7 8 9 10 11 | <!-- 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>,??梢杂糜贑ontext中的XML元素有Loader,Manager,,Realm,,Resources和WatchedResource。 常用的屬性定義有: docBase:相應(yīng)的Web應(yīng)用程序的存放位置,;也可以使用相對路徑,,起始路徑為此Context所屬Host中appBase定義的路徑;切記,,docBase的路徑名不能與相應(yīng)的Host中appBase中定義的路徑名有包含關(guān)系,,比如,,如果appBase為deploy,,而docBase絕不能為deploy-bbs類的名字; path:相對于Web服務(wù)器根路徑而言的URI,;如果為空“”,,則表示為此webapp的根路徑;如果context定義在一個單獨的xml文件中,,此屬性不需要定義,; reloadable:是否允許重新加載此context相關(guān)的Web應(yīng)用程序的類;默認為false,;
(7).Realm組件 一個Realm表示一個安全上下文,,它是一個授權(quán)訪問某個給定Context的用戶列表和某用戶所允許切換的角色相關(guān)定義的列表。因此,,Realm就像是一個用戶和組相關(guān)的數(shù)據(jù)庫。定義Realm時惟一必須要提供的屬性是classname,,它是Realm的多個不同實現(xiàn),,用于表示此Realm認證的用戶及角色等認證信息的存放位置。 JAASRealm:基于Java Authintication and Authorization Service實現(xiàn)用戶認證; JDBCRealm:通過JDBC訪問某關(guān)系型數(shù)據(jù)庫表實現(xiàn)用戶認證,; JNDIRealm:基于JNDI使用目錄服務(wù)實現(xiàn)認證信息的獲??; MemoryRealm:查找tomcat-user.xml文件實現(xiàn)用戶信息的獲?。?/span> UserDatabaseRealm:基于UserDatabase文件(通常是tomcat-user.xml)實現(xiàn)用戶認證,,它實現(xiàn)是一個完全可更新和持久有效的MemoryRealm,,因此能夠跟標準的MemoryRealm兼容;它通過JNDI實現(xiàn),;
下面是一個常見的使用UserDatabase的配置: 1 2 3 4 5 6 7 8 9 10 | <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應(yīng)用程序的某資源之間。一個容器內(nèi)可以建立多個Valve,,而且Valve定義的次序也決定了它們生效的次序,。Tomcat中實現(xiàn)了多種不同的Valve: AccessLogValve:訪問日志Valve ExtendedAccessValve:擴展功能的訪問日志Valve JDBCAccessLogValve:通過JDBC將訪問日志信息發(fā)送到數(shù)據(jù)庫中; RequestDumperValve:請求轉(zhuǎn)儲Valve,; RemoteAddrValve:基于遠程地址的訪問控制,; RemoteHostValve:基于遠程主機名稱的訪問控制; SemaphoreValve:用于控制Tomcat主機上任何容器上的并發(fā)訪問數(shù)量,; JvmRouteBinderValve:在配置多個Tomcat為以Apache通過mod_proxy或mod_jk作為前端的集群架構(gòu)中,,當期望停止某節(jié)點時,可以通過此Valve將用記請求定向至備用節(jié)點,;使用此Valve,,必須使用JvmRouteSessionIDBinderListener; ReplicationValve:專用于Tomcat集群架構(gòu)中,,可以在某個請求的session信息發(fā)生更改時觸發(fā)session數(shù)據(jù)在各節(jié)點間進行復(fù)制,; SingleSignOn:將兩個或多個需要對用戶進行認證webapp在認證用戶時連接在一起,即一次認證即可訪問所有連接在一起的webapp,; ClusterSingleSingOn:對SingleSignOn的擴展,,專用于Tomcat集群當中,需要結(jié)合ClusterSingleSignOnListener進行工作,;
RemoteHostValve和RemoteAddrValve可以分別用來實現(xiàn)基于主機名稱和基于IP地址的訪問控制,,控制本身可以通過allow或deny來進行定義,這有點類似于Apache的訪問控制功能,;如下面的Valve則實現(xiàn)了僅允許本機訪問/probe: 1 2 3 4 | <Context path= "/probe" docBase= "probe" >
<Valve className= "org.apache.catalina.valves.RemoteAddrValve"
allow= "127\.0\.0\.1" />
< /Context >
|
其中相關(guān)屬性定義有: className:相關(guān)的java實現(xiàn)的類名,,相應(yīng)于分別應(yīng)該為org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve,; allow:以逗號分開的允許訪問的IP地址列表,支持正則表達式,,因此,,點號“.”用于IP地址時需要轉(zhuǎn)義;僅定義allow項時,,非明確allow的地址均被deny,; deny: 以逗號分開的禁止訪問的IP地址列表,支持正則表達式,;使用方式同allow,;
(9).GlobalNamingResources 應(yīng)用于整個服務(wù)器的JNDI映射,此可以避免每個Web應(yīng)用程序都需要在各自的web.xml創(chuàng)建,,這在web應(yīng)用程序以WAR的形式存在時尤為有用,。它通常可以包含三個子元素: Environment; Resource; ResourceEnvRef;
(10).WatchedResource WatchedResource可以用于Context中監(jiān)視指定的webapp程序文件的改變,,并且能夠在監(jiān)視到文件內(nèi)容發(fā)生改變時重新裝載此文件,。 (11).Listener Listener用于創(chuàng)建和配置LifecycleListener對象,而LifecycleListener通常被開發(fā)人員用來創(chuàng)建和刪除容器,。 (12).Loader Java的動態(tài)裝載功能是其語言功能強大表現(xiàn)之一,,Servlet容器使用此功能在運行時動態(tài)裝載servlet和它們所依賴的類。Loader可以用于Context中控制java類的加載,。 (13).Manager Manger對象用于實現(xiàn)HTTP會話管理的功能,,Tomcat中有5種Manger的實現(xiàn): 1) StandardManager Tomcat的默認會話管理器,用于非集群環(huán)境中對單個處于運行狀態(tài)的Tomcat實例會話進行管理,。當Tomcat關(guān)閉時,,這些會話相關(guān)的數(shù)據(jù)會被寫入磁盤上的一個名叫SESSION.ser的文件,并在Tomcat下次啟動時讀取此文件,。 2) PersistentManager 當一個會話長時間處于空閑狀態(tài)時會被寫入到swap會話對象,,這對于內(nèi)存資源比較吃緊的應(yīng)用環(huán)境來說比較有用,。 3)DeltaManager 用于Tomcat集群的會話管理器,,它通過將改變了會話數(shù)據(jù)同步給集群中的其它節(jié)點實現(xiàn)會話復(fù)制。這種實現(xiàn)會將所有會話的改變同步給集群中的每一個節(jié)點,,也是在集群環(huán)境中用得最多的一種實現(xiàn)方式,。 4) BackupManager 用于Tomcat集群的會話管理器,與DeltaManager不同的是,,某節(jié)點會話的改變只會同步給集群中的另一個而非所有節(jié)點,。 5)SimpleTcpReplicationManager Tomcat4時用到的版本,過于老舊了,。 (14).Stores PersistentManager必須包含一個Store元素以指定將會話數(shù)據(jù)存儲至何處,。這通常有兩種實現(xiàn)方式:FileStore和JDBCStore,。 (15).Resources 經(jīng)常用于實現(xiàn)在Context中指定需要裝載的但不在Tomcat本地磁盤上的應(yīng)用資源,如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中給集群中同一組中的節(jié)點定義通信“信道”,。Channel中需要至少定義Membership,、Receiver和Sender三個元素,此外還有一個可選元素Interceptor,。 Membership 用于Channel中配置同一通信信道上節(jié)點集群組中的成員情況,,即監(jiān)控加入當前集群組中的節(jié)點并在各節(jié)點間傳遞心跳信息,而且可以在接收不到某成員的心跳信息時將其從集群節(jié)點中移除,。Tomcat中Membership的實現(xiàn)是org.apache.catalina.tribes.membership.McastService,。 Sender 用于Channel中配置“復(fù)制信息”的發(fā)送器,實現(xiàn)發(fā)送需要同步給其它節(jié)點的數(shù)據(jù)至集群中的其它節(jié)點,。發(fā)送器不需要屬性的定義,,但可以在其內(nèi)部定義一個Transport元素。 Transport 用于Sender內(nèi)部,,配置數(shù)據(jù)如何發(fā)送至集群中的其它節(jié)點,。Tomcat有兩種Transport的實現(xiàn): 1) PooledMultiSender 基于Java阻塞式IO,可以將一次將多個信息并發(fā)發(fā)送至其它節(jié)點,,但一次只能傳送給一個節(jié)點,。 2)PooledParallelSener 基于Java非阻塞式IO,即NIO,,可以一次發(fā)送多個信息至一個或多個節(jié)點,。 Receiver 用于Channel定義某節(jié)點如何從其它節(jié)點的Sender接收復(fù)制數(shù)據(jù),Tomcat中實現(xiàn)的接收方式有兩種BioReceiver和NioReceiver,。
3.web.xml web.xml基于Java Servlet規(guī)范,,可被用于每一個Java servlet容器,通常有兩個存放位置,,$CATALINA_BASE/conf和每個Web應(yīng)用程序(通常是WEB-INF/web.xml),。Tomcat在deploy一個應(yīng)用程序時(包括重啟或重新載入),,它首先讀取conf/web.xml,而后讀取WEB-INF/web.xml,。 好了,,到這里Tomcat服務(wù)器的安裝與配置以及各組件詳解就說到這里了,希望大家有所收獲^_^…… 在前面的兩篇博客中我們主要講解了,,Tomcat相關(guān)的理論知識與相關(guān)組件的講解,,從下一篇博客開始,我們將講解Tomcat的相關(guān)操作,,包括Nginx結(jié)合Tomcat,、Apache結(jié)合Tomcat、Tomcat集群講解等,。
本文出自 “Share your knowledge …” 博客,,請務(wù)必保留此出處http://freeloda.blog.51cto.com/2033581/1299644
|