現象:之前遇到很奇怪的問題,發完版之後沒有效果,頁面還是讀取上一版的。
反覆查找原因發現 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裏面