1,tomcat應用部署時,可以通過在server.xml裏配置,也可以在$CATALINA_HOME\conf\Catalina\localhost中添加一個xml文件,用來自定義應用部署。
這種部署可以指定應用訪問路徑。
經過測試,發現有以下幾種情況
1,server.xml裏如下配置
<Context path="/abc" reloadable="false" docBase="/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war" workDir="/tomcat/apps/work">
</Context>
path表示訪問的url路徑,docBase指定war包的路徑。啓動後,發現path生效,http://127.0.0.1:8080/abc已經是程序頁面。
webapps下增加了一個ocdc目錄,一個abc目錄,這說明omdm.war部署了兩次。
2,server.xml裏如下配置
<Context path="" reloadable="false" docBase="/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war" workDir="/tomcat/apps/work">
</Context>
path爲空,docBase指定war包的路徑。
啓動後,發現path沒有生效,訪問http://127.0.0.1:8080/顯示的是tomcat的歡迎頁面。
3,server.xml裏如下配置
<Context path="" reloadable="false" docBase="/tomcat/apache-tomcat-8.0.50/webapps/ocdc" workDir="/tomcat/apps/work">
</Context>
把webapps下的war包刪除,ocdc目錄保留,發現沒有war包,ocdc路徑也自動刪除了。
測試時發現Tomcat會定時掃描webapps目錄,如果沒有對應的war包就會刪除項目目錄。如果想要不把war包放到目錄下,則可以在tomcat停止時把ocdc.war包移出webapps目錄,這樣ocdc目錄不會被刪除。如果有war包,則會自動部署項目。
在webapps/ocdc目錄不存在的情況下,context配置了這個目錄,則tomcat都無法啓動,而不只是應用不能啓動。
4,server.xml裏如下配置
<Context path="" reloadable="false" docBase="/tomcat/apache-tomcat-8.0.50/webapps/ocdc" workDir="/tomcat/apps/work">
</Context>
webapps/ocdc目錄存在,啓動tomcat後,path生效,訪問http://127.0.0.1:8080/顯示的是應用頁面。
5,嘗試刪除ROOT和omdm目錄,
<Context path="" reloadable="false" docBase="/tomcat/apache-tomcat-8.0.50/webapps/ocdc.war" workDir="/tomcat/apps/work">
啓動tomcat後,
http://197.1.25.30:8080/訪問的是應用的頁面。
但是查看webapps目錄,發現ROOT文件夾和ocdc文件夾裏面的內容一樣
懷疑是刪除了ROOT,又把應用的上下文根設置爲/,這樣會造成應用在ROOT目錄下部署一遍。
結論:
應用部署,註冊上下文根優先級:
Server.xml設置了context,且項目已經解壓部署>ROOT應用>Server.xml設置了context,項目還是war包,還沒有部署
如果想要讓應用搶到ROOT的上下文根,則需要在server.xml裏docBase指定的爲已經解壓的目錄,且設置path爲空。