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