[英]Define Servlet Context in WAR-File
在給出WAR-File時,如何告訴Tomcat使用特定的上下文路徑?
示例:我有一個由maven build創建的war文件,結果文件的名稱相當長。 所以我不希望tomcat管理器應用程序使用war的文件名作為上下文。
在META-INF中提供context.xml不會產生所需的結果
我還在Context
的path
屬性的文檔中找到了這個:
除非在server.xml中靜態定義Context,否則不得設置此字段的值,因為它將從用於.xml上下文文件或docBase的文件名中推斷出來。
所以它似乎不是告訴應用程序服務器應該是什么路徑的正確方法。
還有什么提示嗎?
Context Container的文檔中有兩個重點:
- 在
$CATALINA_BASE/conf/[enginename]/[hostname]/
目錄中的單個文件(擴展名為“.xml”)中。 文件名 (減去.xml擴展名) 將用作上下文路徑 。 可以使用#來定義多級上下文路徑,例如foo #bar.xml,用於/ foo / bar的上下文路徑。 可以使用名為ROOT.xml的文件來定義默認Web應用程序。- 僅當
$CATALINA_BASE/conf/[enginename]/[hostname]/
的應用程序不存在上下文文件時,才在應用程序文件內的/META-INF/context.xml
中的單個文件中。 如果Web應用程序打包為WAR,則/META-INF/context.xml
將復制到$CATALINA_BASE/conf/[enginename]/[hostname]/
命名以匹配應用程序的上下文路徑 。 一旦此文件存在,如果在主機的appBase中放置了帶有較新的/META-INF/context.xml
的新WAR,則不會替換它。
因此,當您捆綁META-INF/context.xml
,文件將重命名為WAR的名稱,並且此名稱將成為上下文路徑,而不管Context
元素中定義的任何path
。
我在這看到兩個選項:
將生成的war的名稱設置為較短的名稱(我建議使用<finalName>
over <warName>
,不推薦使用AFAIK):
<project> ... <build> <finalName>mycontext</finalName> ... </build> ... </project>
或者使用maven-tomcat-plugin
進行部署,並在插件配置中設置上下文路徑:
<project> ... <build> ... <plugins> ... <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>tomcat-maven-plugin</artifactId> <version>1.0-SNAPSHOT</version> <configuration> <path>/mycontext</path> </configuration> </plugin> ... </plugins> ... </build> ... </project>
我找到了一個簡單的解決方案來保存war文件名並選擇context-path。
你只需要在Host的appBase
之外部署你的戰爭,並在appBase
目錄中創建一個鏈接。
防爆。 :
ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war
埃克爾
您可以設置META-INF/context.xml
的<Context>
元素的path
屬性。
或者,您可以配置maven以使用自定義名稱創建war工件:
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.0</version>
<configuration>
<warName>yourCustomWarName</warName>
</configuration>
</plugin>
........
</plugins>
</build>
在您的項目中有一個文件夾META-INF,在該文件夾中有一個context.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myproject" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.