Reescritura de URL usando Java Servlet

La reescritura de URL es un proceso de agregar o modificar cualquier estructura de URL mientras se carga una página.

La solicitud realizada por el cliente es siempre una nueva solicitud y el servidor no puede identificar si la solicitud actual es enviada por un nuevo cliente o por el mismo cliente anterior. Debido a esta propiedad del protocolo HTTP y los servidores web se denominan sin estado. Pero muchas veces debemos saber quién es el cliente en la solicitud de procesamiento.
Por ejemplo:
en cualquier sitio de redes sociales durante el inicio de sesión hasta el cierre de sesión, el servidor debe saber quién es el cliente para que el servidor pueda administrar todas las requests de acuerdo con las necesidades del usuario.
Este problema lo resuelve Session en Servlet.

Sesión: la sesión es un estado entre el cliente y el servidor y contiene múltiples requests y respuestas entre el cliente y el servidor. Como sabemos que HTTP y el servidor web no tienen estado, la única forma de mantener una sesión es cuando se pasa información única sobre la sesión (id de sesión) entre el servidor y el cliente en cada solicitud y respuesta.

Las siguientes son algunas formas en que podemos proporcionar una identificación única en la solicitud y la respuesta:

  • Interfaz de sesión en Servlet
  • Gestión de cookies
  • Reescritura de URL
  • Reescritura de URL

    Si su navegador no admite cookies, la reescritura de URL le brinda otra alternativa de seguimiento de sesión. La reescritura de URL es un método en el que la URL solicitada se modifica para incluir una ID de sesión. Hay varias formas de realizar la reescritura de URL.
    Aquí estamos discutiendo la técnica de gestión de sesiones en la que pasamos el control de un servlet a otro. La sintaxis para pasar el control de un servlet a otro es la siguiente

    // SecondServlet is the name of the servlet where you want to pass control
    out.print("<a href='SecondServlet?uname=" + n + "'>visit</a>");
    

    Nota: Generalmente escribimos un archivo web.xml para el despachador de requests, pero en este ejemplo usamos anotaciones, por lo que no es necesario crear un archivo web.xml.

    La sintaxis de la anotación es:

    @WebServlet("/ServletName") // at the place of ServletName 
    we have to write the name of our servlet file and this annotation 
    should be written at the starting of class in servlet.
    

    Ejemplo de seguimiento de sesión usando reescritura de URL usando anotación

    <!-- Save this file as Index.html -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <form action="FirstServlet" method="get">  
    Name:<input type="text" name="userName"/><br/>  
    <input type="submit" value="submit"/>  
    </form>  
    </body>
    </html>
    

    // Name this file as FirstServlet.java
    package GeeksforGeeks;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    @WebServlet("/FirstServlet") // annotation
      
    // this annotation is used for replacing xml file
    public class FirstServlet extends HttpServlet {
      
        // class name is FirstServlet which extends HttpServlet
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        {
            try {
                response.setContentType("text/html");
               /* The response's character encoding is only set 
    from the given content type if this method 
    is called before getWriter is called. 
    This method may be called repeatedly to 
    change content type and character encoding.*/
                PrintWriter out = response.getWriter();
      
      
                /*T he Java PrintWriter class ( java.io.PrintWriter ) enables you to 
              write formatted data to an underlying Writer . 
             For instance, writing int, long and other primitive data
              formatted as text, rather than as their byte values*/
                String n = request.getParameter("userName");
                 
    //request.getParameter takes the value from index.html file
      // where name is username
                out.print("Welcome " + n);
      
    // out.println is used to print on the client web browser
      
     //url rewriting is used for creating session 
    //       it will redirect  you to SecondServlet page
                out.print("<a href='SecondServlet?uname=" + n + "'>visit</a>");
      
                out.close();
            }
            catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    

    // Name this file as SecondServlet.java
    package GeeksforGeeks;
      
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
      
    @WebServlet("/SecondServlet") // annotation
    public class SecondServlet extends HttpServlet {
      
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        {
            try {
      
                response.setContentType("text/html");
                /*
                 * The response's character encoding is only set from the given
                 * content type if this method is called before getWriter is called.
                 * This method may be called repeatedly to change content type and
                 * character encoding.
                 */
                PrintWriter out = response.getWriter();
                /*
                 * The Java PrintWriter class ( java.io.PrintWriter ) enables you to
                 * write formatted data to an underlying Writer . For instance,
                 * writing int, long and other primitive data formatted as text,
                 * rather than as their byte values
                 */
                // getting value from the query string
                String n = request.getParameter("uname");
                out.print("Hello " + n);
                /* out.println is used to print on the client web browser */
                out.close();
            }
            catch (Exception e) {
                System.out.println(e);
            }
        }
    }
    


    Program flow

    Explicación (siga el diagrama)
    Cuando implementa su proyecto en eclipse, la primera página que se carga en el formulario HTML cuya acción de formulario es el primer servlet, por lo que el control irá a servlet1. En este caso, llamamos servlet1 como FirstServlet donde se imprime el nombre de usuario. En FirstServlet proporcionamos url donde transferimos el control a servlet2 usando la reescritura de url. En nuestro caso llamamos servlet2 como SecondServlet.
    Ventaja de la reescritura de URL:

    • No depende de las cookies y funcionará ya sea que las cookies estén habilitadas o deshabilitadas.
    • No se requiere el envío de formularios adicionales en todas las páginas

    Desventaja de la reescritura de URL
    Funcionará solo con enlaces y el anuncio solo puede enviar texto

    Publicación traducida automáticamente

    Artículo escrito por GeeksforGeeks-1 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 *