web-dev-qa-db-ja.com

WARファイルでのサーブレットコンテキストの定義

どのように伝えることができますか? Tomcatは、WARファイルを指定したときに特定のコンテキストパスを使用しますか?

例:Mavenビルドによって作成されたwarファイルがあり、結果のファイル名はかなり長いです。そのため、Tomcatマネージャーアプリケーションがwarのファイル名をコンテキストとして使用しないようにします。

META-INFでcontext.xmlを指定しても、目的の結果が得られませんでした

pathContext属性のドキュメントでもこれを見つけました。

このフィールドの値は、.xmlコンテキストファイルまたはdocBaseに使用されるファイル名から推測されるため、server.xmlでコンテキストを静的に定義する場合を除き、設定しないでください。

そのため、アプリケーションサーバーにWARのパスがどうあるべきかを伝える正しい方法ではないようです。

他にヒントはありますか?

24
er4z0r

Context Container のドキュメントには2つの重要なポイントがあります。

  • $CATALINA_BASE/conf/[enginename]/[hostname]/ディレクトリ内の個々のファイル(拡張子「.xml」)。 ファイルの名前(.xml拡張子を除く)がコンテキストパスとして使用されます。マルチレベルのコンテキストパスは、#を使用して定義できます。/foo/barのコンテキストパスの場合はfoo#bar.xml。デフォルトのWebアプリケーションは、ROOT.xmlというファイルを使用して定義できます。
  • $CATALINA_BASE/conf/[enginename]/[hostname]/内のアプリケーションのコンテキストファイルが存在しない場合のみ、アプリケーションファイル内の/META-INF/context.xmlにある個々のファイル。 WebアプリケーションがWARとしてパッケージ化されている場合、/META-INF/context.xml$CATALINA_BASE/conf/[enginename]/[hostname]/にコピーされ、アプリケーションのコンテキストパスに一致するように名前が変更されます 。このファイルが存在する場合、新しい/META-INF/context.xmlを持つ新しいWARがホストのappBaseに配置されても、このファイルは置き換えられません。

したがって、META-INF/context.xmlをバンドルすると、ファイルの名前がWARの名前に変更され、path要素で定義されているContextに関係なく、この名前がコンテキストパスになります。

したがって、ここには2つのオプションがあります。

  1. 生成されたwarの名前を短い名前に設定します(推奨されない<finalName> over <warName>を使用することをお勧めします):

    <project>
      ...
      <build>
        <finalName>mycontext</finalName>
        ...
      </build>
      ...
    </project>
    
  2. または、デプロイメントに 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>
    
30
Pascal Thivent

Warファイル名を保持し、コンテキストパスを選択する簡単なソリューションを見つけました。

ホストのappBaseの外部に戦争を展開し、appBaseディレクトリ内にリンクを作成する必要があります。

例:

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

エクトル

5
Ektor

<Context>の-​​ META-INF/context.xml 要素のpath属性を設定できます。

または、mavenを設定して、カスタム名でwarアーティファクトを作成できます。

<build>
    <plugins>
         <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <warName>yourCustomWarName</warName>
            </configuration>
        </plugin>
        ........
    </plugins>
</build>
4
Bozho

プロジェクトにはMETA-INFフォルダーがあり、そのフォルダーにはcontext.xmlファイルがあります。

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