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

De ChuWiki
Saltar a: navegación, buscar

Contenido

Introducción

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

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

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

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

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.