Como conectar JavaServer Pages (JSP) a MySQL

Mediante un breve ejemplo desarrollado con Netbeans conectaremos una base de datos en MySQL con JavaServer Pages (JSP), para crear un sencillo ejemplo de aplicación web con base de datos.

Paso 1:

Crear un proyecto de Aplicación Web en Netbeans, el cual nombraremos MySQLWebApplication.

Importante: En el tercer paso del asistente seleccionaremos el servidor GlassFish v2.1

Paso 2:

Editar el archivo index.jsp, para este ejemplo sustituiremos el código predefinido por el siguiente:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd">
  
<html>
<head>

<meta content="es" http-equiv="Content-Language" >
<title>Bienvenido a LCU</title>

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" >

<link href="Default.css" rel="stylesheet" type="text/css" >

</head><body>

     <h2>Bienvenido a <strong>LCU</strong>, <br>

     Lost CODE University!</h2>

     <table border="0">

        <thead>

            <tr>

                <th>LCU le permite acceder a la agenda digital, con la cual usted podrá ponerse en contacto con cualquiera de nuestros departamentos.</th>

            </tr>

        </thead>

        <tbody>            <tr>

                <td>

                    <form action="response.jsp">                        <strong>Seleccione un departamento:</strong>                        <select name="departamento">                            <option></option>                        </select>                        <input type="submit" value="submit" name="submit">                    </form>                </td>            </tr>        </tbody>    </table>

</body> 
</html>

Paso 3:

Creando una Hoja de Estilo CSS para personalizar la apariencia de nuestra página
  • Nombre: Default 
Luego de agregarla se debe visualizar el siguiente archivo en el explorador de archivos.

Sustituimos el código del archivo que acabamos de crear por el siguiente:

body {

    font-family: Verdana, Arial, sans-serif;

    font-size: smaller;

    padding: 50px;     color: #555;
}
h1, h2 {    text-align: left;    font-size: x-large;     color: #006699;

    font-weight: normal;

    width: 450px;

    font-family: Arial, Helvetica, sans-serif;

}
table {   width: 580px;

    padding: 10px;

    background-color: #B3C9E1;

}
th {

    text-align: left;  
    border-bottom: 1px solid;

    font-family: Arial, Helvetica, sans-serif;    font-size: small;

}
td {

    padding: 10px;

    font-family: Arial, Helvetica, sans-serif;     font-size: medium;

    color: #333333;

}
a:link {    font-weight: normal;    text-decoration: none;     font-family: Arial, Helvetica, sans-serif;

}
a:link:hover { 
    color: #0099FF; 
    font-weight: normal;

    text-decoration: underline;

    font-family: Arial, Helvetica, sans-serif;

}

Paso 4:

Crear un archivo JSP el cual nombraremos response.jsp
  • Nombre: response
En el código del archivo response.jsp que acabamos de crear sustituiremos la línea

<h1>Hello World!</h1>

por el siguiente bloque de código:

<table border="0">

    <thead>

        <tr><th colspan="2">Descripción</th>

        </tr>

    </thead>

    <tbody>

        <tr>

            <td><strong>Nombre: </strong></td>

            <td><span style="font-size:smaller; font-style:italic;">{placeholder}</span></td>

        </tr>

            <td><strong>Detalles de Contacto: </strong></td>

            <td><strong>email: </strong>

                <a href="mailto:{placeholder}">{placeholder}</a>

                <br><strong>teléfono: </strong>{placeholder}

            </td>

        </tr>

    </tbody>

</table>

Y agregamos la siguiente línea justo antes de la etiqueta </head>
<link href="Default.css" rel="stylesheet" type="text/css" >

Observaciones:

Antes de continuar es necesario crear una base de datos llamada Universidad en MySQL con las tablas correspondientes.

Si no sabes cómo conectar o ejecutar los sccripts en la base de datos primero mira este tutorial: Administrar MySQL desde Netbeans

Paso 5:

Crear un JNDI Datasource

Para crear un Connection Pool y un Datasource en Glassfish v2.1 será necesario añadir un archivo nuevo al proyecto, presionamos Ctrl +N o Archivo –> nuevo archivo… Allí seleccionamos la categoría GlassFish y el tipo JDBC Resource.

Seleccionamos la opción Create New JDBC Connection Pool

Saltamos el paso tres del asistente, a continuación seleccionamos la opción Extract from Existing Connection y buscamos la conexión MySQL a Universidad que creamos con anterioridad y presionamos finalizar.

El resultado será un archivo XML con los datos de configuración que hemos seleccionado.

Muy bien si deseamos confirmar la creación del Datasource y la conexión vamos a la ventana de servicios Ctrl +5 y activamos el servidor GlassFish, expandimos el nodo JDBC y dentro encontraremos el datasource y la conexión.

Paso 6:

Referenciar el Datasource desde la aplicación.

Abrimos el archivo web.xml en la carpeta Web Pages –> WEB-INF, con lo que obtendremos un asistente gráfico, en este pulsamos la pestaña Referencias y luego el botón añadir.

Agregamos el siguiente nombre de recurso, correspondiente al datasource creado antes:

Resource Name: jdbc/myDatasource

Paso 7:

Implementando el código JSTL

En el archivo index.jsp agregaremos el siguiente bloque de código antes de la primera linea <%@page
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> <sql:query var="departamentos" dataSource="jdbc/myDatasource">

    SELECT

    departamentos.cod_departamento,

    departamentos.departamento     FROM

    departamentos

</sql:query>

Luego sustituimos las etiquetas <option></option>  por lo siguiente:
<c:forEach var="row" items="${departamentos.rows}">
  <option value="${row.cod_departamento}">${row.departamento}</option>

</c:forEach>

Lo anterior nos cargará la lista con los departamentos listados en la base de datos.

En el archivo response.jsp  funcionará de forma similar, antes de la línea <%page insertamos el siguiente código:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%> <sql:query var="contacto" dataSource="jdbc/myDatasource">

    SELECT

      contactos.cod_contacto,

      contactos.cod_departamento,

      contactos.nombre_contacto,

      contactos.email,

      contactos.telefono,

      departamentos.cod_departamento,

      departamentos.departamento,

      departamentos.descripcion

    FROM

      departamentos,

      contactos

    WHERE

      contactos.cod_departamento = departamentos.cod_departamento AND

      contactos.cod_departamento = ? <sql:param value="${param.departamento}"/>

</sql:query> <c:set var="contacto" value="${contacto.rows[0]}"/>

Nota: obsérvese que ${param.departamento}  hace referencia a una expresión de lenguaje por lo que automáticamente la pasara el código de departamento asignado en index.jsp a la consulta cuando esta lo requiera en el ?

Muy bien, para concluir remplazamos los {placeholder} por lo siguiente en su respectivo orden:

${contacto.nombre_contacto}

${contacto.email}

${contacto.telefono}

Obteniendo el siguiente resultado:
<body>
   <table border="0">

        <thead>            <tr>          <th colspan="2">Descripción</th>            </tr>

        </thead>

        <tbody>             <tr>

                <td><strong>Nombre: </strong></td>

                <td><span style="font-size:smaller; font-style:italic;">${contacto.nombre_contacto}</span></td>

            </tr>

            <tr>

                <td><strong>Detalles de Contacto: </strong></td>

                <td><strong>email: </strong>

                    <a href="mailto:${contacto.email}">${contacto.email}</a>

                    <br><strong>teléfono: </strong>${contacto.telefono}

                </td>

            </tr>

        </tbody>

    </table>

</body>

Nota Final: en algunos casos puede que necesiten copiar de forma manual el conector de MySQL a el servidor,, tan solo es necesario copiar el archivo  mysql-connector-java-5.1.10-bin.jar en la siguiente dirección:

C:\Sun\AppServer\domains\domain1\lib