如何配置Tomcat 7以允許WAR文件指定其自己的上下文根,該上下文根不基於WAR文件名?例如:我有A-1.0.0.war和B-1.0.0.war,我想將它們都部署到同一個Tomcat實例中。當部署完成時,我想將瀏覽器指向localhost:8080/portal並查看A-1.0.0.war中的內容,並且我想將一個休息請求curl到localhost:8080/rest/v1/helloworld,其實現來自B-1.0.0.war。Tomcat中WAR文件中的上下文根配置7
我已經四處搜尋,並嘗試配置不同的方式,但這些都沒有產生我上面的期望的情況。另外,我發現Tomcat文檔有點太稀少,無法完全理解。我讀過:
消化的,在%CATALINA_HOME%/ conf目錄後/ server.xml中我有這臺主機條目:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
deployXML="true" copyXML="true" >
<Context path="/portal" docBase="/www/" reloadable="true" swallowOutput="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="www-sample-com-log." suffix=".txt" timestamp="true"/>
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
這是A.war/META-INF/context.xml從t中的一個完整內容他WAR文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/portal" docBase="ROOT/portal" />
當我通過管理控制檯部署到Tomcat,我現在用的是「WAR文件部署」按鈕,但我沒有「部署的目錄或WAR文件在指定的任何字段位於服務器上「(因爲我希望這些來自WAR本身,而不是讓某人指定它)。當我打開webapps目錄時,我看到這個列表。我希望看到的,而不是A-1.0.0/
目錄,portal/
:
A-1.0.0/
B-1.0.0/
docs/
examples/
host-manager/
manager/
ROOT/
sample/
A-1.0.0.war
B-1.0.0.war
sample.war
萬一有幫助,這裏的一些背景故事,以我的方案。我的目標是將捆綁在一個.jar中的應用程序移動到兩個.war文件中。目前,這是一個maven項目,它生成一個jar作爲其包含Spring MVC和JSP應用程序的構建工件。我的客戶正在使用java在命令行上啓動應用程序。我想要在我們的開發服務器上安裝Tomcat 7,通過Tomcat的管理控制檯可以部署WAR文件。我還想在WAR的文件名中加上一個版本號,以便處理WAR的人員清楚他們正在部署的是什麼。在每個構建/發佈週期中,我希望他們解除舊戰爭並部署新戰爭。作爲一個方面說明 - 這是我第一次嘗試將應用程序部署爲戰爭,並且我可能錯過了一些最佳做法,因此如果這不是一個好方法,請善意糾正我。
感謝您的回答。這揭示了一些我完全錯過的東西,那就是Tomcat會在'conf/Catalina/localhost /'文件夾中尋找一個xml文件。現在我明白了文檔中的'conf// /'的含義。我明天回去工作時會試試這個。但是我還有一個問題 - 如果下個月我想在舊的1.0.0版本上部署A-2.0.0.war,是否需要添加另一個''(或更改現有的)以匹配新的WAR文件的名稱?現在我在考慮在WAR文件名中加入版本號是一個壞主意...... –
除非您想使兩個版本保持運行,使用不同的上下文路徑,只需更新現有xml文件的'docBase'即可。 – Andreas