8.1 Знакомство с аннотациями сервлетов
Начиная с 7-й версии Tomcat стал поддерживать спецификацию веб-сервлетов Servlet API 3.0. В ней в частности появился пакет под названием javax.servlet.annotation
. Он содержит различные типы аннотаций, которые можно использовать для аннотирования класса сервлета. Если ты используешь аннотацию, то дескриптор развертывания (web.xml) не требуется.
Список самых полезных аннотаций:
Аннотация | Описание | |
---|---|---|
1 | @WebServlet |
Объявляет сервлет |
2 | @WebInitParam |
Указывает параметр инициализации |
3 | @WebFilter |
Объявляет веб-фильтр |
4 | @WebListener |
Объявляет веб-лисенер |
5 | @ServletSecurity |
Позволяет настроить параметры безопасности |
Пример:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
Одной аннотации достаточно, чтобы объявить сервлет и замапить его на обслуживание всех запросов, которые будут приходить на URL, заданный шаблоном /api/*
.
8.2 Настройка мапинга сервлета
У аннотации @WebServlet
много параметров, которые позволяют очень гибко сконфигурировать сервлет, которые она описывает. Давай ознакомимся с основными из них:
Атрибут | Описание | |
---|---|---|
1 | name |
Уникальное имя сервлета (как в web.xml) |
2 | displayName |
Читаемое имя сервлета для человека |
3 | description |
Описание сервлета |
4 | value |
Задает url для мапинга |
5 | urlPatterns |
Задает список url-ов для мапинга (используется вместо value) |
6 | initParams |
Позволяет задать стартовые параметры сервлета |
7 | asyncSupported |
Указывает, что сервлет может работать асинхронно (HTTP/2) |
8 | loadOnStartup |
Порядковый номер для управления приоритетом старта сервлетов |
9 | smallIcon |
Задает маленькую иконку сервлета |
10 | largeIcon |
Задает большую иконку сервлета |
Интересных моментов тут несколько.
Во-первых, обрати внимание, что value
и urlPatterns
— взаимозаменяемые атрибуты. Они оба позволяют задать список урлов, на которые должен замапиться сервлет.
Во-вторых, параметр asyncSupported
указывает, будет ли сервлет корректно обрабатывать асинхронные запросы по протоколу HTTP/2.
И третий важный атрибут — это initParams
, он позволяет задать список параметров, которые будут помещены в ServletContext.
Пример:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 Настройка маппинга фильтров
Как уже говорилось выше, фильтры — это служебная разновидность сервлетов, и настраиваются они подобно сервлетам. Вот какие атрибуты есть у аннотации @WebFilter
:
Атрибут | Описание | |
---|---|---|
1 | filterName |
Уникальное имя фильтра (как в web.xml) |
2 | displayName |
Читаемое имя фильтра для человека |
3 | description |
Описание фильтра |
4 | value / urlPatterns |
Задает список url-ов для мапинга |
5 | dispatcherTypes |
Задает список типов DispatcherType |
6 | servletNames |
Задает список сервлетов, к которым применяется |
7 | initParams |
Позволяет задать стартовые параметры фильтра |
8 | asyncSupported |
Указывает, что фильтр может работать асинхронно (HTTP/2) |
9 | smallIcon |
Задает маленькую иконку фильтра |
10 | largeIcon |
Задает большую иконку фильтра |
Пример фильтра, который перехватывает все запросы к определенным сервлетам:
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Пример фильтра, которому задано несколько параметров:
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
Пример фильтра, которому заданы типы для RequestDispatcher:
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Более детально о назначении фильтров и сервлетов ты узнаешь в следующих лекциях.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ