web-dev-qa-db-ja.com

Servlet.init()およびFilter.init()の呼び出しシーケンス

Java Webアプリケーションで呼び出されるServlet.init()メソッドとFilter.init()メソッドの順序はどれですか?最初に呼び出されるのはどれですか?すべてのServlet.init()メソッドはどのフィルターよりも前に呼び出されますか? .doFilterメソッド?

31
martsraits

フィルタは、webappの起動時に、web.xmlで定義されている順序で常に初期化されます。

デフォルトでは、サーブレットはurlパターンでのみ最初のHTTPリクエスト中に初期化されます。ただし、優先度を指定できる<load-on-startup>エントリを使用して、webappの起動時に初期化するように構成することもできます。その後、優先順位でロードされます。
例えば。

<servlet>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>mypackage.MyServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

同じ優先順位のサーブレットがさらにある場合、それらのサーブレットのロード順序は指定されておらず、任意である可能性があります。ただし、サーブレットは何らかの方法で初期化されますフィルタの初期化ですが、フィルタの呼び出しです。

28
BalusC
  1. すべてのフィルターの場合:Filter.init()
  2. _web.xml_に ''が含まれるすべてのサーブレットの場合:Servlet.init()
  3. リクエストに適用可能なすべてのフィルターの場合:Filter.doFilter()
  4. 該当するサーブレットがまだ初期化されていない場合:Servlet.init()
  5. 該当するサーブレットの場合:Servlet.service()
8
Tendayi Mawushe

補足-Tomcat(7.0.30)で、Filter.init()メソッドがランダムな順序で実行されることを経験しました(HashMapでの反復)。

7
Jan Gutvirth