在java Web应用程序中调用的Servlet.init()和Filter.init()方法的顺序是什么?首先叫哪一个?是否所有Servlet.init()方法都被调用,而不是任何Filter.doFilter方法?
答案 0 :(得分:27)
在webapp启动期间,始终按照web.xml
中定义的顺序初始化过滤器。
默认情况下,servlet在其url-pattern上的第一个HTTP请求期间初始化。但您也可以使用<load-on-startup>
条目在webapp启动期间对它们进行初始化,您可以在其中指定其优先级。然后按优先顺序加载它们
E.g。
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
如果有更多具有相同优先级顺序的servlet,那么这些servlet的加载顺序是未指定的,可能是任意的。但是,在过滤器初始化之后初始化Servlet,但在调用过滤器之前
。答案 1 :(得分:7)
Filter.init()
web.xml
中的''的servlet: Servlet.init()
Filter.doFilter()
Servlet.init()
Servlet.service()
答案 2 :(得分:6)
只是旁注 - 我在tomcat(7.0.30)上遇到过Filter.init()方法以随机顺序运行(通过HashMap迭代)。
答案 3 :(得分:-1)
当心。我一直在见证同一个实例上的Filter.init()和Filter.doFilter()的并发调用。我仍感到震惊,无法恢复。它&#39;名字是Jetty。