【后臺(tái)開發(fā)系列-Tomcat】server.xml中訪問多個(gè)項(xiàng)目的配置

server.xml作為 tomcat 啟動(dòng)時(shí)的配置依據(jù),其功能包含了配置訪問端口,訪問路徑等,這里主要針對(duì)在同一個(gè) tomcat 中發(fā)布多個(gè)項(xiàng)目,其中最關(guān)鍵的配置是·<Host>標(biāo)簽下appBase<Context>標(biāo)簽下docBasepath之間的關(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è)置appBasedocBase有個(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-twotest-three,由于appBase加載的項(xiàng)目和docBase加載的項(xiàng)目處于同一根目錄,當(dāng)啟動(dòng)tomcat的時(shí)候,會(huì)加載一次test-three,test-onetest-one會(huì)分別加載兩次,這里給出了解釋[Tomcat] server.xml配置appBase與docBase的用法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容