Разница между жизненным циклом сервлета и жизненным циклом фильтра
есть ли разница между жизненным циклом сервлета и фильтра?.
Ответы
Ответ 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).