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...
}

Більш детально про призначення фільтрів та сервлетів ти дізнаєшся у наступних лекціях.


Tomcat встановлення, налаштування, деплой, ресурси

https://youtu.be/-eEEHZzOU1M