在WAR-File中定义Servlet上下文

er4*_*z0r 24 java tomcat maven-2 tomcat6

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

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

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

我还在文档中找到了以下path属性Context:

除非在server.xml中静态定义Context,否则不得设置此字段的值,因为它将从用于.xml上下文文件或docBase的文件名中推断出来.

所以它似乎不是告诉应用程序服务器应该是什么路径的正确方法.

还有什么提示吗?

Pas*_*ent 30

Context Container的文档中有两个重点:

  • 在目录中的单个文件(扩展名为".xml")中$CATALINA_BASE/conf/[enginename]/[hostname]/.文件名(减去.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]/命名以匹配应用程序的上下文路径.一旦此文件存在,如果/META-INF/context.xml在主机的appBase中放置了一个带有较新版本的新WAR,则不会替换它.

因此,当您捆绑a时META-INF/context.xml,文件将重命名为WAR的名称,并且此名称将成为上下文路径,而不管元素中是否path定义了任何Context内容.

我在这看到两个选项:

  1. 无论是在生成的战争较短的名称的名称(我建议使用<finalName><warName>它被废弃据我所知):

    <project>
      ...
      <build>
        <finalName>mycontext</finalName>
        ...
      </build>
      ...
    </project>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者使用maven-tomcat-pluginfor部署并在插件配置中设置上下文路径:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

我找到了一个简单的解决方案来保存war文件名并选择context-path.

您只需在Host的外部部署战争,appBase并在appBase目录中创建一个链接.

防爆.:

ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war
Run Code Online (Sandbox Code Playgroud)

埃克尔