domingo, 30 de noviembre de 2014

Actividades a entregar

  • Mapa conceptual sobre: control de datos, maneras de compartirlos y chequeo de tipos de datos en el lenguaje JSP.
  • Prácticas con un reporte de cada una:
  1. Subir archivos a un servidor.
  2. Conexión a la BD y CRUD de operaciones básicas: insertar, buscar, modificar y eliminar registros a una BD.
  3. Validar si el usuario ya existe y validar los caracteres de entrada al formulario.
  4. Crear archivos PDF.

Proyecto final

  • Viernes 5 de dic. Entregar el proyecto con JSP y Base de Datos funcionando.
  • Domingo 7 de dic. Entregar reporte con la siguiente descripción:
El reporte deberá mostrar una descripción coherente y completa del desarrollo del proyecto. Deberá iniciar con una descripción de requerimientos y un análisis del mismo. En el análisis se deberán elaborar los diagramas de casos de uso, de clases y entidad-relación. Además deberán explicarse los detalles de su implementación. Agregar el código comentado y las pantallas del funcionamiento del programa. Explicar los resultados obtenidos.
  • Domingo 7 de dic. Presentación en PowerPoint con los resultados obtenidos.
Subir proyecto a Drive

viernes, 21 de noviembre de 2014

Ejemplo Sesiones con Base de Datos

login.jsp
Código:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%
// Leemos la variable de sessión 'validado'
Boolean validado = (Boolean) session.getAttribute( "validado" );
// Si la variable de session 'valiadado' ya
// ha sido creada o el valor es 'true'
if( validado!=null && validado.booleanValue())
// Redireccionamos a la página bienvenido.jsp
response.sendRedirect( "bienvenido.jsp" );
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login</title>
</head>
<body>
<%
// Leemos la variable de sesión 'usuario'
String usuario = (String) session.getAttribute( "usuario" );
// Si las variable de sesión 'validado'
// y 'usuario' ya habia sido creadadas
if(validado!=null && usuario!=null)
// Mostramos mensaje de advertencia
out.println("<p>Usuario o contraseña incorrectos</p>");
// Si la variable de sesión usuario
// no ha sido creada
if(usuario==null)
// Instanciamos la variable local 'usuario'
usuario = "";
// Borramos la variable de sesión 'usuario'
session.setAttribute( "usuario", null);
%>
<form method="post" action="bienvenido.jsp" name="formLogin">
<input type="text" name="usuario" value="<%=usuario%>"><br>
<input type="password" name="contrasena"><br>
<input type="submit" name="enviar" value="enviar">
</form>
</body>

bienvenido.jsp

Código:
<%@ page import="java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%
// Leemos la variable de sesión 'validado'
Boolean validado = (Boolean) session.getAttribute( "validado" );
// Si la variable de sesión 'validado' no ha
// sido creada o contiene un valor 'false'
if( validado==null || !validado.booleanValue() )
{
// Leemos la variable POST 'usuario'
String usuario= request.getParameter( "usuario" );
// Leemos la variable POST 'contrasena'
String contrasena = request.getParameter( "contrasena" );
// Si las variables POST 'usuario' y 'contrasena'
// existen y 'usuario' contiene texto
if(usuario!=null && contrasena!=null && !usuario.equals("") )
{
// Establecemos la variable de sessión 'usuario'
session.setAttribute( "usuario", usuario);
// Cargamos el Driver de MySQL
Class.forName( "com.mysql.jdbc.Driver" );
// Creamos una conección a MySQL, Sintaxis:
// jdbc:mysql://[servidor]:[puerto]/[base de datos], usuario, contraseña
Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost/test" , "root", "tu_contraseña" );
// Creamos un Statement
Statement stmt = conn.createStatement();
// Cramos un Resultado de Consulta SQL
ResultSet rs = stmt.executeQuery(
"SELECT usuario FROM usuarios " +
"WHERE usuario='" + usuario + "' " +
"AND contrasena='" + contrasena + "'"
);
// Si el resultado contiene filas
if( rs.next() )
// Establecemos la variable local
// 'validado' a true
validado = new Boolean(true);
// Cerramos el Statment
stmt.close();
// Cerramos la conexión
conn.close();
}
}
// Si la variable de sesión
// 'validado' no ha sido creada
if(validado==null)
// Establecemos la variable local
// 'validado' a true
validado = new Boolean(false);
// Añadimos la variable de sesión 'validado'
// con el contenido de la variable local
session.setAttribute( "validado", validado);
// Si la variable local 'validado' es false
if( !validado.booleanValue() )
// Redireccionamos a la página login.jsp
response.sendRedirect( "login.jsp" );
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Bienvenido</title></head>
<body>Bienvenido</body>
</html>

martes, 18 de noviembre de 2014

PDF con BD MySQL

<%@page import="java.servlet.*,
        javax.servlet.http.*,
        java.io.*,
        java.util.*,
        com.itextpdf.text.pdf.*,
        com.itextpdf.text.*,java.sql.*"
%>

<%
response.setContentType("application/pdf");
Document document = new Document();
try{
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, buffer);
    document.open();
       PdfPTable table=new PdfPTable(2);
       table.addCell("First Name");
       table.addCell("Last Name");
       Class.forName("com.mysql.jdbc.Driver");
       Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/trydb", "root", "root");
       Statement st=con.createStatement();
       ResultSet rs=st.executeQuery("Select * from trytable");
       while(rs.next()){

       table.addCell(rs.getString("fname"));
       table.addCell(rs.getString("lname"));
       }

    document.add(table);   
    document.close();

    DataOutput dataOutput = new DataOutputStream(response.getOutputStream());
    byte[] bytes = buffer.toByteArray();
    response.setContentLength(bytes.length);
    for(int i = 0; i < bytes.length; i++)
    {
        dataOutput.writeByte(bytes[i]);
    }

}catch(DocumentException e){
    e.printStackTrace();
}

%>

/* Database : trydb 

create table trytable (fname varchar(10), lname varchar(10));  */

-------------------------------------------------------------
Dando formato:

Párrafos, fotos y tablas

http://chuwiki.chuidiang.org/index.php?title=Ejemplo_sencillo_de_creaci%C3%B3n_de_un_pdf_con_iText

Incluir fecha: document.add(new Paragraph("Hola a todos!"));
document.add(new Paragraph(new Date().toString()));

crear PDF básico- Instalar librería

Librería iText: Descargar
o también se puede descargar de:

http://itextpdf.com/download.phphttp://sourceforge.net/projects/itext/files/

----------------------------------------------------------------
Código básico:

<%@page import="java.io.*, com.itextpdf.text.*, com.itextpdf.text.pdf.*"%>
<%
    response.setContentType( "application/pdf" );
    // Paso 1:
    Document documento = new Document();
    // Paso 2:
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    PdfWriter.getInstance( documento, buffer );
    // Paso 3:
    documento.open();
    // Paso 4:
    documento.add(new Paragraph("Hola mundo"));
    // Paso 5:
    documento.close();
    // se escribe la salida
    DataOutput output = new DataOutputStream( response.getOutputStream() );
    byte[] bytes = buffer.toByteArray();
    response.setContentLength(bytes.length);
 
    for( int i = 0; i < bytes.length; i++ ) {
            output.writeByte( bytes[i] );
    }
%>

----------------------------------------------------------
Repetimos lo mismo pero ahora con una tabla

<%@
page import="java.servlet.*,
        javax.servlet.http.*,
        java.io.*,
        java.util.*,
        com.itextpdf.text.pdf.*,
        com.itextpdf.text.*,java.sql.*"
%>

<%
response.setContentType("application/pdf");
Document document = new Document();
try{
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    PdfWriter.getInstance(document, buffer);
    document.open();


    PdfPTable table = new PdfPTable(2);
    table.addCell("1");
    table.addCell("2");
    table.addCell("3");
    table.addCell("4");
    table.addCell("5");
    table.addCell("6");      
  
    document.add(table);      
    document.close();
  
    DataOutput dataOutput = new DataOutputStream(response.getOutputStream());
    byte[] bytes = buffer.toByteArray();
    response.setContentLength(bytes.length);
    for(int i = 0; i < bytes.length; i++)
    {
        dataOutput.writeByte(bytes[i]);
    }
  
}catch(DocumentException e){
    e.printStackTrace();
}
%>

lunes, 10 de noviembre de 2014

Validación de caracteres

Script para validar la entrada de los caracteres que se escriban en nombre y correo:

<script>
  function valida_envia(){
                var er_nombre = /^([0-9]|[0-9]|á|é|í|ó|ú|ñ|ü|\s|\.|-)+$/
        //expresion regular solo letras
                 var sr_nombre = /^([a-z]|[A-Z]|á|é|í|ó|ú|ñ|ü|\s|\.|-)+$/
         //expresion regular solo numeros
         var correo =  /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/
         //expresion regular correo electronico

//primer bloque validamos el nombre
  if(!sr_nombre.test(document.fvalida.usuario.value)) {
         alert('Nombre no valido .')     
                                document.fvalida.usuario.focus()
                 document.fvalida.usuario.value = ""
        return false
   }
   if(!sr_nombre.test(document.fvalida.password.value)) {
         alert('Apellido no valido')
                                document.fvalida.password.focus()
                 document.fvalida.password.value = ""
         return false
   }


   if(!sr_nombre.test(document.fvalida.nombre.value)) {
         alert('edad no valida')
                                document.fvalida.nombre.focus()
                 document.fvalida.nombre.value = ""
         return false
   }
  if(!sr_nombre.test(document.fvalida.estado.value)) {
         alert('correo no valido')
                                document.fvalida.estado.focus()
                 document.fvalida.estado.value = ""
         return false
   }
   //el formulario se envia si todo esta correcto
               
                document.fvalida.submit();
}

</script>

sábado, 8 de noviembre de 2014

Proyecto 2

Hacer una aplicación web para el control de clientes, servicios y pagos de servicio de televisión digital que ofrece renta de canales e internet. 
  • Los administradores de la empresa pueden realizar acciones de alta, consulta, baja, y actualización de clientes (datos personales y el servicio que renta) y servicios (televisión básica, televisión completa, cada uno con y sin internet así como el precio de cada servicio). 
  • Los cajeros podrán registrar los pagos de los clientes (fecha, cantidad, cliente, saldo, etc.). 
  • Los clientes podrán realizar búsquedas por medio de su clave o nombre y revisar su saldo.
Ejemplo:
Revisar la siguiente aplicación de un carrito de compras:
http://desarrolloaplicacionesweb2.blogspot.mx/2012/12/carrito-de-compras-jsp-mysql.html

Tarea

Agregar Bases de Datos a su proyecto del segundo parcial.

Actividad

Validar que no exista el usuario para que pueda realizarse el registro.
usar if(resultSet.next) después de que rs hace un select por medio del usuario, si es verdadero ya existe el registro con ese usuario, en caso contrario no existe.
ResultSet resultSet = stmt.executeQuery("SELECT * FROM my_table");

    // Move cursor forward
    while (resultSet.next()) {
      // Get data at cursor
      String s = resultSet.getString(1);
    }

o también preguntando por
if (resultSet== null) {

lunes, 3 de noviembre de 2014

Insertar corregido

conexión.java
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;
/**
 *
 * @author JesusMiguel
 */
public class ConexionMySQL {
    public String  db="menudb";
    public String url="jdbc:mysql://localhost/"+db;
    public String user="root";
    public String pass="";
    public ConexionMySQL() {
       
    }
   
    public Connection Conectar()
    {
        Connection link=null;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            link = (Connection) DriverManager.getConnection(this.url,this.user,this.pass);
            System.out.println("LA CONEXION FUE EXITOSA");
        }
        catch(Exception e)
        {
        JOptionPane.showMessageDialog(null,e);
        }
        return link;
    }
}

insertar.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="conexion.ConexionMySQL"%>
<%@page import="com.mysql.jdbc.Connection"%>
<%@page import="com.mysql.jdbc.PreparedStatement"%>
<%@page import="com.mysql.jdbc.Statement"%>
<%@page import="java.sql.*"%>
<%@page import="java.sql.DriverManager"%>
<!DOCTYPE html>
<%      
     ConexionMySQL cnx= new ConexionMySQL();
     String[] Registro=null;
    
     Connection on=cnx.Conectar();
        String user="",clave="",nom="",estad="";
        String aSQL = "";
         
     if(request.getParameter("usuario")!=null)
     {user=request.getParameter("usuario");}
     if(request.getParameter("clave")!=null)
     {clave=request.getParameter("clave");}
     if(request.getParameter("nombre")!=null)
     {nom=request.getParameter("nombre");}
     if(request.getParameter("estado")!=null)
     {estad=request.getParameter("estado");}
      
     aSQL= "INSERT INTO usuarios(idusuarios,password,nombre,estado) VALUES(?,?,?,?);";
      
         try
        {
            java.sql.PreparedStatement pst=on.prepareStatement(aSQL);
            pst.setString(1, user);
            pst.setString(2, clave);
            pst.setString(3, nom);
            pst.setString(4, estad);
           
            int n=pst.executeUpdate();
           
            if(n > 0)
            {%>
                <jsp:forward page="index.jsp">
                <jsp:param name="registroexitoso" value="Se ha Registrado Correctamente"/>
                </jsp:forward>
            <%}
            on.close();
        }catch(Exception ex)
        {%>
            <jsp:forward page="index.jsp">
            <jsp:param name="registroexitoso" value="No se ALmacenaron los Datos"/>
            </jsp:forward>
        <%}
     %>

domingo, 2 de noviembre de 2014

Modificar y eliminar registros

Otra forma de hacerlo usando más código web. Revisar la siguiente liga:
http://vacilmio.blogspot.mx/2010/10/modificar-y-eliminar-registros-en-una.html

Actividad: hacer un CRUD que incluya insertar, consultar, modificar y eliminar registros a la BD correos de la tabla Usuarios con los atributos: usuario (PK), nombre, estado (con un select) y contraseña.

Aplicación biblioteca

Probar la siguiente aplicación y explicar frente a grupo lo que se te asigne:
Revisar toda la aplicación completa.

Clase Lunes

Laboratorio 6 las 2 horas, de 3:10 a 4:50pm.

viernes, 31 de octubre de 2014

Insertar a la BD

Revisar el siguiente código y probarlo para que inserte:
https://drive.google.com/a/uvp.edu.mx/file/d/0BzWLIzGSJ9SMOFVVRW9yWldwbWc/view?usp=sharing

Nota: utilicen el archivo de conexión que ya habían hecho pero tendrán que cambiar la forma de importarlo al archivo insertar.jsp porque este debe ser en java.

domingo, 26 de octubre de 2014

Consultas a una BD

http://spark-7.blogspot.mx/2013/01/realizar-consultas-desde-jsp-mysql.html

Conectarse a una BD

http://todoenjava.blogspot.mx/2013/10/jsp-conexion-con-mysql.html

Conceptos:
Conexion JSP + MySql + NetBeans


Paso 1. Instalar WampServer.

Paso 2. Crear la Base de Datos.

Paso 3. Crear la conexión (abrimos NetBeans).

Paso 4. Cargar el Driver de Conexión (MySql JDBC).

Paso 5. Ejecutar Conexión.

Código de Conexión.

import="java.sql.Connection"
Permite conectarse a una fuente de datos

import="java.sql.DriverManager"
Se utiliza para cargar un Driver

import="java.sql.ResultSet"
Se emplea para almacenar el resultado de la consulta

import="java.sql.Statement"
Se usa para crear consultas y enviarlas a la base de datos

import="java.sql.SQLException"
Contiene Información acerca de cualquier excepción desde la página

Connection conex=null;//SE DECLARA UN OBJETO DE TIPO CONEXIÓN

Statement sql=null;//SE DECLARA UN OBJETO DE SENTENCIA SQL

try{
Class.forName("com.mysql.jdbc.Driver");//CARGA DEL DRIVER

conex=(Connection)DriverManager.getConnection("jdbc:mysql://127.0.0.1/nombrebase","root","");//SE ESTABLECE LA CONEXION A TRAVÉS DEL DRIVERMANAGER

sql=conex.createStatement();//PARA CREAR LAS SENTENCIAS SQL Y DEVUELVAN RESULTADOS

out.print("CONEXION EXITOSA");

}catch(Exception e){

out.print("ERROR DE CONEXION" + e);

}

lunes, 20 de octubre de 2014

Adivina número

package num;import java.util.*;

public class NumeroBean {
    int respuesta;
    boolean adivino;
    String pista;
    int numIntentos;
    public NumeroBean() {
        reset();
    }
    public void setNumero(String numero) {
        numIntentos++;
        int g;
        try {
            g = Integer.parseInt(numero);
        } catch (NumberFormatException e) {
            g = -1;
        }
        if (g == respuesta) {
            adivino = true;
        } else if (g == -1) {
            pista = "un número";
        } else if (g < respuesta) {
            pista = "uno más grande";
        } else if (g > respuesta) {
            pista = "uno más chico";
        }
    }
    public boolean getAdivino() {
        return adivino;
    }
    public String getPista() {
        return "" + pista;
    }
    public int getNumIntentos() {
        return numIntentos;
    }
    public void reset() {
        respuesta = Math.abs(new Random().nextInt() % 100) + 1;
        adivino = false;
        numIntentos = 0;
    }
}
En el jsp llamado adivinaNumero.jsp, se utilizan los métodos definidos en el bean, de esta manera se puede ver como es el uso de elementos script en las páginas JSP. El siguiente código es el encargado de mostrar los mensajes al usuario con los valores que se definen en la clase NumeroBean.
<%@ page import = "num.NumeroBean" %><jsp:useBean id="nbean"
             scope="session" />
<jsp:setProperty name="nbean" property="*" /><html>
    <head><title>Adivina el número</title></head>
    <body bgcolor="white">
        <font size=4>
        <% if (nbean.getAdivino()) {%>
        Felicidades! adivinaste.
        Después de <%= nbean.getNumIntentos()%> intentos.<p>
            <% nbean.reset();%>
            <a href="adivinaNumero.jsp">Intentar de nuevo</a>?
            <% } else if (nbean.getNumIntentos() == 0) {%>
            Bienvenido al juego de adivinar el número.<p>
            ¿En qué número estoy pensando? del 1 al 100.<p>
        <form method=get>
            Escribe el número? <input type=text name=numero>
            <input type=submit value="Submit">
        </form>
        <% } else {%>
        Bien, pero no. Intenta con <b><%= nbean.getPista()%></b>.
        Tú has hecho <%= nbean.getNumIntentos()%> intentos.<p>
            ¿En qué número estoy pensando? del 1 al 100.<p>
        <form method=get>
            Escribe el número? <input type=text name=numero>
            <input type=submit value="Submit">
        </form>
        <% }%>
        </font>
    </body>
</html>  
Para probar la aplicación es necesario escribir la siguiente dirección en el navegador:

Examen II

sábado, 18 de octubre de 2014

Buscar caracteres en una cadena

El método indexOf de la clase String de Java, nos permite obtener el índice de comienzo de una subcadena dentro de otra.
public class indexOfEjemplo {
  public static void main(String[] args) throws Exception{
    String cadena = "Codigo Fuente en Java";
    int index = cadena.indexOf("Java"); 
    System.out.println(index);
  }
}
Cuando queremos conocer sucesivas apariciones de una subcadena, podemos llamar la función repetidamente, pero con un segundo parametro que incluíra el índice de la última posición encontrada más 1. Por ejemplo:
public class indexOfEjemplo01 {
  public static void main(String[] args) throws Exception{
    String cadena = "Codigo Fuente en Java y aca aparece otra vez Java";
    int index = cadena.indexOf("Java"); 
    System.out.println(index);
    index = cadena.indexOf("Java",index+1); 
    System.out.println(index); // imprime segunda aparicion de Java
  }
}

Más explicado:
http://www.tutorialspoint.com/java/java_string_indexof.htm

Repaso examen

Revisar el siguiente documento para repasar JSP y revisar hasta la página 74:
http://www.tamps.cinvestav.mx/~vjsosa/clases/sd/JSP-extended.pdf

martes, 14 de octubre de 2014

Actividades a entregar

Sobre las exposiciones hacer:
  • Un mapa conceptual su exposición por equipos: Carlos Mayo y Eduardo Meza, Leo y Ezequiel.
  • Un cuestionario de 7 preguntas contestadas: Waldemar y Eduardo Velasco, Fernando y Roman, Miguel Calvo y Uriel.
Hacer un reporte por equipo de las siguientes prácticas realizadas: 
  • Scriptlets (promedio de calificaciones): Carlos Mayo y Eduardo Meza 
  • Formularios dinámicos: Waldemar y Eduardo Velasco
  • Conversión de monedas: Leo y Ezequiel
  • Beans: Fernando y Roman
  • Sesiones: Miguel y Uriel
Para el Proyecto entregar:
  • Aplicación web
  • Reporte del proyecto
  • Presentación en power point del desarrollo del proyecto, explicando de forma general el código, y capturas de pantalla.
Fecha máxima de entrega de estas actividades: Viernes 24 de octubre.

domingo, 12 de octubre de 2014

Sesiones en JSP

Un poco de teoría:
http://prezi.com/ymg4bi4gdst2/manejo-de-sesiones-con-jsp/

Ejemplo sin BD: http://es.slideshare.net/Sysworkap/jsp-con-session

Ejemplo con BD: http://www.uv.mx/personal/lizhernandez/files/2012/05/sesionesJsp.pdf

Repaso: file:///C:/Users/RANGEL/Downloads/manejosessiones-110201103658-phpapp01.pdf

COOKIES: creación y recuperación

Las sesiones vistas anteriormente basan su funcionamiento en los cookies.
Cuando se hace uso de la interfaz HttpSession de forma interna y totalmente transparente al programador se está haciendo uso de los cookies.
De hecho cuando a través de una página JSP se comienza una sesión, se crea un cookie llamado JSSESIONID.
La diferencia es que este cookie es temporal y durará el tiempo que permanezca el navegador ejecutándose, siendo borrada cuando el usuario cierre el navegador.
El objetivo de utilizar cookies es poder reconocer al usuario en el momento en el que se conecta al servidor.
Una de las páginas que recoge la petición del usuario puede comprobar si existe un cookie que ha dejado anteriormente, si es así, sabe que ese usuario ya ha visitado ese website y por lo tanto puede leer valores que le identifiquen. Otro de los usos de los cookies es ofrecer una personalización al usuario.
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, serán recuperados para utilizarlos en la personalización de la página tal y como el usuario estableció en su momento.
Un ejemplo que se ha podido encontrar en muchas webs es en el momento de realizar un registro o solicitar el alta en un área restringida, ya que en muchas ocasiones existe un checkbox que cuando se selecciona permite recordar el nombre de usuario a falta de que sólo se escriba la clave.
Utilizando también el identificador idSession que se genera en un sesión como ya hemos visto y guardándolo en el cookie se pueden mostrar mensajes personalizados en el momento en el que el usuario acceda de nuevo al website.
Para trabajar con cookies se utiliza la clase Cookie que está disponible en 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.

Creación de cookies

Un cookie almacenado en el ordenador de un usuario está compuesto por un nombre y un valor asociado al mismo. Además, asociada a este cookie pueden existir una serie de atributos que definen datos como su tiempo de vida, alcance, dominio, etc.
Cabe reseñar que los cookies, no son más que ficheros de texto, que no pueden superar un tamaño de 4Kb, además los navegadores tan sólo 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. El siguiente ejemplo crearía un objeto Cookie que contiene el nombre “nombre” y el valor “objetos”.
<% Cookie miCookie=new Cookie(“nombre”,”objetos”); %>
También es posible crear cookies con contenido que se genere de forma dinámica. El siguiente código muestra un cookie que guarda un texto que está concatenado a la fecha/hora en ese momento:
<%@page contentType="text/html; charset=iso-8859-1" session="true" language="java" import="java.util.*" %> <% Cookie miCookie=null; Date fecha=new Date(); String texto= “Este es el texto que vamos a guardar en el cookie”+fecha; miCookie=new Cookie(“nombre”,texto); %>
En esta ocasión el contenido del valor a guardar en el cookie está en la variable “texto”.
También se pueden guardar valores o datos que provengan de páginas anteriores y que hayan sido introducidas a través de un formulario:
<% Cookie miCookie=null; String ciudad= request.getParameter(“formCiudad”); miCookie=new Cookie(“ciudadFavorita”,ciudad); %>
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 ejecución del navegador. Si el usuario cierra el navegador, los cookies que no tengan establecido un tiempo de vida serán destruidos.
Por tanto, si se quiere que un cookie dure más tiempo y esté disponible para otras situaciones es necesario establecer un valor de tiempo (en segundos) que será la duración o tiempo de vida del cookie. Para establecer este atributo se utiliza el método setMaxAge(). El siguiente ejemplo establece un tiempo de 31 días de vida para el cookie “unCookie”:
<% unCookie.setMaxAge(60*60*24*31); %>
Si se utiliza un valor positivo, el cookie será destruido después 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 “/” (raíz), 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 sólo será visible dentro del directorio “datos”. Este atributo se establece mediante el método setPath().
<% unCookie.setPath(“/”); %>
Para conocer el valor de path, se puede utilizar el método getPath().
<% out.println(“cookie visible en: “+unCookie.getPath()); %>
Existe un método dentro de la clase Cookie que permite establecer el dominio desde el cual se ha generado el cookie. Este método tiene su significado porque un navegador sólo envía al servidor los cookies que coinciden con el dominio del servidor que los envió. Si en alguna ocasión se requiere que estén disponibles desde otros subdominios se especifica con el método setDomain(). Por ejemplo, si existe el servidor web en la página www.paginasjsp.com , pero al mismo tiempo también existen otros subdominios como usuario1.paginasjsp.com, usuario2.paginasjsp.com, etc.
Si no se establece la propiedad domain se entiende que el cookie será visto sólo desde el dominio que lo creó, pero sin embardo si se especifica un nombre de dominio se entenderá que el cookie será visto en aquellos dominios que contengan el nombre especificado.
En el siguiente ejemplo hace que el cookie definido en el objeto “unCookie” esté disponible para todos los dominios que contengan el nombre “.paginasjsp.com”. Un nombre de dominio debe comenzar por un punto.
<% unCookie.setDomain(“.paginasjsp.com”); %>
Igualmente, para conocer el dominio sobre el que actúa el cookie, basta con utilizar el método getDomain() para obtener esa información. 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 sólo se tenía un objeto que representa ese cookie.
Para crear el fichero cookie real, se utiliza el método addCookie() de la interfaz HttpServletResponse:
<% response.addCookie(unCookie); %>
Una vez ejecutada esta línea es cuando el cookie existe en el disco del cliente que ha accedido a la página JSP. Es importante señalar que si no se ejecuta esta última línea el cookie no habrá sido grabado en el disco, y por lo tanto, cualquier aplicación o página que espere encontrar dicho cookie no lo encontrará.

Recuperación de cookies

El proceso de recuperar un cookie determinado puede parecer algo complejo, ya que no hay una forma de poder acceder a un cookie de forma directa. Por este motivo es necesario recoger todos los cookies que existen hasta ese momento e ir buscando aquél que se quiera, y que al menos, se conoce su nombre.
Para recoger todos los cookies que tenga el usuario guardados se crea un array de tipo Cookie, y se utiliza el método getCookies() de la interfaz HttpServletRequest para recuperarlos:
<% Cookie [] todosLosCookies=request.getCookies();
/*El siguiente paso es crear un bucle que vaya leyendo todos los cookies.*/
for(int i=0;i Cookie unCookie=todosLosCookies[i];
/*A continuación 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 sólo queda utilizar los métodos apropiados para obtener la información necesaria que contiene.*/
out.println(“Nombre: “+unCookie.getName()+”);
out.println(“Valor: “+unCookie.getValue()+”);
out.println(“Path: “+unCookie.getPath()+”);
out.println(“Tiempo de vida:“+unCookie.getMaxAge()+”);
out.println(“Dominio: “+unCookie.getDomain()+”); %>

y de la siguiente liga:
http://dis.um.es/~lopezquesada/documentos/IES_1213/IAW/curso/UT5/ActividadesAlumnos/12/cookies.html