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 @WebServletmuchos 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 valuey urlPatternsson atributos intercambiables. Ambos le permiten especificar una lista de direcciones URL a las que debe asignarse el servlet.

En segundo lugar, el parámetro asyncSupportedindica 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.