5

context.xml ファイルを作成して、アプリケーションの web.xml ファイルのパラメーターをオーバーライドしようとしています。<tomcatHome>/conf/Catalina/localhost

context.xml ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/myapp">    
    <Parameter name="port" value="100" override="1"/>
</Context>

しかし、私はエラーが発生します

java.lang.IllegalArgumentException: Document base <path-to-tomcat> apache-tomcat-7.0.35/webapps/context does not exist or is not a readable directory

<Parameter name="port" value="100" override="1"/>を直接入れるcontext.xml<tomcat-home>/context.xmlうまくいきます。

誰かが私が間違っていることを説明できますか?

4

1 に答える 1

8

これは、 context という名前のアプリケーション コンテキストが存在しないためです。つまり、名前コンテキストがwebappsディレクトリにデプロイされたWeb アプリはありません。

コンテキストの定義に関連する Tomcat 7 の公式ドキュメントを作成します。

個々の Context 要素を明示的に定義できます。

  • アプリケーション ファイル内の /META-INF/context.xml にある個々のファイル。オプションで (ホストの copyXML 属性に基づいて) これを $CATALINA_BASE/conf/[enginename]/[hostname]/ にコピーし、アプリケーションのベース ファイル名に ".xml" 拡張子を加えた名前に変更することができます。

  • $CATALINA_BASE/conf/[enginename]/[hostname]/ ディレクトリの個々のファイル (「.xml」拡張子付き)。コンテキスト パスとバージョンは、ファイルのベース名 (.xml 拡張子を除いたファイル名) から派生します。このファイルは、Web アプリケーションの META-INF ディレクトリにパッケージ化された context.xml ファイルよりも常に優先されます。

  • メインの conf/server.xml の Host 要素内。

したがって、機能させるには、カスタム ファイルにcontext.xmlではなくyour_app_name.xmlという名前を付けます。
あなたの場合、それは(私があなたを正しく理解していれば)myapp.xmlになります。

これはうまくいくはずです。私はちょうどそれをテストしました。

myapp.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>    
    <Parameter name="port" value="100" override="1"/>
</Context>

PS

また、 path属性がなくても取得できるので含めないでください。Apache Tomcat 7
のドキュメントから:

この属性は、 server.xml で Context を静的に定義する場合にのみ使用する必要があります。他のすべての状況では、パスは .xml コンテキスト ファイルまたは docBase のいずれかに使用されるファイル名から推測されます。

server.xml でコンテキストを静的に定義する場合でも、docBase がホストの appBase の下に配置されていないか、 deployOnStartup と autoDeploy の両方が false でない限り、この属性を設定しないでください。このルールに従わない場合、二重展開が発生する可能性があります。

于 2013-02-05T01:54:19.917 に答える