Web コンテナはどうやって代替 docroot に基づいたファイルシステムのリソースパスを算出するのですか?

代替 docroot を設定する際には、以下のルールに注意してください:

  • 代替 docroot (より厳密には代替 docroot の <code>from</code> の値) は、リクエストパスの情報( <code>javax.servlet.http.HttpServletRequest.getPathInfo()</code> の呼び出しにより取得される)と競合します。
  • リクエストが代替 docroot と一致するリソースのローカルパスは、代替docrootの <code>dir</code> の値にリクエストのパスインフォを連結して自動生成されます。

一例として、たとえば次のような代替 docroot が <code>sun-web.xml</code> の中で宣言されていて:

<property name=''alternatedocroot_1'' value=''from=/orderstore/* dir=C:/stryker_cci/orderstore''/>

以下のようなリクエスト URL があり:

http://localhost/CIWeb/orderstore/test.txt

このリクエストが <code>/CIWeb</code> に配備されている Web アプリケーションにマッピングされているとします。リクエスト URL のコンテキストルートが <code>/CIWeb</code> 、パス情報が <code>/orderstore/test.txt</code> で、これは上記の代替 docroot と一致します。

リクエストされたリソースを検索するためのローカルファイルシステムのパスは、代替 docroot の <code>dir</code> の値として指定されています:

C:/stryker_cci/orderstore

これにリクエストのパス情報:

/orderstore/test.txt

が追加され、最終的に以下のような形になります:

C:/stryker_cci/orderstore/orderstore/test.txt

もうひとつの例として、次のような代替 docroot が <code>sun-web.xml</code>内で宣言されていて:

<property name=''alternatedocroot_1'' value=''from=/myimages/* dir=/images''/>

次のようなリクエスト URL があり:

http://localhost:8080/myimages/image1.jpg

さらに、上記のリクエストが Web アプリケーションのルートコンテキストにマッピングされているとします(<code>/</code>)。この場合、リクエストのパス情報は次のように評価されます:

/myimages/image1.jpg

これは上記の代替 docroot と一致します。リクエストされたリソースを検索するためのローカルファイルシステムのパスは、代替 docroot の <code>dir</code> の値として指定されています:

/images

これにリクエストのパス情報:

/myimages/image1.jpg

が追加され、結果として次のようになるわけです:

/images/myimages/image1.jpg

日本語翻訳: Kana

英文 (翻訳したバージョン: 6)