init-paramおよびcontext-param


87

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


@RC。その質問がno-where ..それは性質が2つのコンテキストにロードされただけのことだ。..これらの2つのparamsの違いを説明していない
のRohitジャイナ

私はタイトルに立ち寄った、私の悪い。

回答:


119

<init-param>および<context-param>は、web.xmlファイルに保存される静的パラメーターです。頻繁に変更されないデータがある場合は、それらの1つに保存できます。

特定のサーブレットスコープに限定された特定のデータを格納する場合は、を使用<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"));

アプリケーション全体に共通のデータを保存したい場合で、頻繁に変更されない場合は、アプリケーションコンテキストのメソッドの<context-param>代わりに使用servletContext.setAttribute()できます。<context-param>VSの使用法の詳細についてServletContext.setAttribute()は、この質問を参照してください。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");

1
プログラムでコンテキストパラメータを設定する方法は?
のGaurav

2
@gaurav興味深いことに、<init-param>:のメソッドは見つかりましたServletContext::setInitParameter(String name, String value)が、コンテキストパラメータを設定するメソッドは見つかりませんでした<context-param>
バジルバーク

8

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()として渡されます。これは非常に非効率的で、コーディングが困難です。

したがって、これらの値を明示的に渡さずに、アプリケーション内のどこからでもグローバル値にアクセスしたい場合は、ContextInitパラメーターを使用する必要があります。

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


6
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

すべてのサーブレットがMVCフレームワークのデータベースと対話するため、PersistenceContext.xml内部を初期化しました<context-param>

ハワーバー、

<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>

前述のコードでは、私はジャージとApplicationContext.xml唯一の残りのレイヤーを構成しています。同じように私は使用しています</init-param>


5

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


4

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

単一サーブレット複数サーブレット。

他の回答は詳細を示していますが、ここに要約があります:

Webアプリ、つまり「コンテキスト」は、1つ以上のサーブレットで構成されています

  • <init-param>コンテキスト内の単一の特定のサーブレットで使用可能な値を定義します。
  • <context-param>コンテキスト内のすべてのサーブレットで使用可能な値を定義します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.