Содержание
-
Введение
-
Лабораторная работа №1
-
Лабораторная работа №2
-
Лабораторная работа №3
-
Лабораторная работа №4
Лабораторная работа №3 Настройка и подключение фильтров в веб-приложении
Цель работы- Расширить знания по созданию лисенеров и веб-фильтров.
- Запустить приложение в серверной среде и проверить работу лисенеров и вебфильтров.
- Eclipse
- Maven 3
- JDK 1.6
- Jetty
- Понимание технологии Servlets из Java EE.
- Понимание теории создания лисенеров веб-приложения.
- Понимание теории создания веб-фильтров.
- Понимание теоретических причин использования и создания лисенеров и вебфильтров в приложениях.
Сервлетный фильтр – это Java код, применимый для повторного использования и позволяющий изменять содержание HTTP-запросов, ответов и различную информацию, в заголовках HTML.
Основная цель сервлетного фильтра это занимается предварительной обработкой запроса и/или последующей обработкой ответа, исходящего от сервлета. Сервлетные фильтры используются для:- перехватывания инициации сервлета до того, как сам сервлет будет инициирован;
- определения содержания запроса;
- изменения http заголовков и данных из запроса;
- модификации заголовков и данных ответа, в которые складывается получаемый ответ;
- перехвата обработки сервлета после обращения к нему.
Примеры вызова сервлета с использованием фильтра и без использования приведены
ниже.
Рисунок 14. Примеры вызова сервлета без фильтров и с их использованием
Рисунок 15. Методы javax.servlet.Filter
import javax.servlet.*; import java.io.IOException; /** */ public class SimpleServletFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { String active = request.getParameter(«active»); if(!»blockTheRequest».equals(active)){ filterChain.doFilter(request, response); } } public void destroy() { } }
После того, как класс-фильтр создан, его следует установить в контейнер и «приписать» к одному или нескольким сервлетам . Объявление и подключение фильтра проводится в дескрипторе web.xml внутри элементов <filter> и <filter-mapping>. Для подключения фильтра к сервлету следует использовать теги <filter-name> и <servlet-name>. Ниже приведен пример объявления фильтра.<filter> <filter-name>myFilter</filter-name> <filter-class>servlets.SimpleServletFilter</filter-class> </filter>
Ниже приведен пример подключения фильтра к сервлету.<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>*.simple</url-pattern> </filter-mapping>
В приведённом коде дескриптора web.xml объявлен класс-фильтр FilterConnect с именем myFilter. Фильтр myFilter в разделе <filter-mapping> подключен к сервлету ServletName. Порядок, по которому контейнер сервлетов выстраивает цепочку фильтров для запроса, определяется следующим набором правил:- цепочка, определяемая шаблоном url, выстраивается в таком порядке, в котором встречаются описания фильтров в web.xml;
- последовательность сервлетов, заданных с помощью servlet-name, выполняется в аналогичной последовательности, в какой эти элементы присутствуют в дескрипторе web.xml.
<filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping>
Практическая часть 1. Необходимо открыть ранее созданное веб-приложение и создать новый package в структуре в src/main/java с название com.test.servlet.filters.MyFirstFilter (см. рисунок ниже).
Рисунок 16. Создание нового package в структуре в src/main/java
import javax.servlet.*; import java.io.IOException; /** */ public class MyFirstFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { System.out.println(“MyFirstFilter is running!”); filterChain.doFilter(request, response);
} public void destroy() { } }
2. В web.xml следует настроить фильтры для работы по указанному url. <filter> <filter-name>MyFirstFilter</filter-name> <filter-class>com.test.servlet.filters.MyFirstFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFirstFilter</filter-name> <url-pattern>*.html</url-pattern> </filter-mapping> 3. Запустить приложение и проверить работу фильтра по указанному url в web.xml. 4. Создать собственный фильтр для приложения в соответствии с указанным вариантом задания. Вариант 1. Создать фильтр, который:- читает 3 входящих параметра (имя, фамилия, отчество);
- логирует их в консоль.
- читает параметр в виде имя картинки-файла;
- логирует параметр в консоль.