servlets - oocities · de aplicaciones con información que puede tener un contexto más amplio que...

31
Servlets Unidad: 4 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Upload: others

Post on 13-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlets

Unidad: 4Laboratorio de Programación

Universidad Nacional de la Patagonia AustralUnidad Académica Río Gallegos

Page 2: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 1

Indice

� Módulos Web: configuración, estructura básica, ejemplo.

� Sesiones con servlets� Diferencias con cookies� Servlets y base de datos� Ejemplos y ejercitación

Page 3: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 2

Configuración de módulos web

� Los Servlets se crean y destruyen por iniciativa del contenedor web, que también activa sus métodos.

� Un fichero de configuración permite especificar estos procesos.

� El fichero web.xml contiene información utilizada por el servidor de aplicaciones y el contenedor web en su funcionamiento.

Page 4: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 3

Proceso petición de servlet

� El navegador remite la solicitud al servidor web� Normalmente tras cumplimentar un formulario. El servlet a activar

es el indicado en la propiedad ‘action’ del formulario

� El servidor web determina quién debe servir la solicitud� Si corresponde a una página estática la sirve él� Si corresponde a una aplicación, delega en el contenedor de

servlets

� El contenedor determina el servlet adecuado, y redirige la petición a su método ‘service’:� El argumento ‘solicitud’ contiene los datos de la petición� El argumento ‘respuesta’ permite devolver datos al servidor web� Internamente, ‘service’ determina el tipo de solicitud e invoca

doGet o DoPost

� La respuesta llega al contenedor, que se la pasa al servidor web, y éste la reenvía al navegador

Page 5: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 4

Información de configuración de módulos web

� Inicialización de parámetros de la aplicación

� Lista de servlets

� Inicialización de parámetros de los servlets

� Asociación de URLs a servlets

Page 6: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 5

Estructura básica de fichero de configuración Web.xml

� Título

� Servlets:

� Nombre

� Clase

� URLs (plantillas)

// <web-app …>

// <display-name>

// <servlet>

// <servlet-name>

// <servlet-class>

// <servlet-mapping>

// <servlet-name>

// <url-pattern>

Page 7: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 6

Ejemplo de fichero de configuración web.xml<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app><display-name>Ejemplos tutorial</display-name><description>Servlets de ejemplos del tutorial de Servlets y JDBC.

</description><servlet>

<servlet-name>HolaMundo</servlet-name><servlet-class>HolaMundo</servlet-class>

</servlet><servlet-mapping>

<servlet-name>HolaMundo</servlet-name><url-pattern>/servlet/HolaMundo</url-pattern>

</servlet-mapping></web-app>

Page 8: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 7

Recordatorio

� Los servlets no son aplicaciones, sino partes de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación).

� Los servlets proporcionan medios para almacenar información válida en los contextos de sesión y de aplicación y para acceder a ella.

Page 9: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 8

Sesiones

� Motivación

� Como controlar y realizar un seguimiento de un cliente que navega por diferentes páginas de la aplicación.

� Por ejemplo, en una tienda on-line añaden artículos a su carro de la compra. Cómo se sabe que hay en el carro ?.

Page 10: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 9

Sesiones

� Las sesiones con servlet es un mecanismo para mantener información acerca del estado de los requests de un usuario durante una sesión

� Una sesión es un diálogo de una instancia de un browser cliente con el server en un período de tiempo limitado (normalmente 30 minutos).

� Se pueden asociar objetos de información a la sesión, los cuales se conservan en el servlet

� La sesión no la maneja el programador sino el elservidor web, el programador la consulta

Page 11: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 10

Cookies o Sessions

� Con sessions la información la almacena y administra el servidor por lo que el servidortiene un estado que tiene que administrarcuidadosamente.

� Con Cookies es el cliente el que tiene la información, lo que implica que esta va y viene cada vez que se contacta al servidor.

� El cliente puede prohibir el uso de cookies siquiere.

Page 12: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 11

Gestión de la Sesión.Mantenimiento del estado de la sesión.

� El protocolo HTTP no posee la capacidad de almacenar estados.

� Se complican mucho las tareas de guardar las acciones (p.e. las compras) de un usuario.

� Posibles soluciones:� Cookies

� Añadir información en la URL

� Usar campos ocultos de formularios (HIDDEN)

� Empleo del objeto HttpSession del servlet

Page 13: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 12

Servlets: Seguimiento de sesión

� Los servlets proporcionan una solución técnica: la API HttpSession.

� Una interfaz de alto nivel construídasobre los cookies y la reescritura de las urls (pero transparente para el desarrollador).

� Permite almacenar objetos.

Page 14: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 13

Sesiones

� Trabajar con sesiones:

� Buscar el objeto HttpSession asociado a una petición:

� Se usa el método "getSession" de "HttpServletRequest" que devuelve null si no hay una sesión asociada. Entonces para crear una sesión se pasa true.

Page 15: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 14

Sesiones

� Métodos� getSession(): Retorna la sesión que esta asociada al usuario

que está haciendo un request. Si el usuario no tiene una sesión creada, puede crear una sesión si tiene por argumento a TRUE, o devolver un NULL si el argumento es FALSE.

� putValue():asigna un valor a un objeto especificado, si ya esta asignado, este es reemplazado.

� getValue():Recupera un objeto de una sesión.� getValueNames():retorna un arreglo que contienen los

nombres de todos los objetos relacionados con una sesión. En caso contrario retorna vacío.

� removeValue():remueve el objeto que está enlazado con el nombre especificado.

Page 16: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 15

Servlets y base de datos

� Servlets� Son programas en Java que se ejecutan en servidores para

proveer páginas WEB dinámicas y personalizadas, accesandoa bases de datos y otros recursos.

� Base de datos relacional� Es una colección estructurada de datos o registros que se

almacena en un sistema informático.

� Objetivo� Implementar una página WEB dinámica utilizando servlets

trabajando de forma conjunta con una base de datos.

Page 17: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 16

Servlets y base de datos

� Además del servlet existen otras herramientas para la conexión con una base de datos generando una aplicación WEB dinámica.

� Además de servlet, las herramientas más populares son: PHP, ASP .NET.

� Una de las principales desventajas de servletes la mayor utilización de recursos pues es necesario trabajar con una máquina virtual.

Page 18: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 17

Servlets y base de datos

� Herramientas utilizadas

� El contenedor WEB (TomCat 6.0.18)

� La base de datos (MySql)

� JDK 1.5 o superior

� Driver JDBC adecuado

Page 19: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 18

Configuración de variables deambiente

� Bajar el drive MySql JDBC

� Descargar el driver JDBC para MySQL.

� http://dev.mysql.com/downloads/connector/j/5.0.html

� Copiar el driver MySql JDBC en la carpeta:

� C:\Archivos de programa\Apache Software Foundation\Tomcat6.0\lib

Page 20: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 19

Clases necesarias

import java.io.*;

import java.sql.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

Page 21: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 20

Conexión a la base de datos

� El siguiente objetivo es conectarse a la base de datos, para lo cual básicamente hay que realizar dos pasos:� En el método init() del servlet:

� Registrar (cargar en memoria) el controlador.� Class.forName("com.mysql.jdbc.Driver");

� Establecer la conexión por medio del método:� URL = "jdbc:mysql://localhost/bdjugadores";� con = DriverManager.getConnection(URL,"root","");

� Cerrar la conexión� En el método destroy()

� con.close()

� Realizar tratamientos de excepciones

Page 22: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 21

Sentencias SQL

� Para definir y ejecutar las sentencias SQL, el procedimiento es el siguiente:� Lo primero es escribir una sentencia, almacenándola en un

String.� String select_query = "SELECT * FROM habitantes”;

� Crear un objeto de la clase Statement, por medio de la llamada CreateStatement() de la clase Connection.

� La clase Connection se instanció al realizar la conexión a la base de datos.

� Statement set = con.createStatement();� ResultSet rs = set.executeQuery("SELECT * FROM

Jugadores");� Esto es parte del método doPost() o doGet(), de acuerdo al tipo de

llamada al servlet.� No olvidar el manejo de excepciones en el uso de las sentencias

SQL

Page 23: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 22

Ejemplo con acceso a base de datos (Servlet+JDBC)

� Página HTML que realiza la petición al servlet� La página HTML futbol.html permitirá que un cliente entre

su nombre y correo y solicite las estadística de los votos recibidos hasta el momento por jugadores de fútbol en la Base de Datos de MySQL BDJugadores que tendrá una tabla Jugadores. Se debe crear esta BD y sus tablas en MySQLcon la siguiente estructura:

Page 24: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 23

Ejemplo import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.sql.*;

public class TablaVotos extends HttpServlet {

private Connection con;

private Statement set;

private ResultSet rs;

public void init(ServletConfig cfg) throws ServletException {

String URL = "jdbc:mysql://localhost/BDJugadores";

String userName = "root";

String password = "";

try {

Class.forName("com.mysql.jdbc.Driver");

URL = "jdbc:mysql://localhost/bdjugadores";

con = DriverManager.getConnection(URL,userName,password);

set = con.createStatement();

System.out.println("Se ha conectado");

} catch (Exception e) {

System.out.println("No se ha conectado");

}

}

Page 25: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 24

Ejemplo…public void doPost(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

String nombreP = (String) req.getParameter("txtNombre");

PrintWriter out = res.getWriter();

res.setContentType("text/html");

out.println("<html><head><title>JDBC</title></head>");

out.println("<body><font size=10>");

out.println("<h1>Ejemplo de JDBC</h1>");

out.println("<table border=1>");

out.println("<tr><td><b>Jugador</b></td><td><b>Votos” + "</b></td></tr>");

try {

String nombre;

int votos;

set = con.createStatement();

rs = set.executeQuery("SELECT * FROM Jugadores");

while (rs.next()) {

nombre = rs.getString("Nombre");

votos = rs.getInt("Votos");

out.println("<tr><td>" + nombre + "</td><td>" + votos + "</td></tr>");

}

rs.close();

set.close();

} catch (Exception e) {

System.out.println("No lee de la tabla");

}

out.println("</table>");

out.println("<h3>Muchas gracias " + nombreP + " por su visita</h3>");

out.println("</form></font></body></html>");

out.close();

}

Page 26: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 25

Ejemplo…public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

try {

doPost(req, res);

} catch (Exception e) {}

}

public void destroy() {

try {

con.close();

} catch (Exception e) {}

super.destroy();

}

}// fin programa

Page 27: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 26

Ejemplo…

� Pagina HTML<html>

<head>

<title>Estadísticas de futbol</title>

</head>

<body>

<center><H1>Estadísticas de Jugadores de Futbol</H1></center>

<form action="TablaVotos" method="POST" >

<p align="left">

Nombre del Visitante: <input type="text" size="20" name="txtNombre">

eMail: <input type="text" size="20" name="txtMail">

</p>

<p align="left"><input type="submit" name="B1" value="Mostrar Estadisticas">

<input type="reset" name="B2" value="Reset">

</p>

</form>

</body>

</html>

Page 28: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 27

Ejemplo…

� Base de datos� Nombre de la BD: BDJugadores

� Tabla Jugadores

Page 29: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 28

Consultas…

Page 30: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 29

Ejercicio

� Crear una base de datos de libros con JDBC y MySQL, de modo que cada fila refleje la información de un libro (titulo, autor, año, paginas, precio)

� Crear un servlet para mantener (agregar, modificar, eliminar libros) esta base de datos

� Crear un servlet para hacer consultas sobre esta base de datos

� Las consultas son: � ver todos los libros de un autor dado� ver todos los libros que en el título tienen alguna expresión

dada por el usuario � ver todos los libros cuyo precio esté en un cierto rango dado

por el usuario

Page 31: Servlets - OoCities · de aplicaciones con información que puede tener un contexto más amplio que el del código escrito por el desarrollador (contexto de sesión o de aplicación)

Servlet Laboratorio de Programacion 30

Próxima clase

� Práctica TP Servlet