Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El tiempo de vida de una sesin comienza cuando un usuario se conecta por primera vez
a un sitio web pero su finalizacin puede estar relacionada con tres circunstancias:
En este caso una sesin permite ir eligiendo una serie de productos e irlos aadiendo a
nuestro carrito y as hasta finalizar la compra. Sin el uso de sesiones no se podra hacer
porque al ir navegando de una pgina a otra se ira perdiendo toda la informacin.
Despus de haber hecho esto el usuario tendr una serie de permisos sobre las pginas
que va a visitar, de tal forma que si un usuario intenta pasar a una pgina si haberse
identificado, el sistema comprobar que no se ha identificado y sera redireccionado a
la pgina de identificacin.
Para poder hacer uso de las sesiones en JSP hay que poner el atributo session de la directiva
page a true, de esta forma se notifica al contenedor que la pgina interviene en un proceso que
utiliza las sesiones del protocolo HTTP:
<%@page session=true%>
El manejo de las sesiones impide el intercambio de datos entre ellas ya que se trata informacin
especfica para cada usuario e incluso si se trata del mismo usuario
Nombre Nombre
Ttulo Ttulo
En JSP las acciones que se pueden realizar sobre las sesiones se lleva a cabo mediante
la interface HttpSession y los mtodos que implementa.
Esta interfaz est incluida dentro del paquete javax.servlet.http y es utilizada por el
contenedor de pginas JSP para crear una sesin entre el servidor y el cliente.
Para obtener la sesin de un usuario se utiliza el mtodo getSession() que devuelve una
interfaz de tipo HttpSession.
<%HttpSession sesion=request.getSession();%>
Una vez creado el objeto de tipo sesin es posible acceder a una serie de datos sobre la
misma. Uno de estos datos es idSession que devuelve un identificador nico asociado a
una sesin:
Tambin se puede conocer la fecha y hora de la ltima vez que el cliente accedi al
servidor con el que se cre la sesin, utilizando el mtodo getLastAccesedTime():
Teniendo en cuenta el momento en el que ser cre la sesin y la ltima vez que se
accedi al servidor, se puede conocer el tiempo que lleva el cliente conectado al
servidor, o lo que es lo mismo el tiempo que lleva el usuario navegando por las pginas
JSP:
out.println(Duracion:+duracion.getMinutes()+min.+ duracion.getSeconds()+seg);
%>
Si se hubiera utilizado el valor entero en vez del objeto Integer, el resultado habra sido
similar al siguiente:
En el primer ejemplo esto no sucede puesto que una cadena es un objeto de tipo String,
no as un entero. As habra sido igual si en el primer caso ponemos:
HttpSession sesion=request.getSession();
Por ejemplo, vamos a guardar los nombres de los 7 das de la semana en un vector.
v.addElement(new String(Lunes));
v.addElement(new String(Martes));
v.addElement(new String(Miercoles));
v.addElement(new String(Jueves));
v.addElement(new String(Viernes));
v.addElement(new String(Sbado));
v.addElement(new String(Domingo));
sesion.setAttribute(diasSemana,v);
%>
Los datos que se guardan en la sesin permanecen ah a la espera de ser utilizados. Para
ello es necesario realizar el proceso contrario a cuando se graban, comenzando por la
recuperacin del objeto de la sesin para empezar a ser tratado.
Cuando este mtodo devuelve el objeto no establece en ningn momento de qu tipo de objeto
se trata (String, Vector...)
Por ello si se conoce previamente el tipo de objeto que puede devolver tras ser
recuperado de la sesin es necesario realizar un casting, para convertir el objeto de tipo
genrico al objeto exacto que se va a usar. Para realizar esta operacin se aade el tipo
de objeto al lado de tipo HttpSession que utiliza el mtodo getAttribute() para obtener
el objeto que devuelve:
String nombre=
(String)sesion.getAttribute(nombre);
Manejo de errores
<% if(sesion.getAttribute(nombre)!=null) {
String nombre=
(String)sesion.getAttribute(nombre);
} %>
En esta ocasin el objeto devuelto y convertido a Integer no es del todo vlido ya que
es necesario obtener de l el valor entero. Para ello se utiliza el mtodo intValue() que
devuelve el valor que realmente se haba guardado previamente en la sesin.
Recuperar datos de vectores
El ejemplo del vector guardado en la sesin tiene un tratamiento similar al de los casos
anteriores. El primer paso es recuperar el objeto de la sesin:
Como se sabe que el objeto es de tipo Vector se puede recuperar y convertir en un solo
paso:
Se ha realizado otro proceso de conversin que sin ser necesario, ayuda a entender
mejor el funcionamiento. Cuando se recupera un elemento de un vector (que se trata
de un objeto) es necesario realizar el casting y convertirlo a su tipo de objeto definitivo.
v.addElement(new String("Lunes"));
Para recuperar todos los objetos de una sesin se puede hacer uso tambin del mtodo
getAttributeNames() de la interfaz HttpSession.
Enumeration enum=sesion.getAttributeNames();
String nombreAtributo;
while (enum.hasMoreElements()) {
nombreAtributo=(String)enum.nextElement();
out.println("Atributo:"+nombreAtributo);
if(nombreAtributo.equals("diasSemana")) {
Vector v= (Vector);
sesion.getAttribute("diasSemana");
out.println("Dia:"+(String)v.get(i));
} else
out.println(""+sesion.getAttribute(nombreAtributo)+""); } %>
Cookies
Un cookie es un archivo pequeo que enva el servidor web al disco duro del cliente que
lo visita con informacin sobre sus preferencias y pautas de navegacin.
En muchos sitos web es posible elegir el color de fondo, el tipo de letra utilizado, etc...
Estos valores pueden ser almacenados en cookies de forma que cuando acceda de
nuevo al web y se compruebe la existencia de esos valores, sern recuperados para
utilizarlos en la personalizacin de la pgina tal y como el usuario estableci en su
momento.
La clase Cookie
Para trabajar con cookies se utiliza la clase Cookie que est disponible en el paquete
javax.servlet.http.
Por medio de esta clase se pueden crear cookies, establecer sus valores y nombres,
alguna de sus propiedades, eliminarlas, leer valores que almacenan, etc.
Creacin de cookies
Cabe sealar que los cookies, no son ms que ficheros de texto, que no pueden superar
un tamao de 4Kb, adems los navegadores tan slo pueden aceptar 20 cookies de un
mismo servidor web (300 cookies en total).
Para crear un objeto de tipo Cookie se utiliza el constructor de la clase Cookie que
requiere su nombre y el valor a guardar.
Este ejemplo permite crear un objeto Cookie que contiene el nombre nombre y el
valor objetos.
Tambin es posible crear cookies con contenido que se genere de forma dinmica. El
siguiente cdigo muestra un cookie que guarda un texto que est concatenado a la
fecha/hora en ese momento:
<% Cookie miCookie=null; Date fecha=new Date(); String texto= Este es el texto que vamos a
guardar en el cookie+fecha;
En esta ocasin el contenido del valor a guardar en el cookie est en la variable texto.
Tambin se pueden guardar valores o datos que provengan de pginas anteriores y que
hayan sido introducidas a travs de un formulario:
String ciudad=
Configuracin de un cookie
Una vez que se ha creado un cookie, es necesario establecer una serie de atributos para
poder ser utilizado. El primero de esos atributos es el que se conoce como tiempo de
vida.
Por defecto, cuando creamos un cookie, se mantiene mientras dura la ejecucin del
navegador. Si el usuario cierra el navegador, los cookies que no tengan establecido un
tiempo de vida sern destruidos.
Por tanto, si se quiere que un cookie dure ms tiempo y est disponible para otras
situaciones es necesario establecer un valor de tiempo (en segundos) que ser la
duracin o tiempo de vida del cookie. Para establecer este atributo se utiliza el mtodo
setMaxAge().
Configuracin de un cookie
Si se utiliza un valor positivo, el cookie ser destruido despus de haber pasado ese
tiempo, si el valor es negativo el cookie no ser almacenado y se borrar cuando el
usuario cierre el navegador. Por ltimo si el valor que se establece como tiempo es cero,
el cookie ser borrado.
Otros de los atributos que se incluye cuando se crea un cookie es el path desde el que
ser visto, es decir, si el valor del path es / (raz), quiere decir que en todo el site se
podr utilizar ese cookie, pero si el valor es /datos quiere decir que el valor del cookie
slo ser visible dentro del directorio datos. Este atributo se establece mediante el
mtodo setPath().
Existe un mtodo dentro de la clase Cookie que permite establecer el dominio desde el
cual se ha generado el cookie. Este mtodo tiene su significado porque un navegador
slo enva al servidor los cookies que coinciden con el dominio del servidor que los
envi.
Si no se establece la propiedad domain se entiende que el cookie ser visto slo desde
el dominio que lo cre, pero sin embargo si se especifica un nombre de dominio se
entender que el cookie ser visto en aquellos dominios que contengan el nombre
especificado.
Igualmente, para conocer el dominio sobre el que acta el cookie, basta con utilizar el
mtodo getDomain() para obtener esa informacin.
Una vez que se ha creado el objeto Cookie, y se ha establecido todos los atributos
necesarios es el momento de crear realmente, ya que hasta ahora slo se tena un
objeto que representa ese cookie.
Una vez ejecutada esta lnea es cuando el cookie existe en el disco del cliente que ha
accedido a la pgina JSP.
Es importante sealar que si no se ejecuta esta ltima lnea el cookie no habr sido
grabado en el disco, y por lo tanto, cualquier aplicacin o pgina que espere encontrar
dicho cookie no lo encontrar.
Recuperacin de cookies
Para recoger todos los cookies que tenga el usuario guardados se crea un array de tipo
Cookie, y se utiliza el mtodo getCookies() de la interfaz HttpServletRequest para
recuperarlos:
/*El siguiente paso es crear un bucle que vaya leyendo todos los cookies.*/
Cookie unCookie=todosLosCookies[i];
/*A continuacin se compara los nombres de cada uno de los cookies con el que se est
buscando. Si se encuentra un cookie con ese nombre se ha dado con el que se est
buscando, de forma que se sale del bucle mediante break. */
if(unCookie.getName().equals(nombre))
break; }
/*Una vez localizado tan slo queda utilizar los mtodos apropiados para obtener la
informacin necesaria que contiene.*/
Recuperacin de cookies
out.println(Nombre: +unCookie.getName()+);
out.println(Valor: +unCookie.getValue()+);
out.println(Path: +unCookie.getPath()+);
out.println(Tiempo de vida:+unCookie.getMaxAge()+);
1. SERVLETS
1. Introduccin.
2. Objeto Request.
3. Objeto Response.
4. Cookies.
5. Sesiones.
Son aplicaciones Java especiales, que extienden la funcionalidad del servidor HTTP,
dedicadas a:
El interfaz SAPI define una manera estndar para que las peticiones HTTP sean
procesadas por esta clase Java (independiente del servidor).
El contenedor provee el entorno de ejecucin para todos los servlets basados en los
anteriores requisitos.
Eficiencia.
Cada peticin por parte de un cliente crea un hilo, no un nuevo proceso como
ocurra con los CGIs tradicionales.
Potencia.
Son programados en Java, por lo que se puede emplear todas las clases y
herramientas disponibles para esta plataforma.
Seguridad.
Portabilidad.
Precio.
Estructura bsica
Ejemplo
Compilar el servlet:
Mtodos implicitos
init
Se ejecuta una vez, la primera vez que es invocado el servlet (el servlet se carga en memoria y
se ejecuta slo la primera vez que es invocado. El resto de peticiones generan un hilo).
doGet y doPost
destroy
Objeto request
Objeto response
Objeto session
Objeto application
Objeto out
Objeto config
El objeto request contiene todos los datos enviados desde el cliente al servidor.
Todos los servlets implementan la interfaz ServletRequest, que define mtodos para
acceder a:
Los parmetros enviados por el cliente dentro de la URL o dentro del cuerpo del
mensaje (p.e. a partir de un formulario)
Cookies
Content-Type
etc.
La forma de leer los datos enviados desde un formulario es independiente del mtodo
de envo (GET o POST).
String request.getParameter(nom_var)
String[] request.getParameterValues(nom_var)
Enumeration request.getParameterNames()
Enumeration getHeaderNames()
Devuelve una enumeracin con los nombres de todos los parmetros incluidos en la
cabecera.
Cookie[] getCookies ()
String getMethod ()
String getContentLength ()
Longitud de los datos enviados por el cliente (utilizando el mtodo POST) tras la
cabecera HTTP.
String getContentType ()
String getProtocol ()
Cookies
donde codigo es el nmero del cdigo del estado. En vez de utilizar el nmero se puede
emplear las constantes prefinidas:
response.setHeader("Cache-Control", "no-cache");
response.setContentType("text/html");
PrintWriter
ServletOutputStream
Cada vez que un cliente pide una pgina Web, abre una conexin separada con el
servidor Web y el servidor no mantiene automticamente informacin contextual
acerca del cliente.
Servlets
Cookies
Reescritura de URLs
Enviando Cookies
response.addCookie(c);
Recibiendo Cookies
Para leer las cookies se emplea el mtodo getCookies del objeto request. ste
devuelve un array con todos las cookies recibidas del cliente.
if (cookies_recb != null) {
if (cookies_recb[i].getName().equals(alquiler"))
&& (cookies_recb[i].getValue().equals(coche))
{cookies_recb[i].setMaxAge(0);//Elimina la cookie
Extrae / fija el nombre del cookie. El mtodo setName() raramente se utiliza, ya que el
nombre de la nueva cookie normalmente se fija en el constructor del objeto.
Extrae / fija el nmero de segundos que la cookie permanece guardado en el disco del
cliente.
Extrae / fija el directorio raz (virtual) de las pginas con acceso a la cookie.
Extrae / fija el parmetro de seguridad. Si flag_seguridad vale true, la cookie slo ser
enviada si la conexin es segura (SSL).
Ejemplo UtilidadesCookies
Registra una nueva variable dentro de la sesin (nombre y valor son el nombre y el valor de la
variable).
Momento del ltimo acceso a una pgina de la sesin (milisegundos transcurridos desde el 1
de enero de 1970).
Extrae / fija los segundos que deben transcurrir desde el ltimo acceso para que la sesin sea
cerrada.
Ejemplo 1
Ejemplo 2
Puede suceder que ciertos clientes no soporten cookies o bien las rechacen
El cliente aade ciertos datos extra que identifican la sesin al final de cada URL
http://host/path/servlet/name?jsessionid=1234
El servidor asocia ese identificador con datos que ha guardado acerca de la sesin
Algunas Desventajas: