Фильтры

Мы можем использовать фильтры для следующих задач:

  • Работа с ответами сервера перед тем, как они будут переданы клиенту.
  • Перехватывание запросов от клиента перед тем, как они будут отправлены на сервер.

Фильтр – это простой 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

==============================================

results matching ""

    No results matching ""