8.1 Въведение в анотациите на сървлета

Започвайки с version 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 address, даден от /api/*.

8.2 Настройване на сървлет картографиране

Анотацията има @WebServletмного параметри, които позволяват много гъвкава конфигурация на сървлета, който описва. Нека да разгледаме основните от тях:

Атрибут Описание
1 name Уникално име на сервлет (Howто в web.xml)
2 displayName Човешко четимо име на сървлета
3 description Описание на сервлета
4 value Задава url за картографиране
5 urlPatterns Указва списък с URL addressи за картографиране (използва се instead of стойност)
6 initParams Позволява ви да зададете началните параметри на сървлета
7 asyncSupported Указва, че сървлетът може да работи асинхронно (HTTP/2)
8 loadOnStartup Пореден номер за контрол на стартовия приоритет на сървлета
9 smallIcon Задава малка икона на сервлет
10 largeIcon Задава голяма икона на сервлет

Тук има няколко интересни точки.

Първо, имайте предвид, че valueи urlPatternsса взаимозаменяеми атрибути. И двете ви позволяват да посочите списък с URL addressи, към които сървлетът трябва да се насочи.

Второ, параметърът 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 Уникално име на филтъра (Howто в web.xml)
2 displayName Име на филтъра, което може да се чете от човека
3 description Описание на филтъра
4 value / urlPatterns Задава списък с URL addressи за картографиране
5 dispatcherTypes Указва списък с DispatcherTypes
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...
}

Ще научите повече за преднаmeaningто на филтрите и сървлетите в следващите лекции.