Servlets: anotaciones

Hasta ahora, ha aprendido cómo Servlet usa el descriptor de implementación (archivo web.xml) para implementar su aplicación en un servidor web. Servlet API 3.0 ha introducido un nuevo paquete llamado javax.servlet.annotation. Proporciona tipos de anotaciones que se pueden utilizar para anotar una clase de servlet. Si usa la anotación, el descriptor de implementación (web.xml) no es necesario. Pero debería usar tomcat7 o cualquier versión posterior de tomcat.

Las anotaciones pueden reemplazar la configuración XML equivalente en el archivo descriptor de implementación web (web.xml), como la declaración de servlet y la asignación de servlet. Los contenedores de servlet procesarán las clases anotadas en el momento de la implementación.

Los tipos de anotaciones introducidos en Servlet 3.0 son:

No Señor. Anotación y descripción
1

@WebServlet

Declarar un servlet.

2

@WebInitParam

Para especificar un parámetro de inicialización.

3

@WebFilter

Para declarar un filtro de servlet.

4

@WebListener

Para declarar un WebListener

5

@HandlesTypes

Declarar los tipos de clases que puede manejar un ServletContainerInitializer.

6

@HttpConstraint

Esta anotación se utiliza dentro de la anotación ServletSecurity para representar las restricciones de seguridad que se aplicarán a todos los métodos de protocolo HTTP para los que NO se produce un elemento HttpMethodConstraint correspondiente dentro de la anotación ServletSecurity.

7

@HttpMethodConstraint

Esta anotación se utiliza dentro de la anotación ServletSecurity para representar restricciones de seguridad en mensajes de protocolo HTTP específicos.

8

@MultipartConfig

Anotación que se puede especificar en una clase de Servlet, que indica que las instancias del Servlet esperan solicitudes que se ajusten al tipo MIME multipart / form-data.

9

@ServletSecurity

Esta anotación se utiliza en una clase de implementación de Servlet para especificar las restricciones de seguridad que debe imponer un contenedor de Servlet en los mensajes del protocolo HTTP.

Aquí hemos discutido algunas de las anotaciones en detalle.

@WebServlet

El @WebServlet se utiliza para declarar la configuración de un Servlet con un contenedor. La siguiente tabla contiene la lista de atributos utilizados para la anotación de WebServlet.

No Señor. Atributo y descripción
1

String name

Nombre del servlet

2

String[] value

Matriz de patrones de URL

3

String[] urlPatterns

Matriz de patrones de URL a los que se aplica este filtro

4

Int loadOnStartup

El valor entero le da la sugerencia de orden de inicio

5

WebInitParam[] initParams

Matriz de parámetros de inicialización para este servlet

6

Boolean asyncSupported

Operación asíncrona admitida por este servlet

7

String smallIcon

Icono pequeño para este servlet, si está presente

8

String largeIcon

Icono grande para este servlet, si está presente

9

String description

Descripción de este servlet, si está presente

10

String displayName

Nombre para mostrar de este servlet, si está presente

DEBE declararse al menos un patrón de URL en el value o urlPattern atributo de la anotación, pero no ambos.

los value Se recomienda utilizar el atributo cuando el patrón de URL es el único atributo que se establece; de ​​lo contrario, urlPattern debe utilizarse el atributo.

Ejemplo

El siguiente ejemplo describe cómo usar la anotación @WebServlet. Es un servlet simple que muestra el textoHello 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>");         
   }   
}

Compilar Simple.java de la forma habitual y coloque su archivo de clase en <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Ahora intente llamar a cualquier servlet simplemente ejecutando http: // localhost: 8080 / Simple . Verá el siguiente resultado en la página web.

Hello servlet

@WebInitParam

La anotación @WebInitParam se usa para especificar un parámetro de inicialización para un servlet o un filtro. Se utiliza dentro de anotaciones WebFilter o WebSevlet. La siguiente tabla contiene la lista de atributos utilizados para la anotación WebInitParam.

No Señor. Atributo y descripción
1

String name

Nombre del parámetro de inicialización

2

String value

Valor del parámetro de inicialización

3

String description

Descripción del parámetro de inicialización

Ejemplo

El siguiente ejemplo describe cómo usar la anotación @WeInitParam junto con la anotación @WebServlet. Es un servlet simple que muestra el textoHello Servlet y el valor de la cadena Hello World! que se toman de la init parámetros.

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>");         
   }   
}

Compilar Simple.java de la forma habitual y coloque su archivo de clase en <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Ahora intente llamar a cualquier servlet simplemente ejecutando http: // localhost: 8080 / Simple . Verá el siguiente resultado en la página web.

Hello Servlet

Hello World!

@Webfilter

Esta es la anotación que se usa para declarar un filtro de servlet. El contenedor lo procesa en el momento de la implementación y el filtro correspondiente se aplica a los patrones de URL, servlets y tipos de despachador especificados.

los @WebFilteranotación define un filtro en una aplicación web. Esta anotación se especifica en una clase y contiene metadatos sobre el filtro que se declara. El filtro anotado debe especificar al menos un patrón de URL. La siguiente tabla enumera los atributos utilizados para la anotación de WebFilter.

No Señor. Atributo y descripción
1

String filterName

Nombre del filtro

2

String[] urlPatterns

Proporciona una matriz de valores o urlPatterns a los que se aplica el filtro.

3

DispatcherType[] dispatcherTypes

Especifica los tipos de despachador (solicitud / respuesta) a los que se aplica el filtro

4

String[] servletNames

Proporciona una variedad de nombres de servlets.

5

String displayName

Nombre del filtro

6

String description

Descripción del filtro

7

WebInitParam[] initParams

Matriz de parámetros de inicialización para este filtro

8

Boolean asyncSupported

Operación asincrónica admitida por este filtro

9

String smallIcon

Icono pequeño para este filtro, si está presente

10

String largeIcon

Icono grande para este filtro, si está presente

Ejemplo

El siguiente ejemplo describe cómo usar la anotación @WebFilter. Es un LogFilter simple que muestra el valor de Init-paramtest-paramy la marca de tiempo actual en la consola. Eso significa que el filtro funciona como una capa de interfaz entre la solicitud y la respuesta. Aquí usamos "/ *" para urlPattern. Es decir, este filtro es aplicable a todos los servlets.

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*/ 
   } 
}

Compilar Simple.java de la forma habitual y coloque su archivo de clase en <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Ahora intente llamar a cualquier servlet simplemente ejecutando http: // localhost: 8080 / Simple . Verá el siguiente resultado en la página web.

Hello Servlet
  
Hello World!

Ahora, abra la consola del servlet. Allí, encontrará el valor de lainit parámetro testparam y el current timestamp junto con los mensajes de notificación de servlet.