Servlets Unidad: 4 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos
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
Servlet
Laboratorio de Programacion
1
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.
Servlet
Laboratorio de Programacion
2
Proceso petición de servlet
El navegador remite la solicitud al servidor web
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’:
Normalmente tras cumplimentar un formulario. El servlet a activar es el indicado en la propiedad ‘action’ del formulario
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
Servlet
Laboratorio de Programacion
3
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
Servlet
Laboratorio de Programacion
4
Estructura básica de fichero de configuración Web.xml
Título Servlets: Nombre Clase URLs (plantillas)
Servlet
// // // // // // // //
Laboratorio de Programacion
5
Ejemplo de fichero de configuración web.xml Ejemplos tutorial Servlets de ejemplos del tutorial de Servlets y JDBC. HolaMundo HolaMundo HolaMundo /servlet/HolaMundo
Servlet
Laboratorio de Programacion
6
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.
Servlet
Laboratorio de Programacion
7
Sesiones
Motivación
Servlet
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 ?.
Laboratorio de Programacion
8
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 el servidor web, el programador la consulta
Servlet
Laboratorio de Programacion
9
Cookies o Sessions
Con sessions la información la almacena y administra el servidor por lo que el servidor tiene un estado que tiene que administrar cuidadosamente. 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 si quiere.
Servlet
Laboratorio de Programacion
10
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:
Servlet
Cookies Añadir información en la URL Usar campos ocultos de formularios (HIDDEN) Empleo del objeto HttpSession del servlet Laboratorio de Programacion
11
Servlets: Seguimiento de sesión
Los servlets proporcionan una solución técnica: la API HttpSession. Una interfaz de alto nivel construída sobre los cookies y la reescritura de las urls (pero transparente para el desarrollador). Permite almacenar objetos.
Servlet
Laboratorio de Programacion
12
Sesiones
Trabajar con sesiones: Buscar el objeto HttpSession asociado a una petición:
Servlet
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.
Laboratorio de Programacion
13
Sesiones
Métodos
Servlet
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.
Laboratorio de Programacion
14
Servlets y base de datos
Servlets
Base de datos relacional
Son programas en Java que se ejecutan en servidores para proveer páginas WEB dinámicas y personalizadas, accesando a bases de datos y otros recursos. Es una colección estructurada de datos o registros que se almacena en un sistema informático.
Objetivo
Servlet
Implementar una página WEB dinámica utilizando servlets trabajando de forma conjunta con una base de datos.
Laboratorio de Programacion
15
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 servlet es la mayor utilización de recursos pues es necesario trabajar con una máquina virtual.
Servlet
Laboratorio de Programacion
16
Servlets y base de datos
Herramientas utilizadas
Servlet
El contenedor WEB (TomCat 6.0.18) La base de datos (MySql) JDK 1.5 o superior Driver JDBC adecuado
Laboratorio de Programacion
17
Configuración de variables de ambiente
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:
Servlet
C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0\lib
Laboratorio de Programacion
18
Clases necesarias import import import import import
Servlet
java.io.*; java.sql.*; java.util.*; javax.servlet.*; javax.servlet.http.*;
Laboratorio de Programacion
19
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.
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()
Class.forName("com.mysql.jdbc.Driver");
con.close()
Realizar tratamientos de excepciones
Servlet
Laboratorio de Programacion
20
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
Servlet
Laboratorio de Programacion
21
Ejemplo con acceso a base de datos (Servlet+JDBC)
Página HTML que realiza la petición al servlet
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 MySQL con la siguiente estructura:
Laboratorio de Programacion
22
Ejemplo import import import import
java.io.*; javax.servlet.*; javax.servlet.http.*; 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"); } }
Servlet
Laboratorio de Programacion
23
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("JDBC"); out.println(""); out.println("Ejemplo de JDBC"); out.println("
"); out.println("Jugador | Votos” + " |
"); 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("" + nombre + " | " + votos + " |
"); } rs.close(); set.close(); } catch (Exception e) { System.out.println("No lee de la tabla"); } out.println("
"); out.println("Muchas gracias " + nombreP + " por su visita"); out.println(""); out.close(); }
Servlet
Laboratorio de Programacion
24
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
Servlet
Laboratorio de Programacion
25
Ejemplo…
Pagina HTML Estadísticas de futbol Estadísticas de Jugadores de Futbol
Nombre del Visitante: eMail:
Servlet
Laboratorio de Programacion
26
Ejemplo…
Base de datos
Servlet
Nombre de la BD: BDJugadores Tabla Jugadores
Laboratorio de Programacion
27
Consultas…
Servlet
Laboratorio de Programacion
28
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:
Servlet
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 Laboratorio de Programacion
29
Próxima clase
Práctica TP Servlet
Servlet
Laboratorio de Programacion
30