server.xml作為 tomcat 啟動(dòng)時(shí)的配置依據(jù),其功能包含了配置訪問端口,訪問路徑等,這里主要針對(duì)在同一個(gè) tomcat 中發(fā)布多個(gè)項(xiàng)目,其中最關(guān)鍵的配置是·<Host>標(biāo)簽下appBase和<Context>標(biāo)簽下docBase,path之間的關(guān)系,以下也只列出關(guān)鍵性代碼
標(biāo)簽釋義
以下表格應(yīng)用自 tomcat中server.xml配置詳解
| 元素名 | 屬性 | 解釋 |
|---|---|---|
| host(表示一個(gè)虛擬主機(jī)) | name | 指定主機(jī)名 |
| appBase | 應(yīng)用程序基本目錄,即存放應(yīng)用程序的目錄 | |
| unpackWARs | 如果為true,則tomcat會(huì)自動(dòng)將WAR文件解壓,否則不解壓,直接從WAR文件中運(yùn)行應(yīng)用程序 | |
| Context(表示一個(gè)web應(yīng)用程序) | docBase | 應(yīng)用程序的路徑或者是WAR文件存放的路徑 |
| path | 表示此web應(yīng)用程序的url的前綴 | |
| reloadable | 這個(gè)屬性非常重要,如果為true,則tomcat會(huì)自動(dòng)檢測應(yīng)用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動(dòng)裝載新的應(yīng)用程序,我們可以在不重起tomcat的情況下改變應(yīng)用程序 |
域名配置
以下例子引用自 tomcat部署多項(xiàng)目server.xmll配置
- 同個(gè)域名多個(gè)項(xiàng)目
<Host appBase="webapps" autoDeploy="true" name="www.test.com.cn" unpackWARs="true">
<!--訪問路徑:www.test.com.cn/test-one-->
<Context docBase="D:\tomcat\webapps\test-one" path="/test-one" reloadable="true"/>
<!--訪問路徑:www.test.com.cn/test-two-->
<Context docBase="D:\tomcat\webapps\test-two" path="/test-two" reloadable="true"/>
</Host>
- 不同域名多個(gè)項(xiàng)目
<!-- 訪問路徑:www.test.com.cn -->
<Host name="www.test.com.cn" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="D:\tomcat\webapps\test-three" reloadable="true" />
</Host>
<!-- 訪問路徑:www.test2.com.cn -->
<Host name="www.test2.com.cn" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="D:\tomcat\webapps\test-four" reloadable="true" />
</Host>
解釋說明
1.appBase
<Host>中的appBase,其作用是指定 tomcat 啟動(dòng)時(shí),第一加載的項(xiàng)目,默認(rèn)的為 webapps ,它代表的意思是加載 tomcat 根目錄下 webapps 文件夾中的項(xiàng)目,也就是 tomcat 的管理頁。
- 將項(xiàng)目作為默認(rèn)啟動(dòng)項(xiàng)目時(shí),注意:appBase指定路徑的項(xiàng)目,需要包含有ROOT的文件夾,但不需要寫進(jìn)XML中,例如
項(xiàng)目test的原路徑:
E:\WorkProject\TomcatRun\test\WEB-INF
如果要將該項(xiàng)目設(shè)置為默認(rèn)的啟動(dòng)項(xiàng)目,則文件的存放路徑需要改為
E:\WorkProject\TomcatRun\test\ROOT\WEB-INF
相應(yīng)的配置文件為
<Host name="localhost" appBase="E:\WorkProject\TomcatRun\test" unpackWARs="true" autoDeploy="true">
</Host>
并且此項(xiàng)目的API訪問路徑不需要URL前綴,即http://localhost:8080
2.docBase
<Context>中的docBase,其作用是當(dāng)需要發(fā)布多個(gè)項(xiàng)目時(shí),可以在這里設(shè)置項(xiàng)目路徑,值可以是絕對(duì)路徑,也可以時(shí)相對(duì)于appBase的路徑,這里我們只寫絕對(duì)路徑。
比如我們有另一個(gè)項(xiàng)目test2,存放地址是E:\WorkProject\TomcatRun\test2,則相應(yīng)的配置可以寫為
<Host name="localhost" unpackWARs="true" autoDeploy="true" appBase="webapps">
<Context docBase="E:\WorkProject\TomcatRun\test2" path=" " debug="0" reloadable="true"/>
</Host>
這里appBase="webapps",因?yàn)槲覀儾蝗リP(guān)心默認(rèn)啟動(dòng)項(xiàng)目,而且我們這里的path=" ",當(dāng)path=" "時(shí),docBase所指向的項(xiàng)目就是第一加載項(xiàng)目,訪問http://localhost:8080時(shí),指向的是docBase所指向的項(xiàng)目(這里不需要存在ROOT文件夾)
3.path
這個(gè)比較簡單,它的作用是URL的訪問前綴,和項(xiàng)目本身沒有關(guān)系,可以是任意值,比如
<Host name="localhost" unpackWARs="true" autoDeploy="true" appBase="webapps">
<Context docBase="E:\WorkProject\TomcatRun\test2" path="project1" debug="0" reloadable="true"/>
</Host>
那么要訪問test2時(shí),需要訪問http://localhost:8080/project1
采坑
在設(shè)置appBase和docBase有個(gè)地方需要注意,當(dāng)appBase的根路徑和docBase的根路徑一致時(shí),會(huì)導(dǎo)致項(xiàng)目重復(fù)加載,比如
<Host appBase="D:\tomcat\webapps\test-three" autoDeploy="true" name="www.test.com.cn" unpackWARs="true">
<Context docBase="D:\tomcat\webapps\test-one" path="/test-one" reloadable="true"/>
<Context docBase="D:\tomcat\webapps\test-two" path="/test-two" reloadable="true"/>
</Host>
文件夾webapps下有三個(gè)項(xiàng)目文件夾,分別是test-one,test-two,test-three,由于appBase加載的項(xiàng)目和docBase加載的項(xiàng)目處于同一根目錄,當(dāng)啟動(dòng)tomcat的時(shí)候,會(huì)加載一次test-three,test-one和test-one會(huì)分別加載兩次,這里給出了解釋[Tomcat] server.xml配置appBase與docBase的用法