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.