一尘不染

在WAR文件中定义Servlet上下文

tomcat

给定我的WAR文件时,如何告诉Tomcat使用特定的上下文路径?

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

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

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

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

因此,这似乎不是告诉应用服务器WAR路径的正确方法。

还有其他提示吗?


阅读 326

收藏
2020-06-16

共1个答案

一尘不染

上下文容器的文档中有两个要点:

  • 在目录中的单个文件中(扩展名为“ .xml”)$CATALINA_BASE/conf/[enginename]/[hostname]/
    文件名 (不带.xml扩展名) 将用作上下文路径 。可以使用#定义多级上下文路径,例如对于/ foo /
    bar的上下文路径为foo#bar.xml。可以使用名为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,无论元素中path定义了什么,文件都将重命名为WAR的名称,并且该名称成为上下文路径Context

因此,我在这里看到两个选择:

  1. 无论是在生成的战争较短的名称的名称(我建议使用<finalName><warName>它被废弃据我所知):
        <project>
      ...
      <build>
        <finalName>mycontext</finalName>
        ...
      </build>
      ...
    </project>
  1. 或使用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>
2020-06-16