web-dev-qa-db-ja.com

init-paramおよびcontext-param

<init-param><context-param>の違いは何ですか?

73
mina

<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()の使用に関する詳細については、これをご覧ください questioncontext-paramweb-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");
102
Sai Upadhyayula

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”);

8
SMA
<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>を使用しています

6
Ankur Piyush

特定のサーブレットのパラメーターを初期化する場合は、<init-param>が使用されます。リクエストがサーブレットに最初に届くと、そのinitメソッドが呼び出されてからdoGet/doPostメソッドが呼び出されます。一方、アプリケーション全体の変数を初期化する場合は、<context-param>を使用する必要があります。すべてのサーブレットは、コンテキスト変数にアクセスできます。

5
Adeel Ahmad