Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,目前最新版本是6.x,相對5.x性能提升很多,主要優化了內存使用,增強IO能力,重新構造集羣功能。
近期對Tomcat6.x作深入學習,參考上述聲明的Tomcat全攻略,由於筆者是2001年針對Tomcat4.x所寫,故參考之並針對Tomcat6.x做了總結,形成此篇學習筆記,希望對學習的人有所幫助,本文涵蓋了:Tomcat目錄、Server.xml元素講解,數據庫連接池配置、線程池配置、虛擬目錄配置。關於如何下載、安裝、運行Tomcat略,請google,相信有詳細的文章講述。
tomcat的目錄結構如下:
目錄名
|
簡介
|
bin
|
存放啓動和關閉tomcat腳本
|
conf
|
包含不同的配置文件,server.xml(Tomcat的主要配置文件)和web.xml
|
work
|
存放jsp編譯後產生的class文件
|
webapp
|
存放應用程序示例,以後你要部署的應用程序也要放到此目錄
|
logs
|
存放日誌文件
|
lib
|
這三個目錄主要存放tomcat所需的jar文件
|
server.xml配置簡介
元素名
|
屬性
|
解釋
|
server
|
port
|
指定一個端口,這個端口負責監聽關閉tomcat的請求
|
shutdown
|
指定向端口發送的命令字符串
|
GlobalNamingResources
|
|
服務器的全局JNDI資源,可以有子標籤<Resource></Resource>
|
Executor(線程池,一個或多個Connector可以共享此線程池)
|
name
|
線程池名稱,名稱必須唯一
|
namePrefix
|
線程的名字前綴,用來標記線程名字的,這樣每個線程就用這個前綴加上線程編號了,比如 catalina-exec-1 、catalina-exec-2
|
maxThreads
|
允許的最大線程池裏的線程數量,默認是200,大的併發應該設置的高一些,反正只是限制而已,不佔用資源
|
minSpareThreads
|
最小的保持活躍的線程數量,默認是25.這個要根據負載情況自行調整了。太小了就影響反應速度,太大了白白佔用資源
|
maxIdleTime
|
最小的保持活躍的線程數量,默認是25.這個要根據負載情況自行調整了。太小了就影響反應速度,太大了白白佔用資源
|
threadPriority
|
線程的等級。默認是Thread.NORM_PRIORITY
|
service
|
name
|
指定service的名字
|
Connector (表示客戶端和service之間的連接)
|
port
|
指定服務器端要創建的端口號,並在這個斷口監聽來自客戶端的請求
|
minProcessors
|
服務器啓動時創建的處理請求的線程數
|
maxProcessors
|
最大可以創建的處理請求的線程數
|
enableLookups
|
如果爲true,則可以通過調用request.getRemoteHost()進行DNS查詢來得到遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址
|
redirectPort
|
指定服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號
|
acceptCount
|
指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理
|
connectionTimeout
|
指定超時的時間數(以毫秒爲單位)
|
Engine (表示指定service中的請求處理機,接收和處理來自Connector的請求)
|
name
|
|
defaultHost
|
指定缺省的處理請求的主機名,它至少與其中的一個host元素的name屬性值是一樣的
|
jvmRoute
|
|
host (表示一個虛擬主機、並且可以包含Context子節點配置虛擬目錄)
|
name
|
指定主機名
|
appBase
|
應用程序基本目錄,即存放應用程序的目錄
|
unpackWARs
|
如果爲true,則tomcat會自動將WAR文件解壓,否則不解壓,直接從WAR文件中運行應用程序
|
autoDeploy
|
自動部署
|
xmlValidation
|
是否驗證xml
|
xmlNamespaceAware
|
|
Realm (表示存放用戶名,密碼及role的數據庫)
|
className
|
指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口
|
Context(host子節點配置虛擬目錄)
|
path
|
虛擬目錄名稱
|
docBase
|
物理路徑
|
Debug
|
Debug模式
|
Reload
|
True 重新加載,修改後自動加載
|
上面我們講述了server .xml個元素的含義,下面我們給出詳細示例
Tomcat數據庫連接池配置如下:
server.xml配置Resource
Xml代碼
- <Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource"
- maxActive="100" maxIdle="30" maxWait="10000"
- username="APP" password="APP" driverClassName="org.apache.derby.jdbc.ClientDriver"
- url="jdbc:derby://localhost:1527/springside-example;create=true"/>
<Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="APP" password="APP" driverClassName="org.apache.derby.jdbc.ClientDriver" url="jdbc:derby://localhost:1527/springside-example;create=true"/>
context.xml文件增加:
Xml代碼
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
-
- <ResourceLink name="jdbc/ExampleDB" global="jdbc/ExampleDB" type="javax.sql.DataSource"/>
-
<WatchedResource>WEB-INF/web.xml</WatchedResource> <ResourceLink name="jdbc/ExampleDB" global="jdbc/ExampleDB" type="javax.sql.DataSource"/>
Tomcat共享線程池配置:
取消Executor註釋,修改連接數至自己合適的數值既可。
Xml代碼
- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
- maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/>
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/>
executor="tomcatThreadPool" 標明此連接使用上面配置的名稱爲tomcatThreadPool的連接池,無屬性共享連接不會生效 protocol表示使用的是 http協議 端口號爲8080
Java代碼
- <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"
- connectionTimeout="20000"
- executor="tomcatThreadPool"
- acceptCount="100"
- useBodyEncodingForURI="true"
- enableLookups="false"
- />
<Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" connectionTimeout="20000" executor="tomcatThreadPool" acceptCount="100" useBodyEncodingForURI="true" enableLookups="false" />
虛擬目錄配置:
在<host></host>之間增加如下
<!-- 配置虛擬目錄,例如:%09http://localhost:8080 -->
Xml代碼
- <Context path="/" docBase="D:\workspace\code\HBJH\web"></Context>
<Context path="/" docBase="D:\workspace\code\HBJH\web"></Context>