Está en la página 1de 16

ESCUELA SUPERIOR POLITCNICA DE CHIMBORAZO

SEMESTRE SEPTIEMBRE 2011 FEBRERO 2012 TAREA No. 8 IDENTIFICACION


Facultad: Carrera: Materia: Semestre: Docente: Integrant es: Fecha: Escuela de Informtica y Electrnica Ingeniera en Sistemas Aplicaciones Empresariales en Java Noveno Ing. Jorge Huilca Palacios
Santiago Prez Jessica Bonilla 4505 4662

17 de Enero de 2012

Calificacin

Sello del Docente

Espacio reservado para el docente

MARCO TERICO
COOKIES Descripcin Las cookies constituyen una potente herramienta empleada por los servidores Web para almacenar y recuperar informacin acerca de sus visitantes. Dado que el Protocolo de Transferencia de HiperTexto (HTTP) es un protocolo sin estados (no almacena el estado de la sesin entre peticiones sucesivas), las cookies proporcionan una manera de conservar informacin entre peticiones del cliente, extendiendo significativamente las capacidades de las aplicaciones cliente/servidor basadas en la Web. Mediante el uso de cookies se permite al servidor Web recordar algunos datos concernientes al usuario, como sus preferencias para la visualizacin de las pginas de ese servidor, nombre y contrasea, productos que ms le interesan, etc. Una cookie no es ms que un fichero de texto que algunos servidores piden a nuestro navegador que escriba en nuestro disco duro, con informacin acerca de lo que hemos estado haciendo por sus pginas. Ventaja de las cookies Son almacenadas en el disco duro del usuario, liberando as al servidor de una importante sobrecarga. Es el propio cliente el que almacena la informacin y quien se la devolver posteriormente al servidor cuando ste la solicite. Adems, las cookies poseen una fecha de caducidad, que puede oscilar desde el tiempo que dure la sesin hasta una fecha futura especificada, a partir de la cual dejan de ser operativas. La clase Cookie El API Servlet incluye una clase cookie para determinar el contenido de una cookie, ms unos pocos atributos. En general, existen dos etapas para el uso de una cookie: en primer lugar, en algn momento, vamos a pedirle al cliente establecer una cookie. Luego, en una etapa posterior, vamos a querer leer el valor de la cookie. Una vez que le pedimos a un cliente para establecer una cookie, el cliente debe enviar de vuelta la cookie de cualquier solicitud a la ruta del dominio / que la cookie se define para. Establecer una cookie

Para pedir al cliente que establece una cookie, se crea una cookie objeto y luego aadirlo a la HTTP de respuesta que nuestro servlet devuelve: public void doGet (HttpServletRequest req, HttpServletResponse res) lanza ServletException, IOException { / / Leer desde la solicitud del resultado deseado de uesr por pgina Galletas ck = nuevo Cookie ("prefResultsPerPage", resPerPage) ; res.addCookie (CK) ; / / Ahora escriba la respuesta de forma normal ... } SESIONES Proporciona una forma de identificar a un usuario a travs de solicitud de ms de una pgina o una visita a un sitio Web y para almacenar la informacin de ese usuario. El contenedor de servlets utiliza esta interfaz para crear una sesin entre un cliente HTTP y un servidor HTTP. La sesin se mantiene durante un perodo de tiempo determinado, a travs de ms de una solicitud de conexin o en la pgina del usuario. Una sesin suele corresponder a un usuario, que puede visitar el sitio muchas veces. El servidor puede mantener una sesin de muchas maneras, tales como el uso de cookies o la reescritura de direcciones URL. Esta interfaz permite a los servlets:

Ver y manipular la informacin acerca de una sesin, como por ejemplo el identificador de sesin, tiempo de creacin, y la ltima vez que accede. Vincular los objetos de las sesiones, permitiendo que la informacin de usuario persistir a travs de conexiones de usuarios mltiples.

Cuando una aplicacin se almacena en un objeto o elimina un objeto de una sesin, la sesin se comprueba si el objeto implementa HttpSessionBindingListener. Si lo hace, el servlet notifica el objeto que ha sido obligado o no consolidados de la sesin. Las notificaciones se envan despus de completar los mtodos de unin. Para la sesin de que se invalidan o caducar, las notificaciones se envan despus de la sesin ha sido invalidado o ha caducado. Cuando se migra un contenedor de la sesin entre las mquinas virtuales en un entorno distribuido de contenedores, todos los atributos de la sesin la aplicacin de la HttpSessionActivationListener interfaz se notifican.

Un servlet debe ser capaz de manejar los casos en que el cliente no opta por unirse a una sesin, como por ejemplo cuando las cookies son intencionalmente desactivadas. Hasta que el cliente se une a la sesin, isNew vuelve verdadera. Si el cliente decide no unirse a la sesin, getSession devolver una sesin diferente en cada solicitud, y isNew siempre devuelve verdadero. Informacin de la sesin es de mbito exclusivamente a la aplicacin web actual (ServletContext), por lo que la informacin almacenada en un contexto no se puede ver directamente en otro.

OBJETIVOS
1. Desarrollar una aplicacin utilizando Servlets que permita

simular un contador de visitas utilizando Cookies


2. Elaborar una aplicacin utilizando Servlets que permita registrar

su nombre si la Cookie no existe e imprimirla en caso de que exista.


3. Investigar, en que carpeta del SO Windows 7, se crean las

Cookies tanto para el navegador IE como para Firefox.


4. Realizar una aplicacin utilizando Servlets que permita simular

un contador de visitas utilizando Sesiones.


5. Consultar el funcionamiento de las variables de Aplicacin.

DESARROLLO
1. Desarrollar

permita Cookies.

una simular

aplicacin utilizando Servlets que un contador de visitas utilizando

Primero se debe crear la pgina de inicio.html con el siguiente cdigo. <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4

</head> <body> <form action="ControlCookies" method="get"> Nombre: <INPUT TYPE="text" NAME="usuario" size="60"> <p><input type="submit" name="enviar" value="Entrar"></p> </form> </body> </html> Despus se crea el servlet con el nombre ControlCookies y se coloca el siguiente cdigo.

package servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Properties; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ControlCookies extends HttpServlet { public static final int SECONDS_PER_YEAR = 60*60*24*365; // Segundos de un ao (duracin de cookie) / **************************************************************** ****************************** * Mtodo GET: gestiono cookie * Almaceno en Properties el resultado de la gestin de cookies * Construye una pgina con dicho resultado. **************************************************************** ******************************/ public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //// Obtengo parametro de formulario HTML
5

String paramGustos = request.getParameter( "usuario" ); //// Guardaremos en Properties los avisos de lo que ha ocurrido con la cookie Properties mensajesCocina = new Properties(); Properties mensajesContador = new Properties(); //// Nuevo valor de la cookie contador. Si no hay cookie el nuevo valor es 1. //// Si hay cookie, incremento el valor. Cookie c = this.getCookie( request, "contador" ); int visitas = 1; if ( c != null ) { visitas = Integer.parseInt(c.getValue()); visitas++; } //// Actualizo las cookies actualizarCookie( request, response, mensajesCocina, "", paramGustos ); actualizarCookie( request, response, mensajesContador, "contador", String.valueOf( visitas) ); response.setContentType("text/html"); PrintWriter out = response.getWriter(); //// Escribe el inicio de la pgina out.println("<html>"); out.println("<head><title>Ejemplo de Servlet</title></head>"); out.println("<body bgcolor=\"#FFFF9D\"><FONT color=\"#000080\" FACE=\"Arial,Helvetica,Times\" SIZE=2>"); out.println("<CENTER><H3>Gestionando cookies</H3></CENTER><HR>"); //// Escribo en out los mensajes escribirMensajes( out, mensajesCocina ); out.println( "<HR>"); escribirMensajes( out, mensajesContador ); //// Fin de pgina out.println("</font></body></html>"); } / **************************************************************** ******************* * Mtodo POST: reenvio a GET **************************************************************** ******************/ public void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }

/ **************************************************************** ******************* * Actualizo la cookie con 'nuevoValor'. En 'mensajes' almaceno el resultado de la * operacin; nos sirve como repositorio de mensajes. * Si no hubiese cookie, la creo de nuevo y almaceno igualmente el nuevo valor. **************************************************************** *****************/ void actualizarCookie( HttpServletRequest request, HttpServletResponse response, Properties mensajes, String nombreGalleta, String nuevoValor ) { //// Obtener cookie Cookie galleta = this.getCookie( request, nombreGalleta ); //// Si no hay cookie, almaceno aviso en 'mensajes' if ( galleta == null ) { mensajes.setProperty( "", "No se ha creado la cookie " + nombreGalleta + ". Se crear"); // Aviso } //// Si hay cookie, almaceno aviso en 'mensajes' else { mensajes.setProperty( "", galleta.getName()); mensajes.setProperty( "cookie.valor.antiguo", galleta.getValue()); // No suele funcionar, depende de la version de HTML y de las capacidades del navegador // mensajes.setProperty( "cookie.antigua.path", galleta.getPath()); // mensajes.setProperty( "cookie.antigua.dominio", galleta.getDomain()); } //// Creo nueva cookie con el nombre de la anterior y aado la cookie a la cabecera de la respuesta galleta = crearCookie( nombreGalleta, nuevoValor ); response.addCookie( galleta ); //// Aviso de la cookie nueva o actualizada mensajes.setProperty( "cookie.valor.nuevo", nuevoValor ); } / **************************************************************** ******************* * Obtengo todas las cookies a partir de la peticin (request). Devuelve aquella cuyo * nombre es 'cookieName'. Si no la encuentra, devuelve null. **************************************************************** ******************/
7

public static Cookie getCookie( HttpServletRequest request, String cookieName ) { Cookie[] cookies = request.getCookies(); for(int i=0; cookies != null && i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) return cookie; } return null; } / **************************************************************** *************** * Obtiene las cookies de la peticin (request). Busca una que coincida con 'cookieName'. * Si lo encuentra, devuelve su valor; si no, devuelve 'defaultValue' **************************************************************** **************/ public static String getCookieValue( HttpServletRequest request, String cookieName, String defaultValue) { Cookie[] cookies = request.getCookies(); for(int i=0; cookies != null && i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) return(cookie.getValue()); } return defaultValue; } / **************************************************************** ******************* * Crea una cookie cuyo nombre y valor son los argumentos. Duracin: un ao (atributo * SECONDS_PER_YEAR). **************************************************************** ******************/ public static Cookie crearCookie( String nombre, String valor) { Cookie c = new Cookie( nombre, valor ); c.setMaxAge(SECONDS_PER_YEAR); return c; } / **************************************************************** ******************* * Escribo en out el contenido de 'mensajes' (claves y valores) **************************************************************** *****************/
8

void escribirMensajes( PrintWriter out, Properties mensajes ) { //// Recorro los elementos de 'mensajes' y muestro su valor en la pgina Enumeration e = mensajes.propertyNames(); while ( e.hasMoreElements() ) { String clave = (String) e.nextElement(); out.println("" + clave + ": " + mensajes.getProperty( clave ) + ""); } } } RESULTADOS A continuacin se visualiza la pantalla donde se debe ingresar el nombre de la

cookie.

Despus de dar clic en ejecutar se visualizara la siguiente pantalla con los resultados respectivos.

2. Elaborar una aplicacin utilizando Servlets que permita

registrar su nombre si la Cookie no existe e imprimirla en caso de que exista. Se crea la pgina de inicio.html, despus el servlet con el siguiente cdigo.
Cookie[] listaCookies = request.getCookies(); for(int i=0; i<listaCookies.length; i++) { Cookie myCookie = listaCookies[i];
9

if(myCookie.getValue().equals(request.getParameter( "txtNombre"))) { out.print("La cookie ya existe"+"<br>"); out.print("El valor es" + myCookie.getValue()); }else { Cookie miCookie = new Cookie("nombre",request.getParameter("txtNombre")); miCookie.setMaxAge(24*60*60); response.addCookie(miCookie); out.println("Cookie creada"); } }

RESULTADOS

En la siguiente pantalla se ingresa los datos

Despues se presenta un mensaje de que se ha creado la cookie

10

Por ultimo despus que la cookie ha sido creado se visualizara una pantalla como se muestra a continuacin con un mensaje.

3. Investigar, en que carpeta del SO Windows 7, se crean

las Cookies tanto para el navegador IE como para Firefox. En Windows 7 las cookies se crean en la siguiente direccin: C:\Users\Jessy\AppData\Roaming\Microsoft\Windows\Cooki es\Low
4. Realizar una aplicacin utilizando Servlets que permita

simular un contador de visitas utilizando Sesiones. Primero se debe crear la pagina de inicio.html, despus crear el servlet controlador donde vamos a ubicar el siguiente cdigo.
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); /** * Obtenemos el nombre de usuario entrante como en una pagina web */ String nombre = (String)request.getParameter("Usuario"); /** * Instanciamos un vector de Sesiones llamado listado */ Vector listado = (Vector)request.getSession().getAttribute("listado"); /** *Si el listado es nulo generar como vector */ if ( listado == null ) { listado = new Vector();
11

} response.setContentType("text/html"); out.println("<HTML>"); out.println("<HEAD><TITLE>Hola Mundo!</TITLE></HEAD>"); out.println("<BODY>"); /** * Si el nombre es diferente de nulo vamos imprimir y agregar a l vector sesin listado */ if ( nombre != null ) { out.println("<br>Hola "+nombre+"<br>"); listado.addElement(nombre); } request.getSession().setAttribute("listado",listado); out.println("<br>"); out.println("Bienvenido a mi primera pgina Web!"); out.println("<br>"); out.println("Contigo, hoy me han visitado: "); out.println(listado.size()+ " veces."); out.println("<br>"); out.println("<br>"); /** * Finalmente imprimo todos elementos del listado */ for ( int i = 0 ; i < listado.size() ; i++ ) { out.println("<br>" + listado.elementAt(i)); out.println(i); } /** * Esto en el caso de que se desee siempre mostrar el ltimo * nombre con el ingresa a la aplicacin y el contador */ // String last=(String)listado.lastElement(); // out.println(last) ; out.println("<center><a href=\"index.html\">Volver</a></center>"); out.println("</BODY></HTML>"); }

12

13

RESULTADOS A continuacin se muestra una pantalla de como se van visualizando los datos.

5. Consultar

el

funcionamiento

de

las

variables

de

Aplicacin.
Los lenguajes de programacin de aplicaciones como C, C++, Basic y Java usan variables para contener datos. Las variables son reas de almacenamiento que pueden contener los valores de los datos. Cada variable de aplicacin tiene un tipo de datos y un tamao. Las variables numricas tambin tienen una precisin (el nmero de dgitos que puede contener la variable) y una escala (el nmero de dgitos que se encuentran a la derecha del separador decimal).

Cmo utilizar variables de aplicacin Piense en el objeto Application como en un contenedor global para la informacin disponible en todas las pginas de la aplicacin ASP. Puede almacenar variables y referencias a objetos en el objeto Application. Se crean instancias del objeto Application cuando se solicita la primera pgina de la aplicacin y sta permanece disponible hasta que se cierra el servicio Web.

14

Variables de la aplicacin ASP en un trabajo muy similares a los $ _SESSION variable en PHP. Sin embargo, a diferencia de los $ _SESSION variable, las variables de aplicacin no son especficas de un usuario individual, sino que persisten a travs de todos los usuarios de cada pgina en el sitio web. Las variables de aplicacin tienen muchos otros fines. En el leosolutions Sitio web .com, es usado principalmente para almacenar en cach comunes generadas dinmicamente partes de la pgina, tales como las barras de men y la ficha del proyecto. (S, las barras de mens en mi se generan de forma dinmica desde una base de datos) Dado que este contenido no cambia con frecuencia, sera un desperdicio de recursos (y ralentizar los tiempos de respuesta) para generar estos elementos sobre la marcha, cada vez una pgina se solicita. En cambio, el script PHP comprueba las variables de aplicacin para el elemento. Si se encuentra, el script PHP se limita a enviar el cdigo HTML almacenado en la variable de aplicacin directamente a la salida. De lo contrario, el contenido se genera a partir de la base de datos, y se almacena en las variables de aplicacin para su uso futuro.

CONCLUSIONES
1. Se ha podido desarrollar una aplicacin utilizando Servlets que

permita simular un contador de visitas utilizando Cookies


2. Se ha logrado elaborar una aplicacin utilizando Servlets que

permita registrar su nombre si la Cookie no existe e imprimirla en caso de que exista.


3. Tambin se ha investigar, en que carpeta del SO Windows 7, se

crean las Cookies tanto para el navegador IE como para Firefox.


4. Se realizo una aplicacin utilizando Servlets que permita

simular un contador de visitas utilizando Sesiones.


5. Se consulto el funcionamiento de las variables de Aplicacin.

RECOMENDACIONES
15

1. Tomar en cuenta cada una de las ventajas del uso de los servlets al momento del ingreso de datos personales o realizar operaciones. 2. Saber muy bien el funcionamiento de una cookie, que constituyen

una potente herramienta empleada por los servidores Web para almacenar y recuperar informacin acerca de sus visitantes.
3. Investigar acerca de la funcin de las sesiones ya que son una

forma de identificar a un usuario a travs de solicitud de ms de una pgina o una visita a un sitio Web y para almacenar la informacin de ese usuario.
4. Al programar en cualquier entorno de desarrollo siempre llevar una buena prctica de programacin como son definiendo las etiquetas de informacin o comentarios que nos ayudara a entender y describir lo que hacemos en dichas lneas de cdigo para una mejor comprensin.

BIBLIOGRAFA
http://www.iec.csic.es/criptonomicon/cookies/queson.html http://www.javamex.com/tutorials/servlets/cookies_api.shtml http://www.proactiva-calidad.com/java/servlets/cookie.html http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpSession.html http://php.ciberaula.com/articulo/introduccion_sesiones_php http://www.leosingleton.com/projects/code/phpapp/

FIRMAS

Santiago Prez CI: 0604384578

Jessica Bonilla CI: 0604115188

16