首页 文章

在WAR-File中定义Servlet上下文

提问于
浏览
24

我该如何判断,例如Tomcat在给出我的WAR-File时使用特定的上下文路径?

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

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

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

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

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

还有什么提示吗?

4 回答

  • 4

    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 .

    我在这看到两个选项:

    • 将生成的战争的名称设置为较短的名称(我建议使用 <finalName> 而不是 <warName> ,这是不推荐使用的AFAIK):
    <project>
      ...
      <build>
        <finalName>mycontext</finalName>
        ...
      </build>
      ...
    </project>
    
    <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>
    
  • 2

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

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

    防爆 . :

    ln -sf ${CATALINA_HOME}/wars/myapp-0.0.8-SNAPSHOT.war ${CATALINA_HOME}/webapps/myapp.war
    

    埃克尔

  • 5

    您可以设置 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>
    
  • 30

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

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

相关问题