La interfaz HttpSession en Servlet

¿Qué es una sesión?

En terminología web, una sesión es simplemente el intervalo de tiempo limitado en el que dos sistemas se comunican entre sí. Los dos sistemas pueden compartir una relación cliente-servidor o de igual a igual. Sin embargo, en el protocolo Http no se mantiene el estado de la comunicación. Por lo tanto, las aplicaciones web que funcionan con el protocolo http utilizan varias tecnologías diferentes que comprenden el Seguimiento de sesión , lo que significa mantener el estado (datos) del usuario para reconocerlo.

Para lograr el seguimiento de la sesión en los servlets, las cookies han sido una de las tecnologías más utilizadas. Sin embargo, tienen las siguientes desventajas:

  • Sólo pueden conservar información textual.
  • Dependen del navegador. Por lo tanto, si el cliente los deshabilita, su aplicación web no podrá usarlos.
  • La cookie individual no puede contener más de 4kb de información

Cómo crear sesiones con una identificación de sesión única para cada usuario en el servlet de Java

Para esto, los servlets proporcionan una interfaz llamada ‘HttpSession’ Interface . El siguiente diagrama explica cómo funcionan las sesiones Http en los servlets:

Métodos en la interfaz HttpSession

Método Descripción
HttpSession pública getSession() Obtiene el objeto HttpSession. Si la solicitud no tiene una sesión asociada, se crea una nueva sesión
HttpSession pública getSession (creación booleana) Obtiene la sesión asociada a la solicitud. Si aún no está presente, se crea uno nuevo en función del valor del argumento booleano que se le pasó
string pública getId() Devuelve la identificación de sesión única
getCreationTime público largo() Devuelve la hora en que se creó esta sesión, medida en milisegundos desde la medianoche del 1 de enero de 1970 GMT.
getLastAccessedTime público largo() Devuelve la hora en que se accedió por última vez a esta sesión, medida en milisegundos desde la medianoche del 1 de enero de 1970 GMT.
getLastAccessedTime público largo() Devuelve la hora en que se accedió por última vez a esta sesión, medida en milisegundos desde la medianoche del 1 de enero de 1970 GMT.
nulidad pública invalidar() Invalida la sesión

Ventajas de las sesiones Http en Servlet

  • Cualquier tipo de objeto se puede almacenar en una sesión, ya sea un texto, una base de datos, un conjunto de datos, etc.
  • El uso de las sesiones no depende del navegador del cliente.
  • Las sesiones son seguras y transparentes.

Desventajas de la sesión Http

  • Sobrecarga de rendimiento debido a que el objeto de la sesión se almacena en el servidor
  • Sobrecarga debido a la serialización y deserialización de datos

Ejemplo de seguimiento de sesión utilizando la interfaz HttpServlet: En el siguiente ejemplo, los métodos setAttribute() y getAttribute() de la clase HttpServlet se utilizan para crear un atributo en el ámbito de la sesión de un servlet y obtener ese atributo del ámbito de la sesión de otro servlet.

  • índice.html

    <html>
    <head>
    <body>
    <form action="servlet1">  
    Name:<input type="text" name="userName"/><br/>  
    <input type="submit" value="submit"/>  
    </form>  
    </body>
    </html>
  • Primero.java

    // The first servlet
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
      
    < div class
    = "noIdeBtnDiv" > public class First extends HttpServlet {
      
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        {
            try { /*Declaration of the get method*/
      
                response.setContentType("text/html"); // Setting the content type to text
                PrintWriter out = response.getWriter();
      
                String n = request.getParameter("userName"); /*Fetching the contents of
                                                     the userName field from the form*/
                out.print("Welcome " + n); // Printing the username
      
                HttpSession session = request.getSession(); /* Creating a new session*/
      
                session.setAttribute("uname", n);
                /*Setting a variable uname
                                     containing the value as the fetched 
                                     username as an attribute of the session
                                     which will be shared among different servlets
                                     of the application*/
      
                out.print("<a href='servlet2'>visit</a>"); // Link to the second servlet
      
                out.close();
            }
            catch (Exception e) {
                System.out.println(e);
            }
        }
    }
  • Segundo.java

    // The second servlet
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
      
    public class SecondServlet extends HttpServlet {
      
        public void doGet(HttpServletRequest request, HttpServletResponse response) try {
            /*Declaration of the get method*/
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
      
            HttpSession session = request.getSession(false);
            /*Resuming the session created 
                                            in the previous servlet using 
                                            the same method that was used
                                            to create the session. 
                                            The boolean parameter 'false'
                                            has been passed so that a new session
                                            is not created since the session already
                                            exists*/
      
            String n = (String)session.getAttribute("uname");
            out.print("Hello " + n);
      
            out.close();
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
    }
  • web.xml

    <web-app>  
        
    <servlet>  
    <servlet-name>s1</servlet-name>  
    <servlet-class>First</servlet-class>  
    </servlet>  
        
    <servlet-mapping>  
    <servlet-name>s1</servlet-name>  
    <url-pattern>/servlet1</url-pattern>  
    </servlet-mapping>  
        
    <servlet>  
    <servlet-name>s2</servlet-name>  
    <servlet-class>Second</servlet-class>  
    </servlet>  
        
    <servlet-mapping>  
    <servlet-name>s2</servlet-name>  
    <url-pattern>/servlet2</url-pattern>  
    </servlet-mapping>  
        
    </web-app>  

Producción:

  • índice.html:

  • Servlet1:

  • Servlet2:

Publicación traducida automáticamente

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