Documente Academic
Documente Profesional
Documente Cultură
Una de las formas ms sencillas de mantener informacin ante diversas sesiones es el uso de cookies. Una cookie es un modo muy simple de almacenar informacin bajo la forma de la vieja y til estructura "atributo:valor"; donde "atributo" corresponde al nombre de la cookie y "valor" al valor. Por ejemplo, la cookie "aniversario" puede expresarse bajo la forma "aniversario:18-12-2003". La idea es que una cookie almacena datos definidos por una aplicacin servidora (CGI o servlet). Estos datos se guardan en el cliente, concretamente en un archivo que suele contener el nombre del servidor. La ubicacin de este archivo dentro del cliente depende de la configuracin del sistema y del navegador. Normalmente el archivo est en el directorio Cookies, por ejemplo, en "C:\Documents and Settings\Administrador\Cookies".
Crear un Cookie
El constructor de la clase javax.servlet.http.Cookie crea un cookie con un nombre inicial y un valor. Se puede cambiar el valor posteriormente utilizando el mtodo setValue. El nombre del cookie debe ser un string (token) cuyo primer carcter no puede ser el carcter dollar ("$") ya que estn reservados segn la norma RFC 2109 del 3WC. El valor del cookie puede ser cualquier string, aunque no est garantizado que los valores null funcionen en todos los navegadores. Adems, si enviamos una cookie que cumpla con las especificaciones originales de las cookies de Netscape, no se deben utilizar carcteres blancos ni ninguno de estos caracteres: [ ] ( ) = , "" / ? @ : ; Si el servlet devuelve una respuesta al usuario con un Writer, debemos crear la cookie antes de acceder a Writer. (Porque las cookies se envan al cliente como una cabecera, y las cabeceras deben escribirse antes de acceder al Writer). Si el Servlet utilizar cookies para seguir la pista de un pedido, el servlet podra crear las cookies de esta forma:
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Comprueba si existe algn libro para aadir a la cesta de la compra String bookId = request.getParameter("Comprar"); // Si se quiere aadir un libro se puede aadir una cookie para indicar que ha comprado ya ese libro. Se creara en ese momento if (bookId != null) { Cookie getBook = new Cookie("Comprar", bookId); } // Aade el tipo de contexto antes de acceder a objeto Writer response.setContentType("text/html"); // Se crea el objeto PrintWrite para escribir los datos de respuesta. PrintWriter out = response.getWriter(); out.println("<html><head><title> Book Catalog </title></head>" + ...); ...
Pg. 1 - 4
Tambin se puede seleccionar la caducidad del cookie. Este atributo es til, por ejemplo, para borrar un cookie. El ejemplo podra utilizar este atributo para borrar un libro de la hoja de pedido.
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String bookId = request.getParameter("Devolver"); ... if (bookId != null) { // Encuentra la cookie que contiene el libro a borrar ... // Borra la cookie poniendo su tiempo de existencia en milisegundos a 0 thisCookie.setMaxAge(0); ... } // Obtiene la cabecera del tipo de contenido antes de crear el objeto Writer response.setContentType("text/html"); PrintWriter out = response.getWriter(); //Imprime la salida out.println("<html> <head>" + "<title>El carrito de la compra</title>" + ...);
Pg. 2 - 4
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... // Si el usuario quiere aadir un libro, el sistema lo recuerda aadiendo una cookie if (values != null) { bookId = values[0]; Cookie getBook = new Cookie("Comprar", bookId); getBook.setComment("El usuario tiene el deseo " + "de comprar este libro en la biblioteca virtual."); response.addCookie(getBook); } ... }
Recuperar Cookies
Los clientes devuelven las cookies como campos aadidos a las cabeceras de peticin HTTP. Para recuperar una cookie, debemos recuperar todas las cookies utilizando el mtodo getCookies de la clase HttpServletRequest. El mtodo getCookies devuelve un array de objetos Cookie, en el que podemos buscar la cookie o cookies que queramos. (Recuerda que distintas cookies pueden tener el mismo nombre, para obtener el nombre de una cookie, utiliza su mtodo getName.)
public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... String bookId = request.getParameter("Devolver"); ... if (bookId != null) { // Encuentra la cookie que pertenece al libro a borrar Cookie[] cookies = request.getCookies(); ... // Delete the book's cookie by setting its maximum age to zero thisCookie.setMaxAge(0); } ...
Pg. 3 - 4
} }
// Tambin inicializa la cabecera del tipo de contenido antes de acceder al objeto PrintWriter response.setContentType("text/html"); PrintWriter out = response.getWriter(); //Imprime el cdigo html generado out.println("<html> <head>" + "<title>Tu carrito de compra</title>" + ...);
Pg. 4 - 4