Подтвердить что ты не робот

Последовательность вызовов Servlet.init() и Filter.init()

В каком порядке используются методы Servlet.init() и Filter.init(), вызванные в веб-приложении java? Какой из них называется первым? Все методы Servlet.init() вызываются раньше, чем любой метод Filter.doFilter?

4b9b3361

Ответ 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() в том же экземпляре. Я все еще шокирован и не могу оправиться. Его имя - Джетти.