Разница между перехватчиками и фильтрами. Правильно ли это?

Я исследую это, чтобы лучше отвечать на интервью. Я искал подробный и краткий ответ.

До сих пор и, во что бы то ни стало, исправлять меня, если я ошибаюсь или не нуждаюсь в деталях:

  • Фильтры являются частью 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.