tomcat部署war包時,訪問路徑如何取消包名前綴

方法一

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
		<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\webapps\em" reloadable="true"></Context>
</Host>

修改server.xml配置文件,在conf文件夾下。這裏在Host標籤下新增Context標籤,docBase爲項目路徑,docBase爲你war包的路徑,其中em爲war包名稱。
這樣配置後,會導致項目進行兩次部署。
原因是appBase默認爲webapps,即對webapps目錄下的war包進行一次部署,docBase也有着相同的效果,war包會再進行一次部署。

方法二

<Host name="localhost"  appBase="" unpackWARs="true" autoDeploy="true">
		<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\webapps\em" reloadable="true"></Context>
</Host>

修改server.xml配置文件。配置如上,將appBase置爲空,這樣就只有內層一次部署了。但這樣配置有一個缺陷,就是war包不會自動解壓。因此我們之後無法在webapps文件夾下修改已經解壓好的war包,或者我們直接上傳解壓好的war包。
編輯:後經測試發現,再tomcat的根目錄下新建了一個名爲ROOT的文件夾,內容是解壓後的war包文件。因此可以理解爲appBase指定的是解壓文件的路徑,這裏置爲空的話默認就解壓到根目錄了。所以我們儘量不要使用這種方法,解壓後的文件夾最好應在webapps下,方便管理。

方法三

方法二中的缺陷如何解決呢,這裏我們還有一種暴力方法。
ROOT文件夾是tomcat默認的根目錄,用來測試tomcat是否安裝部署成功,也就是訪問localhost:端口號時候會出來一隻貓的頁面。因此在生產環境上是沒什麼作用的。
所以這裏可以直接把之前的ROOT文件夾幹掉,把自己的包命名爲ROOT.war。可自動解壓,包名前綴會去掉。

方法四

上一種方法太不優雅了,這裏介紹另一種方法。

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
		<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\myapps\em.war" reloadable="true"></Context>
</Host>

同樣是修改server.xml配置文件。
這裏注意以下幾點:
1.appBase爲webapps,即我們解壓後的文件會到這個目錄下。
2.Context標籤中的path爲空
3.Context標籤中的docBase,注意下路徑不要在webapps文件夾下,這裏我們新建了一個文件夾myapps,em.war,是我們項目的war包名稱。
4.需要將webapps文件夾下原ROOT文件夾刪除,因爲我們這樣做解壓後的文件夾名爲ROOT,如果原來已經有ROOT則不會發生解壓操作。

方法五

方法四可以有另一種實現,即server.xml配置文件不做修改。
在“conf/Catalina/localhost”文件夾下新增一個xml文件,名爲ROOT.xml,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:\JavaInfo\sorl\apache-tomcat-8.0.27\myapps\em.war"></Context>

與上一個方法一樣,需要先將webapps文件夾下的ROOT文件夾刪除,否則不會正確解壓。

總結

綜上所述,還是應該採取方法三、四、五中的一種。
方法一會進行兩次部署肯定是不可以的,會大大增加啓動tomcat的速度。
方法二中無法顯示解壓後的文件夾,肯定也是不對的。因爲使用tomcat肯定是爲了可以很方便的動態替換部分文件,壓縮的war包是無法實現這個效果的。
因此,在後三種方法,選擇一種最適合自己的方法吧!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章