Итак, вы узнали, как сервлет использует дескриптор развертывания (файл web.xml) для развертывания приложения на веб-сервере. Servlet API 3.0 представил новый пакет под названием javax.servlet.annotation. Он предоставляет типы аннотаций, которые можно использовать для аннотирования класса сервлета. Если вы используете аннотацию, то дескриптор развертывания (web.xml) не требуется. Но вы должны использовать tomcat7 или любую более позднюю версию tomcat.
Аннотации могут заменить эквивалентную конфигурацию XML в файле дескриптора веб-развертывания (web.xml), такую как объявление сервлета и отображение сервлета. Контейнеры сервлетов будут обрабатывать аннотированные классы во время развертывания.
Типы аннотаций, представленные в Servlet 3.0:
Sr.No. | Аннотация и описание |
---|---|
1 |
@WebServlet Объявить сервлет. |
2 |
@WebInitParam Чтобы указать параметр инициализации. |
3 |
@WebFilter Чтобы объявить фильтр сервлета. |
4 |
@WebListener Чтобы объявить WebListener |
5 |
@HandlesTypes Чтобы объявить типы классов, которые может обрабатывать ServletContainerInitializer. |
6 |
@HttpConstraint Эта аннотация используется в аннотации ServletSecurity для представления ограничений безопасности, которые должны применяться ко всем методам протокола HTTP, для которых соответствующий элемент HttpMethodConstraint НЕ встречается в аннотации ServletSecurity. |
7 |
@HttpMethodConstraint Эта аннотация используется в аннотации ServletSecurity для представления ограничений безопасности для определенных сообщений протокола HTTP. |
8 |
@MultipartConfig Аннотация, которая может быть указана в классе сервлета, указывая, что экземпляры сервлета ожидают запросы, соответствующие типу MIME multipart / form-data. |
9 |
@ServletSecurity Эта аннотация используется в классе реализации сервлета для указания ограничений безопасности, которые должны применяться контейнером сервлета в сообщениях протокола HTTP. |
@WebServlet
Объявить сервлет.
@WebInitParam
Чтобы указать параметр инициализации.
@WebFilter
Чтобы объявить фильтр сервлета.
@WebListener
Чтобы объявить WebListener
@HandlesTypes
Чтобы объявить типы классов, которые может обрабатывать ServletContainerInitializer.
@HttpConstraint
Эта аннотация используется в аннотации ServletSecurity для представления ограничений безопасности, которые должны применяться ко всем методам протокола HTTP, для которых соответствующий элемент HttpMethodConstraint НЕ встречается в аннотации ServletSecurity.
@HttpMethodConstraint
Эта аннотация используется в аннотации ServletSecurity для представления ограничений безопасности для определенных сообщений протокола HTTP.
@MultipartConfig
Аннотация, которая может быть указана в классе сервлета, указывая, что экземпляры сервлета ожидают запросы, соответствующие типу MIME multipart / form-data.
@ServletSecurity
Эта аннотация используется в классе реализации сервлета для указания ограничений безопасности, которые должны применяться контейнером сервлета в сообщениях протокола HTTP.
Здесь мы обсудили некоторые аннотации в деталях.
@WebServlet
@WebServlet используется для объявления конфигурации сервлета с контейнером. В следующей таблице приведен список атрибутов, используемых для аннотации WebServlet.
Sr.No. | Атрибут и описание |
---|---|
1 |
Имя строки Имя сервлета |
2 |
Строковое значение Массив шаблонов URL |
3 |
String [] urlPatterns Массив шаблонов URL, к которым применяется этот фильтр |
4 |
Int loadOnStartup Целочисленное значение дает подсказку при запуске |
5 |
WebInitParam [] initParams Массив параметров инициализации для этого сервлета |
6 |
Boolean asyncSupported Асинхронная операция, поддерживаемая этим сервлетом |
7 |
Строка smallIcon Маленькая иконка для этого сервлета, если есть |
8 |
Строка LargeIcon Большой значок для этого сервлета, если есть |
9 |
Описание строки Описание этого сервлета, если есть |
10 |
Строка displayName Отображаемое имя этого сервлета, если есть |
Имя строки
Имя сервлета
Строковое значение
Массив шаблонов URL
String [] urlPatterns
Массив шаблонов URL, к которым применяется этот фильтр
Int loadOnStartup
Целочисленное значение дает подсказку при запуске
WebInitParam [] initParams
Массив параметров инициализации для этого сервлета
Boolean asyncSupported
Асинхронная операция, поддерживаемая этим сервлетом
Строка smallIcon
Маленькая иконка для этого сервлета, если есть
Строка LargeIcon
Большой значок для этого сервлета, если есть
Описание строки
Описание этого сервлета, если есть
Строка displayName
Отображаемое имя этого сервлета, если есть
По крайней мере, один шаблон URL ДОЛЖЕН быть объявлен в атрибуте value или urlPattern аннотации, но не в обоих.
Атрибут value рекомендуется использовать, когда шаблон URL является единственным устанавливаемым атрибутом, в противном случае следует использовать атрибут urlPattern .
пример
В следующем примере описано, как использовать аннотацию @WebServlet. Это простой сервлет, который отображает текст 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.
Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.
Hello servlet
@WebInitParam
Аннотация @WebInitParam используется для указания параметра инициализации для сервлета или фильтра. Он используется в аннотациях WebFilter или WebSevlet. Следующая таблица содержит список атрибутов, используемых для аннотации WebInitParam.
Sr.No. | Атрибут и описание |
---|---|
1 |
Имя строки Имя параметра инициализации |
2 |
Строковое значение Значение параметра инициализации |
3 |
Описание строки Описание параметра инициализации |
Имя строки
Имя параметра инициализации
Строковое значение
Значение параметра инициализации
Описание строки
Описание параметра инициализации
пример
В следующем примере описано, как использовать аннотацию @WeInitParam вместе с аннотацией @WebServlet. Это простой сервлет, который отображает текст Hello Servlet и строковое значение Hello World! которые взяты из параметров инициализации .
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.
Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.
Hello Servlet Hello World!
@Webfilter
Это аннотация, используемая для объявления фильтра сервлета. Он обрабатывается контейнером во время развертывания, и соответствующий фильтр применяется к указанным шаблонам URL, сервлетам и типам диспетчера.
Аннотация @WebFilter определяет фильтр в веб-приложении. Эта аннотация указана для класса и содержит метаданные об объявленном фильтре. Аннотированный фильтр должен указывать хотя бы один шаблон URL. В следующей таблице перечислены атрибуты, используемые для аннотации WebFilter.
Sr.No. | Атрибут и описание |
---|---|
1 |
Строка filterName Наименование фильтра |
2 |
String [] urlPatterns Предоставляет массив значений или urlPatterns, к которым применяется фильтр |
3 |
DispatcherType [] dispatcherTypes Указывает типы диспетчера (Запрос / Ответ), к которым применяется фильтр |
4 |
String [] servletNames Предоставляет массив имен сервлетов |
5 |
Строка displayName Наименование фильтра |
6 |
Описание строки Описание фильтра |
7 |
WebInitParam [] initParams Массив параметров инициализации для этого фильтра |
8 |
Boolean asyncSupported Асинхронная операция, поддерживаемая этим фильтром |
9 |
Строка smallIcon Маленькая иконка для этого фильтра, если есть |
10 |
Строка LargeIcon Большой значок для этого фильтра, если присутствует |
Строка filterName
Наименование фильтра
String [] urlPatterns
Предоставляет массив значений или urlPatterns, к которым применяется фильтр
DispatcherType [] dispatcherTypes
Указывает типы диспетчера (Запрос / Ответ), к которым применяется фильтр
String [] servletNames
Предоставляет массив имен сервлетов
Строка displayName
Наименование фильтра
Описание строки
Описание фильтра
WebInitParam [] initParams
Массив параметров инициализации для этого фильтра
Boolean asyncSupported
Асинхронная операция, поддерживаемая этим фильтром
Строка smallIcon
Маленькая иконка для этого фильтра, если есть
Строка 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.*; // Implements Filter class @WebFilter(urlPatterns = {"/*"}, initParams = { @WebInitParam(name = "test-param", value = "Initialization Paramter")}) public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException { // Get init parameter String testParam = config.getInitParameter("test-param"); //Print the init parameter System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Log the current timestamp. System.out.println("Time " + new Date().toString()); // Pass request back down the filter chain chain.doFilter(request,response); } public void destroy( ) { /* Called before the Filter instance is removed from service by the web container*/ } }
Скомпилируйте Simple.java обычным способом и поместите ваш файл классов в <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.
Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.
Hello Servlet Hello World!
Теперь откройте консоль сервлета. Там вы найдете значение параметра initpara testparam и текущую временную метку вместе с уведомлениями сервлета.