2012-07-30 46 views
12

我正在使用tomcat來部署我的應用程序,我想部署爲一個單一的戰爭應該服務器多個上下文路徑。如何將多個上下文映射到Tomcat中的同一個war文件?

目前我有app1.war和app2.war,但都具有相同的內容只有名稱是不同的訪問通過http:/// app1和http:///app1.war。但我想這樣做,部署app.war並通過app1和app2上下文路徑訪問它。在tomcat中可以做到嗎?請幫我解決這個問題

+1

它應該仍然是相同的Web應用程序(共享相同的本地數據)或Web應用程序真的應該是單獨的實例嗎? – Daniel 2014-06-10 10:17:24

回答

20

這可以通過幾種方式完成。我認爲這種方式是最簡單的:

  1. 移動從WAR文件的webapps/自動部署目錄提取META-INF/context.xml
  2. WAR文件。如果你的戰爭沒有META-INF/context.xml文件,只使用一個文件,不過<Context />
  3. 將此文件複製到Tomcat的conf/[service]/[host]/目錄既是app1.xmlapp2.xml。 ([服務]通常是「Catalina」,[host]是虛擬主機的名稱:在默認的Tomcat配置中,主機名始終爲「localhost」)。
  4. 編輯都app1.xmlapp2.xml並設置docBase屬性爲<Context>元素指向您在步驟#移動1
  5. 重新啓動Tomcat WAR文件

這應該給你一個單一的物理WAR文件和從中部署的多個上下文。儘管Tomcat支持這種配置,但我建議不要這樣做:磁盤空間很便宜,它在運行時不會改變任何東西(您仍然可以獲得內存中所有內容的兩個副本),並且您失去了將不同的WAR文件部署到不同上下文的靈活性和/或單獨更新它們而不修改上下文的兩個的配置。

如果你想要我的建議,堅持複製WAR文件。

+0

我認爲我同意堅持複製WAR,但我處於類似的情況,並且發現通過連續交付管道推送單個工件非常簡單。 另外值得一提的是,如果您將WAR放在主機appBase之外,那麼它們不能被解包(如Tomcat v7),所以如果您有一個需要解包的應用程序(像我這樣做,很遺憾),上面不是一個選項。 – Conan 2014-03-27 17:31:54

+1

這樣的WAR *可以解壓縮,但你必須自己解壓。當然,可以編寫所有這些腳本。 – 2014-03-28 20:31:35

相關問題