2012-03-08 62 views
12

我正在使用Tomcat 7,並且想要在war文件本身中設置war文件的上下文根,並讓Tomcat自動部署並獲取此路徑。 我以爲我找到了通過將context.xml放入包含的war的META-INF目錄中來實現它的方法。如何在Tomcat的META-INF/context.xml中指定路徑

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/somepath/myapp"/> 

但是,這似乎並沒有工作,我認爲這是由http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/startup/SetContextPropertiesRule.html加載其中規定,它加載的一切,但路徑!

我知道我可以命名戰爭somepath#myapp.war,它會選中它,但我也部署到weblogic這是不喜歡這樣的名稱。

有一些設置,我可以使用從上面的context.xml的路徑工作?除非在指定的路徑

感謝 大衛

回答

12

上下文path屬性被忽略硬編碼在server.xmlContext,這是強烈反對,並沒有考慮多路徑。

戰爭文件的名稱或tomcat/conf/Catalina/hostname中的上下文xml文件的名稱將成爲部署的應用程序的path

在你的情況下,上述兩種解決方案是解決方案,只要確保你將.war文件放在主機指定的appBase之外,否則你將部署應用兩次。

在:conf/Catalina/localhost/myapp#path.xml

<?xml version="1.0"?> 
<Context docBase="/some/path/to/myapp.war"> 
</Context> 
+2

這也解決了同樣的問題,我也謝謝你。但是,我相信這是一個忽略路徑屬性的Tomcat缺陷。文件甚至說的是相反的。更糟糕的是,docBase似乎被Tomcat 7.0.22忽略,所以唯一的辦法就是將這些愚蠢的哈希名稱用於context.xml和.war。 #Sigh ... – zakmck 2012-12-05 14:13:40

+1

這不愚蠢。出於顯而易見的原因,您不能在文件名中使用/(或可能是\)字符。 應刪除IMO屬性的路徑屬性。它讓人困惑太多。 – Pidster 2012-12-12 18:27:32

+2

我沒有反對散列,我認爲這是不好的,我不得不通過文件名來確定上下文路徑,而不是參數path和docBase。例如,在實踐中,我不能部署任何名爲myapp-v1.2.3beta.war的文件。好的,我可以設置一個別名,但另一種方式會更好。 – zakmck 2012-12-12 20:32:27

0

如果您加載application.war到一個目錄Tomcat是不知道的,怎麼能讀你的war文件什麼?添加此信息的正確位置位於$ TOMCAT_HOME/conf/context.xml中 - 這是Tomcat的一部分,Tomcat可以讀取此文件並找出應用程序的位置並部署它。還有更多關於how to set up JNDI in Tomcat

+0

歡迎使用Stack Overflow!感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2013-02-27 02:57:59

1

添加copyXML = 「true」 以主機$ TOMCAT_HOME內部配置/ conf目錄/ server.xml中像

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" copyXML="true"> 
+0

我一直希望這會起作用,但最終仍然忽略了價值。它曾用於Tomcat的舊版本,但不適用於Tomcat 7。 – 2016-05-31 21:42:28

1

在/tomcat7/conf/server.xml添加下面的元素中的線條和重新啓動Tomcat以進行更改。

*將「mycom」更改爲您的應用程序名稱。

<Context path="" docBase="mycom"> 
    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
</Context> 
<Context path="ROOT" docBase="ROOT"> 
    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
</Context> 

這將使默認的根應用程序出現在上下文根「/ ROOT」下。

現在您的應用程序可以在「/」和「/ mycom」訪問!