Tomcat下發布war包產生兩個不同版本的訪問地址的解決方案appBase和docBase的關係

現象:之前遇到很奇怪的問題,發完版之後沒有效果,頁面還是讀取上一版的。

反覆查找原因發現  http://localhost:8080/mobie 這個路徑下的頁面是正常的,

而  http://localhost:8080/這個頁面是舊版本的。

爲什麼呢?

之前是我們在server.xml


添加了<Context/>配置節,目的是去掉 http://localhost:8080/項目名  後面的項目名,直接訪問域名就可以訪問網站。

這樣做的卻可以用域名訪問,但是帶來了隱藏很深的 很奇怪的問題。如上所訴

原因在於:啓動tomcat 的時候,webapps目錄下面的.war文件將被自動解壓縮並部署爲應用。同時mobile下的應用會copy到ROOT下。如果ROOT文件下不存在則mobile的應用(子文件)那麼copy進去(問題就在這裏

我們第一次發版的時候ROOT下並沒有mobile 的應用所以copy 進去沒有問題),再次發版的時候,由於ROOT下存在mobile 應用沒有覆蓋,所以出現兩種結果。 http://localhost:8080/mobie 與 http://localhost:8080訪問的頁面不一致。

解決方法:找到原因之後,在每次發版之前刪調ROOT,啓動tomcat會重新生產ROOT,這樣ROOT下應用就是最新的。


 擴展:

ROOT 與webapps 的關係:

我們一般都是這麼寫http://localhost:8080/項目名,如果不寫項目名默認就是webapps目錄下的ROOT項目,ROOT裏面就有那隻貓。

比如說你打上http://localhost:8080  就直接訪問root下面的文件了 默認爲tomcat的歡迎頁面 
如果你把root下面文件換成你項目文件,那麼http://localhost:8080這樣的話就是訪問你項目了 

 

<host appBase="d:/aaa">
<Context path="/smswap" reloadable="true" docBase="D:\workspace\smswap\WebRoot"></Context>
</host>

我們先看appBase,這個目錄表示:
1 這個目錄下面的子目錄將自動被部署爲應用。
2 這個目錄下面的.war文件將被自動解壓縮並部署爲應用

而docBase只是指向了你某個應用的目錄,這個可以和appBase沒有任何關係。

如果上述的問題,我們不想每次發佈新版本的時候都刪掉root文件夾的話,那我們就指定一下appBase和docBase的路徑就好了




總結:
如果你想自己指定路徑,那麼應該在docBase裏面 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章