Руководство по Servlets. Фильтры.

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

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

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

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

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

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