Resources コンポーネント
目次
はじめに
Resources 要素は、ウェブアプリケーションで使用可能なすべてのリソースを表します。これには、クラス、JARファイル、HTML、JSP、およびウェブアプリケーションに貢献するその他のすべてのファイルが含まれます。ディレクトリ、JARファイル、WARをこれらのリソースのソースとして使用する実装が提供されており、データベースやバージョン管理されたリポジトリなど、他の形式で保存されたファイルのサポートを提供するために、リソース実装を拡張できます。
リソースはデフォルトでキャッシュされます。
注:ファイルシステム以外の Resources 実装を使用してウェブアプリケーションを実行できるのは、ウェブアプリケーションが自身のリソースへの直接的なファイルシステムアクセスに依存せず、ServletContext インターフェースのメソッドを使用してアクセスする場合のみです。
Resources 要素は、Context コンポーネント内にネストできます。含まれていない場合、デフォルトのファイルシステムベースの Resources が自動的に作成されます。これは、ほとんどの要件で十分です。
属性
共通属性
Resources のすべての実装は、次の属性をサポートします。
属性 | 説明 |
---|---|
allowLinking |
このフラグの値が 注:Windowsプラットフォーム(または大文字と小文字を区別しないファイルシステムを持つその他のOS)では、このフラグを |
cacheMaxSize |
静的リソースキャッシュの最大サイズ(キロバイト単位)。指定されていない場合、デフォルト値は |
cacheObjectMaxSize |
キャッシュに配置される静的リソースの最大サイズ。指定されていない場合、デフォルト値は |
cacheTtl |
キャッシュエントリの再検証の間隔(ミリ秒単位)。指定されていない場合、デフォルト値は |
cachingAllowed |
このフラグの値が |
className |
使用する実装のJavaクラス名。このクラスは |
trackLockedFiles |
ロックされたファイルをトラッキングする機能が有効かどうかを制御します。有効にすると、ファイルをロックし、そのロックを解除するためにクローズする必要があるオブジェクトを返すメソッド(例:
指定されていない場合、デフォルト値の |
archiveIndexStrategy |
これが これが これが 指定されていない場合、デフォルト値の |
標準実装
標準ルート実装
Resources の標準実装はorg.apache.catalina.webresources.StandardRootです。追加の属性はサポートされていません。
抽出ルート実装
Resources の抽出実装はorg.apache.catalina.webresources.ExtractingRootです。追加の属性はサポートされていません。
ウェブアプリケーションをパックされたWARファイルとしてデプロイする場合、抽出ルートは/WEB-INF/lib
から任意のJARファイルを、ウェブアプリケーションの作業ディレクトリにあるapplication-jars
ディレクトリに抽出します。これらの抽出されたJARは、ウェブアプリケーションが停止すると削除されます。
パックされたWARからJARファイルを抽出すると、特にアプリケーションでJARスキャンが必要なウェブアプリケーションの起動時に、パフォーマンスが向上する可能性があります。
ネストされたコンポーネント
ウェブアプリケーションのメインリソースは、Contextで定義されたdocBaseによって定義されます。追加の設定やリソースは、1つ以上のネストされたコンポーネントを定義することで、ウェブアプリケーションで使用可能にすることができます。
PreResources
PreResourcesは、メインリソースの前に検索されます。定義された順に検索されます。PreResources を設定するには、次の属性を持つ <PreResources> 要素を <Resources> 要素内にネストします。
属性 | 説明 |
---|---|
base |
使用するリソースの場所を識別します。この属性は、Tomcatによって提供される |
className |
使用する実装のJavaクラス名。このクラスは |
internalPath |
リソースが見つかるbase内のパスを識別します。これは通常、リソースがリソースJARの場合のようにJARのルートにない場合にJARファイルで使用されます。この属性は、Tomcatによって提供される |
readOnly |
|
webAppMount |
これらのリソースが使用可能になるウェブアプリケーション内のパスを識別します。Tomcatによって提供される |
JARリソース
JarResourcesは、メインリソースの後、PostResourcesの前に検索されます。定義された順に検索されます。JarResources を設定するには、<JarResources> 要素を <Resources> 要素内にネストします。設定属性はPreResourcesと同じです。
ウェブアプリケーションの起動時に、JARスキャンプロセスは、スキャンされたJARの/META-INF/resources
の下にあるコンテンツをチェックします。見つかった場合、この静的コンテンツはJarResourcesに追加されます。
Postリソース
PostResourcesは、JARリソースの後に検索されます。定義された順に検索されます。PostResources を設定するには、<PostResources> 要素を <Resources> 要素内にネストします。設定属性はPreResourcesと同じです。
順序
上記で説明したリソースセットに加えて、標準実装では、/WEB-INF/classes
にマッピングされたJARファイルに含まれるクラスを表すClassResourcesも保持します。これにより、他のコンポーネントは、/WEB-INF/classes
を検索してから/WEB-INF/lib
内のJARを検索するという2回の呼び出しを行うのではなく、1回の呼び出しでクラスを検索できます。ClassResourcesは、ウェブアプリケーションの起動時に/WEB-INF/lib
にマッピングされたJARから読み込まれます。
したがって、完全な検索順序は以下のとおりです。
- PreResources
- MainResources
- ClassResources
- JarResources
- PostResources
ウェブアプリケーションの起動時にClassResourcesとJarResourcesが読み込まれるため、目的の動作を得るには、JARベースのリソースを正しく追加する必要があります。次の例を考えてください。
<Resources>
<PostResources base="D:\Projects\external\classes"
className="org.apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/classes"/>
<PostResources base="D:\Projects\lib\library1.jar"
className="org.apache.catalina.webresources.FileResourceSet"
webAppMount="/WEB-INF/lib/library1.jar"/>
</Resources>
両方のリソースがPostResourcesであるため、D:\Projects\external\classes
がD:\Projects\lib\library1.jar
よりも先に検索されると予想されるかもしれません。しかし、FileResourceSet
を使用してJARを追加すると、JARは/WEB-INF/lib
にマッピングされ、/WEB-INF/lib
内の他のJARと共にアプリケーションの起動時に処理されます。JARファイルのクラスはClassResourcesに追加されるため、D:\Projects\external\classes
のクラスよりも先に検索されます。D:\Projects\external\classes
をD:\Projects\lib\library1.jar
よりも先に検索する必要がある場合は、少し異なる設定が必要です。
<Resources>
<PostResources base="D:\Projects\external\classes"
className="org.apache.catalina.webresources.DirResourceSet"
webAppMount="/WEB-INF/classes"/>
<PostResources base="D:\Projects\lib\library1.jar"
className="org.apache.catalina.webresources.JarResourceSet"
webAppMount="/WEB-INF/classes"/>
</Resources>
簡単に言うと、JARファイルはFileResourceSet
を/WEB-INF/lib
にマッピングして追加するのではなく、/WEB-INF/classes
にマッピングされたJarResourceSet
として追加する必要があります。
キャッシュ戦略
静的リソースのキャッシングに対する追加の制御は、カスタムキャッシュ戦略を設定することで実現できます。カスタムキャッシュ戦略を設定するには、以下の属性を持つ<CacheStrategy>要素を<Resources>要素の中にネストします。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。このクラスは |
特殊機能
Resources要素には特別な機能は関連付けられていません。