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

До сих пор вы узнали, как Servlet использует дескриптор развертывания (файл 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

@WebServlet используется для объявления конфигурации сервлета с контейнером. В следующей таблице содержится список атрибутов, используемых для аннотации WebServlet.

Sr. No. Атрибут и описание
1

String name

Имя сервлета

2

String[] value

Массив шаблонов URL

3

String[] urlPatterns

Массив шаблонов URL, к которым применяется этот фильтр

4

Int loadOnStartup

Целочисленное значение дает подсказку для порядка запуска.

5

WebInitParam[] initParams

Массив параметров инициализации для этого сервлета

6

Boolean asyncSupported

Асинхронная операция, поддерживаемая этим сервлетом

7

String smallIcon

Маленькая иконка для этого сервлета, если есть

8

String largeIcon

Большой значок для этого сервлета, если он есть

9

String description

Описание этого сервлета, если есть

10

String 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> / webapps / ROOT / WEB-INF / classes.

Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.

Hello servlet

@WebInitParam

Аннотация @WebInitParam используется для указания параметра инициализации для сервлета или фильтра. Он используется в аннотациях WebFilter или WebSevlet. В следующей таблице содержится список атрибутов, используемых для аннотации WebInitParam.

Sr. No. Атрибут и описание
1

String name

Имя параметра инициализации

2

String value

Значение параметра инициализации

3

String description

Описание параметра инициализации

пример

В следующем примере показано, как использовать аннотацию @WeInitParam вместе с аннотацией @WebServlet. Это простой сервлет, отображающий текстHello Servlet и строковое значение Hello World! которые взяты из init параметры.

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>; / webapps / ROOT / WEB-INF / classes.

Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.

Hello Servlet

Hello World!

@Webfilter

Это аннотация, используемая для объявления фильтра сервлета. Он обрабатывается контейнером во время развертывания, и соответствующий фильтр применяется к указанным шаблонам 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.*;  

// 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> / webapps / ROOT / WEB-INF / classes.

Теперь попробуйте вызвать любой сервлет, просто запустив http: // localhost: 8080 / Simple . Вы увидите следующий вывод на веб-странице.

Hello Servlet
  
Hello World!

Теперь откройте консоль сервлета. Там вы найдете значениеinit параметр testparam и current timestamp вместе с сообщениями уведомления сервлета.