Фильтры
Мы можем использовать фильтры для следующих задач:
- Работа с ответами сервера перед тем, как они будут переданы клиенту.
- Перехватывание запросов от клиента перед тем, как они будут отправлены на сервер.
Фильтр – это простой 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
==============================================