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...
}
Більш детально про призначення фільтрів та сервлетів ти дізнаєшся у наступних лекціях.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ