【后臺開發系列-Tomcat】server.xml中訪問多個項目的配置

server.xml作為 tomcat 啟動時的配置依據,其功能包含了配置訪問端口,訪問路徑等,這里主要針對在同一個 tomcat 中發布多個項目,其中最關鍵的配置是·<Host>標簽下appBase<Context>標簽下docBasepath之間的關系,以下也只列出關鍵性代碼

標簽釋義

以下表格應用自 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

采坑

在設置appBasedocBase有個地方需要注意,當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-onetest-twotest-three,由于appBase加載的項目和docBase加載的項目處于同一根目錄,當啟動tomcat的時候,會加載一次test-threetest-onetest-one會分別加載兩次,這里給出了解釋[Tomcat] server.xml配置appBase與docBase的用法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容