Importancia de las base de datos en las aplicaciones WEB
Las base de datos en las aplicaciones web son indispensables en esta linea de trabajo ya que al realizar una aplicacion web hay usuario que no desean solo simplemente trabajar en un esquema que no puede almacenar datos y por ello mismo también realizamos no solo en un escritorio remoto la aplicacion con base de datos, si no también las aplicaciones web que puede almacenar datos desde la red.
¿Que es JDBC?
Es el API para la ejecución de sentencias SQL. (como punto de interés JDBC es una marca registrada y no un acrónimo, no obstante a menudo es conocido como "JAVA Databases Connectivity"). Consiste en un conjunto de clases e interfases escritas en el lenguaje de programación java.
Una
cookie es un fichero pequeño que un servidor web puede enviar al
navegador del cliente que lo almacena en su disco duro. Este fichero se
compone de un identificador único, por lo que el servidor puede
identificar al cliente cuando se conecte otra vez. Un mismo servidor (o
aplicación web) puede, obviamente, enviar diferentes cookies con
significados diversos. Siempre que el cliente se conecte a una web, éste
enviará todas las cookies que le envió previamente el servidor como
parte del objeto HttpServletRequest.
Los navegadores dan la opción de desactivar las cookies por lo que esto debe tenerse en cuenta. Un navegador puede almacenar un máximo de 20 cookies por web y ninguno de ellos puede superar los 4K. El servlet puede especificar la vida máxima de la cookie en segundos. Superado ese tiempo, el navegador la descarta y no la envía al servidor (y posiblemente la borra del disco duro).
El siguiente código muestra cómo un servlet puede crear y enviar una cookie a un cliente:
public void doGet(HttpServletRequest peticion, HttpServletResponse respuesta
{
Cookie miCookie = new Cookie(“idCliente”,”dato”);
// hacemos que nuestra cookie tenga sentido durante un día
miCookie.setMaxAge(60*60*24);
respuesta.addCookie(miCookie);
}
Cuando el usuario se conecte a la misma web otra vez, un servlet puede recuperar las cookies del cliente a través del objeto HttpServletRequest tal como se muestra en el código siguiente:
Cookie [] cookies = peticion.getCookies();
for(int i=0; i<cookies.length; i++)
{
Cookie cookieActual = cookies[i];
String identificador = cookieActual.getName();
String valor = cookieActual.getValue();
If(identificador.equals(“idCliente”)
{
// tratamiento específico para ese usuario, como por ejemplo mostrar una web
// personalizada con los últimos artículos que estuvo consultando.
}
}
Las cookies permiten almacenar la información del usuario en el lado del cliente, lo cual tiene las siguientes ventajas:
• Sobreviven a las caídas del servidor.
• No sobrecargan la memoria del servidor
• Simplifican la recuperación tras una caída del servidor porque almacenan los últimos datos valiosos resultado de las selecciones del cliente antes de que el servidor cayera.
Desgraciadamente también tienen algunos inconvenientes:
• Ofrecen muy poca privacidad y pueden ser leídas por usuarios no autorizados muy fácilmente (especialmente en equipos compartidos o públicos).
• Incrementan la carga de la red.
• Los usuarios pueden deshabilitar su uso en los navegadores.
El objeto HttpSession
Otra solución para mantener la sesión del usuario es el uso de la clase javax.servlet.http.HttpSession. El contenedor de servlets crea un solo objeto de este tipo por cliente al cual se le asocia y este será compartido por todos los servlets. En estos objetos se pueden almacenar pares clave/valor con el método al estilo de los HashMap. Estos objetos no se crean automáticamente. Deberían ser creados por el primer servlet que se encuentra el usuario y el resto lo usarán para almacenar y recuperar información. Se crean de la siguiente manera:
HttpSession miSesion = peticion.getSession(true);
Esta llamada puede entenderse como “Encuentra mi objeto HttpSession o crea uno caso de no existir”. En este momento, el servidor de aplicaciones genera un identificador de sesión único que se envía al usuario automáticamente mediante una cookie o mediante reescritura de URL según convenga y de forma automática.
El resto de servlets usuarios pueden presuponer que la sesión se creó (si la aplicación está bien diseñada, así debería ser) y para obtener el objeto pueden hacer la llamada así:
HttpSession miSesion = peticion.getSession(false);
que se entiende como “encuentra mi objeto de sesión”. Si no lo encontrara, devolvería un valor null.
Ejemplo:
//Creación
public void doGet(HttpServletRequest peticion,
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(true);
public void doGet(HttpServletRequest peticion,
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(true);
LinkedList articulos = new LinkedList();
sesion.setAttribute(“articulos”,articulos);
...
// página HTML de bienvenida y formulario para comprar artículos
// y tratamiento del formulario por parte del siguiente servlet
respuesta.getWriter().println(“<html><body>...</body></html>”);
...
}
//Carga
public void doGet(HttpServletRequest peticion,
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(false);
public void doGet(HttpServletRequest peticion,
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(false);
LinkedList articulos = (LinkedList)sesion.getAttribute(“articulos”);
String nombreArticulo = peticion.getParameter("nombreArticulo");
Articulo a = new Articulo(nombreArticulo);
articulos.add(a);
...
// página HTML que contiene qué se ha comprado hasta el momento
// y da la opción de seguir comprando (nueva llamda a este servlet)
// o de pasar a la factura (llamada al siguiente servlet)
respuesta.getWriter().println(“<html><body>...</body></html>”);
...
}
//Uso y desuso
public void doGet(HttpServletRequest peticion,
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(false);
LinkedList articulos = (LinkedList)sesion.getAttribute(“articulos”);
...
// generar página web con todos los artículos comprados
respuesta.getWriter().println(“<html><body>...</body></html>”);
sesion.invalidate();
...
}
HttpServletResponse respuesta)
throws ServletException, IOException
{
...
HttpSession sesion = peticion.getSession(false);
LinkedList articulos = (LinkedList)sesion.getAttribute(“articulos”);
...
// generar página web con todos los artículos comprados
respuesta.getWriter().println(“<html><body>...</body></html>”);
sesion.invalidate();
...
}
Como vemos, la última línea invalida la sesión con lo que tras esta llamada no se podrá seguir utilizando. Si no hay una llamada explícita a invalidate(), la sesión lo hará automáticamente dependiendo de cómo se haya configurado el servidor de aplicaciones o tras el tiempo indicado en segundos por una llamada previa al método setMaxInactiveInterval().
No hay comentarios:
Publicar un comentario