Сервлет против фильтра - PullRequest
54 голосов
/ 02 июня 2010

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

Ответы [ 3 ]

96 голосов
/ 02 июня 2010

Используйте 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);
    }
}
20 голосов
/ 02 июня 2010

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

3 голосов
/ 10 мая 2017

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

...