В данной статье мы рассмотрим использование фильтров при работе с сервлетами.
Мы можем использовать фильтры для следующих задач:
- Работа с ответами сервера перед тем, как они будут переданы клиенту.
- Перехватывание запросов от клиента перед тем, как они будут отправлены на сервер.
Фильтр – это простой Java класс, который имплементирует интерфейс javax.servlet.Filter, который содержит три метода:
№ | Метод и его описание |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain)
Вызывает при каждом вызове цикла запрос/ответ и передается по цепочке от клиентского запроса до её окончания. |
2 | public void init(FilterConfig filterConfig)
Вызывает фильтр, который задействован в логике приложения. |
3 | public void destroy()
Вызывается, когда фильтр, больше не используется в логике приложения. |
Для понимания, того, как это работает на практике, рассмотрим простой пример. В качестве основы возьмём приложения из данной статьи.
Класс FilterDemo
package net.proselyte.servletstutorial;
import javax.servlet.*;
import java.io.IOException;
import java.util.Date;
/**
* Simple class that implements interface {@link Filter}.
*
* @author Eugene Suleimanov
*/
public class FilterDemo implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
String ipAddress = request.getRemoteAddr();
String dateTime = new Date().toString();
System.out.println("\n\n==============================================\n");
System.out.println("Request...");
System.out.println("Date/Time: " + dateTime);
System.out.println("IP:" + ipAddress);
System.out.println("\n==============================================\n");
chain.doFilter(request, response);
}
public void destroy() {
}
}
Файл web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Servlets Tutorial</display-name>
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>net.proselyte.servletstutorial.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/filterDemo</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
</web-app>
Выполним в консоли следующую команду:
mvn tomcat7:run
И перейдём по ссылке:
http://localhost:8088/filterDemo
В консоли мы увидим, примерно, следующую запись:
==============================================
Request...
Date/Time: Sun Mar 26 23:43:21 EEST 2017
IP:127.0.0.1
==============================================
На этом мы заканчиваем изучение фильтров при работе с сервлетами.
В следующей статье мы рассмотрим работу с сессиями.