tomcat部署war,啓動訪問不到工程,需要啓動兩次()

問題:

1.打包好的web服務

2.部署在tomcat的webapps路徑(<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">)

3.配置server.xml,<context path="" docBase="xxxx" reloadable="true"/>

4.啓動tomcat

是否直接通過localhost/index.jsp訪問到的是tomcat的管理界面?無法訪問到工程?

其實,這個時候帶上工程名是可以訪問到的。(即通過localhost/xxxx/index.jsp就可以訪問)

原因:

這個與tomcat的加載順序有關係,第一次啓動需要將war解壓,但是在解壓之前已經處理過server.xml了,server.xml在這個時候並沒有找到xxxx工程。於是開始解壓,普通情況,在webapps下的工程解壓後都可以通過工程名訪問的,這個war也是。只有在第二次及以後啓動tomcat,server.xml才能找到xxxx工程,纔可以通過localhost直接訪問。

解決方案:

A.部署工程的時候,即將war包解壓好。或者說直接發佈解壓後的包,不通過tomcat解壓war包。

B.第一次部署war包的時候需要啓動兩次tomcat。這個方案可以解決,但是比方採用spring框架,那麼applicationContext.xml配置文件會加載兩次。

C.通過nginx代理,不去配置無需工程名的context。也可以達到不需要工程名即可訪問工程的效果。這個方案有風險,因爲開發環境的設計是沒有工程名後綴的,那麼工程裏邊,很多頁面的跳轉就已經被設計成爲了不帶工程名後綴的,如果這個時候加上,有些頁面會存在找不到的風險。

D.可以將工程放在非webapps的目錄下,然後在context標籤的path屬性配置war包的路徑。也就是將war包放在Host.appBase指定的路徑之外的地方就可以了。這個方案在tomcat解壓後,會在webapps(Host標籤的屬性appBase)下,生成ROOT文件夾,即是解壓後的包。優選這個方案。



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