サーブレット< load-on-startup>は何をしますか値が意味する

StackOverflow https://stackoverflow.com/questions/809775

  •  03-07-2019
  •  | 
  •  

質問

ここで少し混乱しています。このアプリケーションでは、いくつかのサーブレットを定義しています。サーブレットの1つに対する web.xml からの抜粋を次に示します。

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

私の理解では、&lt; load-on-startup&gt; の値は、自動的にロードされるためには正の整数でなければなりません。 Googleで調べましたが、出会った回答は混乱を招くだけです。

役に立ちましたか?

解決

Resin 3.0 には、この動作が記載されています。

  

load-on-startupは(オプションの)整数値を指定できます。値が0以上の場合、   サーブレットがロードされる順序を示し、より大きな数のサーブレットが取得されます   小さい番号のサーブレットの後にロードされます。

JSP 3.1仕様(JSR 340)は、14-160ページでこれを述べています:

  

load-on-startup 要素は、このサーブレットをロードする(インスタンス化する)ことを示します   そしてその   init()called)Webアプリケーションの起動時に。これの要素内容   要素は、サーブレットの順序を示す整数である必要があります   ロードされました。値が負の整数である場合、または要素が存在しない場合、   コンテナは、選択するたびにサーブレットを自由にロードできます。値が正の場合   整数または0。コンテナは、アプリケーションがそうであるように、サーブレットをロードして初期化する必要があります。   展開されました。コンテナは、より小さな整数でマークされたサーブレットを保証する必要があります   より高い整数でマークされたサーブレットの前にロードされます。コンテナは選択できます   同じ load-on-startup 値を持つサーブレットのロード順序。

おそらく、JSRだけでなく、Webコンテナのドキュメントも確認する必要があります。違いがあるかもしれません

他のヒント

簡単な回答:値&gt; = 0は、Webアプリのデプロイ時またはサーバーの起動時にサーブレットがロードされることを意味します。 値&lt; 0:コンテナが次のように感じるたびにサーブレットがロードされます。

ロングアンサー(仕様から):

  

load-on-startup要素は、これが   サーブレットをロードする必要があります(インスタンス化して   Webの起動時にinit()が呼び出されます)   応用。これらのオプションの内容   要素は、次の順序を示す整数でなければなりません   サーブレットをロードする必要があります。値が   負の整数であるか、要素が   存在する場合、コンテナはサーブレットを自由にロードできます   いつでも選択します。値が正の場合   128   整数または0。コンテナはロードする必要があり、   アプリケーションがそうであるようにサーブレットを初期化する   展開されました。コンテナは、   より低い整数でマークされたサーブレットがロードされます   より高い整数でマークされたサーブレットの前。の   コンテナは、ロードの順序を選択できます   同じload-on-start-up値を持つサーブレット。

リクエストがリクエストにアクセスするまでサーブレットが開始されないことを示します。

load-on-startupがゼロ以上の場合、コンテナが起動すると、そのサーブレットは起動時のロード値の昇順(0、1、2、5、10、など)。

サーブレットのライフサイクル

  

サーブレットのライフサイクルは、サーブレットがデプロイされているコンテナによって制御されます。リクエストがサーブレットにマッピングされると、コンテナは次の手順を実行します。

     
      
  1. サーブレットのインスタンスが存在しない場合、Webコンテナ:

         

    a。サーブレットクラスをロードします

         

    b。サーブレットクラスのインスタンスを作成します

         

    c。 initメソッドを呼び出して、サーブレットインスタンスを初期化します(初期化については、サーブレットの作成と初期化

  2.   
  3. コンテナはサービスメソッドを呼び出し、要求オブジェクトと応答オブジェクトを渡します。サービスメソッドについては、サービスメソッドの記述で説明しています。

    >
  4.   

load-on-startup の0値は、リクエストがそのサーブレットに到達したときにポイント1が実行されることを意味します。他の値は、ポイント1がコンテナの起動時に実行されることを意味します。

他の回答とこの loadに記載されているとおり-on-startup article ゼロは許容され、他のサーブレットがない場合、これはロード中に優先され、デプロイメント中にロードされます。ロードオンstatupの最適な使用方法は、接続プールを作成したり、ネットワーク呼び出しを行ったり、巨大なリソースを保持したりするサーブレットのように、最初のリクエストが来る前に初期化に時間がかかるサーブレットをロードすることです。これにより、最初のいくつかのリクエストの応答時間が大幅に短縮されます。

  1. 2つのサーブレットの値が同じ場合、web.xmlファイル内で宣言されている順序でロードされます。
  2. 0の場合、またはコンテナがそれらをロードすると感じたときにサーブレットがロードされるよりも負の整数。
  3. は、Webコンテナによるサーブレットの読み込み、初期化、およびinit()メソッドの呼び出しを保証します。
  4. サーブレットに要素がない場合、Webコンテナがそれらをロードすることを決定したときにロードされます。

はい、同じ値を持つことができます。...起動時にロードに番号を付ける理由は、サーバーがすべてのサーブレットをロードするシーケンスを定義するためです。 load-on-startup値が0のサーブレットが最初にロードされ、値1のサーブレットがその後ロードされます。

2つのサーブレットがload-on-startupに対して同じ値を持つ場合、web.xmlで宣言された方法で上から下にロードされます。 web.xmlで最初に来るサーブレットが最初にロードされ、他のサーブレットがその後ロードされます。

-&gt; (起動時のロードの不在)タグ まず、サーブレットがサーバーにデプロイされるときはいつでも、サーブレットオブジェクトを作成するのはサーバーの責任です。    例:Servletがサーバーにデプロイされていると仮定します(Servletオブジェクトはサーバーで利用できません)。クライアントが最初にリクエストをサーブレットに送信し、サーバーがデフォルトコンストラクターを使用してサーブレットオブジェクトを作成する そしてすぐにinit()を呼び出します。これにより、クライアントがリクエストを送信すると、オブジェクトが既に利用可能なためサービスメソッドのみが実行されます

展開記述子でload-on-start-upタグが使用されている場合:    デプロイメント自体の時点で、サーバーは、タグ間に指定された正の値に基づいて、サーブレットのサーブレットオブジェクトを作成します。サーブレットクラスのオブジェクトの作成は、0〜128になります。  0番のサーブレットが最初に作成され、その後に他の数字が続きます。

web.xmlの2つのサーブレットに同じ値を指定すると、web.xmlのクラスの位置に基づいてオブジェクトの作成も行われます。サーバーごとに異なります。

起動タグのロードの間に負の値を指定すると、サーバーはサーブレットオブジェクトを作成しません。

サーバーがサーブレットのオブジェクトを作成するその他のシナリオ。

web.xmlの起動タグでロードを使用しない場合、サーバーがオブジェクトを初めて作成し、サーバーがライフサイクルメソッドを呼び出すときにクライアントがリクエストを送信するたびにプロジェクトがデプロイされます。サーバー(tomcat)で.classが変更された場合。 再びクライアントは変更されたサーブレットのリクエストを送信しますが、Tomcatの場合、新しいオブジェクトは作成されず、サーバーの再起動が行われない限り、サーバーは既存のオブジェクトを使用します。 しかし、web-logicのクラスでは、サーバーを再起動せずにサーバーで.classファイルが変更されると、サーバーがリクエストを受信し、サーバーが既存のサーブレットでdestroyメソッドを呼び出し、新しいサーブレットオブジェクトを作成し、初期化のためにinit()を呼び出します。

値が&lt; 0の場合、リクエストが来たときにserletがインスタンス化されます。それ以外の場合&gt; = 0の場合、コンテナは値の昇順でロードされます。 2つ以上のサーブレットが同じ値を持つ場合、web.xmlで宣言されたサーブレットの順序。

サーブレットコンテナは、起動時または最初の要求が行われたときにサーブレットをロードします。サーブレットのロードは、属性「起動時のロード」に依存します。 &quot; web.xml&quot;ファイル。属性に正の整数(0〜128)がある場合、サーブレットはコンテナのロードとともにロードされます。それ以外の場合は、最初のリクエストがサービスに来たときにロードされます。

リクエストが取得されると、サーブレットがロードされると、「遅延ロード」と呼ばれます。

予期しないほど簡単です。

値が正の場合、コンテナの起動時にロードされます

値が正でない場合、リクエストの実行時にサーブレットがロードされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top