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

Сервлет и фильтр

В чем разница между Сервлет и Фильтр? Что вы рекомендуете использовать для авторизации на страницах?

4b9b3361

Ответ 1

Используйте Filter, если вы хотите фильтровать и/или изменять запросы на основе определенных условий. Используйте Servlet, если хотите выполнить контроль, препроцесс и/или постпроцесс.

В учебнике по Java EE упоминаются следующие фильтры:

Фильтр - это объект, который может преобразовывать заголовок и содержимое (или оба) запроса или ответа. Фильтры отличаются от веб-компонентов тем, что фильтры сами по себе не создают ответ. Вместо этого фильтр предоставляет функциональные возможности, которые могут быть "привязаны" к любому веб-ресурсу. Следовательно, фильтр не должен иметь никаких зависимостей от веб-ресурса, для которого он действует как фильтр; таким образом, он может быть составлен с несколькими типами веб-ресурсов.

Основные задачи, которые может выполнять фильтр, следующие:

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

Для авторизации лучше всего подходит Filter. Здесь приведен пример базового примера того, как фильтр проверяет запросы для зарегистрированного пользователя:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        // User is not logged in. Redirect to login page.
        ((HttpServletResponse) response).sendRedirect("login");
    } else {
        // User is logged in. Just continue with request.
        chain.doFilter(request, response);
    }
}

Ответ 2

Фильтры лучше всего подходят для авторизации. Это связано с тем, что они могут быть настроены для работы на всех страницах сайта. Поэтому вам нужен только один фильтр для защиты всех ваших страниц.

Ответ 3

Используя фильтр, мы можем улучшить производительность сервлета -   когда запрос приходит, мы можем выполнить предварительную обработку по запросу, если запрос удовлетворяет, то мы можем перенаправить на сервлет, иначе дать сообщение клиенту, предоставить соответствующую информацию в запросе.