Context コンテナ
目次
はじめに
以下の説明では、ほとんどの相対パスの解決に使用されるベースディレクトリを指すために、変数名 $CATALINA_BASE を使用します。 CATALINA_BASE ディレクトリを設定して複数のインスタンス用に Tomcat を構成していない場合、$CATALINA_BASE は $CATALINA_HOME の値、つまり Tomcat をインストールしたディレクトリに設定されます。
Context 要素は、特定の仮想ホスト内で実行されるWebアプリケーションを表します。 各 Web アプリケーションは、サーブレット仕様(バージョン 2.2 以降)で説明されているように、Web Application Archive (WAR) ファイル、または対応する解凍されたコンテンツを含む対応するディレクトリに基づいています。 Web アプリケーションアーカイブの詳細については、サーブレット仕様をダウンロードし、Tomcat の アプリケーション開発者ガイドを確認してください。
各 HTTP リクエストを処理するために使用される Web アプリケーションは、定義された各 Context のコンテキストパスに対してリクエスト URI の最長の可能なプレフィックスを一致させることに基づいて、Catalina によって選択されます。 一度選択されると、その Context は、Web アプリケーションのデプロイによって定義されたサーブレットマッピングに従って、着信リクエストを処理する適切なサーブレットを選択します。
必要な数の Context 要素を定義できます。 そのような各 Context は、仮想ホスト内で一意のコンテキスト名を持つ必要があります。 コンテキストパスは一意である必要はありません(以下の並行デプロイメントを参照)。 さらに、長さがゼロの文字列と等しいコンテキストパスを持つ Context が存在する必要があります。 この Context は、この仮想ホストのデフォルトの Web アプリケーションになり、他の Context のコンテキストパスに一致しないすべてのリクエストを処理するために使用されます。
並行デプロイメント
同じコンテキストパスを持つ Web アプリケーションの複数のバージョンを同時にデプロイできます。リクエストをコンテキストバージョンに一致させるために使用されるルールは次のとおりです
- リクエストにセッション情報が存在しない場合は、最新バージョンを使用します。
- リクエストにセッション情報が存在する場合は、一致するセッションがあるかどうか各バージョンのセッションマネージャーをチェックし、見つかった場合はそのバージョンを使用します。
- リクエストにセッション情報が存在するが、一致するセッションが見つからない場合は、最新バージョンを使用します。
Host は、使用されなくなったときにこの方法でデプロイされた古いバージョンを削除するように構成できます (undeployOldVersions
経由)。
命名
Host によって autoDeploy
または deployOnStartup
操作が実行されると、Web アプリケーションの名前とコンテキストパスは、Web アプリケーションを定義するファイルの(複数)の名前から導き出されます。 その結果、コンテキストパスはアプリケーションに埋め込まれた META-INF/context.xml
で定義されては ならない と、コンテキスト名、コンテキストパス、コンテキストバージョン、ファイルのベースファイル名(.war
または .xml
拡張子を除いた名前)の間には密接な関係があります。
バージョンが指定されていない場合、コンテキスト名は常にコンテキストパスと同じです。 コンテキストパスが空の文字列の場合、ベース名は ROOT(常に大文字)になり、それ以外の場合、ベース名は先頭の「/」が削除され、残りの「/」文字が「#」に置き換えられたコンテキストパスになります。
バージョンが指定されている場合、コンテキストパスは変更されず、コンテキスト名とベース名の両方に、バージョン識別子が続く文字列「##」が付加されます。
これらの命名規則の例を以下に示します。
コンテキストパス | コンテキストバージョン | コンテキスト名 | ベースファイル名 | ファイル名の例 (.xml, .war & ディレクトリ) |
---|---|---|---|---|
/foo | なし | /foo | foo | foo.xml、foo.war、foo |
/foo/bar | なし | /foo/bar | なし | foo#bar.xml, foo#bar.war, foo#bar |
空の文字列 | なし | 空の文字列 | なし | ROOT.xml, ROOT.war, ROOT |
/foo | 42 | /foo##42 | 42 | foo##42 |
/foo/bar | 42 | foo##42.xml、foo##42.war、foo##42 | /foo/bar##42 | 42 |
空の文字列 | 42 | ##42 | foo#bar##42 | foo#bar##42.xml、foo#bar##42.war、foo#bar##42 |
ROOT##42
ROOT##42.xml、ROOT##42.war、ROOT##42
- バージョンコンポーネントは、パフォーマンス上の理由と、バージョニングスキームの柔軟性を高めるために、
String
として扱われます。 文字列比較を使用して、バージョン順序を決定します。 バージョンが指定されていない場合は、空の文字列として扱われます。 したがって、foo.war
はfoo##11.war
よりも前のバージョンとして扱われ、foo##11.war
はfoo##2.war
よりも前のバージョンとして扱われます。 純粋に数値的なバージョニングスキームを使用する場合は、foo##002.war
がfoo##011.war
より前のバージョンとして扱われるようにゼロパディングを使用することをお勧めします。 - ベースファイル名に関連付けられていないコンテキストパスを使用して WAR ファイルまたはディレクトリをデプロイする場合は、二重デプロイメントを防ぐために、次のいずれかのオプションを使用する必要があります。
コンテキストの定義
autoDeploy と deployOnStartup を無効にし、すべての Context を server.xml で定義します。
WAR および/またはディレクトリを Host の appBase
の外に配置し、docBase
属性を持つ context.xml ファイルを使用して定義します。
- <Context> 要素を server.xml ファイルに直接配置することはお勧めしません。 これは、メインの
conf/server.xml
ファイルは Tomcat を再起動せずに再ロードできないため、Context 構成の変更がより侵入的になるためです。 デフォルトの Context 要素(下記参照)は、server.xml に直接配置された <Context> 要素の構成も 上書き します。 これを防ぐには、server.xml で定義された <Context> 要素のoverride
属性をtrue
に設定する必要があります。 - 個々の Context 要素は、明示的に定義できます。
- アプリケーションファイル内の
/META-INF/context.xml
の個々のファイル内。 必要に応じて (Host の copyXML 属性に基づいて)、これは$CATALINA_BASE/conf/[enginename]/[hostname]/
にコピーされ、アプリケーションのベースファイル名に ".xml" 拡張子を付けた名前に変更される場合があります。
$CATALINA_BASE/conf/[enginename]/[hostname]/
ディレクトリ内の個々のファイル(「.xml」拡張子付き)。 コンテキストパスとバージョンは、ファイルのベース名(ファイル名から .xml 拡張子を除いたもの)から導き出されます。 このファイルは、Web アプリケーションの META-INF ディレクトリにパッケージ化された context.xml ファイルよりも常に優先されます。
- メインの
conf/server.xml
のHost要素内。 - 複数の Web アプリケーションに適用されるデフォルトの Context 要素を定義できます。 個々の Web アプリケーションの構成は、これらのデフォルトのいずれかで構成されたものをオーバーライドします。 デフォルトの Context で定義された <Resource> 要素などのネストされた要素は、デフォルトが適用される各 Context に対して一度作成されます。 これらは、Context 要素間で共有され ません 。
$CATALINA_BASE/conf/context.xml
ファイル内:Context 要素の情報は、すべての Web アプリケーションによってロードされます。
$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default
ファイル内:Context 要素の情報は、そのホストのすべての Web アプリケーションによってロードされます。
server.xml を除き、Context 要素を定義するファイルは、単一の Context 要素のみを定義できます。
属性
共通属性
明示的に指定された Context 要素に加えて、Context 要素が自動的に作成されるいくつかの手法があります。 詳細については、自動アプリケーションデプロイメント と ユーザーWebアプリケーション を参照してください。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
属性 |
説明 |
allowCasualMultipartParsing |
Tomcatは、URI内の複数の |
altDDName |
このコンテキストの代替デプロイメント記述子への絶対パス。これは、 |
alwaysAccessSession |
これが
|
backgroundProcessorDelay |
この値は、このコンテキストとその子コンテナ(すべてのラッパーを含む)でバックグラウンド処理メソッドの呼び出しの間隔を秒単位で表します。子コンテナの遅延値が負でない場合(つまり、独自の処理スレッドを使用している場合)、子コンテナは呼び出されません。これを正の値に設定すると、スレッドが生成されます。指定された時間待機した後、スレッドはこのホストとすべての子コンテナでバックグラウンド処理メソッドを呼び出します。コンテキストは、セッションの有効期限切れや再読み込みのためのクラス監視を実行するためにバックグラウンド処理を使用します。指定しない場合、この属性のデフォルト値は-1です。これは、コンテキストが親ホストのバックグラウンド処理スレッドに依存することを意味します。 |
className |
使用する実装のJavaクラス名。このクラスは |
containerSciFilter |
このコンテキストで使用すべきでない、コンテナが提供するSCIをフィルタリングするために使用する正規表現を指定します。マッチングは |
contextGetResourceRequiresSlash |
これが
|
cookies |
クライアントがサポートしている場合、セッション識別子通信にクッキーを使用したい場合は、 |
createUploadTargets |
TomcatがServletの |
crossContext |
このアプリケーション内の |
dispatcherWrapsSameObject |
これが
|
docBase |
このWebアプリケーションのドキュメントベース(コンテキストルートとも呼ばれる)ディレクトリ、またはWebアプリケーションアーカイブファイルへのパス名(このWebアプリケーションがWARファイルから直接実行されている場合)。このディレクトリまたはWARファイルへの絶対パス名、または所有するHostの このフィールドの値は、Context要素がserver.xmlで定義されているか、 シンボリックリンクが |
dispatchersUseEncodedPaths |
リクエストディスパッチャーを取得するための呼び出しで使用されるパスがエンコードされていることを期待するかどうかを制御します。これは、Tomcatがリクエストディスパッチャーを取得するための呼び出しを処理する方法と、Tomcatが内部でリクエストディスパッチャーを取得するために使用するパスを生成する方法の両方に影響します。指定しない場合、デフォルト値の |
failCtxIfServletStartFails |
起動時に読み込み>=0のサーブレットの起動が失敗した場合に、コンテキストの起動を失敗させるには、 指定しない場合、親のHost構成内の同じ名前の属性が指定されていれば使用されます。それ以外の場合は、デフォルト値の |
fireRequestListenersOnForwards |
Tomcatがリクエストを転送するときに、構成されたServletRequestListenersを起動するには、 |
logEffectiveWebXml |
アプリケーションの起動時に、Webアプリケーションに使用される有効なweb.xmlを(INFOレベルで)ログに記録したい場合は、 |
mapperContextRootRedirectEnabled |
有効にすると、Webアプリケーションのコンテキストルートへのリクエストは、デフォルトのサーブレットではなく、マッパーによって必要に応じてリダイレクト(末尾にスラッシュを追加)されます。これはより効率的ですが、コンテキストパスが存在することを確認するという副作用があります。指定しない場合、デフォルト値の |
mapperDirectoryRedirectEnabled |
有効にすると、Webアプリケーションディレクトリへのリクエストは、デフォルトのサーブレットではなく、マッパーによって必要に応じてリダイレクト(末尾にスラッシュを追加)されます。これはより効率的ですが、ディレクトリが存在することを確認するという副作用があります。指定しない場合、デフォルト値の |
override |
グローバルまたはHostのデフォルトコンテキストの両方の設定を無視するには、 |
parallelAnnotationScanning |
|
path |
このWebアプリケーションのコンテキストパス。これは、処理のために適切なWebアプリケーションを選択するために、各リクエストURIの先頭と照合されます。特定のHost内のすべてのコンテキストパスは一意である必要があります。空の文字列("")のコンテキストパスを指定した場合、このHostのデフォルトのWebアプリケーションを定義することになり、他のコンテキストに割り当てられていないすべてのリクエストを処理します。 この属性は、server.xmlでContextを静的に定義する場合にのみ使用する必要があります。他のすべての状況では、パスは.xmlコンテキストファイルまたは server.xmlでContextを静的に定義する場合でも、 |
preemptiveAuthentication |
|
privileged |
このコンテキストがマネージャーサーブレットのようなコンテナサーブレットを使用できるようにするには、 |
reloadable |
Catalinaが |
resourceOnlyServlets |
リソースが存在することを期待するサーブレットの名前( |
sendRedirectBody |
|
sessionCookieDomain |
このコンテキストで作成されたすべてのセッションクッキーに使用されるドメイン。設定した場合、これはWebアプリケーションによって設定されたドメインをオーバーライドします。設定しない場合、Webアプリケーションによって指定された値(存在する場合)が使用されます。 |
sessionCookieName |
このコンテキストで作成されたすべてのセッションクッキーに使用される名前。設定した場合、これはWebアプリケーションによって設定された名前をオーバーライドします。設定しない場合、Webアプリケーションによって指定された値(存在する場合)が使用されます。または、Webアプリケーションが明示的に設定しない場合は、名前 |
sessionCookiePath |
このコンテキストで作成されたすべてのセッションクッキーに使用されるパス。設定した場合、これはWebアプリケーションによって設定されたパスをオーバーライドします。設定しない場合、Webアプリケーションによって指定されたパスが使用されます。Webアプリケーションが明示的に設定しない場合は、コンテキストパスが使用されます。すべてのWebアプリケーションが空のパスを使用するように構成するには(これはポートレット仕様の実装に役立つ場合があります)、グローバルな 注意: |
sessionCookiePathUsesTrailingSlash |
Internet Explorer、Safari、Edgeなどの一部のブラウザは、RFC6265に違反して、パスが |
suspendWrappedResponseAfterForward |
このフラグの値が |
swallowAbortedUploads |
Tomcatが中断されたアップロードの追加のリクエストボディデータを読み込まず、代わりにクライアント接続を中断する場合は、
追加のデータを読み込まないことで、リクエスト処理スレッドをより迅速に解放できます。残念ながら、ほとんどのHTTPクライアントは、完全なリクエストを書き込めない場合、レスポンスを読み込みません。 デフォルトは リクエスト処理中に5xxレスポンスをトリガーするエラーが発生した場合、読み込まれていないリクエストデータは常に無視され、エラーレスポンスが書き込まれるとクライアント接続が閉じられることに注意してください。 |
swallowOutput |
このフラグの値が |
tldValidation |
このフラグの値が |
useBloomFilterForArchives |
非推奨: これが 指定されていない場合、デフォルト値の この値は、リソースのarchiveIndexStrategyでオーバーライドできます。 |
useHttpOnly |
クライアント側のスクリプトがセッションIDにアクセスするのを防ぐために、セッションクッキーにHttpOnlyフラグを設定する必要がありますか?デフォルトは |
usePartitioned |
セッションクッキーにPartitionedフラグを設定する必要がありますか?デフォルトは 注: CHIPSの一部としてパーティション分割されたクッキーを示すために使用される属性の名前は、RFCによって定義されておらず、同等の機能がRFCに含まれると、後方互換性のない方法で変更される可能性があります。 |
useRelativeRedirects |
|
validateClientProvidedNewSessionId |
クライアントが新しいセッションのIDを提供する場合、この属性は、そのIDを検証するかどうかを制御します。クライアントが提供するセッションIDを使用する唯一のユースケースは、複数のWebアプリケーション間で共通のセッションIDを持つことです。したがって、クライアントが提供するセッションIDは、他のWebアプリケーションにすでに存在している必要があります。このチェックが有効になっている場合、クライアントが提供したセッションIDは、現在のホストの他の少なくとも1つのWebアプリケーションにセッションIDが存在する場合にのみ使用されます。この設定に関係なく、次の追加テストが常に適用されることに注意してください。
指定されていない場合、デフォルト値の |
wrapperClass |
このコンテキストで管理されるサーブレットに使用される |
xmlBlockExternal |
このフラグの値が |
xmlNamespaceAware |
このフラグの値が |
xmlValidation |
このフラグの値が |
標準実装
Context の標準実装は、org.apache.catalina.core.StandardContext です。これは、(上記にリストされた共通属性に加えて) 次の追加属性をサポートします。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
addWebinfClassesResources |
この属性は、WebアプリケーションJARファイル内の |
antiResourceLocking |
これを Host (デフォルトでは |
clearReferencesHttpClientKeepAliveThread |
|
clearReferencesObjectStreamClassCaches |
|
clearReferencesRmiTargets |
|
clearReferencesStopThreads |
|
clearReferencesStopTimerThreads |
|
clearReferencesThreadLocals |
|
copyXML |
アプリケーション内部( |
jndiExceptionOnFailedWrite |
|
renewThreadsWhenStoppingContext |
|
skipMemoryLeakChecksOnJvmShutdown |
|
unloadDelay |
コンテナがサーブレットのアンロードを待機するミリ秒数。指定しない場合、デフォルト値は |
unpackWAR |
|
useNaming |
Jakarta EEプラットフォームの規約に準拠したこのWebアプリケーション用のJNDI |
workDir |
関連付けられたWebアプリケーション内のサーブレットが一時的な読み書きに使用するために、このコンテキストによって提供されるスクラッチディレクトリへのパス名。このディレクトリは、Servlet仕様で説明されているように、 |
ネストされたコンポーネント
Context要素内に対応する要素をネストすることにより、以下のユーティリティコンポーネントのインスタンスを最大1つネストできます。
- Cookie Processor - HTTPクッキーヘッダーの解析と生成を構成します。
- Loader - このWebアプリケーションのサーブレットクラスとbeanクラスをロードするために使用されるWebアプリケーションクラスローダーを構成します。通常、クラスローダーのデフォルト構成で十分です。
- Manager - このWebアプリケーションのHTTPセッションを作成、破棄、および永続化するために使用されるセッションマネージャーを構成します。通常、セッションマネージャーのデフォルト構成で十分です。
- Realm - この特定のWebアプリケーション専用に、ユーザーとその関連するロールのデータベースを使用できるようにするレルムを構成します。指定しない場合、このWebアプリケーションは、所有HostまたはEngineに関連付けられているレルムを利用します。
- Resources - このWebアプリケーションに関連付けられた静的リソースにアクセスするために使用されるリソースマネージャーを構成します。通常、リソースマネージャーのデフォルト構成で十分です。
- WatchedResource - 自動デプロイヤーは、Webアプリケーションの指定された静的リソースの更新を監視し、更新された場合はWebアプリケーションをリロードします。この要素の内容は文字列である必要があります。
- JarScanner - Webアプリケーション内のJARファイルとクラスファイルディレクトリをスキャンするために使用されるJar Scannerを構成します。通常、Webアプリケーションの開始時に、Webアプリケーションの初期化の一部として処理する必要があるTLDやweb-fragment.xmlファイルなどの構成ファイルを特定するために使用されます。通常、デフォルトのJar Scanner構成で十分です。
特別な機能
ロギング
コンテキストは、org.apache.catalina.core.ContainerBase.[enginename].[hostname].[path]
ログカテゴリに関連付けられています。括弧は実際には名前の一部であるため、省略しないでください。
アクセスログ
Webサーバーを実行すると、通常生成される出力ファイルの1つにアクセスログがあります。これは、サーバーによって処理された各リクエストに関する情報を標準形式で1行生成します。Catalinaには、Webサーバーによって作成される標準形式と同じ形式、または任意の数のカスタム形式でアクセスログを作成できるオプションのValve実装が含まれています。
Engine、Host、またはContextによって処理されるすべてのリクエストのアクセスログをCatalinaに作成させるには、次のようにValve要素をネストします。
<Context>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="localhost_access_log" suffix=".txt"
pattern="common"/>
...
</Context>
サポートされている構成属性の詳細については、アクセスロギングバルブを参照してください。
自動コンテキスト構成
標準のContext実装を使用する場合、Catalinaの起動時、またはこのWebアプリケーションがリロードされるたびに、以下の構成手順が自動的に実行されます。この機能を有効にするための特別な構成は必要ありません。
- 独自のLoader要素を宣言していない場合、標準のWebアプリケーションクラスローダーが構成されます。
- 独自のManager要素を宣言していない場合、標準のセッションマネージャーが構成されます。
- 独自のResources要素を宣言していない場合、標準のリソースマネージャーが構成されます。
conf/web.xml
にリストされているWebアプリケーションのプロパティは、このWebアプリケーションのデフォルトとして処理されます。これは、デフォルトマッピング(*.jsp
拡張子を対応するJSPサーブレットにマッピングするなど)と、すべてのWebアプリケーションに適用されるその他の標準機能を確立するために使用されます。- このWebアプリケーションの
/WEB-INF/tomcat-web.xml
リソースにリストされているWebアプリケーションのプロパティは、(このリソースが存在する場合)デフォルトよりも優先されて処理されます。 - このWebアプリケーションの
/WEB-INF/web.xml
リソースにリストされているWebアプリケーションのプロパティは、(このリソースが存在する場合)処理されます。 - Webアプリケーションでユーザー認証を必要とする可能性のあるセキュリティ制約が指定されている場合、選択したログインメソッドを実装する適切な認証者が構成されます。
コンテキストパラメータ
この要素内に<Parameter>
要素をネストすることで、サーブレットコンテキストの初期化パラメータとしてWebアプリケーションに表示される名前付きの値を構成できます。たとえば、次のように初期化パラメータを作成できます。
<Context>
...
<Parameter name="companyName" value="My Company, Incorporated"
override="false"/>
...
</Context>
これは、Webアプリケーションのデプロイメント記述子(/WEB-INF/web.xml
)に次の要素を含めることと同等です。
<context-param>
<param-name>companyName</param-name>
<param-value>My Company, Incorporated</param-value>
</context-param>
ただし、この値をカスタマイズするためにデプロイメント記述子を変更する必要はありません。
<Parameter>
要素の有効な属性は次のとおりです。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
description |
このコンテキスト初期化パラメータのオプションの人間の可読な説明。 |
name |
作成するコンテキスト初期化パラメータの名前。 |
override |
Webアプリケーションのデプロイメント記述子にある同じパラメータ名の |
値 |
|
環境エントリ
この要素の中に<Environment>
エントリをネストすることにより、Webアプリケーションに環境エントリリソースとして可視化される名前付きの値を設定できます。たとえば、次のように環境エントリを作成できます。
<Context>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
これは、Webアプリケーションのデプロイメント記述子(/WEB-INF/web.xml
)に次の要素を含めることと同等です。
<env-entry>
<env-entry-name>maxExemptions</env-entry-name>
<env-entry-value>10</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
ただし、この値をカスタマイズするためにデプロイメント記述子を変更する必要はありません。
<Environment>
要素の有効な属性は次のとおりです。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
description |
この環境エントリのオプションの人間が読める説明。 |
name |
|
override |
Webアプリケーションのデプロイメント記述子にある同じ環境エントリ名の |
タイプ |
この環境エントリに対してWebアプリケーションが期待する完全修飾Javaクラス名。Webアプリケーションのデプロイメント記述子内の |
値 |
JNDIコンテキストから要求されたときにアプリケーションに提示されるパラメータ値。この値は、 |
ライフサイクルリスナー
このコンテキストが開始または停止されたときに通知する必要があるJavaオブジェクトを実装している場合は、この要素の中にListener要素をネストして宣言できます。指定するクラス名は、org.apache.catalina.LifecycleListener
インターフェースを実装する必要があり、クラスはjarにパッケージ化され、$CATALINA_HOME/lib
ディレクトリに配置されている必要があります。対応するライフサイクルイベントの発生時に通知されます。このようなリスナーの構成は次のようになります。
<Context>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Context>
リスナーには、この要素から構成できる任意の数の追加プロパティがあることに注意してください。属性名は、標準のプロパティメソッド命名パターンを使用して、対応するJavaBeanプロパティ名と照合されます。
リクエストフィルター
Catalinaに、周囲のEngine、Host、またはContext要素に向けられたすべての受信リクエストのIPアドレスまたはホスト名を確認させることができます。リモートアドレスまたは名前は、java.util.regex
正規表現構文を使用して定義された構成済みの「許可」および/または「拒否」フィルターに対してチェックされます。許可されていない場所からのリクエストは、HTTP「Forbidden」エラーで拒否されます。フィルター宣言の例
<Context>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192\.168\.1\.\d+"/>
...
</Context>
サポートされている構成オプションの詳細については、リモートアドレスフィルターとリモートホストフィルターを参照してください。
リソース定義
Webアプリケーションのデプロイメント記述子の<resource-ref>
および<resource-env-ref>
要素のJNDIルックアップで返されるリソースの特性を宣言できます。使用するオブジェクトファクトリ(Tomcatがまだ知らない場合)、およびそのオブジェクトファクトリを構成するために使用するプロパティを構成するために、Resource
要素の属性として必要なリソースパラメータも必ず定義する必要があります。
たとえば、次のようにリソース定義を作成できます。
<Context>
...
<Resource name="jdbc/EmployeeDB" auth="Container"
type="javax.sql.DataSource"
description="Employees Database for HR Applications"/>
...
</Context>
これは、Webアプリケーションのデプロイメント記述子(/WEB-INF/web.xml
)に次の要素を含めることと同等です。
<resource-ref>
<description>Employees Database for HR Applications</description>
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>
ただし、この値をカスタマイズするためにデプロイメント記述子を変更する必要はありません。
<Resource>
要素の有効な属性は次のとおりです。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
認証 |
Webアプリケーションコードが対応するリソースマネージャーにプログラムでサインオンするか、コンテナがアプリケーションの代わりにリソースマネージャーにサインオンするかを指定します。この属性の値は、 |
closeMethod |
不要になったときに、シングルトンリソースで呼び出すゼロ引数メソッドの名前。これは、ガベージコレクションの一部として発生するリソースのクリーンアップを高速化することを目的としています。この属性は、 Apache Commons DBCP 2やデフォルトのApache Tomcat接続プールなど、 |
description |
このリソースのオプションの人間が読める説明。 |
name |
|
スコープ |
このリソースマネージャーを通じて取得した接続を共有できるかどうかを指定します。この属性の値は、 |
シングルトン |
このリソース定義がシングルトンリソース、つまりリソースのインスタンスが1つしかない場合のものかどうかを指定します。この属性が |
タイプ |
このリソースをルックアップするときに、Webアプリケーションが期待する完全修飾Javaクラス名。 |
リソースリンク
この要素は、グローバルJNDIリソースへのリンクを作成するために使用されます。リンク名でJNDIルックアップを実行すると、リンクされたグローバルリソースが返されます。
たとえば、次のようにリソースリンクを作成できます。
<Context>
...
<ResourceLink name="linkToGlobalResource"
global="simpleValue"
type="java.lang.Integer"
...
</Context>
<ResourceLink>
要素の有効な属性は次のとおりです。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
グローバル |
グローバルJNDIコンテキスト内のリンクされたグローバルリソースの名前。 |
name |
|
タイプ |
このリソースリンクをルックアップするときに、Webアプリケーションが期待する完全修飾Javaクラス名。 |
ファクトリ |
これらのオブジェクトを作成するクラスの完全修飾Javaクラス名。このクラスは、 |
属性factory="org.apache.naming.factory.DataSourceLinkFactory"
の場合、共有データソースを異なる資格情報で使用できるように、リソースリンクを2つの追加属性で使用できます。これらの2つの追加属性をjavax.sql.DataSource
タイプと組み合わせて使用すると、異なるコンテキストで異なる資格情報を持つグローバルデータソースを共有できます。内部的には、getConnection()
の呼び出しが、 getConnection(username, password)
をグローバルデータソースで呼び出すことに単純に変換されます。これは、どのスキーマが使用されているかを透過的にし、グローバル構成で接続(またはプール)を制御できるようにするための簡単な方法です。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
ユーザー名 |
リンクされたグローバルDataSourceでの |
パスワード |
リンクされたグローバルDataSourceでの |
共有データソースの例
警告: この機能は、グローバルDataSourceがgetConnection(username, password)
メソッドをサポートする場合にのみ機能します。Tomcatがデフォルトで使用するApache Commons DBCP 2プールは、それをサポートしていません。BasicDataSource
クラスのJavadocを参照してください。Apache Tomcat JDBCプールはそれをサポートしていますが、デフォルトではこのサポートは無効になっており、alternateUsernameAllowed
属性で有効にできます。詳細については、ドキュメントを参照してください。
<GlobalNamingResources>
...
<Resource name="sharedDataSource"
global="sharedDataSource"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
alternateUsernameAllowed="true"
username="bar"
password="barpass"
...
...
</GlobalNamingResources>
<Context path="/foo"...>
...
<ResourceLink
name="appDataSource"
global="sharedDataSource"
type="javax.sql.DataSource"
factory="org.apache.naming.factory.DataSourceLinkFactory"
username="foo"
password="foopass"
...
</Context>
<Context path="/bar"...>
...
<ResourceLink
name="appDataSource"
global="sharedDataSource"
type="javax.sql.DataSource"
...
</Context>
/foo
コンテキストでgetConnection()
のリクエストが行われると、リクエストはgetConnection("foo","foopass")
に変換され、/bar
のリクエストはそのまま渡されます。
トランザクション
java:comp/UserTransaction
のJNDIルックアップで返されるUserTransactionの特性を宣言できます。オブジェクトファクトリクラスと、このオブジェクトをインスタンス化するために必要なリソースパラメータ、およびそのオブジェクトファクトリを構成するために使用するプロパティを、Transaction
要素の属性として必ず定義する必要があります。
<Transaction>
要素の有効な属性は次のとおりです。
単一の WAR ファイルまたはディレクトリを使用する複数のコンテキストを定義するには、ベースファイル名に関連付けられていないパスを持つ Context を作成するために、上記の命名セクションで説明されているオプションのいずれかを使用します。 | Context のすべての実装は、次の属性をサポートしています |
---|---|
ファクトリ |
JNDIオブジェクトファクトリのクラス名。 |