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

Разница между жизненным циклом сервлета и жизненным циклом фильтра

есть ли разница между жизненным циклом сервлета и фильтра?.

4b9b3361

Ответ 1

Нет, как сервлет, так и фильтр:

  • создаются экземплярами (один раз) при запуске контекста
  • метод init(..) называется
  • они обрабатывают каждый запрос - сначала он проходит через все фильтры, а затем достигает сервлета
  • когда контекст уничтожается (т.е. когда ваш контейнер останавливается или ваше приложение не развертывается из консоли менеджера), метод destroy(..) называется

Ответ 2

До сих пор я также задавался вопросом о различиях. Я создал веб-проект, чтобы наблюдать за их жизненным циклом. Он может быть проверен на

http://dntuan-java-workspace.googlecode.com/svn/trunk/simple-web

После развертывания в tomcat вы можете наблюдать за журналами с консоли, чтобы убедиться, что фильтры инициализированы до начала контекста. Если сервлет инициализируется только тогда, когда выполняется запрос (например, http://localhost:8080/simple-web/servlet/life.jsp)


Дополнительная информация из JSR-000315 JavaTM Servlet 3.0:

2.3.1 Загрузка и активация

Контейнер сервлета отвечает за загрузку и создание экземпляра сервлеты. Загрузка и создание экземпляра могут происходить, когда контейнер запускается или задерживается до тех пор, пока контейнер не определит сервлет для обслуживания запроса.

6.2.1 Жизненный цикл фильтра

После развертывания веб-приложения и до запроса контейнер для доступа к веб-ресурсу, контейнер должен найти список фильтров, которые должны быть применены к веб-ресурсу, как описано ниже. Контейнер должен убедиться, что он создал экземпляр фильтра соответствующий класс для каждого фильтра в списке и назвал его init (FilterConfig config).