Filtro de servlets
El filtro de servlets proporciona un nuevo tipo de objeto denominado filtro que permite transformar una solicitud o modificar una respuesta.
Puede encadenar filtros de modo que un grupo de filtros pueda actuar en la entrada y salida de un recurso o grupo de recursos especificado.
Los filtros son normalmente filtros de registro, filtros de conversión de imágenes y filtros de tipo MIME (Multipurpose Internet Mail Extensions, funcionalmente equivalentes al encadenamiento de servlets). Aunque los filtros no son servlets, su ciclo de vida es muy similar.
Los filtros se manejan de la siguiente manera:
- El contenedor web determina si se ha de crear una FilterChain que contenga LoggingFilter para el recurso
solicitado.
FilterChain comienza invocando LoggingFilter y termina invocando el recurso solicitado.
- Si se han de poner otros filtros en la cadena, el contenedor web los coloca después de theLoggingFilter y antes del recurso solicitado.
- A continuación, el contenedor web crea una instancia e inicializa LoggingFilter (si no lo ha hecho anteriormente) e invoca su método doFilter(FilterConfig) para iniciar la cadena.
- LoggingFilter procesa previamente los objetos de solicitud y
respuesta y, a continuación, invoca el método de cadena de filtros
doFilter(ServletRequest, ServletResponse).
Este método pasa el proceso al siguiente recurso de la cadena, el recurso solicitado.
- Una vez devuelto el método de la cadena de filtros doFilter(ServletRequest, ServletResponse), LoggingFilter efectúa el proceso previo del objeto de solicitud y respuesta antes de devolver la respuesta al cliente.
Java™ Servlet Specification 2.4 le permite definir un nuevo elemento <dispatcher> en el descriptor de despliegue con valores posibles tales como REQUEST, FORWARD, INCLUDE y ERROR, en lugar de invocar filtros con RequestDispatcher.
Java Servlet Specification 3.0 le permite definir un nuevo elemento <dispatcher> en el descriptor de despliegue con valores posibles tales como ASYNC, REQUEST, FORWARD, INCLUDE y ERROR, en lugar de invocar filtros con RequestDispatcher.
<filter-mapping>
<filter-name>Logging Filter</filter-name>
<url-pattern>/products/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
Indica que el filtro se debe aplicar a las solicitudes directamente desde el cliente y las solicitudes de envío. La adición de los valores INCLUDE y ERROR también indica que el filtro se debe aplicar adicionalmente para las solicitudes incluidas y las solicitudes <error-page>. Si no especifica ningún elemento <dispatcher>, el valor predeterminado es REQUEST.
Clases de Filtro, FilterChain, FilterConfig para el filtrado de servlets
Como parte del paquete javax.servlet se definen las interfaces siguientes:
- Interfaz de filtros - métodos: doFilter, getFilterConfig, setFilterConfig
- Interfaz FilterChain - métodos: doFilter
- Interfaz FilterConfig - métodos: getFilterName, getInitParameter, getInitParameterNames, getServletContext
Como parte del paquete javax.servlet.http se definen las clases siguientes:
- HttpServletRequestWrapper - métodos: consulte la especificación de servlet 2.4
- HttpServletResponseWrapper - métodos: consulte la especificación de servlet 2.4