Servlet – String de filtros

Un filtro es un objeto que se utiliza en las etapas previa y posterior al procesamiento de una solicitud. La conversión, el registro, la compresión, el cifrado y descifrado, la validación de entrada y otras operaciones de filtrado se realizan comúnmente con él.

String de filtros de servlet

Aprenderemos cómo correlacionar una string de filtros con un recurso web en esta lección. Se puede utilizar un Servlet, JSP o una página HTML estática como recurso web. Podemos realizar numerosas operaciones dentro de una aplicación web utilizando la función de filtro, como la validación de sesión, la autenticación y verificación de usuarios, el bloqueo del acceso a un determinado recurso en línea, etc. Al implementar la interfaz Filter, podemos construir varias clases Filter. Cuando un usuario realiza una solicitud a un recurso web después de asociarle varias clases de filtro, las clases de filtro asociadas se ejecutan antes y después de que se procese el recurso web solicitado por el usuario, lo que proporciona un filtro a la solicitud y respuesta del usuario. Varios filtros asociados con un recurso web se realizan en el orden proporcionado en la etiqueta filter-mapping> (web.xml) del archivo descriptor de implementación.

Uso de métodos para la interfaz de la string de filtros: 

Para desarrollar una clase de filtro, debemos implementar las tres interfaces javax.servlet.Filter para el filtrado.

  1. void doInit(FilterConfig config) – El filtro se inicializa con este método.
  2. void doFilter(ServletRequest request, ServletResponse, response, FilterChain chain): cuando un cliente solicita un recurso web, como un Servlet o una página JSP, el contenedor web llama a esta función.
  3. void destroy(): el objeto Filter se destruye mediante este procedimiento. 

Proyecto de ejemplo

Estamos creando una página web que le pide al usuario que ingrese su nombre y luego haga clic en el botón Enviar, que llamará a un Servlet. Sin embargo, antes de que se ejecute este servlet, se ejecutarán dos filtros conectados con él en la secuencia proporcionada en la etiqueta <filter-mapping> del archivo descriptor de implementación (web.xml).

Estructura del proyecto:

índice.html

HTML

<html>
<head>
<title> Gfg Filter demo</title>
</head>
  
<body>
  <b>Enter your name :</b>
  <br/>
  
  <form action ="GfgServlet">
  Name : <input type = "text"  name = "name" />
  <input type = "submit"  name = "submit" />
  </form>
  
</body>
</html>

Crear filtro:

A continuación, implementaremos la interfaz Filter y sus tres métodos:

  • init(FiltroConfig)
  • doFilter(ServletRequest, ServletResponse, FilterChain)
  • destruir()

También debemos invocar la función doFilter(ServletRequest, ServletResponse, FilterChain) de la interfaz FilterChain desde dentro del método doFilter(ServletRequest, ServletResponse, FilterChain). Cualquier filtro adicional vinculado al servlet se llama cuando se llama a la función doFilter (solicitud, respuesta). El Servlet solicitado finalmente se ejecuta si no hay más Filtros asociados con el Servlet. El método doFilter(request,response) regresa después de que el servlet haya completado su ejecución, lo que le permite manejar la salida del servlet en el objeto de respuesta.

GfgFilter1.java

Java

import java.io.*;
import javax.servlet.*;
  
public class GfgFilter1 implements Filter {
    public void init(FilterConfig filterConfig) {}
  
    public void destroy() {}
    // This method is called each time a client requests for
    // a web resource
    // which could be a Servlet or a JSP page i.e.
    // preprocessing request
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
        throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
  
        out.println(
            "<b> Filter1 is Filtering the request : </b>");
        out.println("Hello " + request.getParameter("name")
                    + "!");
  
        out.println("<br/>");
        out.println("<br/>");
        out.println("<br/>");
  
        // Calling  doFilter() calls the next filter in the
        // chain will execute or if there is no filter then
        // the requested web resource is executed.
        chain.doFilter(request, response);
  
        out.println("<br/>");
        out.println("<br/>");
        out.println("<br/>");
  
        // post-processing the request and after the
        // requested web resource is called.
        out.println(
            "<b> Filter2 is Filtering the response : </b>");
        out.println("Bye " + request.getParameter("name")
                    + "!");
    }
}

GfgFilter2.java

Java

import java.io.*;
import javax.servlet.*;
  
public class GfgFilter2 implements Filter {
    public void init(FilterConfig filterConfig) {}
  
    public void destroy() {}
    // This method is called each time a client requests for
    // a web resource
    // which could be a Servlet or a JSP page i.e.
    // preprocessing request
    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain chain)
        throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
  
        out.println(
            "<b> Filter2 is Filtering the request : </b>");
        out.println("Hello " + request.getParameter("name")
                    + "!");
  
        out.println("<br/>");
        out.println("<br/>");
        out.println("<br/>");
  
        // Calling  doFilter() calls the next filter in the
        // chain will execute or if there is no filter then
        // the requested web resource is executed.
        chain.doFilter(request, response);
  
        out.println("<br/>");
        out.println("<br/>");
        out.println("<br/>");
  
        // post-processing the request and after the
        // requested web resource is called.
        out.println(
            "<b> Filter1 is Filtering the response : </b>");
        out.println("Bye " + request.getParameter("name")
                    + "!");
    }
}

GfgServlet.java es una clase de servlet que se ejecuta después de que los filtros que lo acompañan hayan terminado de ejecutarse.

GfgServlet.java

Java

import java.io.*;
import javax.servlet.*;
public class GfgServlet extends GenericServlet {
    public void service(ServletRequest request,
                        ServletResponse response)
        throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("GeekssForGeeks servlet is executed.");
    }
}

web.xml

Cada aplicación web basada en servlet debe contener un archivo descriptor de implementación (un archivo XML) llamado web.xml, de acuerdo con los requisitos de Java Servlet.

XML

<web-app>
  <display-name>GeeksForGeeks FilterChain</display-name>
    
<filter>
     <filter-name>Filter1</filter-name>
    <filter-class>GfgFilter1</filter-class>
</filter>
  
<filter>
     <filter-name>Filter2</filter-name>
    <filter-class>GfgFilter2</filter-class>
</filter>
  
<filter-mapping>
    <filter-name>Filter1</filter-name>
    <url-pattern>/GfgServlet</url-pattern>
</filter-mapping>
  
<filter-mapping>
    <filter-name>Filter2</filter-name>
    <url-pattern>/GfgServlet</url-pattern>
</filter-mapping>
  
<servlet>
     <servlet-name>Servlet</servlet-name>
    <servlet-class>GfgServlet</servlet-class>
</servlet>
  
<servlet-mapping>
    <servlet-name>Servlet</servlet-name>
    <url-pattern>/GfgServlet</url-pattern>
</servlet-mapping>
  
</web-app>

Producción:

Ejecute el archivo index.html en el servidor y obtendrá el siguiente resultado.

Output

Haga clic en el botón enviar y se mostrará la siguiente salida de pantalla.

Output

Publicación traducida automáticamente

Artículo escrito por dikshanandre2403 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *