Бесплатный курс по Java: от основ до продвинутого уровня
Что такое Filter в Java-сервлетах
Часто бывает, что нужно чтобы перед вызовом какого-либо сервлета или после вызова выполнялся какой-либо код.
Для этого нужно реализовать интерфейсFilter и реализовать его абстрактный метод doFilter, в котором и пишется код, который будет выполняться до сервлета и после него.
Например:
Если нужно чтобы сначала пользователь авторизировался, и только если данные авторизации правильные запустился какой-либо сервлет.
Создадим сервлет, перед которым и после которого будет выполняться код.
Теперь создаем класс, который реализовывает Filter и в котором пишется код, который выполняется перед сервлетом и после сервлета.
Аннотацией WebFilter в urlPatterns указываем адрес сервлета, к которому будет применен данный фильтр. То есть адрес /filterservlet – сервлета выше.
urlPatterns, initParams,… можно задать и не через аннотацию, а и через web.xml, но здесь это демонстрировать не будем, также можно задать параметры инициализации в фильтре с помощью аннотации WebInitParamвместо тега <init-param> в web.xml (аннотацию WebInitParam можно использовать не только в фильтре).
Пример программы:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebFilter(urlPatterns = “/filterservlet”,
initParams=@WebInitParam(name = “Name”,value = “Value”)))
public class FilterClass implements Filter {
public void init(FilterConfig fConf)
throws ServletException {
//здесь использовать заданные параметры инициализации
System.out.println(fConf.getInitParameter(“name”));
}
public void doFilter(ServletRequest req,
ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
//этот код выполнится до вызова сервлета
PrintWriter pw=resp.getWriter();
pw.println(“invoked before”);
//так вызывается сам сервлет по адресу
//который был указан в urlPatterns
chain.doFilter(req, resp);
//этот код выполнится после вызова сервлета
pw.println(“invoked after”);
}
public void destroy() {}
}
Проверка работы сервлета и класса фильтра
Скомпилируем файл сервлета и файл класса реализующего Filter и в адресной строке перейдем по адресу /filterservlet.
Как видим, выполнился код в методе doFilter, который до вызова сервлета (вывелось invoked before), код самого сервлета (вывелось servlet) и вывелся код в методе doFilter, который после вызова сервлета (вывелось invoked after).
Разберитесь с Listeners в Java сервлетах: отслеживайте изменения атрибутов, сессий и контекста. Практический пример использования ServletContextAttributeListener.
Time to read: 15
Оптимизация сервлетов с AsyncContext
Используйте AsyncContext в Java сервлетах для асинхронной обработки задач. Узнайте, как избежать простоя потоков и повысить производительность веб-приложений с примерами кода.
Time to read: 11
Азы работы с Java Server Pages (JSP)
Основы JSP: создание первой JSP-страницы, преобразование JSP в сервлеты, преимущества перед чистым HTML. Практическое руководство по началу работы с Java Server Pages.