本節(jié)將列舉一些重要、常見的配置項(xiàng)。詳細(xì)的 Tomcat8 配置可以參考 Tomcat 8 配置官方參考文檔 。
Server
Server 元素表示整個(gè) Catalina servlet 容器。
因此,它必須是 conf/server.xml 配置文件中的根元素。它的屬性代表了整個(gè) servlet 容器的特性。
屬性表
|
屬性 |
描述 |
備注 |
|
className |
這個(gè)類必須實(shí)現(xiàn)org.apache.catalina.Server接口。 |
默認(rèn) org.apache.catalina.core.StandardServer |
|
address |
服務(wù)器等待關(guān)機(jī)命令的TCP / IP地址。如果沒有指定地址,則使用localhost。 |
|
|
port |
服務(wù)器等待關(guān)機(jī)命令的TCP / IP端口號(hào)。設(shè)置為-1以禁用關(guān)閉端口。 |
|
|
shutdown |
必須通過TCP / IP連接接收到指定端口號(hào)的命令字符串,以關(guān)閉Tomcat。 |
|
Service
Service元素表示一個(gè)或多個(gè)連接器組件的組合,這些組件共享一個(gè)用于處理傳入請(qǐng)求的引擎組件。Server 中可以有多個(gè) Service。
屬性表
|
屬性 |
描述 |
備注 |
|
className |
這個(gè)類必須實(shí)現(xiàn)org.apache.catalina.Service接口。 |
默認(rèn) org.apache.catalina.core.StandardService |
|
name |
此服務(wù)的顯示名稱,如果您使用標(biāo)準(zhǔn) Catalina 組件,將包含在日志消息中。與特定服務(wù)器關(guān)聯(lián)的每個(gè)服務(wù)的名稱必須是唯一的。 |
|
實(shí)例 - conf/server.xml 配置文件示例
...
Executor
Executor表示可以在Tomcat中的組件之間共享的線程池。
屬性表
|
屬性 |
描述 |
備注 |
|
className |
這個(gè)類必須實(shí)現(xiàn)org.apache.catalina.Executor接口。 |
默認(rèn) org.apache.catalina.core.StandardThreadExecutor |
|
name |
線程池名稱。 |
要求唯一, 供Connector元素的executor屬性使用 |
|
namePrefix |
線程名稱前綴。 |
|
|
maxThreads |
最大活躍線程數(shù)。 |
默認(rèn)200 |
|
minSpareThreads |
最小活躍線程數(shù)。 |
默認(rèn)25 |
|
maxIdleTime |
當(dāng)前活躍線程大于minSpareThreads時(shí),空閑線程關(guān)閉的等待最大時(shí)間。 |
默認(rèn)60000ms |
|
maxQueueSize |
線程池滿情況下的請(qǐng)求排隊(duì)大小。 |
默認(rèn)Integer.MAX_VALUE |
Connector
Connector代表連接組件。Tomcat 支持三種協(xié)議:HTTP/1.1、HTTP/2.0、AJP。
屬性表
|
屬性 |
說明 |
備注 |
|
asyncTimeout |
Servlet3.0規(guī)范中的異步請(qǐng)求超時(shí) |
默認(rèn)30s |
|
port |
請(qǐng)求連接的TCP Port |
設(shè)置為0,則會(huì)隨機(jī)選取一個(gè)未占用的端口號(hào) |
|
protocol |
協(xié)議. 一般情況下設(shè)置為 HTTP/1.1,這種情況下連接模型會(huì)在NIO和APR/native中自動(dòng)根據(jù)配置選擇 |
|
|
URIEncoding |
對(duì)URI的編碼方式. |
如果設(shè)置系統(tǒng)變量org.apache.catalina.STRICT_SERVLET_COMPLIANCE為true,使用 ISO-8859-1編碼;如果未設(shè)置此系統(tǒng)變量且未設(shè)置此屬性, 使用UTF-8編碼 |
|
useBodyEncodingForURI |
是否采用指定的contentType而不是URIEncoding來編碼URI中的請(qǐng)求參數(shù) |
|
以下屬性在標(biāo)準(zhǔn)的Connector(NIO, NIO2 和 APR/native)中有效:
|
屬性 |
說明 |
備注 |
|
acceptCount |
當(dāng)最大請(qǐng)求連接maxConnections滿時(shí)的最大排隊(duì)大小 |
默認(rèn)100,注意此屬性和Executor中屬性maxQueueSize的區(qū)別.這個(gè)指的是請(qǐng)求連接滿時(shí)的堆棧大小,Executor的maxQueueSize指的是處理線程滿時(shí)的堆棧大小 |
|
connectionTimeout |
請(qǐng)求連接超時(shí) |
默認(rèn)60000ms |
|
executor |
指定配置的線程池名稱 |
|
|
keepAliveTimeout |
keeAlive超時(shí)時(shí)間 |
默認(rèn)值為connectionTimeout配置值.-1表示不超時(shí) |
|
maxConnections |
最大連接數(shù) |
連接滿時(shí)后續(xù)連接放入最大為acceptCount的隊(duì)列中. 對(duì) NIO和NIO2連接,默認(rèn)值為10000;對(duì) APR/native,默認(rèn)值為8192 |
|
maxThreads |
如果指定了Executor, 此屬性忽略;否則為Connector創(chuàng)建的內(nèi)部線程池最大值 |
默認(rèn)200 |
|
minSpareThreads |
如果指定了Executor, 此屬性忽略;否則為Connector創(chuàng)建線程池的最小活躍線程數(shù) |
默認(rèn)10 |
|
processorCache |
協(xié)議處理器緩存Processor對(duì)象的大小 |
-1表示不限制.當(dāng)不使用servlet3.0的異步處理情況下: 如果配置Executor,配置為Executor的maxThreads;否則配置為Connnector的maxThreads. 如果使用Serlvet3.0異步處理, 取maxThreads和maxConnections的最大值 |
Context
Context元素表示一個(gè)Web應(yīng)用程序,它在特定的虛擬主機(jī)中運(yùn)行。每個(gè)Web應(yīng)用程序都基于Web應(yīng)用程序存檔(WAR)文件,或者包含相應(yīng)的解包內(nèi)容的相應(yīng)目錄,如Servlet規(guī)范中所述。
屬性表
|
屬性 |
說明 |
備注 |
|
altDDName |
web.xml部署描述符路徑 |
默認(rèn) /WEB-INF/web.xml |
|
docBase |
Context的Root路徑 |
和Host的appBase相結(jié)合, 可確定web應(yīng)用的實(shí)際目錄 |
|
failCtxIfServletStartFails |
同Host中的failCtxIfServletStartFails, 只對(duì)當(dāng)前Context有效 |
默認(rèn)為false |
|
logEffectiveWebXml |
是否日志打印web.xml內(nèi)容(web.xml由默認(rèn)的web.xml和應(yīng)用中的web.xml組成) |
默認(rèn)為false |
|
path |
web應(yīng)用的context path |
如果為根路徑,則配置為空字符串(""), 不能不配置 |
|
privileged |
是否使用Tomcat提供的manager servlet |
|
|
reloadable |
/WEB-INF/classes/ 和/WEB-INF/lib/ 目錄中class文件發(fā)生變化是否自動(dòng)重新加載 |
默認(rèn)為false |
|
swallowOutput |
true情況下, System.out和System.err輸出將被定向到web應(yīng)用日志中 |
默認(rèn)為false |
Engine
Engine元素表示與特定的Catalina服務(wù)相關(guān)聯(lián)的整個(gè)請(qǐng)求處理機(jī)器。它接收并處理來自一個(gè)或多個(gè)連接器的所有請(qǐng)求,并將完成的響應(yīng)返回給連接器,以便最終傳輸回客戶端。
屬性表
|
屬性 |
描述 |
備注 |
|
defaultHost |
默認(rèn)主機(jī)名,用于標(biāo)識(shí)將處理指向此服務(wù)器上主機(jī)名稱但未在此配置文件中配置的請(qǐng)求的主機(jī)。 |
這個(gè)名字必須匹配其中一個(gè)嵌套的主機(jī)元素的名字屬性。 |
|
name |
此引擎的邏輯名稱,用于日志和錯(cuò)誤消息。 |
在同一服務(wù)器中使用多個(gè)服務(wù)元素時(shí),每個(gè)引擎必須分配一個(gè)唯一的名稱。 |
Host
Host元素表示一個(gè)虛擬主機(jī),它是一個(gè)服務(wù)器的網(wǎng)絡(luò)名稱(如“www.mycompany.com”)與運(yùn)行Tomcat的特定服務(wù)器的關(guān)聯(lián)。
屬性表
|
屬性 |
說明 |
備注 |
|
name |
名稱 |
用于日志輸出 |
|
appBase |
虛擬主機(jī)對(duì)應(yīng)的應(yīng)用基礎(chǔ)路徑 |
可以是個(gè)絕對(duì)路徑, 或CATALINABASE相對(duì)路徑||xmlBase|虛擬主機(jī)XML基礎(chǔ)路徑,里面應(yīng)該有Contextxml配置文件|可以是個(gè)絕對(duì)路徑,或CATALINABASE相對(duì)路徑||xmlBase|虛擬主機(jī)XML基礎(chǔ)路徑,里面應(yīng)該有Contextxml配置文件|可以是個(gè)絕對(duì)路徑,或{CATALINA_BASE}相對(duì)路徑 |
|
createDirs |
當(dāng)appBase和xmlBase不存在時(shí),是否創(chuàng)建目錄 |
默認(rèn)為true |
|
autoDeploy |
是否周期性的檢查appBase和xmlBase并deploy web應(yīng)用和context描述符 |
默認(rèn)為true |
|
deployIgnore |
忽略deploy的正則 |
|
|
deployOnStartup |
Tomcat啟動(dòng)時(shí)是否自動(dòng)deploy |
默認(rèn)為true |
|
failCtxIfServletStartFails |
配置為true情況下,任何load-on-startup >=0的servlet啟動(dòng)失敗,則其對(duì)應(yīng)的Contxt也啟動(dòng)失敗 |
默認(rèn)為false |
Cluster
由于在實(shí)際開發(fā)中,我從未用過Tomcat集群配置,所以沒研究。
啟動(dòng)
部署方式
這種方式要求本地必須安裝 Tomcat 。
將打包好的 war 包放在 Tomcat 安裝目錄下的 webapps 目錄下,然后在 bin 目錄下執(zhí)行 startup.bat 或 startup.sh ,Tomcat 會(huì)自動(dòng)解壓 webapps 目錄下的 war 包。
成功后,可以訪問 http://localhost:8080/xxx (xxx 是 war 包文件名)。
注意
以上步驟是最簡(jiǎn)單的示例。步驟中的 war 包解壓路徑、啟動(dòng)端口以及一些更多的功能都可以修改配置文件來定制 (主要是 server.xml 或 context.xml 文件)。
嵌入式
API 方式
在 pom.xml 中添加依賴
org.apache.tomcat.embed
tomcat-embed-core
8.5.24
添加 SimpleEmbedTomcatServer.java 文件,內(nèi)容如下:
import java.util.Optional;import org.apache.catalina.startup.Tomcat;
public class SimpleTomcatServer {
private static final int PORT = 8080;
private static final String CONTEXT_PATH = "/javatool-server";
public static void main(String[] args) throws Exception {
// 設(shè)定 profile
Optional profile = Optional.ofNullable(System.getProperty("spring.profiles.active"));
System.setProperty("spring.profiles.active", profile.orElse("develop"));
Tomcat tomcat = new Tomcat();
tomcat.setPort(PORT);
tomcat.getHost().setAppBase(".");
tomcat.addWebapp(CONTEXT_PATH, getAbsolutePath() + "src/main/webapp");
tomcat.start();
tomcat.getServer().await();
}
private static String getAbsolutePath() {
String path = null;
String folderPath = SimpleEmbedTomcatServer.class.getProtectionDomain().getCodeSource().getLocation().getPath()
.substring(1);
if (folderPath.indexOf("target") > 0) {
path = folderPath.substring(0, folderPath.indexOf("target"));
}
return path;
}}
成功后,可以訪問 http://localhost:8080/javatool-server 。
說明
本示例是使用 org.apache.tomcat.embed 啟動(dòng)嵌入式 Tomcat 的最簡(jiǎn)示例。
這個(gè)示例中使用的是 Tomcat 默認(rèn)的配置,但通常,我們需要對(duì) Tomcat 配置進(jìn)行一些定制和調(diào)優(yōu)。為了加載配置文件,啟動(dòng)類就要稍微再復(fù)雜一些。這里不想再貼代碼,有興趣的同學(xué)可以參考:
示例項(xiàng)目
使用 maven 插件啟動(dòng)(不推薦)
不推薦理由:這種方式啟動(dòng) maven 雖然最簡(jiǎn)單,但是有一個(gè)很大的問題是,真的很久很久沒發(fā)布新版本了(最新版本發(fā)布時(shí)間:2013-11-11)。且貌似只能找到 Tomcat6 、Tomcat7 插件。
使用方法
在 pom.xml 中引入插件
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/${project.artifactId}
UTF-8
運(yùn)行 mvn tomcat7:run 命令,啟動(dòng) Tomcat。
成功后,可以訪問 http://localhost:8080/xxx (xxx 是 ${project.artifactId} 指定的項(xiàng)目名)。
IDE 插件
常見 Java IDE 一般都有對(duì) Tomcat 的支持。
以 Intellij IDEA 為例,提供了 Tomcat and TomEE Integration 插件(一般默認(rèn)會(huì)安裝)。
使用步驟
·點(diǎn)擊 Run/Debug Configurations > New Tomcat Server > local ,打開 Tomcat 配置頁面。
·點(diǎn)擊 Confiure... 按鈕,設(shè)置 Tomcat 安裝路徑。
·點(diǎn)擊 Deployment 標(biāo)簽頁,設(shè)置要啟動(dòng)的應(yīng)用。
·設(shè)置啟動(dòng)應(yīng)用的端口、JVM 參數(shù)、啟動(dòng)瀏覽器等。
·成功后,可以訪問 http://localhost:8080/(當(dāng)然,你也可以在 url 中設(shè)置上下文名稱)。

說明
個(gè)人認(rèn)為這個(gè)插件不如 Eclipse 的 Tomcat 插件好用,Eclipse 的 Tomcat 插件支持對(duì) Tomcat xml 配置文件進(jìn)行配置。而這里,你只能自己去 Tomcat 安裝路徑下修改配置文件。