6

Web アプリケーションの context.xml でdocBase属性への相対パスを設定する方法はありますか?

コンピューター間でコンテキスト構成を共有し、アプリを war ファイルではなくディレクトリに配置できるようにしたいと考えています。そうすれば、クラスをそのディレクトリ (プロジェクト開発ディレクトリ内) に直接コンパイルし、Tomcat でこれらのクラスをコピー/パッケージ化せずに使用できます。

Tomcat 8.0.0-RC5 を使用しています。私のディレクトリのレイアウトは次のとおりです。

/home/david/projects/frontend/web-content          <-- the static html files
/home/david/projects/frontend/web-content/WEB-INF  <-- the WEB-INF with the web.xml
/home/david/projects/tomcat                        <-- tomcat base directory
/home/david/projects/tomcat/Catalina/localhost     <-- holds the frontend.xml context configuration

私が試してみました

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/frontend" docBase="../../frontend/web-content">
</Context>

しかし、それはうまくいきませんでした。/web-content の前のパス全体が無視されているようです。ログには次のように記載されています。

The main resource set specified [/home/david/projects/tomcat/webapps/web-content] is not valid

コンテキストコンテナのTomcat 8ドキュメントには次のように書かれています:

このディレクトリまたは WAR ファイルの絶対パス名を指定するか、所有するホストの appBase ディレクトリからの相対パス名を指定できます。

ここで相対とは、appBase の厳密なサブディレクトリを意味しますか (.. は許可されません)?

絶対パスの設定は問題なく機能します。構成

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/frontend" docBase="/home/david/projects/frontend/web-content">
</Context>

動作しますが、それは私のコンピューターに固有のものです。そのため、コンテキスト構成を変更せずに共有することはできなくなりました。

Tomcat サーバーの appBase ディレクトリ内にシンボリック リンクを作成し、アプリケーションの web-content フォルダーを指すようにすることができます。これは機能しますが、Linux マシンと Windows マシンでは構成 (シンボリック リンク) が異なります。

4

1 に答える 1

6

相対パス名の姓のみを取得し、最初の部分を無視することは、Tomcat のバグである可能性が最も高いです。相対パス名が機能するか、エラーをスローする必要があります。しかし、部分を無視するのは悪いことです。回避策として、次のような絶対パス名を使用できます。 <Context docBase="${catalina.home}/../www.war"

Tomcat 8.0.15 の変更ログを読んだところです。「コンテキストの docBase 属性の相対値を正しく処理する」というバグを修正する必要があります(!)。

于 2014-11-17T11:54:44.370 に答える