Download Servlets con acceso a Bases de Datos

Document related concepts
no text concepts found
Transcript
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
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
Servlet
BD
externa
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
Estructura de un HttpServlet
HttpServlet
Objeto
Método init()
HttpServletRequest
Objeto
HttpServletResponse
•Se ejecuta una sola vez al inicializar el Servlet
•Inicializar variables y operaciones costosas en tiempo de ejecución
Métodos doGet() o doPost()
•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
Derby
Database
Database
ODBC Driver
ODBC
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() o doPost()
•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 Alonso
Nicolás Serrano