JavaServer Pages の静的ファイルにアクセスするための Web コンテナーの構成
Web コンテナーは、アプリケーションの構成に応じて、最大 4 つまでの異なるロケーションで静的ファイルおよび JavaServer Pages (JSP) ファイルを検索します。
この検索は、インバウンド要求の処理に適したリソース、および以下の API から返される結果を見つけるために重要です。
URL ServletContext.getResource(String path)
Set ServletContext.getResourcePaths(String path)
重要: 静的ファイルは、fileServing プロパティーが使用可能になっており、アプリケーションに /* サーブレット・マッピングが含まれていない場合にのみ検索されます。
また、JSP ファイルには、web.xml ファイルで定義されたその他のパターンに加えて、以下の拡張子を持つファイルが含まれます。
- .jsp
- .jspx
- .jsw
- .jsv
以下に、4 つのロケーションを優先される順に示します。
- アプリケーションの WAR ディレクトリー
- Web コンテナーは、最初に、アプリケーションの WAR ディレクトリーで要求されたリソースを検索します。 WEB-INF ディレクトリーまたは META-INF ディレクトリーに getResource() メソッドおよび getResourcePaths() メソッドを使用してアクセスすることは可能ですが、これらのディレクトリーにインバウンド要求用のリソースを配置することはできません。
- フラグメント前の文書ルート
- Web コンテナーは、2 番目に、アプリケーションにより定義されたフラグメント前の文書ルートを検索します。
アプリケーションの WEB-INF ディレクトリー内にある ibm-web-ext.xmi ファイルに、フラグメント前の文書ルートを定義します。
静的ファイルまたは JSP ファイルのフラグメント前の文書ルートは、以下のように定義します。
静的ファイル:<fileServingAttributes xmi:id="<user-provided name>" name="preFragmentExtendedDocumentRoot" value="<user provided value>"/>
JSP ファイル: <jspAttributes xmi:id="<user provided name>" name="preFragmentExtendedDocumentRoot" value=<user provided value>"/>
<user provided name> には、ディレクトリーのリストまたは jar のリスト、あるいはその両方を指定できます。以下に例を示します。
<user provided name> にディレクトリーのリストのみが指定され、そのディレクトリーに JAR ファイルが含まれている場合、内部でそれらの JAR ファイルを検索しません。そのディレクトリーの内部では静的ファイルと JSP ファイルのみを検索します。ただし、外部では JAR ファイルの有無を検索します。jar 内に静的ファイルまたは JSP ファイルが存在する場合、その静的ファイルまたは JSP ファイルは JAR ファイルの META-INF フォルダーの中に入れてはならず (このフォルダーは制限付きフォルダーであるため)、<user provided name> に JAR ファイルへの絶対パスを含める必要があります。<fileServingAttributes name="extendedDocumentRoot" value="C:\EDR_directory,C:\my\path\to\jarEDR.jar"/>
重要: フラグメント前の文書ルートは、WebSphere® Application Server バージョン 9.0 の新機能です。
- アプリケーションの WAR ファイル内の WEB-INF/Lib ディレクトリー下にあるフラグメントの META-INF/resources ディレクトリー
- フラグメント前の文書ルートを検索した後で、Web コンテナーは Web フラグメントを検索します。
1 つの Web フラグメントが、アプリケーションの WEB-INF/lib ディレクトリー内の 1 つの JAR ファイルを構成します。
JAR は、JAR ファイル内で定義された META-INF/resources ディレクトリー内に静的リソースを含む場合があります。
Web コンテナーが META-INF/resources ディレクトリーを検索しないようにするには、com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing Web コンテナー・カスタム・プロパティーを true に設定します。
カスタム・プロパティーのデフォルト値は、false です。
com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing = true
重要: アプリケーションの WAR ファイル内の WEB-INF/Lib ディレクトリー下にあるフラグメントの META-INF/resources ディレクトリーは、WebSphere Application Server バージョン 9.0 の新機能です。
- 拡張文書ルート
- 最後に、Web コンテナーは、拡張文書ルートとして定義されたすべてのアプリケーションを検索します。
前のリリースでも使用可能であった拡張文書ルートは、アプリケーションの WEB-INF ディレクトリー内にある ibm-web-ext.xmi ファイルで定義されます。
静的ファイルまたは JSP ファイルの拡張文書ルートは、以下のように定義します。
静的ファイル:<fileServingAttributes xmi:id="<user provided name>" name="extendedDocumentRoot" value="<user provided value>"/>
JSP ファイル: <jspAttributes xmi:id="<user provided name>" name="extendedDocumentRoot" value=<user provide value>"/>
com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing = true
<user provided name> には、ディレクトリーのリストまたは jar のリスト、あるいはその両方を指定できます。以下に例を示します。
<user provided name> にディレクトリーのリストのみが指定され、そのディレクトリーに JAR ファイルが含まれている場合、内部でそれらの JAR ファイルを検索しません。そのディレクトリーの内部では静的ファイルと JSP ファイルのみを検索します。ただし、外部では JAR ファイルの有無を検索します。jar 内に静的ファイルまたは JSP ファイルが存在する場合、その静的ファイルまたは JSP ファイルは JAR ファイルの META-INF フォルダーの中に入れてはならず (このフォルダーは制限付きフォルダーであるため)、<user provided name> に JAR ファイルへの絶対パスを含める必要があります。<fileServingAttributes name="extendedDocumentRoot" value="C:\EDR_directory,C:\my\path\to\jarEDR.jar"/>
重要: com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot カスタム・プロパティーを true に設定すると、静的ファイルの拡張文書ルートから静的なウェルカム・ページを提供できるようになります。 カスタム・プロパティーのデフォルト値は、false です。com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot = true
com.ibm.ws.webcontainer.ServeWelcomeFileFromExtendedDocumentRoot プロパティーを true に設定すると、 Web コンテナーは、静的ファイルの拡張文書ルートで、有効な URL の一部を含む要求を処理するための静的な「ようこそ」ファイルを検索します。 例えば、要求でアプリケーション・コンテキストのみが指定されており、「ようこそ」ファイルが index.html として指定されている場合、index.html が静的ファイル拡張文書から提供される場合には、このプロパティーを設定する必要があります。
デフォルト値は false です。com.ibm.ws.webcontainer.enablepartialurltoextendeddocumentroot = true
このプロパティーを true に設定すると、Web コンテナーは、インバウンド要求が有効な部分 URL に対するものであるかどうかを判別する際に、静的ファイル拡張文書ルートのコンテンツを組み込みます。 例えば、要求で、末尾が /<application context>/<text> である URL が指定され、<text> がサーブレットや静的ファイルにマップされない場合、Web コンテナーは <text> がアプリケーションの有効なディレクトリーである場合にのみ、この URL を有効な部分 URL と見なします。 結果的に、ディレクトリー <text> が静的ファイル拡張文書ルートにしか存在しない場合、URI が有効な部分 URI と見なされるようにするには、このプロパティーを設定する必要があります。
重要: これらのプロパティーは、静的ファイルのフラグメント前の文書ルートには必要ありません。 また、有効な部分 URL を判別する際に、Web コンテナーは JSP のフラグメント前の文書ルートおよび拡張文書ルートを考慮しません。