Vous êtes sur la page 1sur 45

6.

JAVASERVER PAGES (JSP) Una Pgina Java en Servidor (JSP), es una plantilla para una pgina Web que emplea cdigo java para generar un documento HTML dinmicamente. Las pginas JSP se ejecutan en un componente del servidor conocido como contendor de JSP, que las traduce a servlets Java equivalentes. Las clases y las interfaces especficas para la programacin con Java Server Pages se encuentran en los paquetes javax.servlets.jsp y javax.servlet.jsp.tagext. En los JSP existen cuatro componentes bsicos: Directivas: son mensajes para el contenedor de JSP, que permiten configuraciones de pgina, incluir contenido de otros recursos y especificar bibliotecas de marcas para usarlas en una JSP. Hay dos tipos principales de directivas: page, que permite importar clases, personalizar la superclase del servlet, etc. e include, que permite insertar un archivo dentro de la clase servlet en el momento que el archivo JSP es traducido a un servlet. Las directivas tienen el siguiente formato:
<%@ nombre-de-directiva[atributo=valor atributo =valor]%>

Acciones: encapsulan la funcionalidad en marcas predefinidas. Las acciones a menudo se realizan en base a informacin que se envi al servidor como parte de una peticin del cliente especifica. Striptlets: son elementos de secuencia de comandos, permiten insertar cdigo Java que interactu con los componentes de una JSP para realizar el procesamiento de las peticiones. Bibliotecas de marcas: permiten manipular el contenido de una JSP.

El mecanismo de peticin/respuesta y el ciclo de vida de una JSP son iguales a los de un servlet. Las JSP pueden definir los mtodos jspinit y jspdestroy, que son invocados por el contendor JSP al iniciar y terminar una JSP. 7.1. Objetos Implcitos Los objetos implcitos proporcionan el acceso a herramientas de servlets. Los objetos implcitos tienen cuatro alcances: aplicacin, pgina, peticin y sesin. Las JSP y la aplicacin contenedora de servlets poseen objetos con alcance de aplicacin. Los objetos de alcance de pgina existen solamente en las pginas que los definen. Los objetos de alcance de peticin existen durante el tiempo de vida de la aplicacin. Los objetos de alcance de sesin existen durante toda la sesin de navegacin del cliente. Los JSP pueden utilizar los mismos mtodos de los servlets para interactuar con los objetos.

Tabla 7.1. Objetos implcitos (JSP)

Objeto implcito Application

Config

Exception

Out

Page

pageContext

Response

Request

Session

Descripcin Alcance de aplicacin El objeto javax.servlet.ServletContext representan el contenedor en el que se ejecuta la JSP. Alcance de pgina El objeto javax.servlet.ServletConfig representa las opciones de configuracin de la JSP. El objeto javax.lang.Throwable representa la excepcin que se pasa a la pgina de error de JSP. El objeto javax.servlet.jsp.JspWriter escribe texto como respuesta a una peticin. El objeto javax.lang.Object representa la referencia this para la instancia actual de una JSP. El objeto javax.servlet.jsp.PageContext oculta los detalles de implementacin del servlet y contenedor de JSPs. El objeto representa la respuesta al cliente, es una instancia de una clase que implementa HttpServletResponse. Alcance de peticin El objeto representa la peticin del cliente, es una instancia de una clase que implementa HttpServletRequest Alcance de sesin El objeto javax.servlet.http.HttpSession representa la informacin de sesin del cliente.

7.2. Componentes de secuencias de comandos Los componentes de secuencia de comandos de JSP incluyen: scriplets: son bloques de cdigo delimitados por los caracteres <% y %>, contiene instrucciones de java que el contenedor coloca en _jspservice al momento de la traduccin. comentarios: estn delimitados por los caracteres <%-- y --%>. Estos pueden colocarse en cualquier parte de una JSP, pero no dentro de un scriplets. Los comentarios pueden ser de XHTML, JSP y comentarios de lenguaje de secuencia de comandos, en otras palabras comentarios de java, es decir, utiliza como delimitadores /* y */. expresiones: est delimitada por <%= y %>, contiene una expresin de java que se evala cuando un cliente pide la JSP que contiene dicha expresin. declaraciones: delimitadas por <%! y %>, y permite definir las variables y los mtodos a utilizar en una JSP. Los mtodos y las variables utilizan la sintaxis de Java, por lo tanto, las declaraciones deben terminar con punto y coma. <%! int contador=0;%>

7.3. Acciones estndar Las acciones estndar permiten en una JSP incluir el contenido de otros recursos, reenviar peticiones hacia otros recursos e interactuar con JavaBeans. Las acciones estn delimitadas por las etiquetas <jsp:accin> y </jsp:accin>: Tabla 7.2. Acciones estndares (JSP)
Accin <jsp:include> Descripcin Al ejecutarse la JSP, el recurso al que se hace referencia se incluye y se procesa. Permite incluir contenido dinmico en una JSP en tiempo de peticin (no en tiempo de traduccin como es el caso de la directiva include. Sus atributos son: page: especifica la ruta URI relativa del recurso a incluir,. El recurso debe formar parte de la misma aplicacin Web. flush: especifica si el buffer debe vaciarse despus de realizar la inclusin. Reenva el procesamiento de la peticin hacia otra JSP, servlets o pgina esttica. Permite agregar un componente complemento a una pgina, en forma de elemento object de HTML. Se utiliza con las acciones include, forward y plugin para especificar pares de nombres/valores adicionales de informacin para que sean utilizados por estas acciones. La JSP utiliza una instancia de JavaBeans, especifica el alcance del Beans y le asigna un ID que pueden utilizar los componentes de secuencia de comandos para manipularlo. Relaciona automticamente los parmetros de la peticin con las propiedades del Bean con el mismo nombre. Obtiene una propiedad en la instancia de JavaBean especificada y convierte el resultado en una cadena para enviarla en la respuesta.

<jsp:forward> <jsp:plugin>

<jsp:param>

<jsp:useBean>

<jsp:setProperty>

<jsp:getProperty>

7.4. Ejercicios Prcticos JSP Antes de realizar los ejercicios que se trabajaran en este captulo, en el subdirectorio webapps del directorio de Tomcat (se supone que ya se tiene instalado el Apache Tomcat, en caso contrario ver Anexo C, pagina 195 Instalacin), debe existir la siguiente estructura:
examples

jsp

Directorio jsp: se guardaran todos los archivos .jsp

Los ejemplos pueden ser digitados en cualquier editor de texto, la nica condicin es que la extensin debe ser jsp, ejemplo;
nombre_archivo.jsp

NOTA: El nmero de puerto habilitado para el Apache Tomcat en el equipo donde se compilaron y ejecutaron los programas es el 8090, el usuario debe tener en cuenta el nmero de puerto que est habilitado en el equipo que est trabajando para ejecutar los diferentes programas de este captulo. 7.4.1. Ejercicios prcticos expresiones JSP a) Hacer un JSP que permita mostrar un mensaje de saludo Crear el JSP (saludo.jsp) 1 2 3 4 5 6 7 8 9 <%@ page language='java' contentType="text/html" %> <html> <head> <title>Introduccin a JSP</title> </head> <body bgcolor="white"> <h1>Hola, Bienvenido al mundo JSP</h1> </body> </html>

Anlisis programa Lnea 1: se incluye la directiva page, que permite ejecutar rdenes antes de que se comience a procesar el JSP y modifican de alguna forma el resultado del mismo. Todas las directivas en JSP se indican con una @ despus del comienzo de la orden JSP (<%). En este caso, se indica que la pgina que se va a ejecutar utilizara el lenguaje Java y que el contenido que se va a generar es de tipo text/html; Lnea 2 y 9: <html> - </html> inicia y termina el bloque del hipertexto Lnea 3 - 5: con <head> - </head> se crea el encabezado del documento. Lla etiqueta <title> - </title> define el titulo del documento, en esta caso Introduccin a JSP. Lnea 6 y 8: <body> - </body> se inicia y se cierra el cuerpo del documento; el atributo bgcolor permite seleccionar un color de fondo para la pgina, para el caso el color es white. El mensaje que se va a mostrar en la pagina es:Hola, Bienvenido al mundo JSP, con un tamao definido con la etiqueta <h1> - </h1> (se puede especificar un numero entre 1 y 6). Ejecutar el JSP (saludo.jsp)

Ingresar al navegador y escribir la siguiente direccin URL:


http://127.0.0.1:8090/examples/jsp/saludo.jsp

Donde se visualizar la siguiente pantalla (Se debe tener en cuenta el nmero del puerto): Figura 7.1. Ejecucin JSP saludo.jsp

b) Hacer un JSP que permita mostrar un texto y la fecha del sistema. Crear el JSP (fecha.jsp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <html> <head> <title>Fecha con JSP</title> </head> <body> <h1><p> La fecha del sistema</p></h1> <table border=6 > <tr> <td bgcolor='silver'> <p> <%java.text.DateFormat formato = java.text.DateFormat.getDateInstance (java.text.DateFormat.FULL);%> <%= formato.format(new java.util.Date())%> </p> </td> </tr> </table> </body> </html>

Anlisis programa

Lnea 6: se define un tamao de letra h1 y se imprime el mensaje La fecha del sistema. Lnea 7 y 16: con <table> - </table> se define una tabla con un borde de tamao 6. Lnea 8 y 15: con <tr></tr> se crea una celda para la tabla. Lnea 9 y 14: con <td></td> se crea una columna para la celda que se ha creado. El atributo bgcolor permite seleccionar un color de fondo para la columna, para el caso el color es silver (gris). Lnea 10 y 13: con <p></p> se define que el texto a imprimir estar en un mismo prrafo. Lnea 11: se crea una variable llamada formato de tipo DateFormat del paquete de java java.text. A esta variable se le asigna por medio del mtodo getDateInstance el formato que se va a mostrar el objeto Date(), en este caso se enva como parmetro el argumento FULL (las otras opciones son LONG, MEDIUM, SHORT y DEFAULT). Tambin se crea una expresin utilizando el mtodo format para mostrar la fecha del sistema mediante el paquete java.util llamando al objeto Date(). Ejecutar el JSP (fecha.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/fecha.jsp

Figura 7.2. Ejecucin JSP fecha.jsp

c) Hacer un JSP que permita mostrar un texto dentro de una tabla cada vez ms grande. Crear el JSP (tablitas.jsp)
1 2 3 4 5 6 7 8 9 10 11 12 13 <%@ page language='java' contentType="text/html" %> <%! int fila=0,cuenta=0; %> <html> <head><title>Creciendo la letra con JSP</title></head> <% out.println("<table border=1 bgcolor='yellow'>");%> <% for (int fila=1;fila<=7;fila++) { %> <% out.println("<tr><td>");%> <% out.println("<font size="+fila+">"); %> <% out.println("Como crece la letra</font>");%> <% out.println("</td></tr>");%> <% } %> <%out.println("</table>");%> </html>

Anlisis programa

Lnea 2: se definen dos variables (fila, cuenta) de tipo int, las cuales son inicializadas con cero(0). Lnea 6 y 11: se crea un ciclo for el cual se ejecutara 7 veces. Se incrementara el tamao de la letra asignndole el valor de la variable fila a la etiqueta font size, para imprimir en cada celda el mensaje Como crece la letra.

Ejecutar el JSP (tablitas.jsp) Ingresar al navegador y escribir la siguiente direccin URL:


http://127.0.0.1:8090/examples/jsp/tablitas.jsp

Figura 7.3. Ejecucin JSP tablitas.jsp

7.4.2. Ejercicios Prcticos de secuencia de comandos JSP a) Hacer un JSP que permita a un usuario digitar su nombre e imprimirlo con un mensaje de bienvenida y la fecha en la que realizo la peticin. Crear el JSP (peticion.jsp)
1 2 3 4 5 6 7 7 8 9 10 11 12 13 14 15 <html> <head> <title>Procesamiento de peticiones get con datos</title> </head> <body> <% String nombre = request.getParameter( "nombre" ); if ( nombre != null ) {%> <%-- aqui se pueden colocar comentarios --%> <h1> Bienvenido <%= nombre %>, <br /> Su peticin fue recibida el dia: <%java.text.DateFormat formato = java.text.DateFormat.getDateInstance( java.text.DateFormat.FULL);%> <%= formato.format(new java.util.Date())%> </h1> <% }

16 17 18 19 20 21 22 23 24 25 26

else {%> <form action = "peticion.jsp" method = "get"> <p>Digite su nombre y pulse el botn enviar</p> <p><input type = "text" name = "nombre" /> <input type = "submit" value = "Enviar" /> </p> </form> <% }%> </body> </html>

Anlisis programa Lnea 6 -24: se inicia el scriptlet (recuerde que <% %> permite incluir cdigo java para interactuar con la JSP). Se crea una variable llamada nombre de tipo String a la cual se le asigna el valor del parmetro nombre por intermedio del mtodo getParameter del objeto implcito request. Dentro del scriptlet se define una estructura if else. Por if se determina si el parmetro nombre es diferente de null. Si esta peticin es verdadera se imprimir el mensaje Bienvenido unido al valor de la variable nombre, como tambin el texto su peticin fue recibida el dia: concatenada con la fecha del sistema. En la lnea 12 se define el formato de salida para un objeto Date() por intermedio de un objeto DateFormat del paquete java.text donde se utiliza el mtodo getDateInstance y se enva como parmetro el argumento FULL (las otras opciones son LONG, MEDIUM, SHORT y DEFAULT). En la lnea 13 se imprime la fecha segn el formato establecido. Si la condicin es false se enva a la salida un elemento form donde se crean una caja de texto para que el usuario puede escribir su nombre y un botn con el valor Enviar para solicitar nuevamente la JSP y pueda ejecutar el cuerpo de la estructura if. Ejecutar el JSP (peticion.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://98080/examples/jsp/peticion.jsp

Figura 7.4. Ejecucin JSP peticion.jsp

Figura 7.5. Respuesta de la JSP peticion.jsp

b) Hacer un JSP que permita a un usuario capturar tres numeros e imprimir el mayor de los tres. Crear el JSP (mayor.jsp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <% double numero1=0,numero2=0,numero3=0, my=0; out.println("<p><h2>Mayor de tres numeros </h2></p>"); if(request.getParameter("OK") != null) { numero1= Double.parseDouble(request.getParameter("valor1")); numero2= Double.parseDouble(request.getParameter("valor2")); numero3= Double.parseDouble(request.getParameter("valor3")); if (numero1==numero2 && numero2==numero3) my=numero1; else{ if(numero1>numero2 && numero1>numero3) my=numero1; if(numero2>numero1 && numero2>numero3) my=numero2; if(numero3>numero2 && numero3>numero1) my=numero3; } }; out.println("<form action=mayor.jsp method=post>"); out.println("Digite primer numero :<input type=text name=valor1 value="+numero1+"><BR>"); out.println("Digite segundo numero: <input type = text name = valor2 value = "+ numero2 +"> <BR> "); out.println("Digite tercer numero : <input type = text name = valor3 value =" + numero3+ "> <BR><BR>"); out.println("<input type=submit name=OK value=Enviar ><BR><BR>"); out.println("El numero mayor es :<input type=text name=mayor value="+my+"><BR>"); out.println("</form>"); %>

17 18 19 20 21 22 23 24

Anlisis programa Lnea 2 -16: se crean cuatro variables (numero1, numero2, numero3, my) de tipo double, las cuales son inicializadas con cero (0). Por medio del mtodo getParameter perteneciente a la interface HttpServletRequest, se valida si se ha pulsado el botn

OK. En caso afirmativo se asignara a las variables numero1, numero2, numero3 los valores que fueron digitados en las cajas de texto valor1, valor2, valor3 respectivamente. A estas variables se les realiza una conversin de tipo double utilizando el mtodo parseDouble de la clase Double. Utilizando la estructura de decisin if-else se averigua si todos los nmeros son iguales o cual de los tres valores es mayor y se asignara dicho valor a la variable my. Lnea 17 -23: Si no ingresa al if se crea un formulario con el objeto form, el cual contiene cuatro cajas de texto y un botn. Las tres primeras cajas servirn para que el usuario digite los tres valores y pulsando el botn OK se ejecutara el proceso para determinar el mayor de los tres nmeros y este ser asignado a la variable my la cual se imprimir en la caja de texto de nombre mayor. Se utiliza el objeto out el cual es de tipo javax.servlet.jsp.JspWriter que escribe texto como respuesta a una peticin por intermedio del mtodo println. Ejecutar el JSP (mayor.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/mayor.jsp

Figura 7.6. Ejecucin JSP mayor.jsp

Figura 7.7. Respuesta de la JSP mayor.jsp

c) Hacer un JSP que permita a un usuario seleccionar una carrera que le gustara estudiar as como la universidad donde le gustara estudiarla. Crear el JSP (opciones.jsp)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <%! String carrera, universidad; %> <% if(request.getParameter("Enviar") != null) { carrera=request.getParameter("carrera"); universidad=request.getParameter("universidad"); }; out.println("<form action=opciones.jsp method=post>"); out.println("cual ingenieria te gustaria estudiar:<br>"); out.println("<input type=radio name=carrera value=Sistemas checked>Sistemas<br>"); out.println("<input type=radio name=carrera value=Industrial>Industrial<br>"); out.println("<input type=radio name=carrera value=Mecanica>Mecanica<br>"); out.println("en cual universidad:<br>"); out.println("<input type=radio name=universidad value=Distrital checked>Distrital<br>"); out.println("<input type=radio name=universidad value=Nacional>Nacional<br>"); out.println("<input type=radio name=universidad value=Libre>Libre<br>"); out.println("<input type=submit name=enviar value=resultados ><br>"); out.println("la ingenieria que mas te gusta es:"); out.println("<input type=text name=micarrera value="+carrera+" size=50><br>"); out.println("te gustaria estudiarla en la universidad:"); out.println("<input type=text name=miuniversidad value="+universidad+"><br>"); out.println("</form>"); %>

Anlisis programa Lnea 1 -5: se crean dos variables (carrera, universidad) de tipo String. Por medio del mtodo getParameter perteneciente a la interface HttpServletRequest, se valida si se ha pulsado el botn Enviar. En caso afirmativo se asignara a las variables carrera, universidad, los valores que fueron seleccionados en los objetos radio (carrera y universidad) respectivamente. Estos valores se asignaran a la propiedad value de las cajas de texto micarrera y miuniversidad. Lnea 6 -20: En caso contrario se crea un formulario con el objeto form donde se tienen seis objeto tipo radio (carrera , universidad) para que el usuario seleccione la carrera, la universidad y pulse el botn Enviar, para mostrar los valores seleccionados en las cajas de texto micarrera y miuniversidad. Ejecutar el JSP (opciones.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/opciones.jsp

Figura 7.8. Ejecucin JSP opciones.jsp

7.4.3. Ejercicios Prcticos de acciones JSP a) Crear una JSP que permita visualizar cuatro ventanas: en la primera ventana un grafico, en una segunda ventana informacin bsica de la pgina, en una tercera ventana deber permitir abrir pginas Web y en la cuarta ventana mostrar una encuesta utilizando la accin include.

Crear archivo titulo.html


1 2 3 4 5 6 7 8 9 10 <p><h4> Universidad La Libertad<br> Facultad de Ingenieria - Ingenieria de Sistemas<br /> Programacion de JavaServer Pages JSP<br /> trabajando la accion jsp:include </p> <p> <a href = "mailto:correolalibertad.edu.co">correolalibertad.edu.co</a> <br />Facultad de Ingenieria <br />Sede Tecnologica,Bogota - Colombia , </p>

Anlisis programa Lnea 8: se crea una hipervnculo a un correo electrnico utilizando la etiqueta href (contiene una cadena con una URL completa). Crear archivo paginasweb.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <p><h4>Paginas importantes para Java </h4></p> <p><a href = "http://www.microsoft.com/"> Pagina principal Microsoft </a></p> <p><a href = "http://www.java.sun.com/"> Pagina principal Java </a></p> <p><a href = "http://geneura.ugr.es/~jmerelo/JSP/"> Tutorial de JSP en Espa&ntildeol </a></p> <p><a href = "http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/"> Tutorial de JSP en Ingles </a></p> <p>Envie sus preguntas o comentarios sobre este sitio a <a href = "mailto:correolalibertad.edu.co">

16 17 18 19 20

correolalibertad.edu.co </a><br><br> Estudiantes de Java - comunicaciones<br> Todos los derechos reservados. </p>

Anlisis programa Se crean hipervnculos a diferentes pginas web utilizando la etiqueta href que contiene la direccin electrnica de dichas paginas. Crear JSP encuesta.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <% out.println("<p><h2>Encuesta Dominical </h2></p>"); if(request.getParameter("enviar") != null) { out.println("<h3>Has enviado el formulario !\n</h3>"); if (request.getParameter("texto")!=null) { String texto=request.getParameter("texto"); out.println("<br>Tu nombre es:<b>"+texto+"</b>"); } if (request.getParameter("micheckbox")!=null) { String aficion=request.getParameter("micheckbox"); out.println("<br>tu aficion favorita es:<b>"+aficion+"</b><br>"); } if (request.getParameter("miradio")!=null) { String color=request.getParameter("miradio"); out.println("<br>tu color favorito es:<b>"+color+"</b><br>"); } if (request.getParameter("miselectbox")!=null) { String fruta=request.getParameter("miselectbox"); out.println("<br>tu fruta favorita es:<b>"+fruta+"</b><br>"); } if (request.getParameter("mitextarea")!=null) { String miarea=request.getParameter("mitextarea"); out.println("<br>Escribiste en el rea de texto:<b>"+miarea+"</b><br>"); } else { out.println("<b><br>No escribiste en el rea de texto</b<<br>"); } } else { out.println("<form name =formulario method=post action=encuesta.jsp>"); out.println("Escribe tu nombre:<input type=text name=texto size=20><br>"); out.println("Selecciona tus aficiones:<br>"); out.println("<blockquote>"); out.println("Bailar:<input type=checkbox name=micheckbox value=Bailar><br>"); out.println("Cantar:<input type=checkbox name=micheckbox value=Cantar><br>"); out.println("Dormir:<input type=checkbox name=micheckbox value=Dormir><br>"); out.println("</blockquote>"); out.println("Selecciona un color:<br>");

22 23 24 25 26 27 28 29 30 31

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

out.println("<blockquote>"); out.println("verde <input type=radio name=miradio value=verde checked>"); out.println("amarillo <input type=radio name=miradio value=amarillo>"); out.println("azul <input type=radio name=miradio value=azul><br>"); out.println("</blockquote>"); out.println("Elige una fruta de esta lista:<br>"); out.println("<blockquote>"); out.println("<select name=miselectbox>"); out.println("<option value=manzana>manzana</option>"); out.println("<option value=pera>pera</option>"); out.println("<option value=naranja>naranja</option>"); out.println("</select><br>"); out.println("</blockquote>"); out.println("<textarea name=mitextarea rows=4 cols=30></textarea><br>"); out.println("<input type=submit name=enviar value=Enviar>"); out.println("</form>"); } %>

Anlisis programa Lnea 3 -47: utilizando la estructura de condicin if se valida si se ha pulsado el botn enviar por intermedio medio del mtodo getParameter perteneciente a la interface HttpServletRequest. En caso afirmativo se validan cada uno de los objetos del formulario como son :la caja de texto (texto), el cuadro de verificacin (micheckbox), los botones de opcin (miradio), el cuadro combinado (miselectbox) y el rea de texto (mitextarea) para imprimir en una nueva ventana los valores seleccionados por el usuario. En caso contrario se crea un formulario con el objeto form con los siguientes objetos: una caja de texto, tres cuadros de verificacin, tres botones de opcin, un cuadro combinado con tres opciones, un rea de texto y un botn para enviar la informacin. Crear JSP accioninclude.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <head> <title>Uso de jsp:include</title> </head> <body> <table border=6 bgcolor=silver> <tr> <td align=center> <img src="/examples/jsp/elefante.gif" width= "100" height="90" alt="Mi elefante jugando con la pelota"/> </td> <td align=center> <jsp:include page = "titulo.html"/> </td> </tr> <tr> <td > <jsp:include page = "paginasweb.html"/> </td> <td> <jsp:include page = "encuesta.jsp"/>

20 21 22 23

</td> </tr> </table> </body>

Anlisis programa Lnea 5 -22: se crea una tabla con un tamao de borde 6 y con un color de fondo gris. Adems se crean dos filas(<tr></tr>) cada una con dos columnas (<td></td>). En la primera columna de la fila uno se carga una imagen recurriendo a la etiqueta img, con un ancho de 100 puntos y una altura de 90 puntos. En las dems columnas se incluyen dos pginas html (titulo.html, paginasweb.hmtl) y una pgina jsp (encuesta.jsp) utilizando la accin include de JSP. Ejecutar el JSP (accioninclude.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/accioninclude.jsp

Figura 7.9. Ejecucin JSP accioninclude.jsp

b) Crear JSP que permita al usuario escribir un nombre, seleccionar una aficin, un color y una fruta. Se debe enviar dicha informacin as como la fecha de la peticin y respuesta del sistema a una nueva pgina utilizando las acciones forward y param.
Crear JSP accionforward.jsp

1 2 3 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

<% if(request.getParameter("enviar") != null) { %> <%java.text.DateFormat formato = java.text.DateFormat.getDateInstance (java.text.DateFormat.FULL);%> <jsp:forward page = "/jsp/llamadodeforward.jsp"> <jsp:param name = "fecha" value = "<%= formato.format(new java.util.Date()) %>" /> <jsp:param name = "aficion" value = "<%= request.getParameter(\"miaficion\") %>" /> </jsp:forward> <% } else { %> <% out.println("<head><title<Accion forward de JSP</title></head>"); out.println("<body><h3>Encuesta Personal - accion forward</h3>"); out.println("<form name =formulario method=post action=accionforward.jsp>"); out.println("Escribe tu nombre:<input type=text name=texto size=20><br>"); out.println("Selecciona una aficin:<br>"); out.println("<blockquote>"); out.println("Bailar:<input type=radio name=miaficion value=Bailar checked>"); out.println("Cantar:<input type=radio name=miaficion value=Cantar>"); out.println("Dormir:<input type=radio name=miaficion value=Dormir>"); out.println("</blockquote>"); out.println("Selecciona un color:<br>"); out.println("<blockquote>"); out.println("verde <input type=radio name=miradio value=verde checked>"); out.println("amarillo <input type=radio name=miradio value=amarillo>"); out.println("azul <input type=radio name=miradio value=azul><br>"); out.println("</blockquote>"); out.println("Elige una fruta de esta lista:<br>"); out.println("<blockquote>"); out.println("<select name=miselectbox>"); out.println("<option value=manzana>manzana</option>"); out.println("<option value=pera>pera</option>"); out.println("<option value=naranja>naranja</option>"); out.println("</select><br>"); out.println("</blockquote>"); out.println("<input type=submit name=enviar value=Enviar>"); out.println("</form></body>"); } %>

Anlisis programa Lnea 2 -9: utilizando la estructura de condicin if se valida si se ha pulsado el botn enviar por intermedio medio del mtodo getParameter perteneciente a la interface HttpServletRequest. En caso afirmativo se crea una variable llamada formato de tipo DateFormat del paquete de java java.text. A esta variable se le asigna por medio del mtodo getDateInstance el formato que se va a mostrar el objeto Date(), en este caso se enva como parmetro el argumento FULL (las otras opciones son LONG, MEDIUM, SHORT y DEFAULT). Se incluye la accion forward utilizando page para reenviar la peticin a la pgina llamadodeforward.jsp. Por otro lado utiliza la accin param para crear parmetros de accin, el primero llamado fecha tiene como valor una expresin utilizando el mtodo format que muestra la fecha del sistema mediante el

paquete java.util llamando al objeto Date() y el segundo llamado aficin tiene como valor el objeto miaficion de tipo radio. Lnea 15 -40 : se crea un formulario con el objeto form con los siguientes objetos: una caja de texto (texto), dos botones de opcin (miaficion, miradio), un cuadro combinado con tres opciones (miselectbox) y un botn (enviar) para enviar la informacin. Crear JSP llamadodeforward.jsp
<html> <body> <h3>Has enviado el formulario !<br> con la siguiente informacin....</h3><br> Tu nombre es :<b> <%= request.getParameter("texto") %></b><br> Tu aficin favorita es:<b><%= request.getParameter("miaficion") %></b><br> El color que ms te gusta es el:<b><%= request.getParameter("miradio") %></b><br> Te gusta la <b><%= request.getParameter("miselectbox") %></b> como fruta <br><br> Su peticin fue recibida y reenviada el da: <table border=6 bgcolor=silver> <tr><td> <%= request.getParameter("fecha") %> <tr><td> </body> </html>

Anlisis programa Bsicamente lo que realiza el programa es imprimir en una nueva pgina toda la informacin suministrada por los objetos del formulario utilizando el objeto getParameter. Este objeto trae a la pagina los valores de los objetos texto, miradio, miselectbox y de los parmetros miaficion y fecha. Ejecutar el JSP (accionforward.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/accionforward.jsp

Figura 7.10. Ejecucin JSP accionforward.jsp

Figura 7.11. Ejecucin JSP llamadodeforward.jsp

7.5. JSP y archivos de flujo En el captulo dedicado a Servlets se vio que es posible crear pginas Web que manipulen o realicen operaciones con archivos secuenciales y/o aleatorios, esto tambin es posible realizarlo utilizando paginas de java en servidor (JSP). En este aparte se realizarn programa que utilicen JSP que manipulen archivos secuenciales y aleatorios. 7.6. Ejercicios Prcticos de JSP y archivos a) Crear una JSP, que permita crear un archivo secuencial y guardar en dicho archivo la siguiente informacin de los clientes: nit, representante, razn social direccin, telfono, ciudad.
1 2 3 4 5 6 7 8 <%@ page import="java.io.*" %> <% int nit=0; String representante,razonsocial,direccion,telefono,ciudad; float credito=0; DataOutputStream archivo = null; if(request.getParameter("insertar") != null) { nit=Integer.parseInt(request.getParameter("nit"));

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

representante=request.getParameter("representante"); razonsocial=request.getParameter("razonsocial"); direccion=request.getParameter("direccion"); telefono=request.getParameter("telefono"); ciudad=request.getParameter("ciudad"); credito=Float.parseFloat(request.getParameter("credito")); try { archivo = new DataOutputStream(new FileOutputStream("c:\\datos.txt",true)); archivo.writeInt(nit); archivo.writeUTF(representante); archivo.writeUTF(razonsocial); archivo.writeUTF(direccion); archivo.writeUTF(telefono); archivo.writeUTF(ciudad); archivo.writeFloat(credito); out.println("<h4>"+nit+": Registro Guardado</h4>"); } catch(FileNotFoundException fnfe) { out.println(fnfe); } catch (IOException ioe) { out.println(ioe); } archivo.close(); } out.println("<form action=capturardatosarchivo.jsp method=post>"); out.println("Identificacion Tributaria :<input type=text name=nit><br>"); out.println("Representante Legal:<input type=text name=representante><br>"); out.println("Razon social:<input type=text name=razonsocial><br>"); out.println("Direccion :<input type=text name=direccion><br>"); out.println("Telefono:<input type=text name=telefono><br>"); out.println("Ciudad:<input type=text name=ciudad><br>"); out.println("Credito aprobado:<input type=text name=credito><br>"); out.println("<input type=submit name=insertar value=Guardar><br>"); out.println("</form>"); %>

Anlisis programa Lnea 3-5: se crean las siguientes variables: nit de tipo int, representante, razonsocial, direccion, telfono, ciudad de tipo String y credito de tipo float. Lnea 6: Para realizar operaciones de salida se crea un objeto archivo de tipo DataOutputStream (flujo de salida de datos). Lnea 7-29: utilizando la estructura de condicin if se valida si se ha pulsado el botn insertar por intermedio del mtodo getParameter perteneciente a la interface HttpServletRequest. En caso afirmativo se le asignan a cada una de las variables creadas los valores que son enviadas por el formulario. Como nit es de tipo int se realiza la conversin de texto a nmero utilizando el mtodo parseInt de la clase Integer. As mismo tambin se realiza la conversin de texto a nmero de coma flotante con el mtodo parseFloat de la clase Float a la variable credito. En el bloque try al objeto archivo se le asigna el nombre del archivo de salida datos.txt por medio de las clases DataOutputStream y FileOutputStream donde se guardara la informacin enviada por el usuario. Se utiliza el parmetro true para validar si existe el archivo. Cuando se guarda por primera vez la informacin se crea el archivo, cuando se vuelve a

digitar informacin y se quiere guardar, dicha informacin es guardada en la siguiente posicin del archivo. Dicho archivo en este caso quedara archivado en C:\. La informacin es guardada en el archivo por intermedio de los mtodos writeInt para datos de tipo int, writeUTF para datos de tipo String y writerFloat para datos de tipo Float. Tambin se enva como salida a pantalla el mensaje Registro Guardado unido al valor del nit digitado. Para los bloques cath se capturan dos excepciones, la primera es FileNotFoundException (excepcin de archivo no encontrado) y la segunda IOException (excepcin de entrada o salida) por si ocurre algn error con los recursos del sistema. Por ltimo se cierra el archivo utilizando el mtodo close(). Lnea 30-39: se crea un formulario con el objeto form con los siguientes objetos: siete cajas de texto y un botn para guardar la informacin. Ejecutar el JSP (opciones.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/capturardatosarchivo.jsp

Figura 7.12. Ejecucin JSP capturardatosarchivo.jsp

Figura 7.13. Ventana de registro guardado en un archivo secuencial

b) Crear una JSP, que permita leer un archivo secuencial que previamente se ha creado y visualizar la siguiente informacin de los clientes: nit, representante, razn social direccin, telfono, ciudad.
1 2 3 <%@ page import="java.io.*" %> <% int nit=0;

4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

28 29 30 31 32 33 34 35 36

String representante,razonsocial,direccion,telefono,ciudad; float credito=0; DataInputStream archivo = null; if(request.getParameter("leer") != null) { out.println("<table border=6><tr bgcolor=silver>"); out.println("<th>NIT</th><th>REPRESENTANTE</th><th>RAZON SOCIAL </th> <th>DIRECCION</th><th>TELEFONO</th><th>CIUDAD</th><th> CREDITO</th>"); try { archivo = new DataInputStream(new FileInputStream("c:\\datos.txt")); while(true) { out.println("<tr>"); nit=archivo.readInt(); out.println("<td>"+nit+"</td>"); representante=archivo.readUTF(); out.println("<td>"+representante+"</td>"); razonsocial=archivo.readUTF(); out.println("<td>"+razonsocial+"</td>"); direccion=archivo.readUTF(); out.println("<td>"+direccion+"</td>"); telefono=archivo.readUTF(); out.println("<td>"+telefono+"</td>"); ciudad=archivo.readUTF(); out.println("<td>"+ciudad+"</td>"); credito=archivo.readFloat(); out.println("<td>"+credito+"</td>"); } } catch(FileNotFoundException fnfe) { out.println(fnfe); } catch (IOException ioe) { archivo.close(); out.println(""); } out.println("<form action=leerdatosarchivo.jsp method=post>"); out.println("<input type=submit name=leer value=\"Leer Archivo\"><br>"); out.println("</form>"); %>

Anlisis programa Lnea 3-5: se crean las siguientes variables: nit de tipo int, representante, razonsocial, direccion, telfono, ciudad de tipo String y credito de tipo float. Lnea 6: Para realizar operaciones de entrada se crea un objeto archivo de tipo DataInputStream (flujo de entrada de datos). Lnea 7-32: utilizando la estructura de condicin if se valida si se ha pulsado el botn leer por intermedio del mtodo getParameter perteneciente a la interface HttpServletRequest. En caso afirmativo se crea una tabla con borde de tamao 6 y color silver colocndole en la primera fila (<tr>) los nombres de los campos que se van a mostrar en negrilla (<th>). En el bloque try al objeto archivo se le asigna el nombre del archivo de entrada datos.txt por medio de las clases DataInputStream y FileInputStream donde se leer la informacin solicitada por el usuario. Se crea un

ciclo que recorrer el archivo hasta el final leyendo e imprimiendo cada registro del archivo, los valores se asignaran a las variables creadas utilizando los mtodos de lectura readInt para datos de tipo int, readUTF para datos de tipo String y readFloat para datos de tipo Float. Para los bloques cath se capturan dos excepciones, la primera es FileNotFoundException (excepcin de archivo no encontrado) y la segunda IOException (excepcin de entrada o salida) por si ocurre algn error con los recursos del sistema. Por ltimo se cierra el archivo utilizando el mtodo close(). Lnea 33-35: se crea un formulario con el objeto form con un botn para leer la informacin. Ejecutar el JSP (leerdatosarchivo.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/leerdatosarchivo.jsp

Figura 7.14. Ejecucin JSP leerdatosarchivo.jsp

Figura 7.15. Ventana de lectura de datos en archivo secuencial

c) Crear una JSP, que permita realizar una bsqueda por ciudad en un archivo secuencial que previamente se ha creado y visualizar la siguiente informacin de los clientes: nit, representante, razn social direccin, telfono, ciudad.
1 2 3 4 5 <%@ page import="java.io.*" %> <% int nit=0; String representante,razonsocial,direccion,telefono,ciudad; float credito=0;

6 7 8 9 10

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 29

30 31 32 33 34

35 36 37 38 39

String campo; DataInputStream archivo = null; if(request.getParameter("buscar") != null) { out.println("<table border=6><tr bgcolor=silver>"); out.println("<th>NIT</th><th>REPRESENTANTE</th><th>RAZON SOCIAL </th><th>DIRECCION</th><th>TELEFONO</th><th>CIUDAD</th><th> CREDITO</th>"); campo=request.getParameter("ciudad"); try { archivo = new DataInputStream(new FileInputStream("c:\\datos.txt")); while(true) { nit=archivo.readInt(); representante=archivo.readUTF(); razonsocial=archivo.readUTF(); direccion=archivo.readUTF(); telefono=archivo.readUTF(); ciudad=archivo.readUTF(); credito=archivo.readFloat(); if (ciudad.equalsIgnoreCase(campo)) { out.println("<tr>"); out.println("<td>"+nit+"</td>"); out.println("<td>"+representante+"</td>"); out.println("<td>"+razonsocial+"</td>"); out.println("<td>"+direccion+"</td>"); out.println("<td>"+telefono+"</td>"); out.println("<td>"+ciudad+"</td>"); out.println("<td>"+credito+"</td>"); } } } catch(FileNotFoundException fnfe) { out.println(fnfe); } catch (IOException ioe) { archivo.close(); out.println(""); } } out.println("<form action=buscardatosarchivosecuencial.jsp method=post>"); out.println("Ciudad a Buscar:<input type=text name=ciudad><br>"); out.println("<input type=submit name=buscar value=\"Buscar Informacion\"><br>"); out.println("</form>"); %>

Anlisis programa Lnea 6: se crea una variable llamada campo de tipo String, la cual se utilizara para almacenar el nombre de la ciudad a buscar. Lnea 8-34: utilizando la estructura de condicin if se valida si se ha pulsado el botn leer por intermedio medio del mtodo getParameter perteneciente a la interface HttpServletRequest. En caso afirmativo se crea una tabla con borde de tamao 6 y color silver colocndole en la primera fila (<tr>) los nombres de los campos que se van a mostrar en negrilla (<th>). A la variable campo se le asigna el valor capturado en la

caja de texto ciudad. En el bloque try al objeto archivo se le asigna el nombre del archivo de entrada datos.txt por medio de las clases DataInputStream y FileInputStream donde se leer la informacin solicitada por el usuario. Se crea un ciclo que recorrer el archivo hasta el final leyendo cada registro del archivo e imprimiendo todos aquellos que cumplan la condicin de que los valores de ciudad y campo sean iguales. Lnea 35-38: se crea un formulario con el objeto form con una caja de texto para capturar la ciudad a buscar y un botn para enviar la informacin. Ejecutar el JSP (buscardatosarchivosecuencial.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/buscardatosarchivosecuencial.jsp

Figura 7.16. Ejecucin JSP buscardatosarchivosecuencial.jsp

d) Crear una JSP, que permita crear un archivo aleatorio y guardar en dicho archivo la siguiente informacin de los clientes: nit, representante, razn social direccin, telfono, ciudad.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <%@ page import="java.io.*" %> <% int nit=0; String representante,razonsocial,direccion,telefono,ciudad; float credito=0; if(request.getParameter("insertar") != null) { nit=Integer.parseInt(request.getParameter("nit")); representante=request.getParameter("representante"); razonsocial=request.getParameter("razonsocial"); direccion=request.getParameter("direccion"); telefono=request.getParameter("telefono"); ciudad=request.getParameter("ciudad"); credito=Float.parseFloat(request.getParameter("credito")); try { File archivito=new File("c:\\datosaleatorios.txt"); RandomAccessFile archivo = new RandomAccessFile(archivito,"rw"); if (archivo.length()!= 0) { archivo.seek( archivo.length() ); }

22 23 24 25 26 25 28 29 30 31 32 33 34

archivo.writeInt(nit); archivo.writeUTF(representante); archivo.writeUTF(razonsocial); archivo.writeUTF(direccion); archivo.writeUTF(telefono); archivo.writeUTF(ciudad); archivo.writeFloat(credito); out.println("<h4>"+nit+": Registro Guardado</h4>"); archivo.close(); } catch(FileNotFoundException fnfe) { out.println(fnfe); } catch (IOException ioe) { out.println(ioe); } } out.println("<form action=capturardatosarchivoaleatorio.jsp method=post>"); out.println("Identificacion Tributaria :<input type=text name=nit><br>"); out.println("Representante Legal:<input type=text name=representante><br>"); out.println("Razon social:<input type=text name=razonsocial><br>"); out.println("Direccion :<input type=text name=direccion><br>"); out.println("Telefono:<input type=text name=telefono><br>"); out.println("Ciudad:<input type=text name=ciudad><br>"); out.println("Credito aprobado:<input type=text name=credito><br>"); out.println("<input type=submit name=insertar value=Guardar><br>"); out.println("</from>"); %>

35 36 37 38 39 40 41 42 43 44 45

Anlisis programa Lnea 16-21: como se puede apreciar la programacin para capturar datos en archivos aleatorios es casi similar a la de los archivos secuenciales, lo que se cambia es la forma de crear o accesar el archivo. Se crea un objeto de tipo FILE llamado archivito que se usa como parmetro para crear el objeto archivo de tipo RandomAccessFile (RandomAccessFile archivo=new RandomAccessFile(arch,rw.). El primer parmetro es la unidad de disco y el nombre del archivo. El segundo parmetro es el modo de acceso al archivo ( rw crea un archivo para lectura y escritura). Tambin se valida si el archivo ya existe y si su longitud es mayor de cero con el mtodo length. Si es verdadero se lee la longitud del archivo con el mtodo seek y se coloca el puntero al final de este para guardar ms informacin. Ejecutar el JSP (capturardatosarchivoaleatorio.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/capturardatosarchivoaleatorio.jsp

Figura 7.17. Ejecucin JSP capturardatosarchivoaleatorio.jsp

e) Crear una JSP, que permita leer un archivo aleatorio que previamente se ha creado y visualizar la siguiente informacin de los clientes: nit, representante, razn social direccin, telfono, ciudad.
1 2 3 4 5 6 7 8 <%@ page import="java.io.*" %> <% int nit=0; String representante,razonsocial,direccion,telefono,ciudad; float credito=0; if(request.getParameter("leer") != null) { out.println("<table border=6><tr bgcolor=silver>"); out.println("<th>NIT</th><th>REPRESENTANTE</th><th>RAZON SOCIAL </th><th>DIRECCION</th><th>TELEFONO</th><th>CIUDAD</th><th> CREDITO</th>"); try { File archivito=new File("c:\\datosaleatorios.txt"); RandomAccessFile archivo = new RandomAccessFile(archivito,"rw"); while(true) { out.println("<tr>"); nit=archivo.readInt(); out.println("<td>"+nit+"</td>"); representante=archivo.readUTF(); out.println("<td>"+representante+"</td>"); razonsocial=archivo.readUTF(); out.println("<td>"+razonsocial+"</td>"); direccion=archivo.readUTF(); out.println("<td>"+direccion+"</td>"); telefono=archivo.readUTF(); out.println("<td>"+telefono+"</td>"); ciudad=archivo.readUTF(); out.println("<td>"+ciudad+"</td>"); credito=archivo.readFloat(); out.println("<td>"+credito+"</td>"); } } catch(FileNotFoundException fnfe) { out.println(fnfe); }

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

28 29

30 31

32 33 34 35

catch (IOException ioe) { out.println(""); } archivo.close(); } out.println("<form action=leerdatosarchivoaleatorio.jsp method=post>"); out.println("<input type=submit name=leer value=\"Leer Archivo\"><br>"); out.println("</form>"); %>

Anlisis programa Lnea 10-11: como en el caso anterior la lectura de un archivo aleatorio es casi similar a la de los archivos secuenciales, lo que se cambia es la forma de crear o accesar el archivo. Ejecutar el JSP (leerdatosarchivoaleatorio.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/leerdatosarchivoaleatorio.jsp

Figura 7.18. Ejecucin JSP leerdatosarchivoaleatorio.jsp

7.7. JSP y Bases de datos En los captulos dedicados a bases de datos y servlets, java permite la manipulacin o las operaciones con bases de datos utilizando el API de java JDBC. Con JSP tambin es posible trabajar con bases de datos, es por eso que en este aparte realizarn ejemplos donde se pueda establecer una conexin, realizar consultas y otras operaciones con una base de datos (en este caso se trabajara con la base de datos Oracle). Se deben tener en

cuenta cada una de las consideraciones para establecer el puente odbc::jdbc para la conexin a la base de datos vistas en el captulo de bases de datos. 7.8. Ejercicios prcticos JSP y Bases de datos a) Crear una JSP, que permita consultar la informacin de la tabla clientes de la base de datos BDORACLE.
1 2 3 4 5 6 7 9 10 11 12 13 14 15 16 17 18 <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; String ruta=new String("jdbc:odbc:BDORACLE"); if(request.getParameter("OK") != null) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement(); } catch(ClassNotFoundException e) { out.println("Clase no encontrada, error:"+e); } try { resultado = instruccion.executeQuery("select * from clientes"); out.println("<center><table Border=10><TR bgcolor=silver>"); out.println("<th>NIT</th><th>REPRESENTANTE</th><th>RAZON SOCIAL </th><th>DIRECCION</th><th>TELEFONO</th><th>CIUDAD </th><th>CREDITO</th></TR>"); while(resultado.next()) { out.println("<TR>"); out.println("<TD>"+resultado.getString(1)+"</TD>"); out.println("<TD>"+resultado.getString(2)+"</TD>"); out.println("<TD>"+resultado.getString(3)+"</TD>"); out.println("<TD>"+resultado.getString(4)+"</TD>"); out.println("<TD>"+resultado.getString(5)+"</TD>"); out.println("<TD>"+resultado.getString(6)+"</TD>"); out.println("<TD>"+resultado.getInt(7)+"</TD>"); out.println("</TR>"); } out.println("</table></center>"); resultado.close(); instruccion.close(); conexion.close(); } catch(SQLException e) { out.println("Ha ocurrido el error:"+e); } } out.println("<html><head><title>Consultar una tabla en una Base de Datos </title> </head>"); out.println("<body><center><h5>Consultando la tabla clientes de la base de datos BDORACLE</h5></center>");

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

35 36

37 38 39 40

out.println("<form action=consultarbd.jsp method=post>"); out.println("<input type=submit name=OK value=Consultar><BR>"); out.println("</form></body></html>"); %>

Anlisis programa Lnea 1: Se utiliza la directiva page para importar los paquetes java.sql, java.io, java.util , java.net necesarios para realizar la conexin y manipulacin de la base de datos. Lnea 3: se crea una instancia de la interfaz Connection llamada conexion. Lnea 4: se crea una instancia de la clase ResultSet llamada resultado. Lnea 5: se crea una instancia de la interfaz Statement llamada instruccion. Lnea 6: se crea una variable llamada ruta de tipo String a la cual se le asigna el puente JDBC-ODBC y la base de datos BDORACLE. Lnea 7 - 34: se utiliza la estructura de decisin if con la condicin request.getParameter("OK") != null, donde request es de tipo HttpServletRequest que se asocia con una peticin y permite mirar los parmetros de la peticin mediante getParameter, en este caso se valida si se ha pulsado el botn llamado OK. Si la condicin es verdadera, en un primer bloque try se llama al mtodo forname de la clase Class para establecer el drive que se va a utilizar sun.jdbc.odbc.JdbcOdbcDriver. Por otro lado al objeto conexin se le asigna la conexin de la base de datos con la instruccin DriverManager.getConnection (ruta,system.123456), siendo ruta la ubicacin de la base de datos, system el usuario y 123456 la contrasea de la base de datos, como tambin al objeto instruccion se le asigna la conexin de la base de datos utilizando el mtodo createStatement () que pertenece a la interfaz Connection que permitir obtener los datos deseados. En el bloque catch se captura la excepcin ClassNotFoundException, donde por medio de la variable predefinida out se enva como salida a la pantalla utilizando el mtodo println el mensaje "Clase no encontrada, error, este se imprimir en caso de que no se pueda cargar el driver. En un segundo bloque try al objeto resultado se le asigna la sentencia SQL "select * from clientes" para visualizar todos los registros de la tabla clientes mediante el mtodo executeQuery de la interfaz Statement. Utilizando la variable out se enva como salida al cliente por intermedio del mtodo println en forma centrada (<center>) una tabla (<table>) que tiene un borde de tamao 10 y que en su primera columna (<tr></tr>) tiene un color plata, donde se define el encabezado de la tabla en negrilla (<th>) con los nombres de los campos de la tabla clientes. Por otro lado se crea un ciclo while para recorrer la tabla clientes utilizando el mtodo next () por medio del objeto resultado de tipo ResultSet, envindose como salida por columna (<td>) cada uno de los campos del registro de la tabla clientes. Se utiliza valores numricos para traer los nombres de los campos de la tabla utilizando los mtodos getString()(campos carcter) y getInt()(campos numricos), los nmeros se asocian con el orden de los campos en la tabla. Por ltimo se cierran todos los objetos que previamente se haban inicializado utilizando el mtodo close (). En el bloque catch se captura la excepcin SQLException, donde se imprimir el mensaje generado por la excepcin. Lnea 35 - 39: si no ingresa a la estructura if, se construye una formulario dinmico utilizando el objeto form que tiene como accin (action) llamar nuevamente a la pgina JSP, utilizando el mtodo post para que los datos sean enviados al servidor. En dicha formulario se crea un botn (submit) que permite ejecutar las acciones que debe realizar la pgina JSP.

Ejecutar el JSP (consultarbd.jsp) Ingresar al navegador y escribir la siguiente direccin URL:


http://127.0.0.1:8090/examples/jsp/consultarbd.jsp

Figura 7.19. Ejecucin JSP consultarbd.jsp

Figura 7.20. Ventana de la consulta a la tabla clientes de BDORACLE

b) Crear una JSP, que permita insertar un registro en la tabla clientes de la base de datos BDORACLE.
1 2 3 4 5 6 7 8 9 10 11 12 <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% if(request.getParameter("insertar") != null) { Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; String ruta=new String("jdbc:odbc:BDORACLE"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion = conexion.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println("Clase no encontrada, error:"+e); } String nit = request.getParameter("nit"); String representante = request.getParameter("representante"); String razonsocial = request.getParameter("razonsocial"); String direccion = request.getParameter("direccion");

13 14 15 16 17 18

19 20 21 22

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

String telefono = request.getParameter("telefono"); String ciudad = request.getParameter("ciudad"); int credito = Integer.parseInt(request.getParameter("credito")); String consulta_sql="insert into clientes (nit, representante, razonsocial, direccion, telefono, ciudad, credito) values ('"+nit+"','"+representante+"','"+razonsocial+"','"+direccion+"','"+ telefono+"','"+ciudad+"','"+credito+"')"; try { int n=instruccion.executeUpdate(consulta_sql); out.println("registro insertado"); } catch(SQLException e) { out.println(e); } instruccion.close(); conexion.close(); } out.println("<html><head><title>Insertar registro en una tabla de una Base de Datos</title></head>"); out.println("<body><center><h5>Insertando registro en la tabla clientes de la base de datos BDORACLE</h5></center>"); out.println("<form action=insertarregistro.jsp method=post>"); out.println("Identificacion Triburaria:<input type=text name=nit><br>"); out.println("Representante Legal:<input type=text name=representante><br>"); out.println("Razon Social:<input type=text name=razonsocial><br>"); out.println("Direccion actual:<input type=text name=direccion><br>"); out.println("Telefono de contacto:<input type=text name=telefono><br>"); out.println("Ciudad:<input type=text name=ciudad><br>"); out.println("Credito aprobado:<input type=text name=credito><br>"); out.println("<input type=submit name=insertar value=Guardar><br>"); out.println("</form></body></html>"); %>

Anlisis programa Lnea 3 - 29: Si la condicin es verdadera, en un primer bloque try se llama al mtodo forname de la clase Class para establecer el drive que se va a utilizar sun.jdbc.odbc.JdbcOdbcDriver. Por otro lado al objeto conexin se le asigna la conexin de la base de datos con la instruccin DriverManager.getConnection (ruta,system.123456), como tambin al objeto instruccion se le asigna la conexin de la base de datos utilizando el mtodo createStatement () que pertenece a la interfaz Connection que permitir obtener los datos deseados. En el bloque catch se captura la excepcin ClassNotFoundException, donde por medio de la variable predefinida out se enva como salida a la pantalla utilizando el mtodo println el mensaje "Clase no encontrada, error, este se imprimir en caso de que no se pueda cargar el driver. Si no existe error en la conexin se crean seis variables de tipo String y una de tipo int a las cuales se les asignara por intermedio del mtodo getParameter los valores capturados en las cajas de texto del formulario respectivamente. Por otro lado se crea un objeto String llamado consulta_sql a la cual se le asigna la sentencia SQL "insert into nombre_tabla(campos_de_la_tabla) values(valores_de_los_campos). En un nuevo bloque try se crea una variable llamada n de tipo int a la cual se le asigna la sentencia SQL(consulta_sql) mediante el mtodo executeUpdate de la interfaz Statement. En el bloque catch se captura la excepcin SQLException, donde se imprimir el mensaje generado por la excepcin si ha existido algn error en la insercin del registro. Por

ltimo se cierran todos los objetos que previamente se haban inicializado utilizando el mtodo close (). Lnea 32 - 41: si no ingresa a la estructura if, se construye una formulario dinmico utilizando el objeto form que tiene como accin (action) llamar nuevamente a la pgina JSP, utilizando el mtodo post para que los datos sean enviados al servidor. En dicha formulario se crean las respectivas cajas de texto donde se ingresa la informacin en cada campo para ser insertada en la tabla, como tambin un botn (submit) llamado insertar que permitir la ejecucin de la insercin del registro en la tabla clientes. Ejecutar el JSP (insertarregistro.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/insertarregistro.jsp

Figura 7.21. Ejecucin JSP insertarregistro.jsp

Figura 7.22. Ventana de registro insertado en la tabla clientes

Figura 7.23. Ventana de la consulta a la tabla clientes de BDORACLE

Registro Insertado

c) Crear una JSP que realice una conexin a la base datos de Oracle BDORACLE y permita filtrar informacin por cualquier campo de la tabla clientes.
1 2 3 4 5 6 7 8 9 10 11 <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; String ruta=new String("jdbc:odbc:BDORACLE"); if(request.getParameter("filtrar") != null) { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println(e); } try { String ccampo=request.getParameter("campos"); String coperador=request.getParameter("operador"); String ccriterio=request.getParameter("criterio"); resultado =instruccion.executeQuery( "select * from clientes where "+ccampo+coperador+"'"+ccriterio+"'"); out.println("<center>"); out.println ("<h4>Busqueda de informacin por criterio</h4><br>"); out.println("<table border = 7><tr>"); out.println("<th> NIT </th><th> REPRESENTANTE </th><th> RAZON SOCIAL </th><th> DIRECCION </th><th> TELEFONO </th><th> CIUDAD</th><th> CREDITO </th></tr>");

12 13 14 15 16 17 18 19 20 21 22

23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

while(resultado.next()) { out.println("<tr><td>"); out.println(resultado.getString("nit")); out.println("</td><td>"); out.println(resultado.getString("representante")); out.println("</td><td>"); out.println(resultado.getString("razonsocial")); out.println("</td><td>"); out.println(resultado.getString("direccion")); out.println("</td><td>"); out.println(resultado.getString("telefono")); out.println("</td><td>"); out.println(resultado.getString("ciudad")); out.println("</td><td>"); out.println(resultado.getInt("credito")); out.println("</td></tr>"); } out.println("</table></center>"); } catch(Exception e) { out.println("error en la conexion :"+e); } resultado.close(); instruccion.close(); conexion.close(); } out.println("<html>"); out.println("<head><title>Filtrar Informacion</title></head>"); out.println("<body>"); out.println("<h4>Filtrar informacin de la tabla clientes<br><br></h4>"); out.println("<form action=filtrartabla.jsp method =post>"); out.println("Seleccione el campo:<br>"); out.println("<select name=campos size=5>"); out.println("<option>nit</option>"); out.println("<option>representante</option>"); out.println("<option>razonsocial</option>"); out.println("<option>direccion</option>"); out.println("<option>telefono</option>"); out.println("<option>ciudad</option>"); out.println("<option>credito</option>"); out.println("</select>"); out.println("<br>Seleccione Operador:<br>"); out.println("<select name=operador size=1>"); out.println("<option>=</option>"); out.println("<option>></option>"); out.println("<option>>=</option>"); out.println("<option><</option>"); out.println("<option><=</option>"); out.println("</select>"); out.println("<br>Criterio :<br> <input type=text name=criterio size=20><br>"); out.println("<p><label>De clic para filtrar la informacin en la tabla clientes"); out.println("<input type =submit name=filtrar value=Filtrar>"); out.println("</label></p>"); out.println("</form></body></html>"); %>

Anlisis programa

Lnea 8 - 11: En un primer bloque try se llama al mtodo forname de la clase Class para establecer el drive que se va a utilizar en este caso es sun.jdbc.odbc.JdbcOdbcDriver, y al objeto conexion se le asigna la conexin de la base de datos con la instruccin DriverManager.getConnection (jbdc:odbc:BDORACLE,system.123456). Al objeto consulta se le asigna la conexin de la base de datos utilizando el mtodo createStatement () que pertenece a la interfaz Connection que permitir obtener los datos deseados de la base de datos. Dicho objeto tiene como parmetros ( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE), los cuales permitirn la modificacin o la insercin de informacin en la tabla. Lnea 15 - 44: en un segundo bloque try se definen tres variables de tipo String (ccampo, coperador, ccriterio). Por medio del mtodo getParameter perteneciente a la interface HttpServletRequest, que se asocian a un nombre para proporcionar una URL (campos, operador, criterio). Obsrvese que con el nombre del select se obtiene el valor seleccionado por el usuario. Tambin se crea una variable llamada resultado de tipo String que almacenara la instruccin SQL que permitir el filtrado de la informacin de la tabla. En dicha instruccin primero se selecciona la tabla donde se van a realizar el filtrado, con la clausula where se realiza la filtracin dependiendo del campo, operador y criterio escogido por el usuario (ej:select * from clientes where ciudad=bogota). Por ltimo se crea un ciclo que recorrer la tabla clientes e imprimir cada registro que cumpla las condiciones especificadas. Ejecutar el JSP (insertarregistro.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/insertarregistro.jsp

Figura 7.24. Ejecucin JSP filtrartabla.jsp

Figura 7.25. Ventana de filtrado de registros en la tabla clientes

d) Crear una JSP que realice una conexin a la base datos de Oracle BDORACLE y permita modificar un registro de la tabla clientes especificado por un usuario.
1 2 3 4 5 6 7 8 9 10 11 12 13 <%@ page import="java.io.*, java.util.*, java.net.*, java.sql.*" %> <%! String clave; %> <% if(request.getParameter("buscar") != null) { Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; String ruta=new String("jdbc:odbc:BDORACLE"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println(e); } clave = request.getParameter("NIT"); String consulta="select * from clientes where nit='"+clave+"'"; try { resultado = instruccion.executeQuery(consulta); resultado.next(); out.println("<form action=modificarregistrotabla.jsp method=post>"); out.println("Representante Legal:<input type=text name=representante value= "+ resultado.getString(2)+ "><BR>"); out.println("Razon Social:<input type=text name=razonsocial value= "+ resultado.getString(3)+ "><BR>"); out.println("Direccion:<input type=text name=direccion value= "+ resultado.getString(4)+ "><BR>"); out.println("Telefono:<input type=text name=telefono value= "+ resultado.getString(5)+ "><BR>"); out.println("Ciudad:<input type=text name=ciudad value= "+ resultado.getString(6)+ "><BR>"); out.println("Credito Aprobado:<input type=text name=credito value= "+ resultado.getInt(7)+ "><BR>"); out.println("<input type=submit name=editar value=Editar><BR>"); resultado.close();

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

30 31 32 33 34 35

36 37 38 39 40 41 42 43 44 45 46 47 48 49

50 51 52 53 54 55 56 57 58 59 60 61 62

63 64 65 66 67

instruccion.close(); conexion.close(); } catch(SQLException e) { out.println("<h3>Registro no encontrado</h3><br>"+e); } catch(Exception ex) { out.println(ex); } } String edicion=request.getParameter("editar"); if(edicion==null) edicion=" "; if(edicion.compareTo("Editar")==0) { String representante,razonsocial,direccion,telefono,ciudad,consulta_sql; int credito; Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; String ruta=new String("jdbc:odbc:BDORACLE"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println(e); } try { resultado = instruccion.executeQuery("select * from clientes"); } catch(SQLException e) { out.println(e); } representante = request.getParameter("representante"); razonsocial = request.getParameter("razonsocial"); direccion = request.getParameter("direccion"); telefono = request.getParameter("telefono"); ciudad = request.getParameter("ciudad"); credito= Integer.parseInt(request.getParameter("credito")); consulta_sql= "UPDATE clientes SET "+ "nit='"+ clave+"',representante='"+ representante+"', razonsocial='"+ razonsocial+"',direccion='"+ direccion+"',telefono='"+telefono+"',ciudad='"+ciudad+"',credito='"+ credito+"' WHERE nit='"+clave+"'"; try { instruccion.executeUpdate(consulta_sql); instruccion.close(); conexion.close(); } catch(SQLException e)

68 69 70 71 72 73 74 75

{ out.println(e); } out.println("<h1>REGISTRO EDITADO</h1>"); } out.println("<head><title>Modificacion de un Registro</title></head>"); out.println("<form action=modificarregistrotabla.jsp method=post>"); out.println("NIT A EDITAR:<input type=text name=NIT><BR>"); out.println("<input type=submit name=buscar value=BUSCAR ><BR>"); out.println("</form>"); %>

Anlisis programa Lnea 4 - 15: si se capturo un valor en la caja de texto llamada nit y se pulso en botn buscar, se crearan los objetos Connection (conexin), ResultSet (resultado), Statement (instruccin) y en un primer bloque try se realizar la respectiva conexin a la base de datos. Lnea 16: a la variable clave se le asigna el valor de la caja de texto llamada nit. Lnea 17: se crea una variable de tipo String llamada consulta a la cual se le asigna el valor de una sentencia SQL. En dicha sentencia se selecciona todos los campos de la tabla clientes donde el nit sea igual al valor de la variable clave. Lnea 18 - 35: En un segundo bloque try al objeto resultado de tipo ResultSet se le asigna el valor de la consulta executeQuery por intermedio del objeto instruccin de tipo Statement, movindose el objeto resultado al siguiente registro(next()) . Por otro lado se crea un formulario donde se carga el contenido del registro que cumpli la condicin; cada campo de la tabla clientes en asignado a una caja de texto con su respectivo valor en modo de edicin. Adems se crea un botn para enviar la informacin cuando se haya modificado. Por ltimo se cierran los objetos y se crean las respectivas excepciones. Lnea 36 -69: se crea una variable de tipo String llamada edicion a la cual se le asigna el valor de la caja de texto llamada editar. En una primera estructura if se pregunta si la variable edicin es igual a nulo, si es as, a dicha variable se le asigna un valor en blanco. Con otra estructura if se valida si la variable editar es igual al valor Editar utilizando el mtodo compareTo ( si las dos variables son iguales el valor ser cero (0)). Si la condicin es verdadera se realiza la conexin a la base de datos y a las variables de tipo String e int se le asignan respectivamente los valores que contengan las cajas de texto del formulario. A la variable consulta_sql de tipo String se le asigna la sentencia de actualizacin UPDATE de SQL. En un tercer bloque try se realiza la actualizacin de la tabla cliente utilizando executeUpdate por intermedio del objeto instruccin de tipo Statement y envindole como parmetro la variable consulta_sql. Adems se cierran los objetos y se crea la respectiva excepcin. Lnea 70 - 74: se crea otro formulario donde se tiene una caja de texto (NIT) y un botn (buscar) para volver a realizar una nueva bsqueda y modificar el registro. Ejecutar el JSP (modificarregistrotalba.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/modificarregistrotabla.jsp

Figura 7.26. Ventana para buscar registro a modificar en la tabla clientes.

Figura 7.27. Ventana con los campos de la tabla clientes a modificar.

Figura 7.28. Ventana cuando se ha modificado un registro de la tabla clientes.

e) Crear una JSP que realice una conexin a la base datos de Oracle BDORACLE y permita eliminar un registro especificado por un usuario de la tabla clientes.
1 2 3 4 5 <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% if(request.getParameter("eliminar") != null) { Connection conexion = null; ResultSet resultado= null; Statement instruccion=null;

6 7 8 9 10

11 12 13 14 15 16 17 18 19 20 21 22 23 24

25 26 27 28 29

String ruta=new String("jdbc:odbc:BDORACLE"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println(e); } String clave = request.getParameter("niteliminar"); String consulta_sql="delete from clientes where nit='"+clave+"'"; try { instruccion.executeUpdate(consulta_sql); out.println("<h1>registro eliminado</h1>"); } catch(SQLException e) { out.println(e); } try { instruccion.close(); conexion.close(); } catch(SQLException e) { out.println(e); } } out.println("<head><title>Eliminar registro</title></head>"); out.println("<form action=eliminarregistrotabla.jsp method=post>"); out.println("Nit a eliminar:<input type=text name=niteliminar><br>"); out.println("<input type=submit name=eliminar value=Eliminar><br>"); out.println("</form>"); %>

Anlisis programa Lnea 2 - 12: si se capturo un valor en la caja de texto llamada niteliminar y se pulso en botn eliminar, se crearan los objetos se crearan los objetos Connection (conexin), ResultSet (resultado), Statement (instruccin) y en un primer bloque try se realizar la respectiva conexin a la base de datos. Lnea 13: a la variable clave se le asigna el valor de la caja de texto llamada niteliminar. Lnea 14: se crea una variable de tipo String llamada consulta_sql a la cual se le asigna el valor de una sentencia SQL DELETE. En dicha sentencia se selecciona todos los registros a eliminar de la tabla clientes donde el nit sea igual al valor de la variable clave. Lnea 15 -19: En un segundo bloque try se realiza la eliminacin de los registros que cumplieron la condicin de la tabla cliente utilizando executeUpdate por intermedio del objeto instruccin de tipo Statement y envindole como parmetro la variable consulta_sql.

Lnea 25 - 29: se crea otro formulario donde se tiene una caja de texto (niteliminar) y un botn (eliminar) para volver a realizar una nueva eliminacin de uno o ms registros. Ejecutar el JSP (eliminarregistrotabla.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/eliminarregistrotabla.jsp

Figura 7.29. Ventana para eliminar registros de la tabla clientes.

Figura 7.30. Ventana de registro(s) eliminado(s) de la tabla clientes.

f) Crear una JSP que permita paginar los registros de una tabla. Por cada pgina se deben mostrar dos registros como mximo.
1 2 3 4 5 6 7 8 9 10 <%@ page import="java.io.*,java.util.*,java.net.*,java.sql.*" %> <% Connection conexion = null; ResultSet resultado= null; Statement instruccion=null; int numRegistros=0; String ruta=new String("jdbc:odbc:BDORACLE"); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conexion=DriverManager.getConnection(ruta,"system","123456"); instruccion =conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); } catch(ClassNotFoundException e) { out.println(e); } catch(SQLException e) { out.println(e);

11 12 13 14

15 16 17 18

19 20 21 22 23 24 25 26 27 28 30 31 32 33 34 35 36 37

38 39 40 41 42 43 44 45

46 47 48 49 50 51 52 53

} try { resultado = instruccion.executeQuery("select * from clientes"); while(resultado.next()) { numRegistros++; } } catch(SQLException e) { out.println(e); } try { resultado = instruccion.executeQuery("select * from clientes"); int numeroRegistrosPorPagina = 2; int numeroEnlaces = (int)(numRegistros/numeroRegistrosPorPagina); String actual = request.getParameter("actual"); if((new Integer(actual))>1) { int imprimir = new Integer(actual)-1; out.println("<a href=paginarregistros.jsp?actual="+imprimir+">Anterior</a>"); } for(int i=1;i<=numeroEnlaces;i++) { int acto = new Integer(actual); if(acto==i) { out.println("<strong>"); out.println("<a href=paginarregistros.jsp?actual="+i+">"+i+"</a>"); out.println("</strong>"); } else { out.println("<a href=paginarregistros.jsp?actual="+i+">"+i+"</a>"); } } if((new Integer(actual))<numeroEnlaces) { int imprimir = new Integer(actual)+1; out.println("<a href=paginarregistros.jsp?actual="+imprimir+">Siguiente</a>"); } int iniciar = new Integer(actual)*numeroRegistrosPorPagina; int fin = new Integer(actual)*numeroRegistrosPorPagina; iniciar = iniciar-1; out.println("<TABLE Border=10><TR bgcolor=silver>"); out.println("<th>NIT</th><th>REPRESENTANTE</th><th>RAZON SOCIAL</th> <th>DIRECCION</th><th>TELEFONO</th><th>CIUDAD</th><th> CREDITO</th></tr>"); int contador = 0; while(resultado.next()) { contador++; if(contador>=iniciar && contador<=fin) { out.println("<TR>"); out.println("<TD>"+resultado.getString(1)+"</TD>"); out.println("<TD>"+resultado.getString(2)+"</TD>"); out.println("<TD>"+resultado.getString(3)+"</TD>");

54 55 56 57 58

out.println("<TD>"+resultado.getString(4)+"</TD>"); out.println("<TD>"+resultado.getString(5)+"</TD>"); out.println("<TD>"+resultado.getString(6)+"</TD>"); out.println("<TD>"+resultado.getInt(7)+"</TD>"); out.println("</TR>"); } } out.println("</TABLE></CENTER></DIV></HTML>"); resultado.close(); instruccion.close(); conexion.close(); } catch(SQLException e) { out.println(e); } %>

59 60 61 62 63 64

Anlisis programa Lnea 16 -69: al objeto resultado de tipo Resultset se le asigna la sentencia de consulta executeQuery por intermedio del objeto instruccin de tipo Statement y envindole como parmetro la seleccin de todos los registros de la tabla clientes. Lnea 17 -18: se crea un ciclo while para recorrer toda la tabla y guardar en la variable numRegistros la cantidad de registros de la tabla. Lnea 23: se inicializa la variable numeroRegistrosPorPagina con un valor de 2, la cual servir para visualizar dos registros por pgina. Lnea 24: se inicializa la variable numeroEnlaces con un valor resultante de dividir el nmero de registros de la tabla con la cantidad de registros por pgina. Lnea 25: se inicializa la variable actual de tipo String con el valor enviado por la pagina cuando se ha cargado por primera vez (http://127.0.0.1:8090/examples/jsp/paginarregistros.jsp?actual=1) Lnea 26 - 28: se utiliza la estructura if para validar si la variable actual es mayor de 1. Si es verdadero se asigna a la variable imprimir el valor de actual 1 y se imprime en pantalla el valor de imprimir ms el texto Anterior utilizando la etiqueta a< href> para que lo muestre como un hipervnculo. Lnea 30 -37: se crea un ciclo for que se ejecutara mientras i sea menor que el numero de enlaces. Dentro del ciclo se crea una variable acto a la cual se le asigna el valor de la variable actual, seguidamente se pregunta si acto es igual a i. Si es verdadero se imprime en negrilla la pagina actual. En caso contrario se imprimir la variable i sin negrilla. Lnea 38 - 40: se utiliza un if para determinar si la variable actual es menor que le numero de enlaces. Si es verdadero se asigna a la variable imprimir el valor de actual + 1 y se imprime en pantalla el valor de imprimir ms el texto Siguiente utilizando la etiqueta <a href> para que lo muestre como un hipervnculo. Lnea 41: se inicializa la variable iniciar con el valor que se obtiene de multiplicar la variable actual por el nmero de registros de la pagina, la cual servir para saber desde cual registro se inicia la visualizacin de estos en la pagina. Lnea 42: se inicializa la variable fin con el valor que se obtiene de multiplicar la variable actual por el numero de registros de la pagina, la cual servir para saber cual registro es el ltimo registro que se visualiza en la pagina.

Lnea 47 - 58: se crea un ciclo while que recorrer la tabla. Dentro de este se crea un ciclo for que se ejecutara mientras la variable contador sea mayor o igual a la variable iniciar y que la variable contador sea menor o igual a la variable fin. En este ciclo for se imprimir en una tabla los registros correspondientes en la pgina. Ejecutar el JSP (paginarregistros.jsp) Ingresar al navegador y escribir la siguiente direccin URL:
http://127.0.0.1:8090/examples/jsp/paginarregistros.jsp?actual=1

Figura 7.31. Ventana paginacin de la tabla clientes.

7.9. Ejercicios propuestos 1. Hacer un jsp que permita verificar una conexin a una base de datos en Access. 2. Realizar un jsp que permita crear una tabla en una base de datos. 3. Escribir un jsp que permita insertar datos una tabla de una base de datos en Access. 4. Elaborar un jsp que permita consultar los datos una tabla de una base de datos de Access. 5. Disear un jsp que permita modificar un registro de una tabla de una base de datos. 6. Crear un jsp que permita eliminar un registro de una tabla de una base de datos. 7. Hacer un jsp que permita buscar un registro de una tabla de una base de datos. 8. Elaborar un jsp que permita visualizar los registros que cumplan una condicin especifica de una tabla de una base de datos en Access. 9. Escribir un jsp que permita en un campo cambiar el contenido de minsculas a maysculas. 10. Crear un jsp que permita visualizar nicamente el registro que se quiere modificar de una tabla de una base de datos.

Vous aimerez peut-être aussi