Consulta de Base de Datos con JSP usando una Clase Java separada

De ChuWiki

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.