1. Знайомство з анотаціями сервлетів
Починаючи з сьомої версії 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/*
.
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);
}
}
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...
}
Більш детально про призначення фільтрів та сервлетів ти дізнаєшся у наступних лекціях.