Учебники

Сервлеты — Аннотации

Итак, вы узнали, как сервлет использует дескриптор развертывания (файл 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 и текущую временную метку вместе с уведомлениями сервлета.