Durante la programación de una aplicación web nos encontramos que tenemos necesidad de conservar el valor de las variables. En una aplicación de escritorio, podemos controlar cuando queremos borrar una variable, por lo que no aparece ese problema, pero en una aplicación web, el tema es bastante mas delicado. Recordemos que el protocolo http no esta orientado a sesion, eso hace que en cada conexion TODOS los datos que tengamos a mano, sean nuevos. Nuestro servidor, no recordara nada acerca de si ese cliente se ha conectado hace un momento, o no se ha conectado nunca. Se ha logonado o no, ….Toda esa gestion, nos la debera hacer nuestro contenedor, y lo primero que debemos establecer es el alcance de nuestras variables, que podria ser el siguiente:
- Scope request: habrá variables que solo necesitaremos mientras estemos preparando la respuesta. Las variables con este alcance solo existen desde el momento que las creemos y hasta que devolvamos el control al usuario, enviando nuestra respuesta
- Scope Session: habrá variables que necesitaremos mientras mantengamos una sesión, por ejemplo, los datos del usuario identificado en la sesión, imaginaros que en cada página tuviéramos que pedir a nuestro usuario que se identificara…para evitar esto, existe el Scope sesión que se mantiene entre llamadas. Las variables de sesión solo existen en la sesión que las creo.
- Scope application: Habrá variables que necesitaremos mantener de forma continua, y que además queramos que sean visibles para todas las sesiones que estén activas en un momento dado. Para esto, tenemos el scope application. Las variables de este scope permanecerán disponible hasta que se cierre el servidor.
Muchas veces las variables van a tener que estar disponibles mas alla del objeto que las creo. Hemos visto que podemos ceder el control de un servlet a otro, pero podemos necesitar la información que el primero a preparado. Para poder compartir la información, disponemos de tres objetos:
HttpServletRequest . Que representa nuestra request, y nos permite guardar información hasta que se devuelve el control al usuario
HttpSession, Que representa nuestra sesión y que guardara la información de las variables durante toda la sesión
ServletContext. Que representa al servlet y como consecuencia es capaz d guardar la información desde que se crea la variable, hasta que el servidor se cierre.
Todos ellos, dispone de métodos setAttribute y getAttribute para guardar la información que deseemos. La forma de gestionar la información siempre es igual
objeto.setAttribute(String,valor)
Guarda el contenido de ”valor”, sea el tipo que sea (String, objetos, primitivas,…) en el entorno que represente objeto y lo identifica con la String facilitada.
Tipo recup = (Tipo) objeto.getAttribute(String);
Recupera el valor que se haya asociado a la String facilitada. Estos métodos trabajan siempre con Object, por lo que es necesario hacer un cast para indicar el tipo de objeto
Ejemplos para alcance aplicación:
Ejemplos para alcance Session:
Ejemplos para alcance request:
En todos los casos, deberemos estar atentos a que el objeto se haya creado (comprobación de null), y que sea del tipo correcto.
El objeto HttpSession
Este objeto lo debemos revisar con más atención, ya que su ciclo de vida depende de la programación.
Este objeto dispone de los siguientes métodos
getId. devuelve un identificador único generado para cada sesión.
isNew. devuelve true si el cliente (navegador) nunca ha visto la sesión. Devuelve false para sesión preexistentes.
getCreationTime. Devuelve la hora, en milisegundos desde 1970, en la que se creó la sesión. Para obtener un valor útil para impresión, pasamos el valor al constructor de Date o al método setTimeInMillis de GregorianCalendar.
getLastAccessedTime. Esto devuelve la hora, en milisegundos desde 1970, en que la sesión fue enviada por última vez al cliente.
getAttributesName(): devuelve un array con todos los nombres de los objetos asociados con la sesión.
invalidate(): invalida la sesión en curso.
removeAttribute(String): elimina el objeto asociado con una determinada clave.
CADUCIDAD DE LA SESION:
- Peculiaridad de las Aplicaciones WEB: No sabemos cuándo el usuario se desconecta del servidor
- Automáticamente el servidor web invalida tras un periodo de tiempo que podemos determinar, sin peticiones o manualmente usando el método “invalidate”.
Los elementos almacenados no se liberan hasta que no ss consume todo el tiempo, o se ejecuta un invalidate()
Cookies
Las cookies son pequeños retazos de información que podemos dejar en el ordenador del usuario.
- Se utilizan para almacenar información de la aplicación en el cliente.
- Algunas veces se utilizan para el seguimiento de la sesión de un usuario.
- Se usa el objeto javax.servlet.http.Cookie.
- Para enviar una cookie
- Para obtener información de una cookie:
- En cada respuesta llega como colección todas las cookies que hayamos dejado