Топ-100Что такое Filter в Java сервлетах - CodOrbits
LogoCodOrbits

Раздел: Servlets

Познакомьтесь с сервлетами Java: создание динамических веб-страниц и работа с HTTP-запросами и ответами.

Все разделы
Иконка Servlets

Что такое Filter в Java сервлетах

Last updated: 10 мая 2025 г.

Часто бывает, что нужно чтобы перед вызовом какого-либо сервлета или после вызова выполнялся какой-либо код.

Для этого нужно реализовать интерфейс Filter и реализовать его абстрактный метод doFilter, в котором и пишется код, который будет выполняться до сервлета и после него.

Example

Например:

Если нужно чтобы сначала пользователь авторизировался, и только если данные авторизации правильные запустился какой-либо сервлет.

Создадим сервлет, перед которым и после которого будет выполняться код.

Это простой сервлет, ничего нового здесь нет.

Пример программы:

1import java.util.*;
2import java.io.IOException;
3import java.io.PrintWriter;
4
5import javax.servlet.*;
6import javax.servlet.http.*;
7import javax.servlet.annotation.*;
8
9@WebServlet("/filterservlet")
10public class MyServlet extends HttpServlet {
11    public void doGet(HttpServletRequest request,
12                      HttpServletResponse response)
13            throws ServletException, IOException {
14        PrintWriter pw = response.getWriter();
15        pw.println("servlet");
16    }
17}

Класс реализующий Filter

Теперь создаем класс, который реализовывает Filter и в котором пишется код, который выполняется перед сервлетом и после сервлета.

Аннотацией WebFilter в urlPatterns указываем адрес сервлета, к которому будет применен данный фильтр. То есть адрес /filterservlet – сервлета выше.

urlPatterns, initParams,… можно задать и не через аннотацию, а и через web.xml, но здесь это демонстрировать не будем, также можно задать параметры инициализации в фильтре с помощью аннотации WebInitParam вместо тега <init-param> в web.xml (аннотацию WebInitParam можно использовать не только в фильтре).

Пример программы:

1import java.io.IOException;
2import java.io.PrintWriter;
3import javax.servlet.*;
4import javax.servlet.http.*;
5import javax.servlet.annotation.*;
6
7@WebFilter(urlPatterns = "/filterservlet",
8initParams=@WebInitParam(name = "Name",value = "Value")))
9public class FilterClass implements Filter {
10    public void init(FilterConfig fConf)
11        throws ServletException {
12        //здесь использовать заданные параметры инициализации
13        System.out.println(fConf.getInitParameter("name"));
14    }
15
16    public void doFilter(ServletRequest req,
17                         ServletResponse resp, FilterChain chain)
18        throws IOException, ServletException {
19        //этот код выполнится до вызова сервлета
20        PrintWriter pw=resp.getWriter();
21        pw.println("invoked before");
22        //так вызывается сам сервлет по адресу
23        //который был указан в urlPatterns
24        chain.doFilter(req, resp);
25        //этот код выполнится после вызова сервлета
26        pw.println("invoked after");
27    }
28
29    public void destroy() {}
30}

Проверка работы сервлета и класса фильтра

Скомпилируем файл сервлета и файл класса реализующего Filter и в адресной строке перейдем по адресу /filterservlet.

Как видим, выполнился код в методе doFilter, который до вызова сервлета (вывелось invoked before), код самого сервлета (вывелось servlet) и вывелся код в методе doFilter, который после вызова сервлета (вывелось invoked after).


Следующие уроки

Слушатели (Listeners) в Java сервлетах

15
мин.

Similar Articles Icon
Divider

Оптимизация сервлетов с AsyncContext

11
мин.

Similar Articles Icon
Divider

Азы работы с Java Server Pages (JSP)

17
мин.

Similar Articles Icon