詳解server.xml

轉載:

https://www.cnblogs.com/kismetv/p/7228274.html#title1

http://blog.csdn.net/weinianjie1/article/details/7954425

一、前言

????Tomcat是開源的輕量級Web應用服務器。server.xml中的每個元素都對應tomcat中的一個組件疲恢;通過對xml文件中元素的配置铡溪,可實現(xiàn)對tomcat中各個組件的控制。

二衡蚂、元素分類和整體結構

1.server.xml整體結構

<Server>

????<Service>

????????<Connector/>

????????<Connector/>

????????<Engine>

????????????<Host>

????????????????<context/><!-- 現(xiàn)在常用自動部署窿克,不推薦配置Context元素?-->

????????????</Host>

????????</Engine>

????</Service>

</Server>

2.元素分類

server.xml中的元素可分為以下四類:

1)頂層元素:<Server>和<Service>

<Server>是整個配置文件的根元素,<Service>則代表一個Engine元素及一組與其關聯(lián)的Connector元素毛甲。

2)連接器:<Connector>

代表了外部客戶端發(fā)送請求到特定Service的接口年叮;同時也是外部客戶端從特定Service接受響應的接口。

3)容器:<Engine><Host><Context>

容器的功能是處理Connector接受進來的請求玻募,并產生相應的響應只损。這三者是父子關系。一個Engine可處理Service中的所有請求七咧,一個Host可處理發(fā)向一個特定虛擬主機的所有請求跃惫,一個Context組件可處理一個特定Web應用的所有請求。

4)內嵌組件:可內嵌到容器中的組件艾栋。以上6個是tomcat最核心的組件爆存,其他組件都歸為內嵌組件。

三蝗砾、核心組件

1.Server

代表整個tomcat容器先较。一個Server元素中可以有一個或多個Service元素。Server的主要任務悼粮,就是提供一個接口讓客戶端能訪問到這個Service集合闲勺,同時維護它所包含的所有的Service的生命周期。

shutdown屬性:關閉Server的指令扣猫;

port屬性:Server接受shutdown指令的端口菜循,設為-1可禁掉該端口

2.Service

作用是把Connector和Engine組裝在一起,對外提供服務苞笨。一個Service可包含多個Connector债朵,但只能包含一個Engine;Connector的作用是從客戶端接受請求瀑凝,Engine的作用是處理接受進來的請求序芦。

3.Connector

????主要作用是接受連接請求,創(chuàng)建Request和Response對象用于和請求端交換數(shù)據(jù)粤咪;然后分配線程讓Engine來處理這個請求谚中,并把產生的Request和Response對象傳給Engine。

????通過配置Connector,可控制請求Service的協(xié)議及端口號宪塔。

1)舉例1:

<Connector prot="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

客戶端可以通過8080端口使用http協(xié)議訪問tomcat磁奖,protocol屬性規(guī)定了請求的協(xié)議,port規(guī)定了請求的端口號某筐,redirectPort表示強制要求https而請求是http時比搭,重定向至端口號為8443的Connector。

2)舉例2:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

客戶端可以通過8009端口使用AJP協(xié)議訪問Tomcat南誊。AJP協(xié)議負責和其他的HTTP服務器(如Apache)建立連接身诺;在把Tomcat與其他HTTP服務器集成時,就需要這個連接器抄囚。

4.Engine

????Engine組件是Service組件中的請求處理組件霉赡。在Service組件中有且只有一個。Engine組件從一個或多個Connector中接受請求并處理幔托,并將完成的響應返回給Connector穴亏,最終傳遞給客戶端。

<Engine name="Catalina" defaultHost="localhost">

name:用于日志和錯誤信息重挑,在整個Server中應該唯一嗓化。

defaultHost:指定了默認的host名稱,當發(fā)往本機的請求指定的host名稱不存在時攒驰,一律使用defaultHost指定的host進行處理蟆湖;因此,defaultHost的值玻粪,必須與Engine中的一個Host組件的name屬性值匹配隅津。

5.Host

1)Engine與Host

Host是Engine的子容器。Engine組件中可以內嵌一個或多個Host組件劲室,每個Host組件代表Engine中的一個虛擬主機伦仍。Host組件至少有一個,且其中一個的name必須與Engine組件的defaultHost屬性相匹配很洋。

2)Host的作用

Host虛擬主機的作用充蓝,是運行多個Web應用(一個Context代表一個Web應用 ),并負責安裝喉磁、展開谓苟、啟動和結束每個Web應用。

Host組件代表的虛擬主機协怒,對應了服務器中一個網絡名實體(如"www.test.com"或IP地址"116.25.25.25")涝焙,為了使用戶可以通過網絡名連接Tomcat服務器,這個名字應該在DNS服務器上注冊孕暇。

客戶端通常用主機名來標識他們希望連接的服務器仑撞;該主機名也會包含在HTTP請求頭中赤兴。Tomcat從HTTP頭中提取主機名,尋找名稱匹配的主機隧哮。如果沒有匹配桶良,請求將轉發(fā)至默認主機。因此默認主機不需要再DNS服務器中注冊沮翔。

3)Host的配置

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">

name:虛擬主機名陨帆。一個Engine中有且僅有一個Host組件的name屬性與Engine組件的defaultHost屬性相匹配;

unpackWARs:是否將代表Web應用的WAR文件解壓鉴竭;true:通過解壓后的文件結構運行該Web應用歧譬;false:直接使用WAR文件運行web應用;

Host的autoDeploy和搏存、APPBase、xmlBase矢洲、deployOnStartup屬性璧眠,與Host內Web應用的自動部署有關。

6.Context

1)Context元素代表在特定虛擬主機上運行的一個Web應用读虏。每個Web應用基于war文件或war文件解壓后對應的目錄责静。

Context是Host的子容器,每個Host可以定義任意多個Context元素盖桥。

2)Web應用自動部署

(1)Host的配置

要開啟Web應用的自動部署灾螃,需要配置所在的虛擬主機;配置方式就是前面提到的Host元素的deployOnStartup和autoDeploy屬性揩徊。如果這倆屬性設為true腰鬼,則tomcat啟動自動部署。二者主要區(qū)別在于塑荒,deployOnStartup為true時熄赡,tomcat在啟動時檢查web應用;autoDeploy為true時齿税,tomcat在運行時定期檢查新的web應用或web應用的更新彼硫。

自動部署依賴于檢查是否有新的或更改過的web應用,而Host元素的appBase和xmlBase設置了檢查web應用更新的目錄凌箕。

appBase:指定web應用所在的目錄拧篮,默認值是webapps,這是一個相對路徑牵舱。

xmlBase:指定web應用的XML配置文件所在的目錄串绩。默認值為conf/<engine_name>/<host_name>。

(2)檢查web應用更新

一個web應用可能包含以下文件:XML配置文件仆葡,WAR包固惯,以及一個應用目錄(該目錄包含Web應用的文件結構);其中XML文件位于xmlBase指定的目錄徘郭,WAR包和應用目錄位于appBase指定的目錄嗦锐。tomcat會掃描這倆屬性配置的目錄來檢查應用更新。

(3)<Context>元素的配置

docBase:指定web應用使用的war包路徑父能,或應用目錄。需注意的是:在自動部署場景下(配置文件位于xmlBase中),docBase不在appBase目錄中紊浩,才需要指定。

path:指定了訪問該web應用的上下文路徑疗锐,當請求到來時坊谁,tomcat根據(jù)web應用的path屬性與URI的匹配程度來選擇web應用處理相應請求。如果一個Context元素的path屬性為""滑臊,則這個Context是虛擬主機的默認web應用口芍;當請求的URI與所有path都不匹配時,使用該默認web應用來處理雇卷。

需要注意的是鬓椭,在自動部署場景下(配置文件位于xmlBase中),不能指定path屬性关划,path屬性由配置文件的文件名小染、war文件的文件名或應用目錄的名稱自動推導出來。如掃描web應用時贮折,發(fā)現(xiàn)了xmlBase目錄下的app1.xml裤翩,或appBase目錄下的app1.war或app1應用目錄,則該web應用的path屬性為"app1"调榄。如果名稱不是app1而是ROOT踊赠,則該web應用是虛擬主機默認的web應用,此時path屬性推導為""振峻。

reloadable:指示tomcat是否在運行時監(jiān)控在WEB-INF/classes和WEB-INF/lib目錄下的class文件的改動臼疫。若為true,則當class文件改動時會觸發(fā)web應用重新加載扣孟。開發(fā)環(huán)境設為true方便調試烫堤;生產環(huán)境設為true會給服務器帶來性能壓力。

(4)自動部署舉例

最典型的自動部署凤价,就是當我們安裝完tomcat后鸽斟,在webapps目錄下有如下文件夾:

當啟動tomcat后,可用http://localhost:8080/來訪問tomcat利诺,其實訪問的就是ROOT對應的web應用富蓄;也可通過http://localhost:8080/docs來訪問docs應用,同理可訪問examples/host-manager/這幾個web應用慢逾。

http://localhost:8080/:ROOT是tomcat中的一個項目立倍,最后的“/”表示http的根-ROOT灭红。

3)server.xml中靜態(tài)部署web應用

除了自動部署,我們也可以在server.xml中通過<context>元素靜態(tài)部署Web應用口注。靜態(tài)部署和自動部署是可以共存的变擒。因為server.xml不可動態(tài)加載資源,服務器一旦啟動寝志,要修改這個文件就得重啟服務器才能重新加載娇斑。而自動部署可以在tomcat運行時通過定期的掃描來實現(xiàn),不需重啟服務器材部。

<Context path="/" docBase="D:\Program Files\app1.war" reloadable="true"/>

docBase:靜態(tài)部署時毫缆,docBase可以在appBase目錄下,也可不在乐导。

path:靜態(tài)部署時苦丁,可顯示指定path屬性,但仍受到嚴格限制:只有當自動部署關閉(deployOnStartup和autoDeploy都為false)或docBase不在appBase中時物臂,才可設置path芬骄。

reloadable:用法與自動部署時相同。

四鹦聪、配置多個服務

通過在Server中配置多個Service服務,可以實現(xiàn)通過不同的端口號來訪問同一臺機器上部署的不同Web應用蒂秘。

五泽本、其他組件

1.Listener

監(jiān)聽器∫錾可在特定事件發(fā)生時執(zhí)行特定的操作规丽;被監(jiān)聽事件通常是tomcat的啟動和停止。

<Listener className=""/>

2.GlobalNamingResources與Realm

Realm撇贺,可以把它理解成“域”赌莺;Realm提供了一種用戶密碼與web應用的映射關系,從而達到角色安全管理的作用松嘶。

3.valve

閥門艘狭。在Tomcat中代表了請求處理流水線上的一個組件;Valve可以與Tomcat的容器(Engine翠订、Host或Context)關聯(lián)巢音。

不同的Valve有不同的特性,下面介紹一下本例中出現(xiàn)的AccessLogValve尽超。

AccessLogValve的作用是通過日志記錄其所在的容器中處理的所有請求官撼,在本例中,Valve放在Host下似谁,便可以記錄該Host處理的所有請求傲绣。AccessLogValve記錄的日志就是訪問日志掠哥,每天的請求會寫到一個日志文件里。AccessLogValve可以與Engine秃诵、Host或Context關聯(lián)续搀;在本例中,只有一個Engine顷链,Engine下只有一個Host目代,Host下只有一個Context,因此AccessLogValve放在三個容器下的作用其實是類似的嗤练。

本例的AccessLogValve屬性的配置榛了,使用的是默認的配置;下面介紹AccessLogValve中各個屬性的作用:

(1)className:規(guī)定了Valve的類型煞抬,是最重要的屬性霜大;本例中,通過該屬性規(guī)定了這是一個AccessLogValve革答。

(2)directory:指定日志存儲的位置战坤,本例中,日志存儲在$TOMCAT_HOME/logs目錄下残拐。

(3)prefix:指定了日志文件的前綴途茫。

(4)suffix:指定了日志文件的后綴。通過directory溪食、prefix和suffix的配置囊卜,在$TOMCAT_HOME/logs目錄下,可以看到如下所示的日志文件错沃。

(5)pattern:指定記錄日志的格式

pattern的配置中栅组,有一個非常有用的選項是%D,含義是請求處理的時間(單位是毫秒)枢析,對于統(tǒng)計分析請求的處理速度幫助很大玉掸。

開發(fā)人員可以充分利用訪問日志,來分析問題醒叁、優(yōu)化應用司浪。例如,分析訪問日志中各個接口被訪問的比例辐益,不僅可以為需求和運營人員提供數(shù)據(jù)支持断傲,還可以使自己的優(yōu)化有的放矢;分析訪問日志中各個請求的響應狀態(tài)碼智政,可以知道服務器請求的成功率认罩,并找出有問題的請求;分析訪問日志中各個請求的響應時間续捂,可以找出慢請求垦垂,并根據(jù)需要進行響應時間的優(yōu)化宦搬。

六、關于用tomcat部署多個應用的3種方法:

1.配置文件中使用多個Context元素劫拗。這種配置好處是這些應用公用Connector间校,也就是說訪問端口是一樣的,這樣就可以都部署在80下了页慷。

這樣有一個要求憔足,就是應用程序在設計的時候就支持Context,一些鏈接前面都先加上動態(tài)的應用名酒繁,而不是使用“/”這樣的絕對路徑滓彰。Context元素的path一定不要以“/”結尾,可以是""或者"/WEB1"這樣的州袒。

2.配置文件中使用多個Service元素揭绑。這種配置可以解決應用程序不支持動態(tài)應用名的情況,使用不同端口訪問不同頁面郎哭。

不過這樣有時候也不是很順利他匪,由于一個tomcat的jvm對一個jni類只允許load一次,你多個應用如果同時load了某個jni的類則會部署失敗夸研。這種情況可以把這個類從項目里拿出來放到tomcat安裝目錄的lib下作為公用的邦蜜。不過還是有點麻煩哈~

3.部署多個tomcat。這個一般是做集群的時候用的亥至,不過你也可以用來部署多應用畦徘,只要調整下端口不沖突就行。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末抬闯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子关筒,更是在濱河造成了極大的恐慌溶握,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸播,死亡現(xiàn)場離奇詭異睡榆,居然都是意外死亡,警方通過查閱死者的電腦和手機袍榆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門胀屿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人包雀,你說我怎么就攤上這事宿崭。” “怎么了才写?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵葡兑,是天一觀的道長奖蔓。 經常有香客問我,道長讹堤,這世上最難降的妖魔是什么吆鹤? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮洲守,結果婚禮上疑务,老公的妹妹穿的比我還像新娘。我一直安慰自己梗醇,他們只是感情好知允,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婴削,像睡著了一般廊镜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唉俗,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天嗤朴,我揣著相機與錄音,去河邊找鬼虫溜。 笑死雹姊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的衡楞。 我是一名探鬼主播吱雏,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瘾境!你這毒婦竟也來了歧杏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤迷守,失蹤者是張志新(化名)和其女友劉穎犬绒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兑凿,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡凯力,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了礼华。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咐鹤。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖圣絮,靈堂內的尸體忽然破棺而出祈惶,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布行瑞,位于F島的核電站奸腺,受9級特大地震影響,放射性物質發(fā)生泄漏血久。R本人自食惡果不足惜突照,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氧吐。 院中可真熱鬧讹蘑,春花似錦、人聲如沸筑舅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠拣。三九已至版仔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間误墓,已是汗流浹背蛮粮。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谜慌,地道東北人然想。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像欣范,于是被迫代替她去往敵國和親变泄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容