Servlet specificationは、Webアプリケーションに構成パラメータを提供する2つの異なる方法(コンテキストパラメータと環境エントリ)を定義するのはなぜですか?サーブレット仕様:web.xmlの<context-param>対<env-entry>?
これらのアプローチのそれぞれの利点はどのような利点がありますか。
Servlet specificationは、Webアプリケーションに構成パラメータを提供する2つの異なる方法(コンテキストパラメータと環境エントリ)を定義するのはなぜですか?サーブレット仕様:web.xmlの<context-param>対<env-entry>?
これらのアプローチのそれぞれの利点はどのような利点がありますか。
環境エントリは、JNDIで利用できます。これはが手の届かないところにある場合に便利です(EJBsなど)。 web.xml
のものは、実際に環境エンティティーをオーバーライドするための優先順位チェーンの最後のものです。これらは通常、サーバー自身の構成で定義されます。したがって、webappからサーバ指定の環境エントリを上書きしようとする場合は、web.xml
で行うことができます。
コンテキストパラメータは、webapp自体に固有のものです。彼らは手で直接ServletContext
を持っている場合にのみ利用可能で、通常はfilters、servlets(そして〜${initParam.someName}
のEL)とlistenersの内部にのみ存在します。これらは、Webアプリケーションで実行されているフィルター、サーブレット、および/またはリスナーの構成パラメーターを提供するために使用されるはずです。単純な目的のために複雑すぎるプロセスであるJNDIによってそれらを提供することはあまり意味がありません。
私はまだ混乱しています。たとえば、データベース接続の詳細を保存したいとします。私はこれらの2つから何を使用すべきですか?私は同じTomcatに複数回自分のアプリケーションをインストールするつもりです。 – Wouter
@Wouter環境エントリは、そのTomcat上で実行されているすべてのWebアプリケーションで利用可能な、より広い範囲を持っています。 「コンテキスト」は単一のWebアプリケーションで、単一の[WARファイル](https://en.wikipedia.org/wiki/WAR_%28Sun_file_format%29)にマッピングされます。したがって、データベースが単一のWebアプリケーションのみを処理する場合は、コンテキストレベルで行います。これを行う1つの方法は、ウェブアプリケーションの 'META-INF'フォルダの' context.xml'ファイルに ' ...'タグを書くことです。 「同じTomcatに複数回自分のアプリをインストールする」というあなたの言葉については、分かりませんが、理にかなっていません。 –
@ BalusCあなたの最初の段落はあまり明確ではありません。環境エントリがContext Parametersよりも広い範囲を持っていると言うなら、もっと明示的に言うよりも。おそらく、[Tomcatのドキュメント](https://tomcat.apache.org/tomcat-8.0-doc/config/globalresources.html#Environment_Entries)の引用:「すべてのWebアプリケーションに表示されます」 –