3

簡単な質問:Tomcat7では、extraResourcePathsとエイリアスを使用してアプリケーションの外部のディレクトリにアクセスすることの違いは何ですか?

これら2つのserver.xmlスニペットのいずれかを使用できますが、どちらも機能しているようです。どちらもこのURLを正常にロードしているようです:http://localhost/app/images/box.jpg。どちらか一方を使用することに利点はありますか?

<Context docBase="Eclipse_Project" path="/app"
        reloadable="true" source="org.eclipse.jst.j2ee.server:Eclipse_Project"
        aliases="/images=D:\path\to\images"/>

また

<Context docBase="Eclipse_Project" path="/app"
        reloadable="true" source="org.eclipse.jst.j2ee.server:Eclipse_Project">
        <Resources className="org.apache.naming.resources.VirtualDirContext"
                extraResourcePaths="/images=D:\path\to\images"/>
</Context>
4

2 に答える 2

4

これは、WARまたは展開されたディレクトリの一部ではないリソースをプルする複数の異なる方法がある結果です。率直に言って、それは長い間クリーンアップが遅れている混乱です。サーブレット3.1(つまりTomcat 8)に提案された「オーバーレイ」(または最終的に呼び出されるもの)機能により、大規模なクリーンアップが促されました。現在のすべての実装は、単一の実装に統合されます。かわいくないですが、完了するまでに少し時間がかかります。

エイリアスは、Webアプリケーションリソースの外部として扱われます。DirContextは、内部リソースをチェックする前にエイリアスをチェックします。したがって、実際のパスを要求すると、元のパスが取得されます。

extraResourcePathsを使用する場合、それらはWebアプリケーションリソースの一部として扱われます。Eclipseがアプリケーションリソースのコピーを作業ディレクトリにトリガーしたようです。これは通常、ファイルのロックを回避するために行われます。extraResourcePathsはWebアプリケーションの一部として扱われるため、それらもコピーされ、Tomcatがリソースを提供している場所であるため、getRealPath()はコピーされた場所を報告します。

于 2012-06-21T22:27:43.943 に答える
1

さらに調べてみると、この違いがわかりました。

このJavaコードの結果は異なります。理由はまだわかりません。

String path = getServletContext().getRealPath("/images");

extraResourcePathsを使用すると、パスは以下のようになります。これは、EclipseがWebアプリを展開するフォルダーであり、有効なディレクトリーではありません。

C:\Projects\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\Eclipse_Project\images

エイリアスを使用すると、パスは以下のようになり、実際に必要なものになります。

D:\path\to\images

誰かが実際にこれを説明できれば。:-)

于 2012-06-21T13:24:54.810 に答える