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