Java Webアプリケーションで呼び出されるServlet.init()メソッドとFilter.init()メソッドの順序はどれですか?最初に呼び出されるのはどれですか?すべてのServlet.init()メソッドはどのフィルターよりも前に呼び出されますか? .doFilterメソッド?
フィルタは、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>
同じ優先順位のサーブレットがさらにある場合、それらのサーブレットのロード順序は指定されておらず、任意である可能性があります。ただし、サーブレットは何らかの方法で初期化されます後フィルタの初期化ですが、前フィルタの呼び出しです。
Filter.init()
web.xml
_に ''が含まれるすべてのサーブレットの場合:Servlet.init()
Filter.doFilter()
Servlet.init()
Servlet.service()
補足-Tomcat(7.0.30)で、Filter.init()メソッドがランダムな順序で実行されることを経験しました(HashMapでの反復)。