160 likes | 291 Views
Servlets con acceso a Bases de Datos 21 de Abril de 2008. Fernando Alonso Nicolás Serrano. Indice. Repaso de Servlets ¿Qué es un Servlet? Estructura de un Servlet – Ciclo de vida Repaso de JDBC Servlets con acceso a Bases de Datos Ejemplo 1: Escribir en una Base de Datos
E N D
Servlets con acceso a Bases de Datos 21 de Abril de 2008 Fernando AlonsoNicolás Serrano
Indice • Repaso de Servlets • ¿Qué es un Servlet? • Estructura de un Servlet – Ciclo de vida • Repaso de JDBC • Servlets con acceso a Bases de Datos • Ejemplo 1: Escribir en una Base de Datos • Ejemplo 2: Consultar una Base de Datos
Servlets • Programas en Java que se ejecutan en un servidor HTTP (servidor Web) • Actúan como capa intermedia entre: • Petición proviniente de un Navegador Web u otro cliente HTTP • Bases de Datos o Aplicaciones en el servidor HTTP Servidor Web BD BD externa Servlet Aplicación
Cuándo y por qué usar Servlets • Muchas peticiones desde navegador se satisfacen retornando documentos HTML estáticos, es decir, que están en ficheros • En ciertos casos, es necesario generar las páginas HTML para cada petición: • Página Web basada en datos enviados por el cliente • Motores de búsqueda, confirmación de pedidos • Página Web derivada de datos que cambian con frecuencia • Informe del tiempo o noticias de última hora • Página Web que usa información de bases de datos corporativas u otras fuentes del la parte del servidor • Comercio electrónico: precios y disponibilidades
Objeto HttpServletRequest Objeto HttpServletResponse Estructura de un HttpServlet HttpServlet • Método init() • Se ejecuta una sola vez al inicializar el Servlet • Inicializar variables y operaciones costosas en tiempo de ejecución • Métodos doGet()odoPost() • Recoger peticiones del usuario y ejecutar operaciones • Mandar respuesta al usuario (en forma de HTML) Otros métodos de usuario • Método destroy() • Lo llama el servidor al “apagarse” • Cerrar procesos en curso, liberar memoria, cerrar ficheros
Ejemplo: ServletOpinion.java <?xml version="1.0" encoding="ISO-8859-1" ?> <web-app> <servlet> <servlet-name>Opinion</servlet-name> <servlet-class>ServletOpinion</servlet-class> </servlet> <servlet-mapping> <servlet-name>Opinion</servlet-name> <url-pattern>/opinion</url-pattern> </servlet-mapping> </web-app> ServletOpinion.java
JDBC • API de Java para ejecutar sentencias SQL • JDBC posibilita básicamente tres cosas: • Establecer una conexión con una base de datos desde Java • Enviar sentencias SQL a través de dicha conexión • Procesar los resultados • La JDBC 3.0 API comprende 2 paquetes: • java.sql • javax.sql
JDBC de forma esquemática ResultSet Statement Aplicación Cliente Connection DriverManager JDBC-ODBC Driver Derby Driver Driver ODBC Driver DerbyDatabase ODBCDatabase Database
Utilización de JDBC 3.0 API Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = ″jdbc:odbc:wombat″; Connection con = DriverManager.getConnection(url); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(″SELECT a, b, c FROM Table2″); While(rs.next()){ int i = rs.getInt(a); String s = rs.getString(b); Float f = rs.getFloat(c); System.out.println(ROW= + i + + s + + f); }
JDBC con base de datos Derby (opc.) • Se substituyen las líneas: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • String url = ″jdbc:odbc:wombat″; • Por las líneas: • Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); • String url = ″jdbc:derby:wombat″;
Estructura de un Servlet con acceso a DB HttpServlet Objeto Connection • Método init() • Establecer conexión con la Base de Datos • Métodos doGet()odoPost() • Interacción con la Base de Datos • Bien en el propio cuerpo de estos métodos • Bien mediante llamadas a otros métodos de usuario Otros métodos de usuario: actualizarBaseDeDatos()... • Método destroy() • Cerrar la conexión con la Base de Datos
Servlets con acceso a Base de Datos • Conexión a Bases de Datos • Tarea importante y frecuente de los Servlets • Servlets • Funciones de capa intermedia en sistemas con arquitectura de tres capas • Ventajas: • Nivel intermedio: control de operaciones contra la Base de Datos • Drivers JDBC no tienen que estar en el cliente • Se puede tener constancia de lo que ha hecho el usuario en peticiones anteriores • Sincronización de peticiones
Ejemplo 1: Escribir en una Base de Datos • Base de Datos Access • ServletOpinion2.mdb • Data Source Name (DSN) • opinion • Página HTML: • MiServlet2.html • Servlet • ServletOpinion2.java -> ServletOpinion2.class
Ejemplo 2: Consultar una Base de Datos • Base de Datos Access • Alumnos.mdb • Data Source Name (DSN) • alumnos • Página HTML: • Formulario2.html • Servlet • ListaAlumnos.java -> ListaAlumnos.class
Ejemplo: SurveyServlet.java (opc.) <?xml version="1.0" encoding="ISO-8859-1"?> <web-app "> <servlet> <servlet-name>Survey</servlet-name> <servlet-class>SurveyServlet</servlet-class> <init-param> <param-name>resultsDir</param-name> <param-value> G:\Java\apache-tomcat-5.5.12\webapps\practicaServlet\tmp </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Survey</servlet-name> <url-pattern>/survey</url-pattern> </servlet-mapping> </web-app>
Servlets con acceso a Bases de Datos 21 de Abril de 2008 Fernando AlonsoNicolás Serrano