views:

409

answers:

2

In which order are Servlet.init() and Filter.init() methods called in java web application? Which one is called first? Are all Servlet.init() methods called before than any Filter.doFilter method?

+3  A: 

The filters are always initialized during webapp's startup in the order as they are definied in web.xml.

The servlets are by default initialized during the first HTTP request on their url-pattern only. But you can configure them as well to initialize during webapp's startup using the <load-on-startup> entries wherein you can specify the priority. They will then be loaded in the priority order. E.g.

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

If there are more servlets with the same priority order, then the loading order for those servlets is unspecified and may be arbitrary. Servlets are however in any way initialized after the initialization of filters, but before invocation of the filters.

BalusC
If I have set load-on-startup in web.xml, can I be certain that this servlet's init() is called before any filter's doFilter?
martsraits
Yes, I edited that in. This is however regardless of `load-on-startup`.
BalusC
A: 
  1. For all filters: Filter.init()
  2. For all servlets with '' in web.xml: Servlet.init()
  3. For all applicable filters for request: Filter.doFilter()
  4. If applicable servlet not already initialised: Servlet.init()
  5. For applicable servlet: Servlet.service()
Tendayi Mawushe