English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
До сих пор вы узнали, как Servlet использует файл описания部署а (файл web.xml) для развертывания приложения на веб-сервере. Servlet API 3.0 ввел новый пакет javax.servlet.annotation. Он предоставляет типы аннотаций, которые могут быть использованы для аннотации Servlet классов. Если используются аннотации, то не требуется файл описания部署а (web.xml). Но вы должны использовать tomcat7 или любую более высокую версию tomcat.
Аннотации могут заменить эквивалентные XML-конфигурации в файле web.xml, такие как объявления servlet и маппинг servlet. Servlet контейнер будет обрабатывать классы с аннотациями во время развертывания.
Типы аннотаций, введенные в Servlet 3.0:
Sr.No. | Аннотации и описание |
---|---|
1 | @WebServlet Объявление servlet |
2 | @WebInitParam Определение параметров инициализации |
3 | @WebFilter Объявление servlet фильтра |
4 | @WebListener Объявление WebListener |
5 | @HandlesTypes Объявление класса, который может обрабатывать ServletContainerInitializer. |
6 | @HttpConstraint Эта аннотация используется в аннотации ServletSecurity для обозначения безопасности всех HTTP-методов, для которых в ServletSecurity нет соответствующего элемента HttpMethodConstraint. |
7 | @HttpMethodConstraint Эта аннотация используется в аннотации ServletSecurity для обозначения безопасности конкретных HTTP-сообщений. |
8 | @MultipartConfig Эта аннотация может быть указана на Servlet классе, которая означает, что экземпляр Servlet ожидает запросы, соответствующие MIME типу multipart/form-data. |
9 | @ServletSecurity Эта аннотация используется для Servlet реализующего класс, чтобы определить безопасность, которуюServlet контейнер применяет к сообщениям HTTP протокола. |
Мы уже подробно обсудили некоторые аннотации.
@WebServlet используется для объявления конфигурации Servlet, который имеет контейнер. В таблице приведен список свойств, используемых для аннотации WebServlet.
Sr.No. | Атрибуты и описание |
---|---|
1 | String name Имя Servlet |
2 | String[] value Массив шаблонов URL |
3 | String[] urlPatterns Массив шаблонов URL для этого фильтра |
4 | Int loadOnStartup Целочисленное значение указывает на提示 сортировки запуска |
5 | WebInitParam[] initParams Инициализация массива параметров Servlet |
6 | Boolean asyncSupported Асинхронные операции поддерживаемые Servlet |
7 | String smallIcon Маленький значок Servlet, если он есть |
8 | String largeIcon Большой значок Servlet, если он есть |
9 | String description Описание Servlet, если оно существует |
10 | String displayName Отображает имя этого Servlet (если оно существует) |
Необходимо указать至少 один URL-модели в свойстве value или urlPattern аннотации, но не одновременно оба этих свойства.
Когда нужно установить только один атрибут URL-модели, рекомендуется использовать атрибут value, в противном случае следует использовать атрибут urlPattern.
Ниже приведен пример того, как использовать аннотацию @WebServlet. Это простой servlet, который отображает текст Hello servlet.
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(value = "/Simple") public class Simple extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h3>Hello Servlet</h3>"); out.print("</body></html>"); } }
Компилируйте Simple.java обычным способом и поместите файлы класса в <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Теперь попробуйте запустить любое servlet, используя http://localhost:8080/Simple. Вы увидите следующий вывод на веб-странице.
Hello servlet
@WebInitParam аннотация используется для указания инициализационных параметров Servlet или фильтра. Она используется в аннотациях WebFilter или webevlet. В таблице приведен список свойств, используемых для аннотации WebInitParam.
Sr.No. | Атрибуты и описание |
---|---|
1 | String name Имя инициализационного параметра |
2 | String value Значение инициализационных параметров |
3 | String description Описание инициализационных параметров |
@WebInitParam аннотация используется для указания инициализационных параметров Servlet или фильтра. Она используется в аннотациях WebFilter или webevlet. В таблице приведен список свойств, используемых для аннотации WebInitParam.
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(value = "/Simple", initParams = { @WebInitParam(name = "foo", value = "Hello "), @WebInitParam(name = "bar", value = " World!") } public class Simple extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h3>Hello Servlet</h3>"); out.println(getInitParameter("foo")); out.println(getInitParameter("bar")); out.print("</body></html>"); } }
Компилируйте Simple.java обычным способом и поместите файлы класса в <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Теперь попробуйте запустить любое servlet, используя http://localhost:8080/Simple. Вы увидите следующий вывод на веб-странице.
Привет, Servlet Привет, мир!
Это аннотация для объявления фильтра сервлета. Она обрабатывается контейнером во время развертывания и применяет соответствующий фильтр к указанным URL-моделям, сервлетам и типам диспетчера.
@WebFilter аннотация определяет фильтры веб-приложения. Эта аннотация указывается на классе и содержит метаданные о декларированном фильтре. Фильтр с аннотацией должен определить至少 один URL-маску. В таблице приведены свойства, используемые для аннотации WebFilter.
Sr.No. | Атрибуты и описание |
---|---|
1 | String filterName имя фильтра |
2 | String[] urlPatterns Предоставление значений фильтра приложения или массива urlPatterns |
3 | DispatcherType[] dispatcherTypes тип调度щика (запрос/ответ), к которому применяется фильтр |
4 | String[] servletNames массив, предоставляющий имена сервлетов |
5 | String displayName имя фильтра |
6 | String description описание фильтра |
7 | WebInitParam[] initParams инициализационные массивные параметры этого фильтра |
8 | Boolean asyncSupported асинхронные операции, поддерживаемые фильтром |
9 | String smallIcon маленький значок фильтра (если он есть) |
10 | String largeIcon большой значок фильтра (если он есть) |
Ниже приведен пример использования аннотации @WebFilter. Это простый LogFilter, который выводит Init в консоли param test значение param и текущий таймстмп. Это означает, что работа фильтра аналогична интерфейсному слою между запросом и ответом. Здесь мы используем "/*" для обозначения urlPattern. Это означает, что этот фильтр применяется ко всем сервлетам.
import java.io.IOException; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import javax.servlet.*; import java.util.*; // реализация класса фильтра @WebFilter(urlPatterns = {"/*"}, initParams = { @WebInitParam(name = "test-param", value = "Параметр Инициализации")} public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException { // получение инициализационных параметров String testParam = config.getInitParameter("test-param"); // печать init параметра System.out.println("Тест Параметр: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Запишите текущий таймстамп. System.out.println("Время " + new Date().toString()); // Передайте запрос обратно в цепочку фильтров chain.doFilter(request, response); } public void destroy() { /* Вызов перед удалением экземпляра фильтра Сервисы, предоставляемые веб-контейнером*/ } }
Компилируйте Simple.java обычным способом и поместите файлы класса в <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Теперь попробуйте запустить любое servlet, используя http://localhost:8080/Simple. Вы увидите следующий вывод на веб-странице.
Привет, Servlet Привет, мир!
Теперь откройте консоль servlet. Там вы найдете значения инициализационных параметров testparam и текущий таймстамп вместе с уведомительными сообщениями servlet.