English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Аннотации Servlet

До сих пор вы узнали, как 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

@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

@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
Привет, мир!

@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.*;  
// реализация класса фильтра
@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.