Рубрики
Без рубрики

Пример учебника по Фильтру Сервлетов Javax

Пример учебника по фильтру сервлетов Java, Фильтр сервлетов для перехвата запроса/ответа для обработки, javax.servlet.Фильтр,web.xml фильтр,пример фильтра входа в систему

Автор оригинала: Pankaj Kumar.

Фильтр сервлета Javax используется для перехвата запроса клиента и выполнения некоторой предварительной обработки. Он также может перехватывать ответ и выполнять последующую обработку перед отправкой клиенту в веб-приложении. Это четвертая статья в серии учебников по веб-приложениям, возможно, вам также захочется ознакомиться с более ранними статьями.

  1. Веб-приложение Java
  2. Учебник по сервлетам Java
  3. Управление сеансами Сервлетов

Фильтр Сервлетов

В этой статье мы узнаем о фильтре сервлетов в Java. Мы рассмотрим различные способы использования фильтра сервлетов, как мы можем создать фильтр и изучить его использование с помощью простого веб-приложения.

  1. Почему у нас есть фильтр сервлетов?
  2. Интерфейс фильтра сервлетов
  3. Аннотация веб-фильтра сервлета
  4. Конфигурация фильтра сервлетов в web.xml
  5. Пример фильтра сервлета для регистрации и проверки сеанса
  1. Почему у нас есть фильтр сервлетов?

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

    Вот почему у нас есть фильтр сервлетов. Фильтры сервлетов являются подключаемыми компонентами java, которые мы можем использовать для перехвата и обработки запросов до их отправки сервлетам и ответа после завершения кода сервлета и до того, как контейнер отправит ответ обратно клиенту.

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

    • Протоколирование параметров запроса в файлы журналов.
    • Аутентификация и авторизация запроса ресурсов.
    • Форматирование тела или заголовка запроса перед отправкой его сервлету.
    • Сжатие данных ответа, отправленных клиенту.
    • Измените ответ, добавив некоторые файлы cookie, информацию о заголовке и т.д.

    Как я упоминал ранее, фильтры сервлетов подключаются и настраиваются в дескрипторе развертывания (web.xml) файл. Сервлеты и фильтры не знают друг о друге, и мы можем добавить или удалить фильтр сервлета, просто отредактировав web.xml.

    У нас может быть несколько фильтров для одного ресурса, и мы можем создать цепочку фильтров для одного ресурса в web.xml. Мы можем создать фильтр сервлетов, реализовав javax.servlet.Фильтр Интерфейс.

  2. Интерфейс фильтра сервлетов

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

    Методы жизненного цикла интерфейса фильтра сервлетов являются:

    1. void init(FilterConfig paramFilterConfig) – Когда контейнер инициализирует фильтр, вызывается этот метод. Этот метод вызывается только один раз в жизненном цикле фильтра, и мы должны инициализировать любые ресурсы в этом методе. FilterConfig используется контейнером для предоставления параметров инициализации и объекта контекста сервлета Фильтру. Мы можем создать исключение ServletException в этом методе.
    2. doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain paramFilterChain) – Это метод, вызываемый контейнером каждый раз, когда он должен применить фильтр к ресурсу. Контейнер предоставляет ссылки на объекты запроса и ответа для фильтрации в качестве аргумента. Цепочка фильтров используется для вызова следующего фильтра в цепочке. Это отличный пример Схемы цепочки ответственности .
    3. void destroy() – Когда контейнер выгружает экземпляр фильтра, он вызывает метод destroy (). Это метод, с помощью которого мы можем закрыть любые ресурсы, открытые фильтром. Этот метод вызывается только один раз за время существования фильтра.
  3. Аннотация веб-фильтра сервлета

    javax.сервлет.аннотация.WebFilter был представлен в Servlet 3.0, и мы можем использовать эту аннотацию для объявления фильтра сервлета. Мы можем использовать эту аннотацию для определения параметров инициализации, имени и описания фильтра, сервлета, шаблонов URL-адресов и типов диспетчеров для применения фильтра. Если вы часто вносите изменения в конфигурации фильтров, лучше использовать web.xml потому что для этого не потребуется перекомпилировать класс фильтра.

    Прочитайте : Учебник по аннотациям Java

  4. Конфигурация фильтра сервлетов в web.xml

    Мы можем объявить фильтр сервлета в web.xml как показано ниже.

    Мы можем сопоставить фильтр с классами сервлетов или шаблонами URL, как показано ниже.

    Примечание. При создании цепочки фильтров для сервлета контейнер сначала обрабатывает шаблоны URL-адресов, а затем имена сервлетов, поэтому, если вам нужно убедиться, что фильтры выполняются в определенном порядке, уделите особое внимание при определении сопоставления фильтров.

    Фильтры сервлетов обычно используются для запросов клиентов, но иногда мы хотим применить фильтры с RequestDispatcher также мы можем использовать элемент диспетчера в этом случае, возможными значениями являются ЗАПРОС, ПЕРЕСЫЛКА, ВКЛЮЧЕНИЕ, ОШИБКА и АСИНХРОННОСТЬ. Если диспетчер не определен, то он применяется только к запросам клиентов.

  5. Пример фильтра сервлета для регистрации и проверки сеанса

    В нашем примере фильтр сервлетов мы создадим фильтры для регистрации файлов cookie и параметров запросов и проверки сеанса для всех ресурсов , кроме статических HTMLs и LoginServlet, потому что у него не будет сеанса.

    Мы создадим динамический веб-проект Пример фильтра сервлетов , структура проекта которого будет выглядеть так, как показано на рисунке ниже.

    login.html это точка входа в наше приложение, где пользователь предоставит идентификатор входа и пароль для аутентификации.

    login.html код:

    LoginServlet используется для аутентификации запроса клиента на вход в систему.

    Когда клиент проходит проверку подлинности, он перенаправляется в LoginSuccess.jsp

    Код LoginSuccess.jsp:

    Обратите внимание, что в приведенном выше JSP отсутствует логика проверки сеанса. Он содержит ссылку на другую страницу JSP, страницу оформления заказа.jsp.

    Страница оформления заказа.код jsp:

    LogoutServlet вызывается, когда клиент нажимает кнопку выхода из системы на любой из страниц JSP.

    Теперь мы создадим классы фильтров сервлетов регистрации и аутентификации.

    Обратите внимание, что мы не проверяем подлинность какой-либо HTML-страницы или учетной записи. Теперь мы настроим отображение этих фильтров в web.xml файл.

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

    Если вы не вошли в систему и попытаетесь получить доступ к какой-либо странице JSP, вы будете перенаправлены на страницу входа в систему.

    В файле журнала сервера вы можете видеть журналы, записанные фильтрами сервлетов, а также сервлетами.

Это все для фильтра сервлетов в java. Это одна из важных функций веб-приложения Java EE, и мы должны использовать ее для общих задач, выполняемых различными сервлетами. В будущих сообщениях мы рассмотрим прослушиватели сервлетов и файлы cookie.

Обновление: После получения большого количества запросов на загружаемый проект я прикрепил его к сообщению, загрузите его по ссылке ниже.

Ознакомьтесь со следующей статьей из серии о Прослушивателе сервлетов .

Обновление

Struts 2 использует фильтр сервлетов для перехвата клиентских запросов и пересылки их в соответствующие классы действий, которые называются перехватчиками Struts 2. Проверьте Учебник для начинающих Struts 2 .