Guía JSP - JDBC
Guía JSP - JDBC
Guía JSP - JDBC
OBJETIVOS:
ACTIVIDADES A REALIZAR
Advertencia
El desarrollo de las actividades contenidas en esta guía es de carácter estrictamente
personal. Cualquier falta de probidad (plagio) que a criterio del Jefe de Práctica sea
cometida, será sancionada con la nota CERO no anulable para todos los
involucrados, los cuales serán además sancionados de acuerdo con el Reglamento
Disciplinario de la PUCP.
Importante
Todos los programas que figuran en la presente guía (y los archivos leídos y/o
generados por éstos) deberán ser grabados en una carpeta especialmente
creada para tales efectos, la cual será referida a lo largo de la guía como su
“carpeta de trabajo”.
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
1. Introducción
Toda página Web es distribuida por medio de un Servidor Web el cual podría ser
Apache, el IIS (Internet Information Service), Tomcat, JBOSS, etc.
Pág. 2
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
2. Servlets
•Un Servlet es una clase Java usada para extender la capacidad de las aplicaciones
basadas en el modelo cliente servidor y ejecución petición respuesta.
•Los Servlets son una potente herramienta para la generación de contenido dinámico
en la Web.
•El Servlet Container es el componente encargado de la creación, acceso y
destrucción de los Servlets, controla su ciclo de vida.
Pág. 3
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
3. JSP
La primera vez que se realiza una petición sobre un JSP el JSP Engine lo traduce en
un Servlet, lo compila y lo procesa. En sucesivas peticiones simplemente se procesa
a través del Servlet Container.
Pág. 4
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
La directiva page nos permite definir uno o más de los siguientes atributos
sensibles a las mayúsculas:
• import="package.class" ó import="package.class1,...,package.classN".
Esto nos permite especificar los paquetes que deberían ser importados.
Por ejemplo:
• contentType="MIME-Type" ó contentType="MIME-Type;
charset=Character-Set" esto especifica el tipo MIME de la salida. El valor
por defecto es text/html. Por ejemplo, la directiva: <%@ page
contentType="text/plain" %> tiene el mismo valor que el scriptlet <%
response.setContentType("text/plain"); %>
• isThreadSafe="true|false". Un valor de true (por defecto) indica un
procesamiento del servlet normal, donde múltiples peticiones pueden
procesarse simultáneamente con un sólo ejemplar del servlet, bajo la
suposición que del autor sincroniza las variables de ejemplar. Un valor de
false indica que el servlet debería implementar SingleThreadModel, con
peticiones enviadas serialmente o con peticiones simultáneas siendo
entregadas por ejemplares separados del servlet.
• session="true|false". Un valor de true (por defecto) indica que la variable
predefinida session (del tipo HttpSession) debería unirse a la sesión
existente si existe una, si no existe se debería crear una nueva sesión
para unirla. Un valor de false indica que no se usarán sesiones, y los
intentos de acceder a la variable session resultarán en errores en el
momento en que la página JSP sea traducida a un servlet.
• buffer="sizekb|none". Esto especifica el tamaño del buffer para el
JspWriter out. El valor por defecto es específico del servidor, debería ser
de al menos 8kb.
• autoflush="true|false". Un valor de true (por defecto) indica que el buffer
debería descargase cuando esté lleno. Un valor de false, raramente
utilizado, indica que se debe lanzar una excepción cuando el buffer se
sobrecargue. Un valor de false es ilegal cuando usamos buffer="none".
• extends="package.class". Esto indica la superclase del servlet que se va
a generar. Debemos usarla con extrema precaución, ya que el servidor
podría utilizar una superclase personalizada.
• info="message". Define un string que puede usarse para ser recuperado
mediante el método getServletInfo.
• errorPage="url". Especifica una página JSP que se debería procesar si se
lanzará cualquier Throwable pero no fuera capturado en la página actual.
Pág. 5
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Ejemplo:
Si queremos hacer algo más complejo que insertar una simple expresión, los
scriptlets JSP nos permiten insertar código arbitrario dentro del método servlet que
será construido al generar la página. Los Scriptlets tienen la siguiente forma:
Pág. 6
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
3.3.1 request
3.3.2 response
3.3.3 out
3.3.4 session
Pág. 7
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
3.4 Acción
Esta acción nos permite cargar y utilizar un JavaBean en la página JSP. Esta
es una capacidad muy útil porque nos permite utilizar la reusabilidad de las
clases Java sin sacrificar la conveniencia de añadir JSP sobre servlets
solitarios. La sintaxis más simple para especificar que se debe usar un Bean
es:
Ahora, una vez que tenemos un bean, podemos modificar sus propiedades
mediante jsp:setProperty, o usando un scriptlet y llamando a un método
explícitamente sobre el objeto con el nombre de la variable especificada
anteriormente mediante el atributo id. Recuerda que con los beans, cuando
decimos "este bean tiene una propiedad del tipo X llamada foo", realmente
queremos decir "Esta clase tiene un método getFoo que devuelve algo del
tipo X, y otro método llamado setFoo que toma un X como un argumento". La
acción jsp:setProperty se describe con más detalle en la siguiente sección,
pero ahora observemos que podemos suministrar un valor explícito, dando un
atributo param para decir que el valor está derivado del parámetro de la
petición nombrado, o sólo lista las propiedades para indicar que el valor
debería derivarse de los parámetros de la petición con el mismo nombre que
la propiedad. Leemos las propiedades existentes en una expresión o scriptlet
JSP llamando al método getXxx, o más comúnmente, usando la acción
jsp:getProperty.
No olvidar que todas las clases que se usan deben ir en el directorio classes
o si es un fichero JAR en el directorio lib, no en el directorio servlets.
Pág. 8
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Esta acción nos permite reenviar la petición a otra página. Tiene un sólo
atributo, page, que debería consistir en una URL relativa. Este podría ser un
valor estático, o podría ser calculado en el momento de la petición, como en
estos dos ejemplos:
Ejercicios prácticos
Pág. 9
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 10
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 11
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Luego se debe Ejecuta el Proyecto : Run > Run Main Project ó (F6) y el
resultado obtenido seria :
Pág. 12
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 13
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
index2.jsp
Pág. 14
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Del código anterior se observa que el valor que se coloque en los campos
dato_nombre y dato_apellido será enviado a otro archivo jsp (index3.jsp).
Luego crear el package beans y dentro crear la clase Persona que tiene el
siguiente código:
Pág. 15
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Luego añadir otro archivo JSP y llamarlo index3 y colocar el siguiente código:
index3.jsp
El archivo index3 recupera los valor enviados por index2.jsp y los muestra.
Como array_persona es una variable de session los valores se almacenan
mientras dure la sesión, esto se verifica insertando varios datos.
Pág. 16
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
4. JDBC
java.sql.Connection
Es la interfaz del paquete java.sql que representa la conexión con la base de datos.
Pasos para obtener una conexión :
Class.forName("com.mysql.jdbc.Driver").newInstance();
La cadena de conexión suele llevar incluido la máquina (host) y puerto (port) donde
se encuentra la instancia de base de datos a la que accedemos.
Pág. 17
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
java.sql.Statement
Es el objeto utilizado para ejecutar las sentencias SQL, el cual debe pedírselo al
objeto Connection.
A través del objeto Statement podemos lanzar las sentencias SQL. Los métodos
más utilizados para ejecutar SQL son: “executeUpdate”, “executeQuerie” o
“execute”.
obtener una conexión :
int updates = stmt.executeUpdate(“update USUARIOS set TLF
= ‘917658991’ where COD = ‘1’ ”);
stmt.close();
conn.close();
java.sql.PreparedStatment
pstmt.setString(“1”, “917658991”);
pstmt.setString(“2”, “1”);
pstmt.close();
java.sql.ResultSet
Por ejemplo a través del Statement obtenido lanzamos consultas con el método
executeQuery, este método nos devuelve un objeto Resultset con el resultado de la
consulta.
Pasos para obtener:
ResultSet rs = stmt.executeQuery(“SELECT * FROM EMPLOYEES”);
while(rs.next()) {
System.out.println(rs.getString(“first_name”));
System.out.println(rs.getString(“last_name”));
}
Pág. 18
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Para obtener los datos debemos ejecutar siempre el método “next” del Resultset,
este método devuelve true/false en función de la disponibilidad de datos.
rs.close();
Existen otras muchas interfaces en los paquetes java.sql y javax.sql las anteriores
servirán para los siguientes ejemplos.
Ejercicio práctico
Pág. 19
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 20
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Para poder obtener las pantallas y el respectivo flujo entre ellas se crea el siguiente
proyecto.
Para poder obtener las pantallas y el respectivo flujo entre ellas se crea el
proyecto: WebMysql igual que en el ejercicio anterior, se crea 4 nuevos jsp:
o lista_employee.jsp (Muestra lista de Empleados)
o data_employee.jsp
o update_employee.jsp
Se tendría:
Pág. 21
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 22
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Hacer click en el botón Add Library, adicionar la librería MySQL JDBC Driver y
luego hacer click en el botón Ok
Pág. 23
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 24
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 25
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 26
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Usuario
Contraseña
Pág. 27
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 28
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 29
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 30
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 31
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 32
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 33
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
Pág. 34
INGENIERÍA DE LAS TELECOMUNICACIONES
LABORATORIO DE SOFTWARE PARA TELECOMUNICACIONES 2 2009-1
El jsp update_employee actualiza el valor del email del usuario indicado por
el parámetro “employee_id”:
Pág. 35