8.1 Introducción a las anotaciones de servlet
A partir de la versión 7, Tomcat comenzó a admitir la especificación de servlet web Servlet API 3.0 . En particular, apareció un paquete llamado javax.servlet.annotation
. Contiene varios tipos de anotaciones que se pueden utilizar para anotar una clase de servlet. Si usa una anotación, no se requiere el descriptor de implementación (web.xml).
Lista de las anotaciones más útiles:
anotación | Descripción | |
---|---|---|
1 | @WebServlet |
Declara un servlet |
2 | @WebInitParam |
Especifica un parámetro de inicialización. |
3 | @WebFilter |
Declara un filtro web |
4 | @WebListener |
declara el oyente web |
5 | @ServletSecurity |
Le permite configurar los ajustes de seguridad |
Ejemplo:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
Una anotación es suficiente para declarar un servlet y mapearlo para atender todas las solicitudes que llegarán a la URL dada por el /api/*
.
8.2 Configuración de la asignación de servlets
La anotación tiene @WebServlet
muchos parámetros que permiten una configuración muy flexible del servlet que describe. Echemos un vistazo a los principales:
Atributo | Descripción | |
---|---|---|
1 | name |
Nombre exclusivo del servlet (como en web.xml) |
2 | displayName |
Nombre de servlet legible por humanos |
3 | description |
Descripción del servlet |
4 | value |
Establece la URL para el mapeo |
5 | urlPatterns |
Especifica una lista de URL para mapear (usado en lugar de valor) |
6 | initParams |
Le permite establecer los parámetros de inicio del servlet |
7 | asyncSupported |
Especifica que el servlet puede ejecutarse de forma asíncrona (HTTP/2) |
8 | loadOnStartup |
Número de secuencia para controlar la prioridad de inicio del servlet |
9 | smallIcon |
Establece un pequeño icono de servlet |
10 | largeIcon |
Establece un icono de servlet grande |
Hay varios puntos interesantes aquí.
Primero, tenga en cuenta que value
y urlPatterns
son atributos intercambiables. Ambos le permiten especificar una lista de direcciones URL a las que debe asignarse el servlet.
En segundo lugar, el parámetro asyncSupported
indica si el servlet procesará correctamente las solicitudes asíncronas sobre el protocolo HTTP/2.
Y el tercer atributo importante es initParams
, le permite establecer una lista de parámetros que se colocarán en el ServletContext.
Ejemplo:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 Configuración del mapeo de filtros
Como se mencionó anteriormente, los filtros son un tipo de utilidad de los servlets y se configuran como servlets. Estos son los atributos que tiene una anotación @WebFilter
:
Atributo | Descripción | |
---|---|---|
1 | filterName |
Filtrar nombre único (como en web.xml) |
2 | displayName |
Nombre de filtro legible por humanos |
3 | description |
Descripción del filtro |
4 | value / urlPatterns |
Establece una lista de URL para mapear |
5 | dispatcherTypes |
Especifica una lista de DispatcherTypes |
6 | servletNames |
Especifica una lista de servlets para aplicar a |
7 | initParams |
Le permite establecer los parámetros de inicio del filtro. |
8 | asyncSupported |
Especifica que el filtro puede ejecutarse de forma asíncrona (HTTP/2) |
9 | smallIcon |
Establece un pequeño icono de filtro |
10 | largeIcon |
Establece un icono de filtro grande |
Un ejemplo de un filtro que intercepta todas las solicitudes a servlets específicos :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Un ejemplo de un filtro dado múltiples parámetros :
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
Un ejemplo de un filtro de tipos dados para RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Aprenderá más sobre el propósito de los filtros y servlets en las siguientes lecciones.