¿Cómo puedo guardar un objeto en la sesión? y ¿Cómo utilizarlo en un JSP? Servlet Web

publicado por: Anonymous

Tengo este Servlet en el cual voy a recibir el nombre y la contraseña del objeto request para posteriormente validar si existe en la base de datos y consultar su nombre completo. Pero una vez creado el objeto de tipo UsuarioDTO no sé cómo guardarlo en la sesión para mostrar la propiedad nombreCompleto en varios JSP:

@WebServlet("/One")
public class One extends HttpServlet {

    protected void doGet(HttpServletRequest request, 
    HttpServletResponse response) throws ServletException, IOException {
        /* Se crea el usuario */
        UsuarioDTO usuario = new UsuarioDTO();
        usuario.setIdUsuario(1);
        usuario.setNombre("jperez");
        usuario.setNombreCompleto("Juan Pérez López");

        //Aquí necesito meter el usuario a la sesión antes de que se
        //vaya a la página principal

        response.sendRedirect(request.getContextPath() + "/principal.jsp");
    }
}

Este es el DTO:

public class UsuarioDTO {

    private long idUsuario;
    private String nombre;
    private String nombreCompleto;

    public long getIdUsuario() {
        return idUsuario;
    }
    public void setIdUsuario(long idUsuario) {
        this.idUsuario = idUsuario;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getNombreCompleto() {
        return nombreCompleto;
    }   
    public void setNombreCompleto(String nombreCompleto) {
        this.nombreCompleto = nombreCompleto;
    }
}

solución

➊ Primeramente recuperas el objeto HttpSession:

HttpSession session = request.getSession();

Sobre interfaz HttpSession, Arun Gupta1 dice:

La interfaz HttpSession se puede utilizar para ver y manipular información de una sesión tales como el identificador de sesión y la hora de creación, y para vincular objetos a la sesión. […] Los métodos session.setAttribute y session.getAttribute son usados para enlazar/ligar los objetos a la sesión.

➋ Luego asigna tu objeto con un nombre como un atributo en la sesión. Es decir, por ejemplo:

session.setAttribute("usr", usuario);

En tu código:

/* Se crea el usuario */
UsuarioDTO usuario = new UsuarioDTO();
usuario.setIdUsuario(1);
usuario.setNombre("jperez");
usuario.setNombreCompleto("Juan Pérez López");

HttpSession session = request.getSession();
session.setAttribute("usr", usuario);

response.sendRedirect(request.getContextPath() + "/principal.jsp");

➌ Y en tu JSP (principal.jsp) puedes utilizar Expression Language (EL) para mostrar los datos. Esto es, por ejemplo:

<p>Id Usuario: <strong>${usr.idUsuario}</strong></p>
<p>Nombre: <strong>${usr.nombre}</strong></p>
<p>NombreCompleto: <strong>${usr.nombreCompleto}</strong></p>

Addendum

Debido a que utilizas el método response.sendRedirect, el navegador tiene que hacer otra petición al servidor para mostrar el JSP correspondiente (la URL en el navegador cambia), por lo que necesitas tener el objeto en la sesión, es decir, en el objeto session.

No obstante, si utilizaras el método request.getRequestDispatcher, sólo necesitarías tener el objeto en la petición actual, es decir, en el objeto request. Y el navegador no necesitaría hacer otra petición (en este caso, la URL del navegador sigue siendo la misma).


Notas

  1. Gupta, Arun. Java EE 7 essentials. Sebastopol, CA: O’Reilly Media, 2013.
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *