Proyectos con JSPs
Todo el que haya desarrollado alguna vez páginas HTML verá lo sencillo que
es construir aplicaciones en Java utilizando JSPs.
Vamos a empezar con ejemplos sencillos que iremos complicando …
Uno de los elementos claves en el desarrollo de aplicaciones es tener claro
el objetivo. El desarrollo de JSPs es un medio que vamos a utilizar con el fin
de crear un buscador de tutoriales.
Preparación del entorno
Vamos a usar Forte 4 (la versión gratuita … que esta basada en NetBeans y
que deja de estar soportada por SUN) para montar nuestro ejemplo .
Creamos el proyecto
Seleccionamos el directorio de trabajo.
Elegimos la carpeta deseada
Ahora creamos un modulo Web …. pulsando en File->new
Y convertimos la carpeta en una carpeta Web
Lectura de parámetros
Una página dinámica mal va a poder hacer su trabajo si no es capaz de leer
los datos que recibe de un formulario.
Vemos como queda nuestra página
Vamos a crear un formulario en HTML. Para ello nos podríamos ayudar del
FrontPage….. luego pegaremos el código.
Si pulsamos el botón de previsualización …. ya vemos nuestro formulario
Ahora debemos construir el JSP.
Le asignamos un nombre
Y vamos a leer el parámetro y mostrarlo en pantalla .. luego ya
haremos cosas un poco más complicadas.
Si volvemos a ver la página HTML
Y pulsamos el botón vemos que todo a funcionado.
Como hemos podido ver, la etiqueta <%= %> permite
mostrar el valor de una variable.
Hay otra etiqueta dentro de las páginas JSP, todavía más
poderosa <% %>, ya que nos permite, de un modo sencillo, incluir cualquier
código Java dentro de nuestra página.
<%@page contentType=»text/html» import=»java.util.*» %> <html> <head><title>JSP Page</title></head> <body>
<% StringTokenizer st = new StringTokenizer(cadena); <%= «<br>Y el contador es: » + contador %> </body> |
Probamos nuestra página.
Y el resultado es
Creación de la base de datos
Ahora crearemos la base de datos donde almacenar la información
sobre los tutoriales.
Nos vamos al Control Center de MySQL (ver
tutorial asociado)
Conectamos a ella
Creamos las tablas en la base de datos
Introducimos todos los campos
Guardamos y damos nombre a la tabla
Vemos el resultado generado
Ahora hacemos doble click sobre el nombre de la tabla … e insertamos
registros
Uso de JavaBeans
Ahora, podríamos tratar de insertar el código en nuestro JSP para ir a la
base de datos y buscar los tutoriales que tengan dentro de su descripción una
de las palabras clave.
Obviamente, no deberíamos mezclar la lógica de presentación y la lógica
de negocio por lo que vamos a meter el acceso a la base de datos en un
componente: Un JavaBean.
Un JavaBean es una clase Java donde se deben cumplir algunas reglas básicas
(que veremos en otro tutorial). Lo mejor es que creemos uno básico.
El funcionamiento será simple … insertaremos un JavaBean en nuestro JSP.
Le pasaremos como parámetro la variable que nos pasen desde el formulario y es
Bean recuperará los datos de la base de datos y nos proporcionará métodos
para saber los que hay e iterar por ellos.
Creamos un paquete donde meter nuestros Beans
Creamos el Bean
Le asignamos un nombre
Y vemos que se ha creado un monton de código de ejemplo ….
Si cambiamos el nombre de la propiedad …. todo cambiara automáticamente
(bueno … no es perfecto y algunas cosas se le olvidan y hay que cambiarlas a
mano). Ya tenemos una propiedad que se llama Cadena de Consulta.
Ahora añadimos el método que nos retorne la cantidad de elementos
Insertamos cada uno de los métodos con datos de pruebas
Ahora modificamos nuestro JSP para incluir el Bean …. tambien debemos
darnos cuenta que hemos cambiado de sitio nuestro Bean en el proyecto para que
cuelgue de la carpeta WEB_INF.
Si reejecutamos el código …. veremos que ya lo tenemos ……
Vemos que se pasa bien el parámetro …. y que somos capaces de recuperar
las cadenas de vuelta …..
Ahora solo tenemos que ligar nuestro Bean con la base de datos …… Esto ya
es programación tradicional.
Podeir revisar algunos de los tutoriales que tenemos que os ensaña com trabajarcon Java y MySql
De todos modos .. vamos a completar de un modo rápido la aplicación.
Incluimos el path donde se encuentra el driver JDBC de mysql
Una vez que nos aparece en pantalla… lo copiamos y pegamos sobre el
directorio WEB-INF/Classes
Hemos insertado el unas nuevas funciones para recuperar los datos de la
consulta.
ESTE NO ES EL MODO OPTIMO DE HACERLO… ES SOLO UN EJEMPLO
public String retornaConsulta() { return ejecuta("select * from tutoriales"); } void depura(String mensaje) { System.out.println(mensaje); } String ejecuta(String consultaGenerada) { depura("Empezamos"); // REGISTER DRIVER try { Driver d = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (Exception e) { System.out.println(e); } // GET CONNECTION Connection con = null; try { depura("Recuperamos conexión"); con = DriverManager.getConnection("jdbc:mysql://localhost/tutoriales","",""); } catch(Exception e) { System.out.println(e); } // GET CONNECTION WARNINGS SQLWarning warning = null; try { warning = con.getWarnings(); if (warning == null) { System.out.println("No Warnings"); // return; } while (warning != null) { System.out.println("Warning: "+warning); warning = warning.getNextWarning(); } } catch (Exception e) { System.out.println(e); } // CREATE STATEMENT java.sql.Statement stmt = null; try { stmt = con.createStatement(); } catch (Exception e) { System.out.println(e); } // EXECUTE QUERY ResultSet results = null; try { results = stmt.executeQuery(consultaGenerada); } catch (Exception e) { System.out.println(e); } // GET ALL RESULTS StringBuffer buf = new StringBuffer(); try { ResultSetMetaData rsmd = results.getMetaData(); int numCols = rsmd.getColumnCount(); int i, rowcount = 0; // get column header info for (i=1; i <= numCols; i++) { if (i > 1) buf.append(","); buf.append(rsmd.getColumnLabel(i)); } buf.append("\n"); // break it off at 100 rows max while (results.next() && rowcount < 100) { // Loop through each column, getting the column // data and displaying for (i=1; i <= numCols; i++) { if (i > 1) buf.append(","); buf.append(results.getString(i)); } buf.append("\n"); rowcount++; } System.out.println(buf); results.close(); } catch (Exception e) { System.out.println(e); return e.getMessage(); } depura("Finalizamos"); return buf.toString(); } |
Con esto podemos ver en pantalla lo que se retorna .. que no es poco ….
para ver como generar este código de modo automático podemos visitar otro
tutorial …… JDBC
automático
Insertamos algún registro más en la base de datos
Cambiando el código de nuestro Bean
Y nuestro JSP se vería como
<%@page contentType=»text/html» import=»java.util.*» %> <html> <head><title>JSP Page</title></head> <body> <jsp:useBean id=»beanconsulta» scope=»request» <jsp:setProperty name=»beanconsulta» Tutoriales disponibles para la consulta:<b><br> <%= beanconsulta.retornaConsulta() %> </b> <% for (int i=0; i < numeroElementos; i++) </body> |
Realizamos la petición:
Y obtenemos la respuesta
Ahora solo nos queda darle un toque para que el diseño gráfico
sea un poco más agradable.
<%@page contentType=»text/html» import=»java.util.*» %> <html> <head><title>JSP Page</title></head> <body> <jsp:useBean id=»beanconsulta» scope=»request» <jsp:setProperty name=»beanconsulta» property=»cadenaConsulta» param=»palabras» /> <% beanconsulta.retornaConsulta(); %> <p><b>Resultado de la Consulta: </b>Encontrados <b> <%= beanconsulta.retornaNumeroElementos() %></b> resultados.</p> <br> <% for (int i=0; i < numeroElementos; i++) <a href=»<%= beanconsulta.retornaLink(i) %>»><%= beanconsulta.retornaTitulo(i) %></a> </td> </td> </table> |
Bueno ….. creo que para ser un primer ejemplo … hemos hecho muchas
cosas …. en próximos tutoriales veremos más ejemplo del desarrollo con JSPs
y la combinación con otros componentes.
Ultimo cambio 06/25/2003