Cómo acceder a la session desde un JSP

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Hola Servidor! Esta es mi primera petición. Te paso el parámetro nombre con el value Juan

Ok, pero no voy a recordarte. Lo mejor será que te dé un identificador de sesión. Debes pasármelo cada vez que me hagas una petición. Así sabré que eres tú.

Hola de nuevo!. Esta es mi segunda petición. Te paso el parámetro edad. Mi ID es 38… me recuerdas?

Vamos a ver… 38… oh! Aquí estás! La última vez me dijiste que te llamabas Juan!.

El identificador de sessión es una COOKIE llamada JSESSIONID

Creación de la sesión

La sesión se crea automáticamente al ingresar a la página web, o bien cuando una sesión termine.

Podemos ver el valor de JSESSIONID:
${pageContext.session.id}

Matar una sesión

Configurando un timeout en el web.xml
<web-app ...>
 <servlet>
  ...
 </servlet>
 <session-config>
  <session-timeout>15</session-timeout>
 </session-config>
</web-app>

La sesión será anulada tras 15 minutos de inactividad.

Asignando un timeout desde código java:session.setMaxInactiveInterval(60*20);

Argumento en segundos (en este caso,) 20 minutos

Método invalidatesession.invalidate();

Si el cliente tiene las cookies deshabilitadas… URL rewriting

out.println(''<a href=''\<a href=\'''' + response.encodeURL(''/BeerTest.do'')+''\''>click me</a>'';

Add the extra session ID info to this URL

Sessión

Usar variables de sesión es más rápido, pero cuesta memoria RAM.

Usar la base de datos es más lento pero no consume RAM.

En la RAM del servidor se almacenará el identificador de sesión y los objetos vinculados a ella.

En una COOKIE del cliente se almacenará dicho identificador de sesión.

Para almacenar un valor en la sessión

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

Listener de sesión

Crear un listener de sesión: Btn derecho sobre un package → new → Listener → Escribo el nombre → next → HTTP session events → Livecycle → marco la check

Será posible modificar el contenido inicial de la sesión desde el session listener:

public void sessionCreated(HttpSessionEvent request){
 HttpSession session = request.getSession();
}

Recuperar y guardar un ArrayList en la sesión

Antes de usar el ArrayList que vamos a recuperar de la sesión, tendremos que comprobar que no sea nulo u obtendremos una NullPointerException.

HttpSession session = request.getSession();
 
ArrayList <Libro> libros = (ArrayList <Libro>) session.getAttribute("libros");
if(libros == null){
 libros = new ArrayList<Libro>();
}
libros.add(libro);
//Nota: en caso de que session.getAttribute nos devuelva null, será necesaria la siguiente línea. Si no devuelve null, no será necesaria, ya que el ArrayList estaría apuntando a la sesión y al modificar el ArrayList se estaría modificando directamente el valor que está en la sesión.
//session.setAttribute("palabras", al);

Ejercicios Sesión

CRUD contra la sesion

Hacer una página con alta, baja modificación y consulta de una Persona.

Los atributos de dicha persona serán nombredni y edad

Descargar Recurso

Ejercicio sumatorio

Hacer un proyecto web nuevo en el que a través de un formulario se vayan sumando dos números introducidos por el usuario.

En un campo de tipo input aparecerá la suma de los dos números introducidos

En otro campo aparecerá la suma de todos los números introducidos desde el comienzo de la sesión.

En otro campo más aparecerá la suma desde que arrancamos el servidor

Para ello, desde una página index.jsp enviaremos la información a un controlador servlet que realizará las operaciones necesarias. El resultado de estas operaciones será devuelto a la página de inicio index.jsp.

El botón limpiar mata la sesión. Esto será procesado por el controlador servlet.

Para acceder al ámbito de la aplicación usaremos:

ServletContext ctx = getServletContext();

Ejercicio librería con sesión

Hacer un CRUD para los libros de una librería. Usaremos un SessionListener los datos de la base de datos en un ArrayList que almacenaremos en la sesión. A partir de ahí, todas las operaciones las haremos contra dicha sesión.

En caso de terminar antes, intentar que los cuadros de modificación se actualicen al cambiar el valor de la combo.
Para ello, cuando la combo cambie, enviaré la id del libro, la compararé con la id de los libros almacenados en el arraylist y devolveré los datos del libro para el cual hubo coincidencia.

Ejercicio librería – con Map

Repetir el ejercicio de la diapositiva anterior utilizando un TreeMap para almacenar la información en vez de un ArrayList.


Métodos del TreeMap:
objetoTreeMap.put(Object key, Object value);
objetoTreeMap.remove(Object key);
objetoTreeMap.get(Object key);
objetoTreeMap.firstEntry().getValue();

Recorrer un Map:
<c:forEach var="libro" items="${sessionScope.libros}">
 <option value="<c:out value="${libro.value.id}" />" 
...

Ejercicio: Lista de palabras

Hacer un formulario que permita añadir palabras a un ArrayList. Dicho ArrayList será almacenado en la sesión. Con código EL iremos visualizando el contenido del ArrayList:

${ArrayListPalabras}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.