В каком порядке используются методы Servlet.init() и Filter.init(), вызванные в веб-приложении java? Какой из них называется первым? Все методы Servlet.init() вызываются раньше, чем любой метод Filter.doFilter?
Последовательность вызовов Servlet.init() и Filter.init()
Ответ 1
Фильтры всегда инициализируются во время запуска webapp в порядке, указанном в web.xml
.
Сервлеты по умолчанию инициализируются во время первого HTTP-запроса только по их URL-шаблону. Но вы также можете их настроить для инициализации во время запуска webapp, используя записи <load-on-startup>
, в которых вы можете указать их приоритет. Затем они будут загружены в порядке приоритета.
Например.
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>mypackage.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Если у вас больше сервлетов с одинаковым приоритетом, порядок загрузки для этих сервлетов не указан и может быть произвольным. Однако сервлеты инициализируются после инициализации фильтров, но перед вызовом фильтров.
Ответ 2
- Для всех фильтров:
Filter.init()
- Для всех сервлетов с '' in
web.xml
:Servlet.init()
- Для всех применимых фильтров для запроса:
Filter.doFilter()
- Если соответствующий сервлет еще не инициализирован:
Servlet.init()
- Для применимого сервлета:
Servlet.service()
Ответ 3
Просто примечание - я испытал на tomcat (7.0.30), что методы Filter.init() запускаются в случайном порядке (итерация по HashMap).
Ответ 4
Осторожно. Я наблюдал одновременный вызов Filter.init() и Filter.doFilter() в том же экземпляре. Я все еще шокирован и не могу оправиться. Его имя - Джетти.