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то на филтрите и сървлетите в следващите лекции.
GO TO FULL VERSION