Consulta de Base de Datos con JSP usando una Clase Java separada
Introducción[editar]
Vimos en Consulta de Base de Datos desde JSP que podiamos meter todo el código java dentro de una página jsp. En ese ejemplo hicimos una consulta a base de datos para mostrar en el navegador los resultados.
Vamos a hacer ahora el mismo ejemplo, pero llevándonos parte del código java que estaba dentro de la página jsp a una clase Java separada, de forma que desde jsp llamaremos a esa clase.
En el ejemplo anterior usábamos una base de datos MySQL con una tabla así
mysql> describe contacto; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | nombre | varchar(20) | YES | | NULL | | | apellidos | varchar(20) | YES | | NULL | | | telefono | varchar(20) | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 4 rows in set (1.17 sec)
La clase Contacto[editar]
Nos hará falta una clase java para representar cada uno de los registros en la tabla anterior. Haremos una clase Contacto, con cuatro atributos, uno por campo, y los métodos get y set adecuados para cada campo. La clase puede ser así
package chuidiang.ejemplos; public class Contacto { int id; String nombre; String apellido; String telefono; public String getApellido() { return apellido; } public void setApellido(String apellido) { this.apellido = apellido; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getTelefono() { return telefono; } public void setTelefono(String telefono) { this.telefono = telefono; } }
La clase de consultas a base de datos[editar]
Para no complicarnos la vida, haremos una clase java con un único método estático que consulte a la base de datos y nos devuelva una lista de Contacto. Puede ser más o menos así
package chuidiang.ejemplos; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.LinkedList; public class ConsultaAgenda { public static LinkedList<Contacto> getContactos() { LinkedList<Contacto> listaContactos=new LinkedList<Contacto>(); try { Class.forName("org.gjt.mm.mysql.Driver"); Connection conexion = DriverManager.getConnection( "jdbc:mysql://localhost/agenda", "usuario", "password"); Statement st = conexion.createStatement(); ResultSet rs = st.executeQuery("select * from contacto" ); while (rs.next()) { Contacto contacto = new Contacto(); contacto.setId(rs.getInt("id")); contacto.setNombre(rs.getString("nombre")); contacto.setApellido(rs.getString("apellidos")); contacto.setTelefono(rs.getString("telefono")); listaContactos.add(contacto); } rs.close(); st.close(); conexion.close(); } catch (Exception e) { e.printStackTrace(); } return listaContactos; } }
La página JSP[editar]
Ahora sólo nos queda la página jsp. En la página jsp debemos poner los import de nuestras dos clases Java y del LinkedList que nos devuelve la clase ConsultaAgenda.
Simplemente hacemos la consulta llamando a la ClaseAgenda y luego hacemos un bucle para ir metiendo los resultados en un TABLE de html.
<!-- Los import --> <%@ page language="java" %> <%@ page import = "chuidiang.ejemplos.Contacto"%> <%@ page import = "chuidiang.ejemplos.ConsultaAgenda"%> <%@ page import = "java.util.LinkedList"%> <html> <body> <h1>Consulta a base de datos</h1> <table border="1"> <tr> <td>id</td> <td>nombre</td> <td>apellido</td> <td>telefono</td> </tr> <% LinkedList<Contacto> lista = ConsultaAgenda.getContactos(); for (int i=0;i<lista.size();i++) { out.println("<tr>"); out.println("<td>"+lista.get(i).getId()+"</td>"); out.println("<td>"+lista.get(i).getNombre()+"</td>"); out.println("<td>"+lista.get(i).getApellido()+"</td>"); out.println("<td>"+lista.get(i).getTelefono()+"</td>"); out.println("</tr>"); } %> </table> </body> </html>
Meter todo en tomcat[editar]
Una vez que hemos compilado las clases java, en el directorio de tomcat donde estén nuestras aplicaciones -en el ejemplo se pone la ubicación por defecto-, debemos poner lo siguiente:
$(TOMCAT_HOME)/webapp/NuestroEjemplo/WEB-INF/lib/mysql-connector-java-5.0.5.jar $(TOMCAT_HOME)/webapp/NuestroEjemplo/WEB-INF/classes/chuidiang/ejemplos/Contacto.class $(TOMCAT_HOME)/webapp/NuestroEjemplo/WEB-INF/classes/chuidiang/ejemplos/ConsultaAgenda.class $(TOMCAT_HOME)/webapp/NuestroEjemplo/WEB-INF/web.xml $(TOMCAT_HOME)/webapp/NuestroEjemplo/index.jsp
El fichero web.xml que aparece es un fichero tonto, por poner algo
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Mis Pruebas</display-name> </web-app>
Otra opción es meter nuestros dos .class en un fichero .jar y meterlo en el directorio lib
Con todo esto, ya no hay que hacer sino visualizar en el navegador http://localhost:8080/NuestroEjemplo y deberíamos ver nuestra lista de contactos almacenados en la base de datos.