<init-param>
と<context-param>
の違いは何ですか?
<init-param>
および<context-param>
は、web.xmlファイルに保存される静的パラメーターです。頻繁に変更されないデータがある場合は、そのいずれかに保存できます。
特定のサーブレットスコープに限定された特定のデータを保存する場合は、<init-param>
を使用できます。<init-param>
内で宣言したものは、その特定のサーブレットinit-paramは<servlet>
タグ内で宣言されます。
<servlet>
<display-name>HelloWorldServlet</display-name>
<servlet-name>HelloWorldServlet</servlet-name>
<init-param>
<param-name>Greetings</param-name>
<param-value>Hello</param-value>
</init-param>
</servlet>
また、次のようにサーブレットのこれらのパラメーターにアクセスできます。
out.println(getInitParameter("Greetings"));
アプリケーション全体に共通のデータを保存する場合、および頻繁に変更されない場合は、アプリケーションコンテキストのservletContext.setAttribute()
メソッドの代わりに<context-param>
を使用できます。 <context-param>
VS ServletContext.setAttribute()
の使用に関する詳細については、これをご覧ください question 。 context-paramはweb-app
タグの下で宣言されます。次のように<context-param>
を宣言してアクセスできます
<web-app>
<context-param>
<param-name>Country</param-name>
<param-value>India</param-value>
</context-param>
<context-param>
<param-name>Age</param-name>
<param-value>24</param-value>
</context-param>
</web-app>
JSPまたはサーブレットでのアプリケーションでの使用
getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");
Web.xmlの以下の定義を考慮してください
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>TestServlet</servlet-class>
<init-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
Init-paramがサーブレット要素内で定義されていることがわかります。これは、宣言中のサーブレットのみが使用でき、Webアプリケーションの他の部分は使用できないことを意味します。このパラメータをアプリケーションの他の部分で使用できるようにする場合は、JSPを明示的にJSPに渡す必要があると言います。たとえば、request.setAttribute()として渡されます。これは非常に非効率的で、コーディングが困難です。
そのため、明示的に値を渡さずにアプリケーション内のどこからでもグローバル値にアクセスしたい場合は、Context Initパラメーターを使用する必要があります。
Web.xmlで次の定義を検討してください
<web-app>
<context-param>
<param-name>myprop</param-name>
<param-value>value</param-value>
</context-param>
</web-app>
このコンテキストパラメータは、Webアプリケーションのすべての部分で使用でき、Contextオブジェクトから取得できます。たとえば、getServletContext()。getInitParameter(“ dbname”);
JSPから、アプリケーションの暗黙オブジェクトを使用してコンテキストパラメータにアクセスできます。たとえば、application.getAttribute(“ dbname”);
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/META-INF/PersistenceContext.xml
</param-value>
</context-param>
PersistenceContext.xml
内で<context-param>
を初期化したのは、すべてのサーブレットがMVCフレームワークでデータベースと対話するためです。
ハワーバー、
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>com.Sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:ApplicationContext.xml
</param-value>
</init-param>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>com.organisation.project.rest</param-value>
</init-param>
</servlet>
前述のコードでは、jerseyとApplicationContext.xml
を構成するのはレイヤーを休めるためだけです。同じために、私は</init-param>
を使用しています
特定のサーブレットのパラメーターを初期化する場合は、<init-param>
が使用されます。リクエストがサーブレットに最初に届くと、そのinit
メソッドが呼び出されてからdoGet/doPost
メソッドが呼び出されます。一方、アプリケーション全体の変数を初期化する場合は、<context-param>
を使用する必要があります。すべてのサーブレットは、コンテキスト変数にアクセスできます。