Разница между перехватчиками и фильтрами. Правильно ли это?
Я исследую это, чтобы лучше отвечать на интервью. Я искал подробный и краткий ответ.
До сих пор и, во что бы то ни стало, исправлять меня, если я ошибаюсь или не нуждаюсь в деталях:
- Фильтры являются частью API Servlet, Interceptors - Struts 2. (Кажется очевидным, хотя)
- Стек Interceptor запускается в запросах в сконфигурированном пакете, тогда как фильтры применяются только к их сопоставленным URL-адресам.
- Перехватчики могут быть настроены на выполнение или нет в зависимости от конкретных методов целевого действия с помощью исключающих методов и includeMethods, в то время как фильтрам не хватает этой функции.
- Фильтры представляют собой реализацию шаблона Intercepting Filter, в то время как Interceptors имеют шаблон Interceptor.
Это похоже на точный и полный ответ? Должен ли я что-нибудь добавить или исправить? Что о проблемах/различиях потоков?
Ответы
Ответ 1
Я думаю, что первым является ответ, но вы, вероятно, должны сказать больше, чем просто
Перехватчики находятся в struts 2, и фильтры являются частью API Servlet
На самом деле, как интервьюер, я ожидал бы и надеюсь, что здесь вы точно объясните, какая разница между Servelt API и инфраструктурой веб-приложений, например Struts 2. Это на самом деле шанс показать свое понимание всей экосистемы и инфраструктуры веб-приложений Java.
Хорошие ответы могут затронуть:
-
Как среда Struts 2 реализована в сервлет-фильтре.
-
Какие конкретные варианты использования вызовет фильтр сервлета вне struts 2, но в рамках одного и того же веб-приложения?
-
Что такое Servlet API, веб-приложение, веб-приложение
рамки и т.д.
Ответом в том смысле, который показал, что ваше понимание всех этих тем - то, что они ищут, я бы предположил.
Ответ 2
Фильтры от API сервлета, а перехватчики - от Struts 2,
Разница возникает, когда мы говорим о веб-приложениях и корпоративных приложениях,
фильтр используется только в веб-приложениях, тогда как перехватчик может использоваться как в Интернете, так и в корпоративных приложениях.
Способы жизненного цикла обоих, также различаются.
Стек перехватчика срабатывает при каждом запросе.
фильтры применяются только к URL-адресам, для которых они определены.
вы используете тот или иной в зависимости от необходимости. Допустим, вам нужно подтвердить, что cookie присутствует для каждого запроса. Используйте перехватчик. Предположим, что вам нужно выставить внешнее приложение для некоторых запросов (с помощью URL-адреса), использовать фильтр.
Ответ 3
В одном из интервью я ответил на этот вопрос, например,
Перехватчики представляют собой концепцию struts2, и разработчик приложения контролирует ее. Кроме того, он работает с границей приложения struts2 и имеет доступ к Actions, ValueStack и другим объектам вместе с позициями Struts2.
Пока фильтр больше подходит для конфигураций времени развертывания. Он имеет ограниченный доступ к приложению, и в большинстве случаев его общий для большинства веб-приложений, развернутых на сервере.
Если логика в коде больше связана с Приложением, она лучше подходит для перехватчика, а если ее инфраструктура, мы можем поместить ее в фильтр сервлетов.
Ответ 4
Фильтры:
- Основываясь на спецификации сервлета
- Выполняет совпадения шаблонов в запросе.
- Неконфигурируемые вызовы методов.
перехватчики:
- На основе Struts2.
- Выполняется для всего запроса, для которого требуется контроллер фронта
Сервлет-фильтр). И может быть настроен для выполнения дополнительных
перехватчиков для выполнения конкретного действия.
- Способы в перехватчиках могут быть настроены на выполнение или
не с помощью
excludeMethods
или includeMethods
.