在WAR-File中定义Servlet上下文

如何在给出我的WAR-File时告诉Tomcat使用特定的上下文路径?

示例:我有一个由maven build创建的war文件,结果文件的名称相当长。 所以我不希望tomcat管理器应用程序使用war的文件名作为上下文。

在META-INF中提供context.xml不会产生所需的结果

我还在Contextpath属性的文档中找到了这个:

除非在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

我在这看到两个选项:

  1. 将生成的war的名称设置为较短的名称(我建议使用 over ,不推荐使用AFAIK):

      ...  mycontext ...  ...  
  2. 或者使用maven-tomcat-plugin进行部署,并在插件配置中设置上下文路径:

      ...  ...  ...  org.codehaus.mojo tomcat-maven-plugin 1.0-SNAPSHOT  /mycontext   ...  ...  ...  

我找到了一个简单的解决方案来保存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元素的path属性。

或者,您可以配置maven以使用自定义名称创建war工件:

    maven-war-plugin 2.0  yourCustomWarName   ........   

在您的项目中有一个文件夹META-INF,在该文件夹中有一个context.xml文件。