Вы находитесь на странице: 1из 39

Curso de Java Server Pages Nivel bsico Manual del alumno <JSP> Copyright Cdric Simon, 20052011 Versin

2.3 Reproduccin prohibida Ing. Cedric Simon Tel: 2268 0974 Cel: 8888 2387 Email: c e d r i c@s o l u c i o n j a v a . c om Web: www.solucionjava.com SolucionJava.com Curso de Java Server Pages Nivel bsico Pagina 2 / 46 ndice ndice............................................................................ ................................................................................ ..................................................2 1Introduccin al curso............................................................ ................................................................................ .......................................5 1.1Objetivo de este curso....................................................... ................................................................................ ...................................5 1.2Manual del alumno............................................................ ................................................................................ ..................................5 1.3Ejercicios prcticos........................................................... ................................................................................ ...................................5 1.4Requisitos para atender a este curso......................................... ................................................................................ .........................5 1.5Soporte despus del curso...................................................... ................................................................................ ..............................5 2Introduccin al JSP.............................................................. ................................................................................ .......................................6 2.1Que es el JSP?................................................................ ................................................................................ .....................................6 2.2Por qu utilizaramos el JSP?..................................................... ................................................................................ ......................6 2.3Navegadores web.............................................................. ................................................................................ ....................................6 3Arquitectura J2EE.............................................................. ................................................................................ .........................................7 3.1Introduccin a la Tecnologa y Conceptos J2EE.................................... ................................................................................ ...........7 3.2Componentes J2EE............................................................. ................................................................................ .................................7 3.3La Arquitectura Java Naming Directory Interface (JNDI)....................... ................................................................................ ......8 3.3.1Ejemplo de JNDI............................................................ ................................................................................ .................................8

4El protocolo HTTP.............................................................. ................................................................................ .........................................9 4.1Modelo de consulta / respuesta HTTP.......................................... ................................................................................ .....................9 4.2Detalles de una consulta..................................................... ................................................................................ .................................9 4.3Detalles de respuesta........................................................ ................................................................................ ..................................10 4.4Parmetros de consulta......................................................... ................................................................................ ............................11 4.5Mtodos de consulta............................................................ ................................................................................ ...............................11 5Instalacin del servidor JSP..................................................... ................................................................................ .................................13 5.1Jakarta Tomcat............................................................... ................................................................................ ...................................13 5.2Instalacin.................................................................... ................................................................................ .......................................13 5.3Configuracin de Eclipse....................................................... ................................................................................ ............................13 5.4Verificacin de la instalacin................................................... ................................................................................ .........................14 6Uso de herramienta y entorno................................................... ................................................................................ ................................15 6.1Eclipse...................................................................... ................................................................................ ...........................................15 6.1.1Creacin del servidor........................................................ ................................................................................ ............................15 6.1.2Creacin de un nuevo proyecto web............................................ ................................................................................ ..................16 6.1.3Creacin de la pgina de ndice.................................................. ................................................................................ ...................17 7Utilizacin de los scriptlets.................................................... ................................................................................ ....................................20 7.1Qu son los scriptlets?......................................................... ................................................................................ .............................20 7.2Los scriptlet de declaracin de variables...................................... ................................................................................ ...................20 7.3Los scriptlet de utilizacin de variables...................................... ................................................................................ .....................20

7.4Los scriptlets de cdigo....................................................... ................................................................................ ...............................20 Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 3 / 46 7.5Agregar comentarios.......................................................... ................................................................................ ................................21 8Utilizacin de directivas........................................................ ................................................................................ .....................................22 8.1Directiva de pgina............................................................ ................................................................................ ................................22 8.1.1Lista de parmetros para directiva de Pgina................................... ................................................................................ .............22 8.2Directiva de inclusin......................................................... ................................................................................ ................................23 8.3Directiva taglib............................................................. ................................................................................ ......................................23 9Utilizacin de variables de sesin................................................. ................................................................................ .............................24 9.1Declaracin de variable de sesin................................................ ................................................................................ .....................24 9.2Recuperar el valor de un variable de sesin.................................... ................................................................................ ................24 9.3Invalidar una sesin........................................................... ................................................................................ ................................24 9.4Otros mtodos.................................................................. ................................................................................ ...................................24 10Objetos implcitos.............................................................. ................................................................................ .......................................25 10.1request..................................................................... ................................................................................ ..........................................25 10.2response.................................................................... ................................................................................ .........................................25 10.3session..................................................................... ................................................................................ ...........................................25 10.4application................................................................. ................................................................................ ........................................25 10.5out......................................................................... ................................................................................ .............................................25 10.6exception................................................................... ................................................................................ ........................................25

11Los formularios............................................................... ................................................................................ .........................................26 11.1Creacin del formulario....................................................... ................................................................................ ...........................26 11.2Tratamiento del formulario.................................................. ................................................................................ ..........................26 12Elementos de acciones estndar.................................................. ................................................................................ ............................29 12.1<jsp:forward />............................................................. ................................................................................ ....................................29 12.2<jsp:include />............................................................. ................................................................................ .....................................29 12.3<jsp:param>................................................................. ................................................................................ ....................................29 12.4<jsp:plugin>................................................................ ................................................................................ ......................................29 12.5<jsp:params>................................................................ ................................................................................ ....................................30 12.6<jsp:fallback>.............................................................. ................................................................................ .....................................30 12.7<jsp:useBean>............................................................... ................................................................................ ...................................30 12.8<jsp:getProperty>........................................................... ................................................................................ .................................30 12.9<jsp:setProperty>........................................................... ................................................................................ ..................................30 13Gestin de errores.............................................................. ................................................................................ ......................................31 13.1Errores de compilacin........................................................ ................................................................................ ............................31 13.2Errores de lgica............................................................. ................................................................................ .................................31 13.3Errores de ejecucin.......................................................... ................................................................................ ..............................31 13.3.1Pgina de error personalizada............................................... ................................................................................ ......................31 14Utilizacin de JavaBean......................................................... ................................................................................ .................................33 14.1Qu es un JavaBean?............................................................ ................................................................................ .........................33

14.2Declaracin de un JavaBean.................................................... ................................................................................ .......................33 14.2.1<jsp:useBean>............................................................. ................................................................................ ................................33 Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 4 / 46 14.2.2<jsp:getProperty>......................................................... ................................................................................ ...............................34 14.2.3<jsp:setProperty>......................................................... ................................................................................ ...............................35 14.3Scope de un JavaBean........................................................ ................................................................................ ..............................35 15Utilizacin de servlets......................................................... ................................................................................ .....................................36 15.1Qu es un servlet?............................................................. ................................................................................ .............................36 15.2Para que sirve un servlet?................................................... ................................................................................ ..........................36 15.3Anatoma de un servlet........................................................ ................................................................................ ............................36 15.4Ciclo de vida de un servlet................................................. ................................................................................ ..............................37 15.5Creacin de un servlet simple................................................. ................................................................................ ........................37 15.6Uso de servlet para mostrar imgenes o archivos binarios...................... ................................................................................ ....38 16El modelo MVC................................................................. ................................................................................ .......................................43 16.1Qu es el modelo MVC?.......................................................... ................................................................................ ......................43 16.2MVC con JSP y JavaBeans..................................................... ................................................................................ ........................43 16.3MVC con JSP, JavaBeans y servlet............................................ ................................................................................ ....................43 16.4MVC con JSP, servlet, JavaBeans y EJB....................................... ................................................................................ ...............44 17Ejercicios.................................................................... ................................................................................ ..............................................45 18 Esquema de la base de datos.................................................. ................................................................................ ................................46

Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 5 / 46 1 Introduccin al curso 1.1 Objetivo de este curso En este curso vamos a aprender el lenguaje JSP que nos permitir crear pginas web d inmicas. 1.2 Manual del alumno Este manual del alumno es una ayuda para el alumno, para tenga un recuerdo del c urso. Este manual contiene un resumen de las materias que se van a estudiar durante el curso, pero el alumno d ebera de tomar notas personales para completas este manual. 1.3 Ejercicios prcticos Para captar mejor la teora, se harn muchos ejercicios con los alumnos, para probar la teora y verificar la integracin de la materia. Tambin, el alumno podr copiar sus cdigos en un disquete al fin del curso para lleva rse, con fin de seguir la prctica en su hogar. 1.4 Requisitos para atender a este curso Una iniciacin al lenguaje Java es requerida para seguir este curso. La creacin y e l manejo de objetos Java est considerada cmo asimilado antes de empezar este curso. El conocimiento del lenguaje HTML y JavaScript son tambin requeridos para poder a tender a este curso. Si el alumno tiene dificultades en un u otro capitulo, el debe sentirse libre de pedir explicaciones adicionales al profesor. Pero si aparece que el alumno no posee los requisitos mnimos para este curso, por respeto a los otros alumnos que ya poseen esta materia, el alumno podra ser traslado para otro curso en el futuro, c uando el cumplir con los requisitos. 1.5 Soporte despus del curso Si tienes preguntas sobre la materia del curso en tus ejercicios prcticos, puedes escribir tus preguntas a cedric@solucionjava.com. Para informaciones sobre otros cursos, visita el sitio web www.solucionjava.com. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 6 / 46 2 Introduccin al JSP 2.1 Que es el JSP? El JSP es una extensin del lenguaje de programacin Java, utilizado para crear pgina s web dinmicas. El JSP necesita que un servidor web con capacidad JSP sea instalado y funcionand o para poder ejecutar las pginas JSP. El servidor va a compilar el cdigo JSP y tratarlo en tiempo real, con la informac in viniendo del cliente web, para regresarle una pagina web adaptada, en tiempo real. El servidor tiene tambin capacidad de seguir el camino de un usuario, as cmo de ide ntificarlo. 2.2 Por qu utilizaramos el JSP? El JSP se necesita cuando la pagina web tiene que adaptarse en funcin del usuario , y cuando se necesita guardar valores de sesin del usuario. Existen otros lenguaje que permiten eso, como el ASP o el PHP, pero el JSP tiene como aventaje que esta basado en el lenguaje Java, y le tiene la herencia de su poder y de su portabilidad. Los serv

idores JSP existen para varios sistemas operativos, entre otros Windows, Linux, y Unix. El JSP est tambin utilizado en paquetes empresariales muy grande como el servidor de IBM Websphere, o el servidor de aplicacin de Oracle. El JSP es un estndar de programacin Internet. 2.3 Navegadores web Si los navegadores prueban todos de poder aplicar al mximo las recomendaciones de l HTML 4.0 existen ciertas opciones, a dentro o afuera del HML estndar que slo ciertos navegadores soportan. Tambin, un mismo cdigo no aparecer siempre igual en un navegador e en otro. El JSP no est ligado directamente con los navegadores, pero el HTML que generaran si. As que un cdigo generado podra funcionar bien en un navegador, y dar un resultado diferente en otro. Verem os diferente ejemplos en este curso. En este curso, utilizaremos dos navegadores diferentes: el Internet Explorer de Microsoft, y el Firefox de Mozilla. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 7 / 46 3 Arquitectura J2EE 3.1 Introduccin a la Tecnologa y Conceptos J2EE Java 2 Enterprise Edition (J2EE) es una arquitectura multicapa para implementar aplicaciones de tipo empresarial y aplicaciones basadas en la Web. Esta tecnologa soporta una gran variedad de tipos de aplicaciones desde aplicaciones Web de gran escala a pequeas aplicaciones clienteservidor. El objetivo principal de la tecnologa J2EE es crear un simple modelo de desarrollo para aplicaciones empresariales utilizando component es basados en el modelo de aplicacin. En este modelo dichos componentes utilizan servicios proporcionados po r el contenedor, que de otro modo tendran que estar incorporados en el cdigo de la aplicacin. Observa que esto podra n o ser lo ideal para todos los escenarios: por ejemplo, una pequea aplicacin se cubrira mejor utilizando una soluc in de la tecnologa Java de peso ligero (por ejemplo Servlets, JSPs, etc.). 3.2 Componentes J2EE Las aplicaciones J2EE estn compuestas de diferentes componentes. Un componente J2 EE es una unidad de software funcional autocontenido que se ensambla dentro de una aplicacin J2EE con sus clases de ayuda y ficheros y que se comunica con otros componentes de la aplicacin. La especificiacin J2EE define los siguientes componentes J2EE: 1. Las Aplicaciones Clientes y los Applets son componentes que se ejecutan en el lado del cliente. 2. Los componentes Java Servlet la tecnologa JavaServer Pages son componentes Web que se ejecutan en el lado del servidor. 3. Los Enterprise JavaBeans (beans enterprise) son componentes de negocio que se ejecutan en el servidor de aplicacion. Todos esos componentes se ensamblan en una aplicacin J2EE, se verifica que estn bi en formados y que cumplen la especificacin J2EE, y se despliegan en el entorno de produccin, donde se ejecutan y son controlados por el servidor de aplicaciones J2EE.

Adems de estos componentes principales, J2EE incluye servicios estndar y tecnologas de soporte como: Java Database Connectivity (JDBC) tecnologa que proporciona acceso a sistemas de bases de datos relacionales. Java Transaction API (JTA) o Java Transaction Service (JTS) proporciona soporte para transaciones a los componentes J2EE. Java Messaging Service (JMS) para comunicacin asncrona entre componentes J2EE. Java Naming y Directory Interface (JNDI) proporcionan accesos a nombres y direct orios. Nota: Todos los componentes J2EE estn escritos en lenguaje Java Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 8 / 46 3.3 La Arquitectura Java Naming Directory Interface (JNDI) J2EE utiliza el API JNDI para acceder genricamente a servicios de nombrado y dire ctorio utilizando la tecnologa Java. El API JNDI reside entre la aplicacin y el servicio de nombres y hace que e l servicio de nombres subyacente sea transparente para los componentes de la aplicacin: Un cliente puede buscar referencias a componentes EJB u otros recursos en un ser vicio de nombres como el mencionado arriba. El cdigo del cliente no se modifica, sin importar el servicio de nombres que se est utilizando o en qu tecnologa est basado, y esto no crea ninguna diferenca en el modo en que los clie ntes localizan los objetos remotos mediante el API JNDI. Para que una aplicacin pueda interactuar con un servicio de nombre, este debe con ocer las propiedades del servicio JNDI al cual el quiere conectarse. Estas propiedades son entre otras el tipo de servicio JNDI (facory), el domicilio IP y el Puerto del servicio. 3.3.1 Ejemplo de JNDI ... DataSource ds=null; InitialContext ctx = new InitialContext(); ds = (DataSource) ctx.lookup("java:comp/env/jdbc/"+datasourceName); con = ds.getConnection(); ... Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 9 / 46 4 El protocolo HTTP El protocolo HTTP (HyperText Transport Protocol) es un protocolo que define en d etalle cmo un cliente y un servidor deben comunicar entre ellos. El modelo de comunicacin HTTP es a la base del web. El protocolo se aplica a cualquier servidor y cliente web. Vamos a examinar los detalles ms importante del protocolo HTTP. 4.1 Modelo de consulta / respuesta HTTP El HTTP y los protocolos extendidos basados sobre el utilizan un modelo de comun icacin simple, pero poderoso. De manera tpica, un cliente enva una consulta para un recurso a un servidor, y el servidor contesta una respuesta que corresponde al recurso preguntado (o contesta con un mensaje de error). El r ecurso puede ser una pgina HTML, o una aplicacin que contesta con un contenido dinmico. Este modelo simple implica tres cosas que Usted tiene que ser conciente: 1. El protocolo HTTP es un protocolo sin estado. Es decir que el servidor no gua

rda ningn informacin acerca del cliente depuse de haberle contestado, y por eso no puede reconocer que varia s consultas de un mismo cliente pueden ser relacionadas. 2. La aplicacin web no puede entregar una respuesta inmediato, como en aplicacion es locales. La velocidad depende del ancho de banda disponible y de la carga del servidor. 3. No hay nada en el protocolo que indica al servidor como la consulta le ha lle gado, as que el servidor no puede distinguir diferente mtodos de consulta. Por ejemplo, en servidor no puede distin guir una consulta generada por un clic en un enlace del uso del botn 'atrs' del navegador. Tambin, como el HTT P es sin estado, no se puede a dentro del HTTP llamar a la pgina anterior. 4.2 Detalles de una consulta Existen dos mtodos de consulta: GET y POST. GET es la ms utilizada, y la que se us o por defecto. Ejemplo de una consulta: GET /index.html HTTP/1.0 Host: www.gefionsoftware.com User-Agent : Mozilla/4.5 [en] (WinNT; I) Accept: image/gif, image/jpeg, image/pjpeg, image/png, */* Accept-language : en Accept-charset : iso-8859-1,*,utf-8 La primera lnea especifica que se usa el mtodo GET y se pregunta para regresar el recurso /index.html utilizando el protocolo HTTP/1.0. Las otras lneas proveen ttulos con informacin adicional al serv idor para cumplir con la consulta. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 10 / 46 El ttulo HOST dice al servidor el nombre (hostname) utilizado en el URL. Un servi dor puede tener varios nombres, y este informacin permite distinguir mltiple servidores virtuales utilizando un mism o proceso web. El ttulo User-Agent contiene informacin sobre el tipo de navegador utilizado para hacer la consulta. El servidor puede utilizar este informacin para generar respuestas diferentes dependiendo del naveg ador (IE, Netscape, WAP, PDA,...). Los ttulos Accept proveen informacin sobre el idioma y el formato de archivo que e l navegador acepta. 4.3 Detalles de respuesta El mensaje de la respuesta parece al de la consulta. El contiene tres partes: un a lnea de estado, unos ttulos de respuesta, y el cuerpo de la respuesta. Ejemplo de respuesta: HTTP/1.0 200 OK Last-Modified: Mon, 19 Dec 2004 20:21:42 GMT Date: Tue, 12 Jul 2005 13:12:10 GMT Status: 200 Content-Type: text/html Servlet-Engine: Tomcat Web Server/3.2 Content-Length: 59 <html> <body> <h1>Hello World!</h1> </body> </html> La lnea de estado empieza con el nombre del protocolo, seguido por el cdigo de res

ultado y una breva descripcin del cdigo de resultado. Aqu el cdigo de resultado es 200, que significa que sali con xito . El mensaje de respuesta tiene ttulos, como el de consulta. En este ejemplo: El ttulo Last-Modified da la fecha y hora de cuando el recurso fue modificado por ltima vez. El cliente puede utilizar esta informacin para marcar la pgina el su cach, y pedir en el futuro solamente las que fueron modificadas. El ttulo Content-Type dice al navegador que tipo de datos contiene el cuerpo de l a respuesta. El ttulo Content-Length dice al navegador el tamao del cuerpo de la respuesta. Una lnea vaca separa los ttulos del cuerpo de la respuesta. El cuerpo de la respues ta contiene el cdigo que ser enseado en el navegador. Aqu una simple pgina HTML. El cuerpo puede contener pginas HTML ms complicadas, u otro tipo de contenido (ima gen, sonido, archivo comprimido,...). El cuerpo puede tambin contener cdigo que va generar otras consul tas al servidor, como la insercin de una imagen. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 11 / 46 Interaccin entre un cliente y un servidor web 4.4 Parmetros de consulta Se pueden pasar parmetros de consulta a dentro del URL. Por eso, despus del nombre de la pgina, hay que mencionar un punto de pregunta '?' y uno a varios parmetros deparados por '&', co n el nombre del parmetro, el signo '=', y el valor del parmetro. Veremos ejemplos utilizando los formularios. 4.5 Mtodos de consulta Ya hemos visto el uso del mtodo GET. Tambin existe el mtodo POST. La diferencia ent re los dos es que el mtodo GET pasa los parmetros a dentro del URL, as que se puede guardar fcilmente en su li sta de marcadores. Tambin, en navegador sabe que este mtodo no puede daar el servidor, as acepta de someter la consulta nuevamente (refresca) sin alerta. El mtodo POST, en vez de pasar los parmetros en el URL, les pasa a dentro del cuer po de la consulta. Eso permite enviar consulta de tamao ms grande que 2000 caracteres, y sin que los parmetros apa recen en el URL. Como los parmetros estn guardados a dentro del cuerpo de la consulta, la consulta no puede ser guardada tan fcilmente en los marcadores, porque adems del URL, deber guardar el cuerpo de la co nsulta. Tambin, cuando se proba de enviar de nuevo una encuesto POST (refresh) el navegad or genera una alerto porque este accin puede generar acciones posiblemente irreversible al nivel del servidor . Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 12 / 46 Ejemplo de formulario: <form action="/prueba.jsp" method="POST"> Cuidad: <input name="cuidad" type="text"> Pais: <input name="pais" type="text"> <p> <input type="SUBMIT"> </form>

Ejemplo de consulta POST generada por el formulario arriba: POST / prueba.jsp HTTP/1.0 Host: www.businesssoft.com.ni User-Agent : Mozilla/4.5 [en] (WinNT; I) Accept: image/gif, image/jpeg, image/pjpeg, image/png, */* Accept-language : en Accept-charset : iso-8859-1,*,utf-8 cuidad=Managua&pais=Nicaragua Ejemplo de Socket que se conecta al servidor Web local (Tomcat), le enva una cons ulta HTTP y recibe la pgina HTML. LeerWeb.java: import java.io.*; import java.net.*; public class LeerWeb { public LeerWeb() throws Exception { Socket s = new Socket("127.0.0.1", 8080); OutputStream os = s.getOutputStream(); PrintStream ps = new PrintStream(os); ps.print("GET / HTTP/1.0\r\n\r\n"); InputStream is = s.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = br.readLine(); while (line!=null){ System.out.println(line); line=br.readLine(); } } public static void main(String[] args) throws Exception { LeerWeb test = new LeerWeb(); } } Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 13 / 46 5 Instalacin del servidor JSP 5.1 Jakarta Tomcat Para poder poner en prctica el lenguaje JSP, necesitamos un servidor con capacida d JSP. Por eso, vamos a utilizar el famoso servidor Tomcat, de la fundacin Apache. El To mcat hace parte del proyecto Jakarta de la fundacin Apache. El servidor Tomcat es un producto gratuito y libre: su cdigo fuente est disponible , al lado de las versiones compiladas. Tomcat est disponible para varios sistemas operativos, y est muy utilizado bajo Un ix y Linux, por sus estabilidad. 5.2 Instalacin Antes de instalar el servidor Tomcat (versin 7.0), el Java JRE versin 1.6 o arriba tiene que ser instalado en el servidor. Para instalar Tomcat, en Windows existe un instalador, y en Linux bast a con descomprimir el archivo zip o gz en una carpeta local (como su carpera /home/usuario). Es importante de leer las notas de instalacin para ver si no hay informaciones im portante para nuestra configuracin. 5.3 Configuracin de Eclipse Se requiere crear un servidor en Eclipse para poder manejar Tomcat desde Eclipse .

Escoge la perspectiva Java EE, vista de servidores, y crear un nuevo servidor. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 14 / 46 5.4 Verificacin de la instalacin Para verificar si la instalacin es exitosa, inicia el servidor desde Eclipse Luego abrimos un navegador web y vamos al domicilio: http://localhost:8080 Por defecto, el servidor de Tomcat utiliza el puerto 8080, para no chocar con un eventual servidor Apache (puerto 80). Ah tenemos que encontrar la pgina por defecto de Tomcat, o una pgina de error de To mcat. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 15 / 46 6 Uso de herramienta y entorno 6.1 Eclipse Para disear las pginas JSP, vamos a utilizar la herramienta Eclipse Ganymede, en s u verisn J2EE o Reporting. Estos programas son libres y gratuitos, y funcionan bajo Windows como bajos Linu x. 6.1.1 Creacin del servidor Eclipse integra la posibilidad de manejar una multitud de servidores web diferen te desde Eclipse. Eso permita el nuevo despliegue, de manera automtica, del sitio despus de cada cambia. Y tambin pe rmite visualizar la consola del servidor en Eclipse, para una depuracin ms comoda. Para crear un servidor, presiona CTRL + N. Escoja 'Servidor' en la lista. Luego escoje el tipo 'Tomcat 7'. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 16 / 46 6.1.2 Creacin de un nuevo proyecto web Para crear nuestra primera pgina JSP, necesitamos crear un nuevo sitio web en Tom cat. Por eso, en Eclipse, creamos un nuevo proyecto de tipo 'Dynamic Web Project', que llamamos curso. Escojamos como Target Runtime el servidor que hemos creado en el punto anterio r. Como versin de modulo escojamos 3.0, y como configuracin <custom> . Luego aceptamos los valores por de fecto. Una vez creado, validamos las propiedades del proyecto, y agregamos el proyecto al servidor Tomcat 7. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 17 / 46 Para agregar el proyecto al servidor, hacer doble clic sobre el servidor en la p antalla abajo a la derecha, escoja la pestaa Module y agrega el proyecto curso . 6.1.3 Creacin de la pgina de ndice Para poder probar el servidor, vamos a crear nuestra primera pgina JSP. Por eso, hacemos un clic derecho sobre la carpeta WebContent del proyecto curso, en Eclipse, y elegimos new...JSP . Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 18 / 46 Una vez elegido, mencionamos el nombre de la pgina, que ser index.jsp. Todas la pgi nas con extensin JSP (.jsp en minuscula) sern traducidas por el servidor en un servlet (cdigo Java) y producirn u na pgina HTML como salida. Para probar si la pgina funciona, tenemos que llenarla con algn cdigo JSP y/o HTML. Con un doble clic sobre

index.jsp abrimos su contenido. Miramos que ya viene con algn cdigo prehecho. Vamos a modificar el cdigo de la manera siguiente, y lo guardamos: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or g/TR/html4/loose.dtd"> <html> <head> <%! String titulo="Mi primera Pgina JSP"; int nrPagina=1; %> <title><%=titulo%></title> </head> <body bgcolor="#FFFFFF"> <h1><%=titulo%></h1> <hr> <p> Este es mi pgina en JSP numero <%= nrPagina%>. </body> </html> En el futuro, no escribir en el manual los encabezados generados por el entorno, como <%@page...> <!DOCTYPE....> porque no son obligatorio para que funciona bien el cdigo. Iniciamos el servidor. Luego miramos el resultado con un navegador web en el domicilio: http://localhos t::8080/curso/ o http://localhost:8080/curso/index.jsp Por defecto, si ninguna pgina esta especificada en el URL, el servidor busca prim ero la pgina index.html, luego index.htm, y luego index.jsp. Este opcin puede ser modificada al nivel del servid or, y/o al nivel del sitio, en el archivo web.xml. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 19 / 46 As podemos ver que en la barra de aplicacin como en la primera lnea de la pgina sale en valor de la variable titulo . Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 20 / 46 7 Utilizacin de los scriptlets 7.1 Qu son los scriptlets? Los scriptlets son las etiquetas que permiten de delimitar el cdigo JSP, que tien e que ser analizado por el servidor JSP, del cdigo HTML, que tiene que ser enviado al cliente como tal. As el servidor JSP combina el cdigo HTML con el resultado del cdigo JSP para obtener la pgina HTML que ser regresada al cliente y leda por el navegador del cliente. El JSP es la parte de la programacin que se ejecuta al nivel del servidor, en con tra del JavaScript, que se ejecuta al lado del cliente. 7.2 Los scriptlet de declaracin de variables El scriptlet de declaracin de variable sirven para declarar variable que sern acce sible de desde cualquier lugar de la pgina JSP. Son equivalente a variable de clase. Los scriptlets se utilizan generalmente a dentro de la cabecera, o en el cuerpo de la pgina HTML, antes de los

scriptlets de cdigo. El scriptlet de declaracin est encerrada entre <%! y %> (sin las cuotas). Ejemplo: <%! String titulo="Mi primera Pgina JSP"; int nrPagina=1; %> 7.3 Los scriptlet de utilizacin de variables El scriptlet de utilizacin de variable sirven para mencionar el valor de una vari able en el cdigo HTML. Slo puede contener una variable, pero tambin se puede utilizar mtodos de objetos existente, o nuevos objetos). El scriptlet de declaracin est encerrada entre <%= y %> (sin las cuotas), y no lleva puntocoma. Ejemplo: <h1><%=titulo%></h1> 7.4 Los scriptlets de cdigo Un scriptlet de cdigo est encerrado entre <% y %> (sin las cuotas). Un scriptlet de cdigo puede ser utilizado para escribir el cdigo Java que se ejecu tara en la pgina JSP. Se puede utilizar para declara clases cmo para implementar esquema de decisin a dentro de l a pgina para que sea dinmica. Los scriptlets se pueden utilizar a dentro de la cabecera, o en el cuerpo de la pgina HTML. Si el scriptlet tiene que generar algn cdigo HTML, hay dos posibilidades: 1. el cdigo HTML se genera a dentro el cdigo Java utilizando el mtodo out.print o o ut.println 2. se abre un bloque de cdigo Java, se cierra el scriptlet y se pone el cdigo HTML cmo en una pgina HTML normal (pero se puede utilizar otros scriptlets a dentro de este cdigo). Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 21 / 46 El scriptlet que genera cdigo HMTL tendr que estar puesto al lugar de destino en e l cdigo HTML. As que de costumbre las pginas JSP contienen varios scriptlets. Primero, en la cabecera, un scriptlet con el cdigo de inicializacin de las variables y el cdigo que no genera cdigo HTML, y en el cuerpo, el los lugares deseados, los scriptlets que generaran cdigo HTML para completar el cdigo HTML fijo. Ejemplo no 1: <html> <head> <%! String titulo="Mi primera Pgina JSP"; int nrPagina=1; %> <title><%=titulo%></title> </head> <body> <h1><%=titulo%></h1> <hr> <p> Este es mi pgina en JSP numero <% nrPagina++; out.print ("<font color=red><b>"+nrPagina+"</b></font> y me conviene el JSP"); %>. </body> </html> Ejemplo no 2: Por ejemplo, en el cdigo siguiente, segn la hora del da, se marcara Buenos da , o

Buenas tarde , o Buenas noche . <html> <head> <title>Saludo</title> </head> <body bgcolor="white"> <% java.util.Date clock = new java.util.Date( ); %> <% if (clock.getHours( ) < 12) { %> <h1>Buenos das!</h1> <% } else if (clock.getHours( ) < 18) { %> <h1>Buenas tardes!</h1> <% } else { %> <h1>Buenas noches!</h1> <% } %> </body> </html> 7.5 Agregar comentarios Para agregar comentarios en un scriptlet, se pueden utilizar los comentarios de Java : // para simple lnea, /* y */ para mltiple lneas. Para comentarios afuera de un scriptlet, pueden utilizar los comentarios HTML, q ue son contenidos entre <!-- y -->, pero estos comentarios sern enviados al navegador del cliente y, an que no ser visi ble en la pgina web, sern visible por el usuario si el pregunta al navegador de ensearle el cdigo fuente. Si quieren poner comentarios afuera de un scriptlet, pero que no sea enviado al navegador del usuario (y as invisible para el), hay que utilizar el scriptlet de comentarios JSP que empieza con <%-y termina con --%>. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 22 / 46 8 Utilizacin de directivas Las directivas de pginas dan informaciones sobre la pgina al servidor JSP. No gene ran ninguna informacin visible para el usuario, pero permite determinar la manera que el servidor va utilizar p ara tratar el cdigo JSP de la pgina. Existen tres tipos de directivas: de pgina, de inclusin, y taglib. Para adjuntar u na directiva, hay que incluirla entre < %@ y %>. La instruccin de directiva incluye el tipo de directiva, el parmetro de l a directiva, el signo igual, y la valor del parmetro, en este orden. 8.1 Directiva de pgina La directiva de pgina es la ms utilizada. Ella permite de especificar informacione s relativas a la configuracin de la pgina JSP, como el tipo de contenido. As si el contentType = "text/plain", la pgina JSP resultando se enseara como texto normal, y no HTML. Ciertos navegadores, como Internet Explorer, quieren ser demasiado inteligente y corregir las supuesta errores del desarrollador, as que mismo con la directiva de pgina para indicar que es un texto normal, el lo tratara como HTML... Esta aconsejado de incluir las directivas de pgina en cima del cdigo, antes de la etiqueta <html>. Ejemplo: <%@ page contentType="text/plain" %> <html> <head> <title>Test directiva de pgina</title>

</head> <body bgcolor="white"> La fecha de hoy es <%= new java.util.Date() %> </body> </html> 8.1.1 Lista de parmetros para directiva de Pgina Attributo Defecto autoFlush true Est verdadero (true) cuando el buffer de la pgina debe ser enviado automticamente cuando est lleno, o falso (false) si una excepcin debe ser generada cuando esta lleno. buffer 8kb Especifica el tamao del buffer para esta pgina. El tamao debe ser expres ado en kilobytes, seguido de kb, o tiene que ser la palabra clave none (ninguna) para deshabilitar la opcin del uso de un buffer. contentType text/html Especifica el tipo MIME de la respuesta generada por la pgi na, y de manera opcional, el tipo de caracteres de la pgina fuente y de la respuesta. errorPage No defecto Una pgina JSP que hay que ensear en case de error durante la ejecucin del cdigo de la pgina. extends No defecto El nombre completo de la clase Java que la pgina JSP generada extiende. La clase tiene que implementar el JspPage o el interfaz HttpJspPage del paquete javax.ser vlet.jsp. Nota que no est recomendado de utilizar este atributo. Especificando su propio superclass restringe la posibilidad del contenedor JSP de entregar una superclas s especializada y de alto rendimiento. import No defecto Declaracin de la importacin de clases o paquetes Java (separados por coma) info No defecto Texto que un contenedor web puede utilizar como descripcin de la pgina en su interfaz de administracin. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 23 / 46 isErrorPage false Si est puesto a verdadero (true), significa que esta pgina es un a pgina de error personalizada, y permite el uso de la variable implcita exception a dentro de los scriptlets. Utiliza falso (false) para pginas JSP normales.. isThreadSafe true Si est puesto a verdadero (true), el contenedor est permitido de utilizar varios hilos de ejecucin a travs de esta pgina (por ejemplo, tratar consultas de la pagina en paralelo). Si est falso (false), el contenedor trata las consultas por la pgina en serie. La recomendacin es de utilizar siempre verdadero (true) y manejar los problemas de ejecucin multihilo evitando declaraciones JSP y asegurndose que todos los objetos utilizados en la pagina son procesoseguro (threadsafe). language java Define el idioma de scripting utilizado. session true Si est puesto a verdadero (true), la pgina participa en la sesin del u suario. Si est falso (false), las variables de sesin implcitas no estn disponible en la pgina. Una unidad de translacin ( la fuente JSP y todos los archivos incluidos utilizand o la directiva de inclusin) pueden contener varias directivas de pgina, pero solo un ejemplo de cada atributo puede ser presente, a la excepcin del atributo import. Si varios import estn utilizados, estarn todos ajuntados en una l ista de definicin de importacin. Ejemplo:

<%@ page language="java" contentType="text/html;charset=Shift_JIS"%> <%@ page import="java.util.*, java.text.*" %> 8.2 Directiva de inclusin La directiva de inclusin permite incluir a dentro de la pgina JSP uno o varios arc hivos de texto o HTML. Eso permite de incluir un mismo archivo en varias paginas JSP, sin tener que copiarl o. Los nombres de archivos incluidos pueden tener cualquiera extensin (txt, html, in c, jsp...), pero existe una extensin especfica jspf (JSP Fragment) que permite la validacin del cdigo incluido en vari os entornos (Eclipse,...). El archivo incluido tiene que ser presente y accesible en el sistema de archivos del servidor JSP. Ejemplo: <html><head> <title>Test directiva de pgina</title> </head> <body bgcolor="white"> Aqu mi texto incluido:<br> <%@ include file="epl-v10.html" %> </body> </html> 8.3 Directiva taglib La directiva taglib permite de definir etiqu"etas personalizadas, para utilizar acciones personalizadas a dentro del JSP. La sintaxis es la siguiente: <%@ taglib uri="librera_de_etiquetas.tld" prefi x="mi_accion" %> Para poder utilizarlas, necesitamos aprender las acciones personalizadas, que se miran en otro curso (JSP Avanzado). Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 24 / 46 9 Utilizacin de variables de sesin Las variables de sesin son variables que se pueden atribuir a un cliente conectad o, y que sern disponible por el tiempo que dura la sesin: La sesin expira cuando se cierra en navegador, o no se n avega en el sitio por un cierto tiempo (depende de la configuracin del servidor y se puede modificar en el cdigo J SP), o cuando se invalida la sesin explcitamente en el cdigo JSP. Cada cliente conectado podr as tener sus propias valores que se quedaran guardadas en la memoria del servidor. 9.1 Declaracin de variable de sesin Para declara o cambiar el valor de una variable de sesin, se utiliza el mtodo setA ttribute(String nombre, Object valor) del objeto session. Por ejemplo: session.setAttribute("nombre","Cedric") crea la variable de sesin no mbre con el valor Cedric. Si la variable ya existe, solo le cambia el valor. 9.2 Recuperar el valor de un variable de sesin Para recuperar el valor de un variable de sesin, se utiliza el mtodo getAttribute( String nombre) del objeto session. Si la variable no existe, regresara el valor nulo. Por ejemplo: session.getAttribute("nombre") regresara un objeto. Este objeto tie ne que ser convertido de manera explicita en String. El valor del String ser Cedric, segn el ejemplo de arriba. Ejemplo: String miNombre=(String) session.getAttribute("nombre"); 9.3 Invalidar una sesin Para invalidar una sesin, se utiliza el mtodo invalidate() del objeto session.

Por ejemplo: session.invalidate() va a invalidar la sesin corriente del usuario. 9.4 Otros mtodos Para ver los otros mtodos disponibles (removeAttribute, getId, ...) referirse a l a documentacin java del interfaz javax.servlet.http.HttpSession Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 25 / 46 10Objetos implcitos Cuando usan scriptlets en una pgina JSP, hay un sin nmero de objetos (situados aba jo) que el contenedor JSP mantiene disponible. Estos objetos estn llamados objetos implcitos. Estos objetos son instancias de clases definidas en las especificaciones del servlet y del JSP. Para los detalles, ver la documen tacin de Java disponible en lnea . Nombre de Variable Typo request javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse pageContext javax.servlet.jsp.PageContext session javax.servlet.http.HttpSession application javax.servlet.ServletContext out javax.servlet.jsp.JspWriter config javax.servlet.ServletConfig page java.lang.Object exception java.lang.Throwable 10.1 request El objeto request es una instancia de la clase javax.servlet.http.HttpServletReq uest. Este objeto le ofrece mtodos para acceder a toda la informacin de la consulta http corriente, como los parmetros, at ributos, cabeceras, y cookies. 10.2 response El objeto response representa el mensaje de la respuesta corriente. Es una insta ncia de la clase javax.servlet.http.HttpServletResponse, con mtodos para definir la cabecera, el cd igo de estado, y para adjuntar cookies. Tambin ofrece mtodos para seguimiento de sesin. 10.3 session El objeto session le permite acceder a los datos de sesin del cliente, manejados por el servidor. Es una instancia de javax.servlet.http.HttpSession class. 10.4 application Es una instancia de javax.servlet.ServletContext class. Este objeto mantiene ref erencias a otros objetos que varios usuarios pueden acceder, como una conexin de base de datos compartida por todos l os usuarios. Tambin contiene mtodos como log() para escribir mensajes en el diario del contenedor. 10.5 out Es una instancia de javax.servlet.jsp.JspWriter. Tiene dos mtodos principales, qu e son print() y println(). Es parecido al System.out, solo que escribe la salida en la futura pgina HTML. 10.6 exception El objeto Exception es disponible solamente en pginas de error, y contiene inform aciones sobre la error de ejecucin que ocurri. Lo utilizaremos en el capitulo de gestin de errores. Existen tres otro s objetos implcitos (pageContext, config, and page) pero est muy raro que se usan en JSP. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 26 / 46 11Los formularios

11.1 Creacin del formulario Los formularios estn creados simplemente en HTML. El JSP se puede utilizar a dent ro del formulario para, por ejemplo, asignar valores por defecto o desactivar ciertos campos segn la informac in disponible (variable de sesin, u otro formulario). Es muy importante que cada campo del formulario tenga un nombre (parmetro NAME de l campo). Para el parmetro METHOD, les aconsejo siempre utilizar POST. El parmetro ACTION pu ede ser un servlet o una pgina JSP. Aqu vamos a utilizar una pgina JSP. 11.2 Tratamiento del formulario Cuando el formulario est enviado, la pgina JSP a la cual se envo puede recuperar el contenido de cada campo utilizando el mtodo getParameter o, si varias valores pueden ser elegidas a la mi sma vez en el campo getParameterValues, del objeto request. Los mtodos getParameter y getParameterValues acepta un parmetro : el nombre del ca mpo por lo cual deseamos el valor. Si probamos de sacar el valor de un campo que no existe, el valor ser nulo. Para ms facilidad, se pueden guardar los valores en variables. Por defecto, todos los parmetros son de tipo String para getParameter, y String[] para getParameterValues. Si queremos cambiarlos a otro tipo, hay que utilizar los mtodos Java apropiados para convertir los tipos. El objeto request tiene tambin otros mtodos que permiten obtener informacin sobre l a consulta en curso, entre otros: getLocal(): regresa los parmetros locales del PC del cliente getRemoteAddr(): regresa el IP del PC del cliente getRemoteHost(): regresa el nombre del PC del cliente Ejemplo: formulario.jsp (que se podra tambin llamar formulario.html porque no lleva cdigo JS P) <html> <head> <title>Test formulario</title> </head> <body bgcolor="#CCDDAA"> <h1>Formulario de prueba</h1> <hr> <p> <form name="formulario" action="resultadoFormulario.jsp" method=POST> <table border=0> <tr> <th>Su nombre:</th><td><input type=text name="nombre" size=30></td> <th>Su apellido:</th><td><input type=text name="apellido" size=30></td> </tr> <tr> <th>Su direccin:</th><td colspan=3><input type=text name="domicilio" size=100></t d> </tr> <tr> <th>Su pais:</th><td><select name="pais"> <option>Blgica <option selected>Nicaragua <option>Otro </select></td> </tr> <tr> Copyright Cdric Simon, 20052011

Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 27 / 46 <th>Su no de tel:</th><td><input type=text name="tel" size=30></td> <th>Su no celucar:</th><td><input type=text name="cel" size=30></td> </tr> <tr> <th>Su nota:</th><td colspan=3><textarea name="nota" cols=75 rows=5></textarea>< /td> </tr> <tr> <th></th><td><button type=reset>Resetiar</td> <th></th><td><button type=submit>Enviar</td> </tr> </table> </form> </body> </html> resultadoFormulario.jsp: <html> <head> <% String nombre=request.getParameter("nombre"); String apellido=request.getParameter("apellido"); String domicilio=request.getParameter("domicilio"); String pais=request.getParameter("pais"); if (pais==null) pais="Otro"; String tel=request.getParameter("tel"); String cel=request.getParameter("cel"); String nota=request.getParameter("nota"); %> <title>Resultado de formulario</title> </head> <body bgcolor="#CCDDAA"> <h1>Resultado de su formulario</h1> <p> <p> Estimado/a seor(a) <big><%=apellido%></big>,<br> <br> Le/a informamos que su formulario fue transmitido con xito. <p> <% if (!pais.equals("Otro")) { %> Notamos que Usted vive en <big><%=pais%></big>, por favor elige su cuidad:<br> <form name="formulario" action="resultadoFormulario2.jsp" method=POST> <select name="cuidad"> <% if (pais.equals("Nicaragua")) { %> <option>Managua <option>Leon <option>Granada <option>Otro <% } // Nicaragua if (pais.equals("Blgica")) { %>

<option>Bruselas <option>Namur <option>Arlon <option>Otro <% } // Belgica %> </select> <input type=hidden name="nombre" value="<%=nombre%>"> <input type=hidden name="apellido" value="<%=apellido%>"> <input type=hidden name="domicilio" value="<%=domicilio%>"> <input type=hidden name="pais" value="<%=pais%>"> <input type=hidden name="cel" value="<%=cel%>"> <input type=hidden name="tel" value="<%=tel%>"> <input type=hidden name="nota" value="<%=nota%>"> <button type=submit>Enviar</button> </form> <% } // otro pais %> <hr> <h3>Enlaces</h3> <a href="index.jsp">Regresar al indice</a><br> <a href="formulario.jsp">Regresar al formulario</a> Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 28 / 46 </body> </html> resultadoFormulario2.jsp: <html> <head> <% String nombre=request.getParameter("nombre"); String apellido=request.getParameter("apellido"); String domicilio=request.getParameter("domicilio"); String pais=request.getParameter("pais"); String tel=request.getParameter("tel"); String cel=request.getParameter("cel"); String nota=request.getParameter("nota"); String cuidad=request.getParameter("cuidad"); %> <title>Resultado de formulario</title> </head> <body bgcolor="#CCDDAA"> <h1>Resultado final de su formulario</h1> Su nombre : <%=nombre%><br> Su apellido : <%=apellido%><br> Su domicilio : <%=domicilio%><br> Su cuidad : <%=cuidad%><br> Su pais : <%=pais%><br> Su celular : <%=cel%><br> Su telefono : <%=tel%><br> Su nota : <%=nota%><br> <p> El nombre de su PC : <%=request.getRemoteHost()%><br> El IP de su PC : <%=request.getRemoteAddr()%><br> <hr> <h3>Enlaces</h3> <a href="index.jsp">Regresar al indice</a><br>

<a href="formulario.jsp">Regresar al formulario</a> </body> </html> Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 29 / 46 12Elementos de acciones estndar 12.1 <jsp:forward /> Enva el procesado de una consulta a un servlet o una pgina JSP. El <jsp:forward> e nva a otra pgina o servlet sin cambiar el URL de origen. Ejemplo: <jsp:forward page="tagSinCuerpo.jsp" /> 12.2 <jsp:include /> Incluye un servlet o JSP durante la fase del proceso de consulta. Ejemplo: <jsp:include page="tagSinCuerpo.jsp" > 12.3 <jsp:param> Adjunta un valor de parmetro a una consulta pasada a otro servlet o JSP utilizand o <jsp:include> o <jsp:forward>. Ejemplo: <jsp:forward page="tagSinCuerpo.jsp"> <jsp:param name="test" value="mi paramtro"/> </jsp:forward> <jsp:include page="tagSinCuerpo.jsp"> <jsp:param name="test" value="mi pgina incluida!"/> </jsp:include> 12.4 <jsp:plugin> Genera un cdigo HTML que contiene los elementos (OBJECT o EMBED ) apropiados depe ndiendo del navegador del cliente, necesarios para ejecutar un Applet con el programa de Java Plugin. Los atributos code, codebase, y type son obligatorios. Atributo Descripcin align Alineacin del applet. Valores vlidas: bottom, middle, top. archive Lista de URIs para archivos conteniendo clases y otros recursos que sern precargados, utilizando AppletClassLoader y el atributo Codebase (URIs relativos). code El nombre completo de la clase del objeto. codebase El camino relativo hacia la carpeta que contiene la clase. Debe ser una subcarpeta del sitio. height Altura de la zona del applet. En pxeles o en porcentaje. hspace Cuantidad de espacio blanco a dejar a la derecha y izquierda de la zona d el applet, en pxeles. iepluginurl Direccin URL a donde se encuentra una versin del plugin Java para Inte rnet Explorer. Actualmente, el plugin se encuentra en el JRE. jreversion Versin de JRE mnima requerida para que funciona el plugin. name Nombre del applet, utilizado por otras applet en la misma pgina, para comuni carse. nspluginurl Direccin URL a donde se encuentra una versin del plugin Java para Nesc ape. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 30 / 46 Actualmente, el plugin se encuentra en el JRE. type Tipo de objeto: applet o bean. vspace Cuantidad de espacio blanco a dejar arriba y abajo de la zona del applet, en pxeles.

width Ancho de la zona del applet. En pxeles o en porcentaje. Ejemplo de plugin: ... Ejemplo de plugin...<br> <jsp:plugin type="applet" code="Clock2.class" codebase="applet" jreversion="1.2" width="160" height="150" > <jsp:params> <jsp:param name="bgcolor" value="ccddff" /> <jsp:param name="fgcolor1" value="ccd000" /> <jsp:param name="fgcolor2" value="c0000f" /> </jsp:params> <jsp:fallback> <jsp:include page="/Pie" /> Plugin tag OBJECT or EMBED not supported by browser. </jsp:fallback> </jsp:plugin> ... 12.5 <jsp:params> Permite asignar un valor a uno o varios parmetros del applet. 12.6 <jsp:fallback> Permite ensear un texto en caso de que el navegador del cliente no soporta elemen tos <object> o <embed>. 12.7 <jsp:useBean> Permite de poner un JavaBean disponible a dentro de una pgina. Ms detalles en el c aptulo de JavaBeans. 12.8 <jsp:getProperty> Saca el valor de una propiedad de un componente JavaBean y lo adjunta a la respu esta. Ms detalles en el captulo de JavaBeans. 12.9 <jsp:setProperty> Asigna un valor a una propiedad de un JavaBean. Ms detalles en el captulo de JavaB eans. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 31 / 46 13Gestin de errores Existen tres categoras de errores en Java. Los errores de compilacin, los errores de ejecucin, y los errores de lgica. Los errores de ejecucin 13.1 Errores de compilacin Los errores de compilacin son las errores de sintaxis. Al compilar el cdigo, el se rvidor JSP detecta los errores que no respetan la sintaxis del Java, as como errores de conversin de tipos, uso de varia bles no declaradas, etc... Cuando ocurren errores de compilacin, el detalle de la error aparece en la pgina J SP. 13.2 Errores de lgica Los errores de lgica son errores debido a un diseo incorrecto del cdigo. Por ejempl o, un bucle que nunca termina, una falta de ortografa en un texto, una formula de clculo equivocada,... 13.3 Errores de ejecucin Los errores de ejecucin son excepciones que Java no pudo detectar al compilar el cdigo. Por ejemplo, un nmero dividido por cero, o llamar a una base de datos que no existe, etc... Existen dos clases de excepciones: la clase Error y la clase Exception. Las excepciones de la clase Error abarcan fallos graves que el programa no va a poder recuperar y, por tanto, no pueden ser captadas. Las excepciones de la clase Exception son excepciones que Java puede capturar. E

xisten varias subclases, como Runtime Exception, IOException, InterruptedException,... Las excepciones de la clase Excepcion pueden ser atrapada a dentro del cdigo, par a tomar accin correctiva y as evitar que la error sea fatal para la aplicacin. En JSP, tenemos dos posibilidades: tratar la excepcin en el scriptlet, con bloque s, como se hace en el idioma Java, o dejar la pagina de error que viene por defecto con el servidor JSP (no es muy li nda...), o utilizar una pgina de error personalizada. 13.3.1 Pgina de error personalizada Para poder utilizar una pgina de error personalizada, hay que utilizar la directi va de pgina errorPage en la pagina a donde puede ocurrir el error, que va a referir a otra pgina JSP, que es la pgina de error personalizada. La pagina de error personalizada debe contener la directiva de pgina isErrorPage ="true". La pgina de error es capaz de ensear cual era la error que ocurri. Ejemplo: TestError.jsp (esta pgina genera la error, y no se va a ver esta pgina) <%@page autoFlush="false" errorPage="Error.jsp" %> <html> <head> <% int i = 5/0; Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 32 / 46 %> <title>Prueba</title> </head> <body bgcolor="white"> <h1>Prueba</h1> <hr> La valor de i es <%=i%> <br> <hr> <a href="formulario.jsp">Formulario</a><br> <a href="TestBean.jsp">Test Bean</a><br> </body> </html> Error.jsp (esta pgina se mira en vez de la pgina que engendro la error) <%@ page isErrorPage="true" %> <html> <head> <title>Pagina de error</title> </head> <body bgcolor="FFCCCC"> <h1 style="color=red;">Se encontro un error</h1> <hr> Estimado Usuario,<br> <br> se encontro un error procesando su encuesta. <br> <br> Lo sentimos, y estamos haciendo lo posible para reparar este error lo ms pronto p osible.<br> Usted puede reportar la error a nuestro servicio al cliente, al correo electroni co <a href="mailto:servicioalcliente@alcaldia.gob.ni"> Servicio al cliente</a>. <p>Gracias por comuncarnos el detall de la error.

<p> La pagina es: <%=request.getRequestURI()%></p> <p> La error es: <%=exception.getMessage()%></p> <p>Ms detalles:<br> <%=exception.toString()%> <p style="font-family: Monospace; font-size: 10px ;font-weight: bold;"> <% exception.fillInStackTrace(); for (StackTraceElement s : exception.getStackTrace()){ out.println(s.toString()+"<br>"); } %> </p> <hr> <a href="menu.jsp">Menu</a><br> </body> </html> Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 33 / 46 14Utilizacin de JavaBean 14.1 Qu es un JavaBean? Un JavaBean es una clase Java que est llamada de desde una pgina JSP. Los JvaBeans siempre implementan la clase serializable. Eso permite llamar a una misma clase de desde varias pginas JSP. 14.2 Declaracin de un JavaBean Para poder utilizar un JavaBean, la clase debe estar accesible al Servidor JSP. Por ejemplo, se pone la clase compilada en la carpeta del sitio web, bajo la subcarpeta WEBINF/ classes. Si alguna librera (archivo JAR) es necesario, como por ejemplo el driver JDBC, ha y que ponerlo en la subcarpeta WEBINF/ lib. 14.2.1 <jsp:useBean> En la pgina JSP, se declara el Bean antes de usarlo, y se le atribuye un nombre ( ID), utilizando la etiqueta <jsp:useBean> con los parmetros class= nombre de la clase, ID= nombre de mi Bean para mi pgina JSP, y scope para la duracin de vida del Bean (page, request, session, application) y que est puesto a page por defecto. Luego, se utiliza el Bean usando como si era un objeto Java, con el nombre del o bjeto que es el del ID. Ejemplo: LeerDB.java package bean; import java.sql.DriverManager; public class LeerDB extends com.solucionjava.db.ConnectDB{ public LeerDB() throws Exception { super(); } public LeerDB(int sin_conexion) { super(sin_conexion); } public LeerDB(String origin) throws Exception { super(origin); } public LeerDB(String origin, String datasourceName) throws Exception {

super(origin, datasourceName); } protected void initConnectionVariables() { datasourceName=null; try { debug("Buscando el driver JDBC..."); Class.forName( "com.mysql.jdbc.Driver" //"org.postgresql.Driver" //"oracle.jdbc.driver.OracleDriver" //"com.microsoft.sqlserver.jdbc.SQLServerDriver" //"org.firebirdsql.jdbc.FBDriver" ).newInstance(); debug("...Encontr el driver JDBC"); } catch (Exception e) { debug("No pudo encontrar el driver JDBC !!!!"); e.printStackTrace(System.out); return; } try { debug("Connectando a la base de datos..."); con = DriverManager.getConnection( "jdbc:mysql://localhost/curso?user=curso&password=123" Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 34 / 46 //"jdbc:postgresql://localhost/curso:5432","postgres","123" //"jdbc:oracle:thin:@192.168.0.10:1521/XE","curso","123" //"jdbc:sqlserver://192.168.0.100:1433/database=curso/user=curso/password=123" //"jdbc:firebirdsql:127.0.0.1:C:/firebird/data/curso.gdb","curso","123" ); debug("...Connectado a la base de datos"); } catch (Exception e) { debug("No pudo conectarse a la base de datos !!!!"); e.printStackTrace(System.out); return; } } } TestBean.jsp: <%@page contentType="text/html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or g/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <jsp:useBean id="leerDB" scope="page" class="bean.LeerDB" /> <title>Test Bean</title> </head> <body bgcolor="white"> <h1>Prueba de JavaBean, utilizado para conectarse a Oracle</h1> <hr> <center><form name="form" action="testBean.jsp" method="get"> <select name="pais" onchange="document.form.submit();"> <% String pais=request.getParameter("pais"); if (pais==null) pais="France"; leerDB.select("select distinct job_country from employee"); while (leerDB.getNext()){ %> <option value="<%=leerDB.getString(1) %>" <%=((leerDB.getString(1).equals(pais))

?" selected ":"") %>> <%=leerDB.getString(1) %></option> <%} %> </select> </form></center> <h2>Lista de empleados</h2> <table> <tr> <th>Nombre</th><th>Apellido</th><th>Salario</th> </tr> <% leerDB.select("select * from employee where job_country= "+pais+" "); while (leerDB.getNext()) { out.print("<td>"+leerDB.getString("first_name")+"</td>"); out.print("<td>"+leerDB.getString("last_name")+"</td>"); out.print("<td>"+leerDB.getString("job_country")+"</td>"); out.print("<td>"+leerDB.getString("salary")+" Cordobas</td>"); out.println("</tr>"); } leerDB.cleanup(); %> </table> <hr> <a href="menu.jsp">Menu</a> </body> </html> 14.2.2 <jsp:getProperty> Saca el valor de una propiedad de un componente JavaBean. Ejemplo: <jsp:useBean id="clock" class="java.util.Date" /> La fecha y hora local del servidor son: <ul> <li>Da: <jsp:getProperty name="clock" property="date" /> <li>Mes: <jsp:getProperty name="clock" property="month" /> <li>Ao: <jsp:getProperty name="clock" property="year" /> <li>Hora: <jsp:getProperty name="clock" property="hours" /> <li>Minuto: <jsp:getProperty name="clock" property="minutes" /> </ul> Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 35 / 46 14.2.3 <jsp:setProperty> Asigna el valor de una propiedad de un componente JavaBean. Cuando se trata de recibir parmetros de un formulario, si se utiliza la estrella * , el JSP asigna automticamente los valores a las propiedades del JavaBean que tienen el mismo nombre que un parm etro del formulario enviado (recibido), y debe existir el mtodo setAtributo para cada atributo. Ejemplo: Usuario.java: package bean; import java.io.Serializable; public class Usuario implements Serializable { private static final long serialVersionUID = 1L; private String nombre; public String apellido; public void setNombre(String nombre){ this.nombre=nombre; } public void setApellido(String apellido){ this.apellido=apellido; } public String getNombre(){ return this.nombre; }

public String getApellido(){ return this.apellido; } } formuBean.jsp: <form name="formulario" action="setProperty.jsp" method=POST> <table><tr> <th>Su nombre:</th><td><input type=text name="nombre" size=30"></td> </tr><th>Su apellido:</th><td><input type=text name="apellido" size=30></td> </tr><th></th><td><button type=submit>Entrada</td> </tr></form> </table> setProperty.jsp: <jsp:useBean id="usuario" class="bean.Usuario"> <jsp:setProperty name="usuario" property="*" /> </jsp:useBean> La infomacin siguiente fue guardada: <ul> <li>Nombre : <jsp:getProperty name="usuario" property="nombre" /> <li>Apellido: <%=usuario.getApellido()%> </ul> 14.3 Scope de un JavaBean Al declarar un JavaBean, se declara tambin el parmetro scope, que define su duracin de vida. Este parmetro pude tener una de los valores siguiente: Page: vlido solamente a dentro de esta pgina Request: vlido a dentro de la misma consulta (sobrevive a un <jsp:forward>) Session: vlido durante la sesin del usuario Application: vlido del empiezo de la aplicacin a su apago. Para ilustrar el scope, vamos a utilizar un objeto (counter) a varios niveles de scope, y ver los resultados. Pueden probar los diferentes scope de un JavaBean con las pginas counter.jsp del proyecto JSP_basico. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 36 / 46 15Utilizacin de servlets 15.1 Qu es un servlet? Un servlet es una clase Java que puede ser llamada directamente de desde el nave gador web y del cual la salida puede ser leda por el navegador que la llamo. En realidad, todas la pginas JSP estn convertidas en servlet por el servidor, la p rimera vez que se llama la pgina, y luego el servidor solo ejecuta el servlet. 15.2 Para que sirve un servlet? El servlet pude servir para generar pginas HTML, pero es un poco fastidioso hacer lo nosotros, por eso existe el JSP. El servlet que vamos a crear servirn mejor para tratar el resultado de un formula rio y despus enviar el usuario a otra pgina, o para regresar al navegador archivos binarios usando un flujo, lo qu e el JSP no puede hacer. Por ejemplo, enviar al navegador una imagen o un archivo PDF que no esta presente en el sistema de archivos si no en una base de datos, por ejemplo. Os servlets, como los JavaBeans y las acciones personalizadas, permiten de encap sular la lgica, para que sea transparente para en diseador web. Permiten tambin de crear cdigos que son reutiliz ables, disminuyendo el mantenimiento, el tamao de la aplicacin, y el riesgo de error. 15.3 Anatoma de un servlet Un servlet es una clase Java que extiende la clase javax.servlet.http.HttpServle t. Esta clase est abstracta y debe ser

subclasada para crear un servlet HTTP capaz de servir para el web. Un servlet de be sobre escribir a lo menos un mtodo de las siguiente: doGet, si el servlet tiene que maneja consultas HTTP utilizando el mtodo GET. doPost, si el servlet tiene que maneja consultas HTTP utilizando el mtodo POST. doPut, si el servlet tiene que maneja consultas HTTP utilizando el mtodo PUT doDelete, si el servlet tiene que maneja consultas HTTP utilizando el mtodo DELET E init and destroy, para manejar recursos que son guardados por la vida del servle t getServletInfo, que el servlet utiliza para entregar informacin sobre el mismo. En realidad, solo el doGet y doPost son utilizadas, porque los mtodos de consulta PUT e DELETE no se utilizan. Ejemplo: public class NombreDelServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... } } Los mtodos init y destroy solo se utilizan en caso de que el servlet tiene que gu ardar recursos durante toda su vida. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 37 / 46 15.4 Ciclo de vida de un servlet La vida de un servlet tiene tres momentos importantes: su inicializacin, su utili zacin, y su destruccin. Para manejar su inicializacin, se sobre escribe el mtodo init(). Esto sirve para, por ejemplo, manejar referencias a recursos externos, como informacin de configuracin o base de datos. Cada vez que se utiliza en servlet, se llama al mtodo service(), pero normalmente no se sobre escribe este mtodo porque se utiliza el doGet o el doPost para manejar las acciones del servlet. El mtodo destroy() est llamado al momento de que el servlet sale de servicio (prin cipalmente cuando se apaga o reinicia el servidor web). Este mtodo permite liberar los recursos que el ha adqu irido con el mtodo init(). 15.5 Creacin de un servlet simple Un servlet es una clase Java que extiende la clase HttpServlet, y por la cual se sobre define el mtodo doGet o el mtodo doPost. El doPost es un poco ms lento que el doGet, pero permite tratar formulari os de ms de 2000 caracteres lo que el doGet no puede. Para que el servlet sea accesible en el sitio, el tiene que ser definido en el a rchivo de configuracin del sitio web, que es el archivo web.xml, que se encuentra bajo la carpeta WEBINF, o utilizar las anotaciones @WebServlet("...") si el servidor soporta la versin 3.0 del API Java Servlet . Ejemplo: formuServlet.jsp : <html> <head> <title>Prueba de formulario enviado a un servlet</title> </head> <body bgcolor="#CCDDAA"> <h1>Formulario para Servlet</h1>

<hr><p> <form name="formulario" action="servlet/ProcesFormulario" method=POST> <table border=0><tr> <th>Su nombre:</th><td><input type=text name="nombre" size=30></td> </tr><tr> <th></th><td><button type=submit>Enviar</td> </tr></table> </form> </body> </html> Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 38 / 46 ProcesFormulario.java package servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.*; @WebServlet("/ProcesFormulario") public class ProcesFormulario extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println("<html>"); out.println("<head>"); out.println("<title>Resultado del Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Llego con el metodo GET !!!</h1>"); out.println("<hr>"); out.println("</body>"); out.println("</html>"); System.out.println("Llego por el metodo GET !!!"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println("<html>"); out.println("<head>"); out.println("<title>Resultado del Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Su nombre es :"+request.getParameter("nombre")+"</h1>"); out.println("<hr>"); out.println("Este pagina fue generada por un servlet!"); out.println("</body>"); out.println("</html>"); } catch (Exception e) { PrintWriter out = response.getWriter();

response.setContentType("text/html"); out.println("the error is:"+e.toString()); out.flush(); System.out.println("<center><font size=5> Error in inserting the data</font></ce nter>"); System.out.println("the error is:"+e.toString()); System.out.println("Error is:"+e.toString()); } } } 15.6Uso de servlet para mostrar imgenes o archivos binarios Para poder mostrar imgenes o archivos binarios guardados en una base de datos, ha y que utilizar un servlet, y el paquete com.oreilly.servlet. El uso de este paquete es gratuito para uso no come rcial. Para uso comercial, refirase a: http://servlets.com/cos/license.html com.oreilly.servlet package: The source code, object code, and documentation in the com.oreilly.servlet package is copyright and owned by Jason Hunter. Los servlets que permiten traer archivos binarios de desde la base de datos, son contenidos en una clase lamada Retriever en el paquete doc. La librera de servlet llamada COS de OReilly esta c olocada debajo de /WEBINF/ lib, as como la del driver de la base de datos. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 39 / 46 Ejemplo: Blob.jsp: <%@page contentType="text/html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or g/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <link href="curso.css" rel="stylesheet"> <head> <title>Lectura de BLOB s</title></head> <jsp:useBean id="readDB" scope="page" class="bean.LeerDB" /> <body bgcolor="#FFFFFF"> <h1>Lista de archivos binarios disponibles:</h1> <hr><img src="servlet/DocRetriever?photo_id=1"> <table class="table3"> <th class="th2">Adjunto</th> <th class="th2">Commentario</th> </tr> <% int chk=0; readDB.consulta("select photo_id,photo_filename from photo_gallery"); while (readDB.getNext()) { chk+=1; out.println("<tr>"); out.print("<td class=\"td2\"><a href=\"servlet/DocRetriever?photo_id="+ readDB.getString("photo_id")+"\" target=\"_blank\">"+ readDB.getString("photo_filename")+"</a>"); out.print("</td><td class=\"td3\">"+readDB.getString("photo_filename")+"</td>"); out.print("</tr>"); } if (chk==0) { out.print("<td width=\"25%\"></td><td width=\"45%\">No hay adjuntos.</td>"); out.print("<td align=\"center\"><input type=\"button\" value=\"Manejo de adjunto s\"

onClick=\"window.open(href= adjuntos.jsp )\"></td></tr>"); } readDB.cleanup(); %> </table> </body> </html> Remover.java: package doc; import java.io.PrintWriter; import java.sql.*; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /* * Creado por: Cedric Simon * Uso: Quitar un archivo binario de una base de datos. * Licencia : El uso de este c digo, o perte de este c digo esta permitido * para uso no comercial. * * Los paquetes de com.oreilly.servlet que son importados en este c digo * est n protegido por una licencia. Mas detalles el http://servlets.com/cos/licens e.html * */ @WebServlet("/Remover") public class Remover extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { PrintWriter out = response.getWriter(); response.setContentType("text/html"); java.sql.Connection con = null; Class.forName("org.firebirdsql.jdbc.FBDriver"); con = DriverManager.getConnection("jdbc:firebirdsql:127.0.0.1:C:/firebird/data/pulgas. gdb","pulgas","cs"); java.sql.Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE ); String query = "delete from adjuntos where no_adjunto="+request.getParameter("no _adjunto"); stmt.execute(query); out.println("<h3 align=\"center\"><font color=green>Archivo quitado</font></h3>" ); Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 40 / 46 out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location. href= ../adjuntos.jsp? no_pulga="+request.getParameter("no_pulga")+" ;\" value=\"Regressar al manejo de adjuntos\">"); out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"/*alert( Empuja F5 par a refrescar la lista de adjuntos en el detalle de la pulga. Si has hechos cambios a la pulga, no empuje

F5 pero guarda la pulga. );*/window.close();\" value=\"Cierar la ventana\"></p>"); con.close(); } catch (Exception e){ // print error message System.out.println("<center><font size=5> Error in inserting the data</font></ce nter>"); System.out.println("the error is:"+e.toString()); System.out.println("Error is:"+e.toString()); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { doPost(request,response); } } DocRetriever.java: package doc; import java.io.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import bd.LeerDB; /* * Creado por: Cedric Simon * Uso: Traer un archivo binario de una base de datos. * Licencia : El uso de este c digo, o perte de este c digo esta permitido * para uso no comercial. * * Los paquetes de com.oreilly.servlet que son importados en este c digo * est n protegido por una licencia. Mas detalles el http://servlets.com/cos/licens e.html * */ @WebServlet("/DocRetriever") public class Retriever extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { LeerDB readDB = null; try { readDB = new LeerDB(this.getServletName()); String sql = "select * from photo_gallery where photo_id=" + request.getParameter("photo_id"); readDB.select(sql); if (readDB.getNext()) { int blobLen = readDB.getInt("photo_filesize"); response.setContentType(readDB.getString("photo_filetype")); try { ServletOutputStream sos = null; sos = response.getOutputStream(); BufferedInputStream bis = new BufferedInputStream(readDB .getBinaryStream("data")); byte bindata[] = new byte[blobLen]; int bytesread = 0; if (!readDB.wasNull()) { if ((bytesread = bis.read(bindata, 0, bindata.length)) != -1) {

sos.write(bindata, 0, bytesread); } else { sos.write(bis.read()); } } bis.close(); } catch (IOException ioe) { System.err.println("Problem retrieving binary data1: " + ioe); ioe.printStackTrace(); } catch (Exception cnfe) { System.err.println("Problem retrieving binary data2: " + cnfe); cnfe.printStackTrace(); } Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 41 / 46 } } catch (Exception e) { java.io.PrintWriter out = response.getWriter(); out.print("<h1><font color=red>ERROR !!!!</font></h1><hr><br />" + e); e.printStackTrace(); e.printStackTrace(); String stack = ""; StackTraceElement stackElm[] = e.getStackTrace(); for (int cntStack = 0; cntStack < stackElm.length; cntStack++) { stack += stackElm[cntStack] + "\n"; } try { readDB .logError(this.getServletName(), e.toString(), stack, ((String) request.getHeaders("User-Agent") .nextElement()) + " - IP:" + request.getRemoteAddr() + " - Host:" + request.getRemoteHost() + " - Query string=" + request.getQueryString(), 1); } catch (Exception e1) { e1.printStackTrace(); } } finally { // close DB try { if (readDB != null) readDB.cleanup(); readDB = null; } catch (Exception e) { e.printStackTrace(); } } } } Uploader.java: package doc; import java.io.*; import java.sql.*;

import java.io.IOException; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.oreilly.servlet.MultipartRequest; import com.oreilly.servlet.multipart.DefaultFileRenamePolicy; import java.util.Enumeration; /* * Creado por: Cedric Simon * Uso: Cargar un archivo binario en una base de datos. * Licencia : El uso de este c digo, o perte de este c digo esta permitido * para uso no comercial. * * Los paquetes de com.oreilly.servlet que son importados en este c digo * est n protegido por una licencia. Mas detalles el http://servlets.com/cos/licens e.html * */ @WebServlet("/Uploader") public class Uploader extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; public javax.sql.DataSource ds = null; public java.sql.Connection con = null; private String dirName; public void init(ServletConfig config) throws ServletException { super.init(config); // read the uploadDir from the servlet parameters dirName = config.getInitParameter("uploadDir"); if (dirName == null) { throw new ServletException("Please supply uploadDir parameter"); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 42 / 46 @SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // System.out.println("Step 0"); try{ PrintWriter out = response.getWriter(); response.setContentType("text/html"); String name=""; String no_pulga=""; String doc_comment=""; Class.forName("org.firebirdsql.jdbc.FBDriver"); con = DriverManager.getConnection("jdbc:firebirdsql:127.0.0.1:C:/firebird/data/p ulgas.gdb","pulgas","cs"); try { MultipartRequest multi = new MultipartRequest(request, dirName, 10*1024*1024, "ISO-8859-1", new DefaultFileRenamePolicy()); Enumeration params = multi.getParameterNames(); while (params.hasMoreElements()) {

name = (String)params.nextElement(); String value = multi.getParameter(name); if (name.equals("doc_comment")) doc_comment =value; if (name.equals("no_pulga")) no_pulga =value; } Enumeration files = multi.getFileNames(); while (files.hasMoreElements()) { name = (String)files.nextElement(); String filename = multi.getFilesystemName(name); String type = multi.getContentType(name); File f = multi.getFile(name); if (f != null) { FileInputStream fis = new FileInputStream(f); PreparedStatement pstmt = con.prepareStatement("insert into adjuntos (adjunto,no mbre, doc_comment,tipo,no_pulga,medida) values(?,?,?,?,?,?)"); int i=1; pstmt.setBinaryStream(i, fis,(int)f.length()); i++; pstmt.setString(i,filename); i++; pstmt.setString(i,doc_comment); i++; pstmt.setString(i,type); i++; pstmt.setString(i,no_pulga); i++; pstmt.setInt(i,(int)f.length()); i++; pstmt.execute(); fis.close(); f.delete(); out.println("<h3 align=\"center\"><font color=green>Archivo "+filename+" guardad o.</font></h3>"); out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location. href= ../adjuntos.jsp? no_pulga="+no_pulga+" ;\" value=\"Regressar al manejo de adjuntos\">"); out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"window.close();\" valu e=\"Cierar la ventana\"></p>"); } else { // the field did not contain a file out.println("<h3 align=\"center\"><font color=red>El archivo " + name + " no fue guardado porque estaba VACILLO !!!</font></h3>"); out.println("<p align=\"center\"><input type=\"button\" onClick=\"self.location. href= ../adjuntos.jsp? no_pulga="+no_pulga+" ;\" value=\"Regressar al manejo de adjuntos\">"); out.println("&nbsp;&nbsp;<input type=\"button\" onClick=\"window.close();\" valu e=\"Cierar la ventana\"></p>"); out.println(); } } con.close(); } catch (IOException lEx) { con.close(); out.println("error reading or saving file. Talves el archivo es demasiado grande (max 9.5 MB)."); out.flush(); } } catch (Exception e) { // print error message

PrintWriter out = response.getWriter(); response.setContentType("text/html"); out.println("the error is:"+e.toString()); out.flush(); System.out.println("<center><font size=5> Error in inserting the data</font></ce nter>"); System.out.println("the error is:"+e.toString()); System.out.println("Error is:"+e.toString()); } } } Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 43 / 46 16El modelo MVC 16.1 Qu es el modelo MVC? El modelo MVC (Model View Controler) es un concepto de programacin que intenta de dividir la aplicacin en tres partes diferentes: el Modelo, que representa los datos de la aplicacin, la Vista, que representa la presentacin de los datos (que esta contenido en JavaBeans o EJB), y el Controlador, que representa la lgica del negocio (business logic). Este compartimiento permite a los desarrolladores de repartir mejor el trabajo. Por ejemplo, el que trabaja en la presentacin de los datos, no tiene que preocuparse por la lgica del negocio, ni co n el manejo de los datos. 16.2 MVC con JSP y JavaBeans El modelo MVC se puede utilizar con solamente pginas JSP y JavaBeans. Utilizar solamente JSP y JavaBeans es el camino ms rpido para llegar a un resultad o visible. Es bueno de utilizarlo para aplicaciones pequeas o prototipo de aplicaciones grandes, y una vez la estru ctura de la futura aplicacin estable, y que los desarrolladores tienen una buena comprensin de la aplicacin, mover hasta el uso de servlets y EJB. El riesgo es que la migracin del prototipo hasta la aplicacin final, con uso de se rvlets y EJB nunca mira el da... 16.3 MVC con JSP, JavaBeans y servlet Este modelo, utilizando el JSP para la presentacin, los servlets para el manejo d e la lgica del negocio, y los JavaBeans para los datos, es una manera poderosa de desarrollar une aplicacin bie n estructurada, fcil a mantener, y lista para evolucionar. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 44 / 46 16.4 MVC con JSP, servlet, JavaBeans y EJB Este modelo, utilizando EJB, se utiliza para aplicaciones empresariales, con ser vidor J2EE. Es el ms complejo, pero tambin el ms poderoso. Los EJB sirven principalmente para el manejo de transaciones y un modelo de comp onente independiente del tipo de cliente. Si Usted piensa en desarollar aplicaciones para varios tipos de cliente s (navegador, aplicacin autonoma, WAP, PDAs...), los EJB son la mejor eleccin. Las aplicaciones basadas en EJB obligan al uso del modelo MVC. Hay dos tipos de EJB: los EJB de entidades, y los de session. Los EJB de entidades que representan una parte del negocio, como un empleado o u n cliente. Los EJB de entidad tienen una identidad nica: todos los clients que quieren utilizar este entidad ut

ilizan la misma instancia de este EJB. Los EJB de session se usan para manejar la lgica del negocio, y son utilizados so lamente por el cliente que lo ha creado. De manera tipica, un bean de session opera sobre los beans de entidad en lugar del cliente. Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 45 / 46 17Ejercicios 1) Utilizacin de scriptlets: a) Crear una pgina que escribe todos los nmeros de 1 a 20 en una tabla de dos colu mnas (1 a 10 y 11 a 20) utilizando un scriptlet y una bucle Java. b) Crear un objeto MiAuto con atributo el color y el modelo, y mtodo para regresa r el color y el modelo. Utilizar el objeto, sus atributos y su mtodo en una pgina JSP. c) Crear comentarios en una pgina JSP, de 4 maneras diferentes. d) Crear una pgina JSP de la cual el color del fondo est basado el las segundas de la hora del sistema al momento de la apertura de la pgina: si la hora tiene entre 0 y 14 segundos, fondo blanco, 15 y 29, color amarillo, 30 y 44, azul claro, y 45 y 59, verde (sin refresco automtico). 2) Directivas de pginas: a) Incluir una directiva de pgina que mostrar el cdigo fuente de una pgina HTML. b) Incluir una directiva de pgina que incluye un archivo texto o HTML en una pgina JSP. 3) Variables de sesin: a) Crear un formulario de entrada al sitio, y recuperar el nombre de usuario en una variable de sesin y mencionar su nombre en otras pginas relacionadas del mismo sitio. b) Crear un formulario de registro, y si un usuario prueba de llegar a otra pgina del sitio si haber registrado, mandarlo a la pgina de registro. c) Crear una opcin en las pginas para salir de su sesin 4) Objetos implcitos: a) Verificar en la documentacin las opciones disponibles para los objetos implcito s y utilizar las que les parece interesante. 5) Formulario: a) Crear un formulario de inscripcin a un concurso (nombre, apellido, email), y d espus de haber tratado su contenido, ensear en otra pgina el contenido del formulario llenado, en formato de tabla. b) Adjuntar a la pagina JSP tratando el formulario hecho en 5.a unas verificacio nes al nivel del servidor (los tres campos no pueden ser nulo, el email debe contener un ?@?), y en caso de error (c ampo nulo, etc...) regresar al formulario original enseando los campos con errores. 6) Acciones estndar: a) Insertar una pgina JSP en otra: si la hora <30 sec, incluye a una pagina, si n o a otra. 7) Gestin de errores: a) Crear y probar una pgina de error personalizada. 8) JavaBeans: a) Crear un JavaBean que representa un empleado, y utilizar el Bean para manejar el empleado (creacin, modificacin). Eso sin llamada a la base de datos, solo en memoria. b) Crear una pagina que permite ver la lista de empleados de la base de datos y filtrarla por pais (job_country). 9) Servlet:

a) Crear un servlet que trata los datos de un formulario y segn el resultado (che ck OK o no) enva a una pgina u a otra. b) Crear un servlet que intenta conectarse a la base de datos y en caso de error dice cual es el nivel de error (JDBC driver no encontrado, no conexin a la base de datos, consulta incorrecta). c) Crear una pagina web conteniendo texto e imgenes, que vienen de una base de da tos. Ejercicio final (si queda tiempo): Crear una aplicacin web que: 1) Trae todo su contenido de una base de datos: Textos, etiquetas, imgenes,... 2) Tiene pgina de error personalizada utilizada por cada pgina. 3) Manejo de un sistema de compra en lnea: el usuario puede llenar una lista de c ompras, ver las compras anteriores, etc... Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida Curso de Java Server Pages Nivel bsico Pagina 46 / 46 18 Esquema de la base de datos Copyright Cdric Simon, 20052011 Versin 2.3 Reproduccin prohibida

Вам также может понравиться