Está en la página 1de 46

Curso de

Java Server Pages


Nivel bsico
Manual del alumno
<JSP>
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida


I
n
g
.

C
e
d
r
i
c

S
i
m
o
n


T
e
l
:

2
2
6
8

0
9
7
4


C
e
l
:

8
8
8
8

2
3
8
7


E
m
a
i
l
:


c
e
d
r
i
c
@
s
o
l
u
c
i
o
n
j
a
v
a
.
c
o
m


W
e
b
:

w
w
w
.
s
o
l
u
c
i
o
n
j
a
v
a
.
c
o
m

S
o
l
u
c
i
o
n
J
a
v
a
.
c
o
m
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.1!"ue es el #S$%.....................................................................................................................................................................................&
2.2!$or qu utili'ar(amos el #S$%...........................................................................................................................................................&
2.3)ave*adores +eb..................................................................................................................................................................................&
3Arquitectura J2EE.......................................................................................................................................................................................7
3.1,ntroducci-n a la .ecnolo*(a / 0onceptos #2EE...............................................................................................................................1
3.20omponentes #2EE..............................................................................................................................................................................1
3.32a 3rquitectura #ava )amin* 4irector/ ,nter5ace 6#)4,7.............................................................................................................8
3.3.1Ejemplo de JNDI.............................................................................................................................................................................8
4El protocolo !!P......................................................................................................................................................................................."
4.1Modelo de consulta 9 respuesta :..$...............................................................................................................................................;
4.24etalles de una consulta......................................................................................................................................................................;
4.34etalles de respuesta..........................................................................................................................................................................1<
4.4$armetros de consulta.....................................................................................................................................................................11
4.5Mtodos de consulta...........................................................................................................................................................................11
5Instalacin del ser#idor JSP......................................................................................................................................................................13
5.1#a=arta .omcat..................................................................................................................................................................................13
5.2,nstalaci-n...........................................................................................................................................................................................13
5.30on5i*uraci-n de Eclipse...................................................................................................................................................................13
5.4>eri5icaci-n de la instalaci-n............................................................................................................................................................14
6$so de %erra&ienta ' entorno...................................................................................................................................................................15
&.1Eclipse.................................................................................................................................................................................................15
6.1.1Creacin del servidor....................................................................................................................................................................15
&.1.20reaci-n de un nuevo pro/ecto +eb..............................................................................................................................................1&
&.1.30reaci-n de la p*ina de (ndice.....................................................................................................................................................11
7$tili(acin de los scriptlets........................................................................................................................................................................2)
1.1!"u son los scriptlets%......................................................................................................................................................................2<
1.22os scriptlet de declaraci-n de variables.........................................................................................................................................2<
1.32os scriptlet de utili'aci-n de variables...........................................................................................................................................2<
1.42os scriptlets de c-di*o......................................................................................................................................................................2<
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 3 / 46
1.53*re*ar comentarios..........................................................................................................................................................................21
*$tili(acin de directi#as.............................................................................................................................................................................22
8.14irectiva de p*ina............................................................................................................................................................................22
8.1.1Lista de parmetros para directiva de !ina................................................................................................................................""
8.24irectiva de inclusi-n.........................................................................................................................................................................23
8.34irectiva ta*lib...................................................................................................................................................................................23
"$tili(acin de #aria+les de sesin..............................................................................................................................................................24
;.14eclaraci-n de variable de sesi-n.....................................................................................................................................................24
;.2Recuperar el valor de un variable de sesi-n....................................................................................................................................24
;.3,nvalidar una sesi-n...........................................................................................................................................................................24
;.4Otros mtodos.....................................................................................................................................................................................24
1),+-etos i&pl.citos.....................................................................................................................................................................................25
1<.1request...............................................................................................................................................................................................25
1<.2response.............................................................................................................................................................................................25
1<.3session................................................................................................................................................................................................25
1<.4application.........................................................................................................................................................................................25
1<.5out......................................................................................................................................................................................................25
1<.&e?ception...........................................................................................................................................................................................25
11/os 0or&ularios........................................................................................................................................................................................26
11.10reaci-n del 5ormulario..................................................................................................................................................................2&
11.2.ratamiento del 5ormulario............................................................................................................................................................2&
12Ele&entos de acciones est1ndar..............................................................................................................................................................2"
12.1@jspA5or+ard 9B.................................................................................................................................................................................2;
12.2@jspAinclude 9B..................................................................................................................................................................................2;
12.3@jspAparamB.....................................................................................................................................................................................2;
12.4@jspAplu*inB......................................................................................................................................................................................2;
12.5@jspAparamsB....................................................................................................................................................................................3<
12.&@jspA5allbac=B...................................................................................................................................................................................3<
12.1@jspAuseCeanB..................................................................................................................................................................................3<
12.8@jspA*et$ropert/B............................................................................................................................................................................3<
12.;@jspAset$ropert/B.............................................................................................................................................................................3<
132estin de errores....................................................................................................................................................................................31
13.1Errores de compilaci-n....................................................................................................................................................................31
13.2Errores de l-*ica..............................................................................................................................................................................31
13.3Errores de ejecuci-n........................................................................................................................................................................31
13.3.1!ina de error personali#ada.....................................................................................................................................................31
14$tili(acin de Ja#a3ean..........................................................................................................................................................................33
14.1!"u es un #avaCean%.....................................................................................................................................................................33
14.24eclaraci-n de un #avaCean...........................................................................................................................................................33
1$.".1%jsp&'se(ean).............................................................................................................................................................................33
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 4 / 46
1$."."%jsp&!etropert*)........................................................................................................................................................................3$
1$.".3%jsp&setropert*)........................................................................................................................................................................35
14.3Scope de un #avaCean......................................................................................................................................................................35
15$tili(acin de ser#lets..............................................................................................................................................................................36
15.1!"u es un servlet%..........................................................................................................................................................................3&
15.2!$ara que sirve un servlet%.............................................................................................................................................................3&
15.33natom(a de un servlet....................................................................................................................................................................3&
15.40iclo de vida de un servlet...............................................................................................................................................................31
15.50reaci-n de un servlet simple.........................................................................................................................................................31
15.&Dso de servlet para mostrar im*enes o arcEivos binarios..........................................................................................................38
16El &odelo 456........................................................................................................................................................................................43
1&.1!"u es el modelo M>0%................................................................................................................................................................43
1&.2M>0 con #S$ / #avaCeans.............................................................................................................................................................43
1&.3M>0 con #S$F #avaCeans / servlet................................................................................................................................................43
1&.4M>0 con #S$F servletF #avaCeans / E#C......................................................................................................................................44
17E-ercicios..................................................................................................................................................................................................45
1* Esque&a de la +ase de datos..................................................................................................................................................................46
Copyright Cdric Simon, 2005-2011 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 dinmicas.
1.2 Manual del alumno
Este manual del alumno es una ayuda para el alumno, para tenga un recuerdo del curso. Este manual contiene un
resumen de las materias que se van a estudiar durante el curso, pero el alumno debera 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 llevarse, 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 el 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 atender 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, cuando 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, 2005-2011 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 pginas web dinmicas.
El JSP necesita que un servidor web con capacidad JSP sea instalado y funcionando para poder ejecutar las pginas
JSP.
El servidor va a compilar el cdigo JSP y tratarlo en tiempo real, con la informacin 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 identificarlo.
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 servidores 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 del 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. Veremos 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, 2005-2011 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 cliente-servidor. El objetivo principal de la tecnologa J2EE es crear un
simple modelo de desarrollo para aplicaciones empresariales utilizando componentes basados en el modelo de
aplicacin. En este modelo dichos componentes utilizan servicios proporcionados por el contenedor, que de otro modo
tendran que estar incorporados en el cdigo de la aplicacin. Observa que esto podra no ser lo ideal para todos los
escenarios: por ejemplo, una pequea aplicacin se cubrira mejor utilizando una solucin 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 J2EE es una unidad de software
funcional auto-contenido 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 bien 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 directorios.
Nota: Todos los componentes J2EE estn escritos en lenguaje Java
Copyright Cdric Simon, 2005-2011 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 directorio utilizando la tecnologa
Java. El API JNDI reside entre la aplicacin y el servicio de nombres y hace que el 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 servicio 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 clientes localizan los objetos
remotos mediante el API JNDI.
Para que una aplicacin pueda interactuar con un servicio de nombre, este debe conocer 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:compenvjd!c""datasource#ame);
con = ds.$etConnection();
...
Copyright Cdric Simon, 2005-2011 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 detalle 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 comunicacin 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 recurso 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 guarda ningn informacin acerca
del cliente depuse de haberle contestado, y por eso no puede reconocer que varias consultas de un mismo
cliente pueden ser relacionadas.
2. La aplicacin web no puede entregar una respuesta inmediato, como en aplicaciones 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 llegado, as que el servidor no puede
distinguir diferente mtodos de consulta. Por ejemplo, en servidor no puede distinguir una consulta generada
por un clic en un enlace del uso del botn 'atrs' del navegador. Tambin, como el HTTP 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 uso por defecto.
Ejemplo de una consulta:
%&' index.(tml )''*+.,
)ost: www.$e-ionso-tware.com
.ser/0$ent : 1o2illa3.4 5en6 (7in#'; I)
0ccept: ima$e$i-8 ima$ejpe$8 ima$epjpe$8 ima$epn$8 99
0ccept/lan$ua$e : en
0ccept/c(arset : iso/::4;/+898ut-/:
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 servidor para cumplir con la
consulta.
Copyright Cdric Simon, 2005-2011 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 servidor puede tener varios nombres, y
este informacin permite distinguir mltiple servidores virtuales utilizando un mismo proceso web.
El ttulo .ser/0$ent contiene informacin sobre el tipo de navegador utilizado para hacer la consulta. El servidor puede
utilizar este informacin para generar respuestas diferentes dependiendo del navegador (IE, Netscape, WAP, PDA,...).
Los ttulos 0ccept proveen informacin sobre el idioma y el formato de archivo que el navegador acepta.
4.3 Detalles de respuesta
El mensaje de la respuesta parece al de la consulta. El contiene tres partes: una lnea de estado, unos ttulos de
respuesta, y el cuerpo de la respuesta.
Ejemplo de respuesta:
)''*+., <,, =>
?ast/1odi-ied: 1on8 +; Dec <,,3 <,:<+:3< %1'
Date: 'ue8 +< @ul <,,4 +A:+<:+, %1'
Status: <,,
Content/'Bpe: text(tml
Servlet/&n$ine: 'omcat 7e! ServerA.<
Content/?en$t(: 4;
C(tmlD
C!odBD
C(+D)ello 7orldEC(+D
C!odBD
C(tmlD
La lnea de estado empieza con el nombre del protocolo, seguido por el cdigo de resultado 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 ?ast/1odi-ied 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/'Bpe dice al navegador que tipo de datos contiene el cuerpo de la respuesta.
El ttulo Content/?en$t( 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 respuesta 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 (imagen, sonido, archivo
comprimido,...). El cuerpo puede tambin contener cdigo que va generar otras consultas al servidor, como la
insercin de una imagen.
Copyright Cdric Simon, 2005-2011 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 '&', con 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 entre los dos es que el mtodo
GET pasa los parmetros a dentro del URL, as que se puede guardar fcilmente en su lista 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 cuerpo de la consulta. Eso permite
enviar consulta de tamao ms grande que 2000 caracteres, y sin que los parmetros aparecen 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 consulta.
Tambin, cuando se proba de enviar de nuevo una encuesto POST (refresh) el navegador genera una alerto porque
este accin puede generar acciones posiblemente irreversible al nivel del servidor.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 12 / 46
Ejemplo de formulario:
C-orm action="prue!a.jsp" met(od="*=S'"D
Cuidad: Cinput name="cuidad" tBpe="text"D
*ais: Cinput name="pais" tBpe="text"D
CpD
Cinput tBpe="S.F1I'"D
C-ormD
Ejemplo de consulta POST generada por el formulario arriba:
*=S' prue!a.jsp )''*+.,
)ost: www.!usinessso-t.com.ni
.ser/0$ent : 1o2illa3.4 5en6 (7in#'; I)
0ccept: ima$e$i-8 ima$ejpe$8 ima$epjpe$8 ima$epn$8 99
0ccept/lan$ua$e : en
0ccept/c(arset : iso/::4;/+898ut-/:
cuidad=1ana$uaGpais=#icara$ua
Ejemplo de Socket que se conecta al servidor Web local (Tomcat), le enva una consulta HTTP y recibe la pgina
HTML.
LeerWeb.java:
import java.io.9;
import java.net.9;
pu!lic class ?eer7e! H
pu!lic ?eer7e!() t(rows &xception H
Socket s = new Socket("+<I.,.,.+"8 :,:,);
=utputStream os = s.$et=utputStream();
*rintStream ps = new *rintStream(os);
ps.print("%&' )''*+.,JrJnJrJn");
InputStream is = s.$etInputStream();
InputStreamKeader isr = new InputStreamKeader(is);
Fu--eredKeader !r = new Fu--eredKeader(isr);
Strin$ line = !r.read?ine();
w(ile (lineE=null)H
SBstem.out.println(line);
line=!r.read?ine();
L
L
pu!lic static void main(Strin$56 ar$s) t(rows &xception H
?eer7e! test = new ?eer7e!();
L
L
Copyright Cdric Simon, 2005-2011 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 capacidad JSP.
Por eso, vamos a utilizar el famoso servidor Tomcat, de la fundacin Apache. El Tomcat 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 Unix 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 basta 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 importante 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, 2005-2011 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 Tomcat.
Copyright Cdric Simon, 2005-2011 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 su verisn J2EE o Reporting.
Estos programas son libres y gratuitos, y funcionan bajo Windows como bajos Linux.
6.1.1 Creacin del servidor
Eclipse integra la posibilidad de manejar una multitud de servidores web diferente desde Eclipse. Eso permita el
nuevo despliegue, de manera automtica, del sitio despus de cada cambia. Y tambin permite 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, 2005-2011 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 Tomcat. 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 anterior. Como versin de modulo
escojamos 3.0, y como configuracin '<custom>'. Luego aceptamos los valores por defecto.

Una vez creado, validamos las propiedades del proyecto, y
agregamos el proyecto al servidor Tomcat 7.
Copyright Cdric Simon, 2005-2011 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 pantalla 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, 2005-2011 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 pginas con extensin JSP (.jsp en
minuscula) sern traducidas por el servidor en un servlet (cdigo Java) y producirn una 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 pre-hecho.
Vamos a modificar el cdigo de la manera siguiente, y lo guardamos:
CMN pa$e lan$ua$e="java" content'Bpe="text(tml; c(arset=IS=/::4;/+"
pa$e&ncodin$="IS=/::4;/+"MD
CED=C'O*& (tml *.F?IC "/7ACD'D )'1? 3.,+ 'ransitional&#" "(ttp:www.wA.or$'K(tml3loose.dtd"D
C(tmlD
C(eadD
CME
Strin$ titulo="1i primera *P$ina @S*";
int nr*a$ina=+;
MD
CtitleDCM=tituloMDCtitleD
C(eadD
C!odB !$color="QRRRRRR"D
C(+DCM=tituloMDC(+D
C(rD
CpD
&ste es mi pP$ina en @S* numero CM= nr*a$inaMD.
C!odBD
C(tmlD
En el futuro, no escribir en el manual los encabezados generados por el entorno, como CMNpa$e...D CED=C'O*&....D 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://localhost::8080/curso/ o
http://localhost:8080/curso/index.jsp
Por defecto, si ninguna pgina esta especificada en el URL, el servidor busca primero la pgina index.html, luego
index.htm, y luego index.jsp. Este opcin puede ser modificada al nivel del servidor, y/o al nivel del sitio, en el archivo
web.xml.
Copyright Cdric Simon, 2005-2011 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, 2005-2011 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 tiene 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 contra del @avaScript, 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 accesible 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:
CME Strin$ titulo="1i primera *P$ina @S*";
int nr*a$ina=+; MD
7.3 Los scriptlet de utilizacin de variables
El scriptlet de utilizacin de variable sirven para mencionar el valor de una variable 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 punto-coma.
Ejemplo:
C(+DCM=tituloMDC(+D
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 ejecutara en la pgina JSP. Se puede
utilizar para declara clases cmo para implementar esquema de decisin a dentro de la 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 out.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, 2005-2011 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 el 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:
C(tmlD
C(eadD
CME
Strin$ titulo="1i primera *P$ina @S*";
int nr*a$ina=+;
MD
CtitleDCM=tituloMDCtitleD
C(eadD
C!odBD
C(+DCM=tituloMDC(+D
C(rD
CpD
&ste es mi pP$ina en @S* numero
CM
nr*a$ina"";
out.print ("C-ont color=redDC!D""nr*a$ina""C!DC-ontD B me conviene el @S*");
MD.
C!odBD
C(tmlD
Ejemplo no 2:
Por ejemplo, en el cdigo siguiente, segn la hora del da, se marcara 'Buenos da', o 'Buenas tarde', o 'Buenas noche'.
C(tmlD
C(eadD
CtitleDSaludoCtitleD
C(eadD
C!odB !$color="w(ite"D
CM java.util.Date clock = new java.util.Date( ); MD
CM i- (clock.$et)ours( ) C +<) H MD
C(+DFuenos dSasEC(+D
CM L else i- (clock.$et)ours( ) C +:) H MD
C(+DFuenas tardesEC(+D
CM L else H MD
C(+DFuenas noc(esEC(+D
CM L MD
C!odBD
C(tmlD
7.5 Agregar comentarios
Para agregar comentarios en un scriptlet, se pueden utilizar los comentarios de Java : para simple lnea, 9 y 9
para mltiple lneas.
Para comentarios afuera de un scriptlet, pueden utilizar los comentarios HTML, que son contenidos entre CE// y //D,
pero estos comentarios sern enviados al navegador del cliente y, an que no ser visible 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 CM// y termina con //MD.
Copyright Cdric Simon, 2005-2011 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 generan ninguna informacin visible
para el usuario, pero permite determinar la manera que el servidor va utilizar para tratar el cdigo JSP de la pgina.
Existen tres tipos de directivas: de pgina, de inclusin, y ta$li!. Para adjuntar una directiva, hay que incluirla entre C
MN y MD. La instruccin de directiva incluye el tipo de directiva, el parmetro de la 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 informaciones relativas a la configuracin de la
pgina JSP, como el tipo de contenido. As si el content'Bpe = "textplain", 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 C(tmlD.
Ejemplo:
CMN pa$e content'Bpe="textplain" MD
C(tmlD
C(eadD
CtitleD'est directiva de pP$inaCtitleD
C(eadD
C!odB !$color="w(ite"D
?a -ec(a de (oB es CM= new java.util.Date() MD
C!odBD
C(tmlD
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 (-alse) si una excepcin debe ser
generada cuando esta lleno.
buffer 8kb Especifica el tamao del buffer para esta pgina. El tamao debe ser expresado en
kilobytes, seguido de k!, 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 pgina, 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 @sp*a$e o el interfaz )ttp@sp*a$e del paquete javax.servlet.jsp.
Nota que no est recomendado de utilizar este atributo. Especificando su propio
superclass restringe la posibilidad del contenedor JSP de entregar una superclass
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, 2005-2011 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 una pgina de error
personalizada, y permite el uso de la variable implcita exception a dentro de los
scriptlets. Utiliza falso (-alse) 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 (-alse), 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 proceso-seguro (thread-safe).
language java Define el idioma de scripting utilizado.
session true Si est puesto a verdadero (true), la pgina participa en la sesin del usuario. Si est
falso (-alse), las variables de sesin implcitas no estn disponible en la pgina.
Una unidad de translacin ( la fuente JSP y todos los archivos incluidos utilizando 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 lista de definicin de importacin.
Ejemplo:
CMN pa$e lan$ua$e="java" content'Bpe="text(tml;c(arset=S(i-tT@IS"MD
CMN pa$e import="java.util.98 java.text.9" MD
8.2 Directiva de inclusin
La directiva de inclusin permite incluir a dentro de la pgina JSP uno o varios archivos de texto o HTML. Eso
permite de incluir un mismo archivo en varias paginas JSP, sin tener que copiarlo.
Los nombres de archivos incluidos pueden tener cualquiera extensin (txt, html, inc, jsp...), pero existe una extensin
especfica 'jspf' (JSP Fragment) que permite la validacin del cdigo incluido en varios entornos (Eclipse,...).
El archivo incluido tiene que ser presente y accesible en el sistema de archivos del servidor JSP.
Ejemplo:
C(tmlDC(eadD
CtitleD'est directiva de pP$inaCtitleD
C(eadD
C!odB !$color="w(ite"D
0UuS mi texto incluido:C!rD
CMN include -ile="epl/v+,.(tml" MD
C!odBD
C(tmlD
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: CMN ta$li! uri="li!rerSaTdeTetiUuetas.tld" pre-ix="miTaccion" MD
Para poder utilizarlas, necesitamos aprender las acciones personalizadas, que se miran en otro curso (JSP Avanzado).
Copyright Cdric Simon, 2005-2011 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 conectado, y que sern disponible por el
tiempo que dura la sesin: La sesin expira cuando se cierra en navegador, o no se navega en el sitio por un cierto
tiempo (depende de la configuracin del servidor y se puede modificar en el cdigo JSP), 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 set0ttri!ute(Strin$ nom!re8 =!ject valor)
del objeto session.
Por ejemplo: session.set0ttri!ute("nom!re"8"Cedric") crea la variable de sesin nombre 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 $et0ttri!ute(Strin$ nom!re) del objeto session. Si la
variable no existe, regresara el valor nulo.
Por ejemplo: session.$et0ttri!ute("nom!re") regresara un objeto. Este objeto tiene que ser convertido de manera explicita
en Strin$. El valor del Strin$ ser Cedric, segn el ejemplo de arriba.
Ejemplo:
Strin$ mi#om!re=(Strin$) session.$et0ttri!ute("nom!re");
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 la documentacin java del interfaz
javax.servlet.(ttp.)ttpSession
Copyright Cdric Simon, 2005-2011 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 abajo) 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 documentacin de Java disponible en lnea .
Nombre de Variable Typo
reUuest javax.servlet.(ttp.)ttpServletKeUuest
response javax.servlet.(ttp.)ttpServletKesponse
pa$eContext javax.servlet.jsp.*a$eContext
session javax.servlet.(ttp.)ttpSession
application javax.servlet.ServletContext
out javax.servlet.jsp.@sp7riter
con-i$ javax.servlet.ServletCon-i$
pa$e java.lan$.=!ject
exception java.lan$.'(rowa!le
10.1request
El objeto reUuest es una instancia de la clase javax.servlet.(ttp.)ttpServletKeUuest. Este objeto le ofrece mtodos para
acceder a toda la informacin de la consulta http corriente, como los parmetros, atributos, cabeceras, y cookies.
10.2response
El objeto response representa el mensaje de la respuesta corriente. Es una instancia de la clase
javax.servlet.(ttp.)ttpServletKesponse, con mtodos para definir la cabecera, el cdigo de estado, y para adjuntar cookies.
Tambin ofrece mtodos para seguimiento de sesin.
10.3session
El objeto session le permite acceder a los datos de sesin del cliente, manejados por el servidor. Es una instancia de
javax.servlet.(ttp.)ttpSession class.
10.4application
Es una instancia de javax.servlet.ServletContext class. Este objeto mantiene referencias a otros objetos que varios
usuarios pueden acceder, como una conexin de base de datos compartida por todos los usuarios. Tambin contiene
mtodos como log() para escribir mensajes en el diario del contenedor.
10.5out
Es una instancia de javax.servlet.jsp.@sp7riter. Tiene dos mtodos principales, que son print() y println(). Es parecido al
SBstem.out, solo que escribe la salida en la futura pgina HTML.
10.6exception
El objeto &xception es disponible solamente en pginas de error, y contiene informaciones sobre la error de ejecucin
que ocurri. Lo utilizaremos en el capitulo de gestin de errores. Existen tres otros objetos implcitos (pa$eContext8
con-i$8 and pa$e) pero est muy raro que se usan en JSP.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 26 / 46
11Los formularios
11.1Creacin del formulario
Los formularios estn creados simplemente en HTML. El JSP se puede utilizar a dentro del formulario para, por
ejemplo, asignar valores por defecto o desactivar ciertos campos segn la informacin disponible (variable de sesin, u
otro formulario).
Es muy importante que cada campo del formulario tenga un nombre (parmetro #01& del campo).
Para el parmetro 1&')=D, les aconsejo siempre utilizar *=S'. El parmetro 0C'I=# puede ser un servlet o una pgina JSP.
Aqu vamos a utilizar una pgina JSP.
11.2Tratamiento 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 $et*arameter o, si varias valores pueden ser elegidas a la misma vez en el campo $et*arameterValues8
del objeto reUuest.
Los mtodos $et*arameter B $et*arameterValues acepta un parmetro : el nombre del campo 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 Strin$
para $et*arameter8 y Strin$56 para $et*arameterValues. Si queremos cambiarlos a otro tipo, hay que utilizar los mtodos
Java apropiados para convertir los tipos.
El objeto reUuest tiene tambin otros mtodos que permiten obtener informacin sobre la consulta en curso, entre otros:
$et?ocal(): regresa los parmetros locales del PC del cliente
$etKemote0ddr(): regresa el IP del PC del cliente
$etKemote)ost(): regresa el nombre del PC del cliente
Ejemplo:
formulario.jsp (que se podra tambin llamar formulario.html porque no lleva cdigo JSP)
C(tmlD
C(eadD
CtitleD'est -ormularioCtitleD
C(eadD
C!odB !$color="QCCDD00"D
C(+DRormulario de prue!aC(+D
C(rD
CpD
C-orm name="-ormulario" action="resultadoRormulario.jsp" met(od=*=S'D
Cta!le !order=,D
CtrD
Ct(DSu nom!re:Ct(DCtdDCinput tBpe=text name="nom!re" si2e=A,DCtdD
Ct(DSu apellido:Ct(DCtdDCinput tBpe=text name="apellido" si2e=A,DCtdD
CtrD
CtrD
Ct(DSu direcciWn:Ct(DCtd colspan=ADCinput tBpe=text name="domicilio" si2e=+,,DCtdD
CtrD
CtrD
Ct(DSu pais:Ct(DCtdDCselect name="pais"D
CoptionDFXl$ica
Coption selectedD#icara$ua
CoptionD=tro
CselectDCtdD
CtrD
CtrD
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 27 / 46
Ct(DSu no de tel:Ct(DCtdDCinput tBpe=text name="tel" si2e=A,DCtdD
Ct(DSu no celucar:Ct(DCtdDCinput tBpe=text name="cel" si2e=A,DCtdD
CtrD
CtrD
Ct(DSu nota:Ct(DCtd colspan=ADCtextarea name="nota" cols=I4 rows=4DCtextareaDCtdD
CtrD
CtrD
Ct(DCt(DCtdDC!utton tBpe=resetDKesetiarCtdD
Ct(DCt(DCtdDC!utton tBpe=su!mitD&nviarCtdD
CtrD
Cta!leD
C-ormD
C!odBD
C(tmlD
resultadoFormulario.jsp:
C(tmlD
C(eadD
CM
Strin$ nom!re=reUuest.$et*arameter("nom!re");
Strin$ apellido=reUuest.$et*arameter("apellido");
Strin$ domicilio=reUuest.$et*arameter("domicilio");
Strin$ pais=reUuest.$et*arameter("pais");
i- (pais==null) pais="=tro";
Strin$ tel=reUuest.$et*arameter("tel");
Strin$ cel=reUuest.$et*arameter("cel");
Strin$ nota=reUuest.$et*arameter("nota");
MD
CtitleDKesultado de -ormularioCtitleD
C(eadD
C!odB !$color="QCCDD00"D
C(+DKesultado de su -ormularioC(+D
CpD
CpD
&stimadoa seYor(a) C!i$DCM=apellidoMDC!i$D8C!rD
C!rD
?ea in-ormamos Uue su -ormulario -ue transmitido con Xxito.
CpD
CM
i- (Epais.eUuals("=tro"))
H
MD
#otamos Uue .sted vive en C!i$DCM=paisMDC!i$D8 por -avor eli$e su cuidad:C!rD
C-orm name="-ormulario" action="resultadoRormulario<.jsp" met(od=*=S'D
Cselect name="cuidad"D
CM
i- (pais.eUuals("#icara$ua"))
H
MD
CoptionD1ana$ua
CoptionD?eon
CoptionD%ranada
CoptionD=tro
CM
L #icara$ua
i- (pais.eUuals("FXl$ica"))
H
MD
CoptionDFruselas
CoptionD#amur
CoptionD0rlon
CoptionD=tro
CM
L Fel$ica
MD
CselectD
Cinput tBpe=(idden name="nom!re" value="CM=nom!reMD"D
Cinput tBpe=(idden name="apellido" value="CM=apellidoMD"D
Cinput tBpe=(idden name="domicilio" value="CM=domicilioMD"D
Cinput tBpe=(idden name="pais" value="CM=paisMD"D
Cinput tBpe=(idden name="cel" value="CM=celMD"D
Cinput tBpe=(idden name="tel" value="CM=telMD"D
Cinput tBpe=(idden name="nota" value="CM=notaMD"D
C!utton tBpe=su!mitD&nviarC!uttonD
C-ormD
CM
L otro pais
MD
C(rD
C(AD&nlacesC(AD
Ca (re-="index.jsp"DKe$resar al indiceCaDC!rD
Ca (re-="-ormulario.jsp"DKe$resar al -ormularioCaD
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 28 / 46
C!odBD
C(tmlD
resultadoFormulario2.jsp:
C(tmlD
C(eadD
CM
Strin$ nom!re=reUuest.$et*arameter("nom!re");
Strin$ apellido=reUuest.$et*arameter("apellido");
Strin$ domicilio=reUuest.$et*arameter("domicilio");
Strin$ pais=reUuest.$et*arameter("pais");
Strin$ tel=reUuest.$et*arameter("tel");
Strin$ cel=reUuest.$et*arameter("cel");
Strin$ nota=reUuest.$et*arameter("nota");
Strin$ cuidad=reUuest.$et*arameter("cuidad");
MD
CtitleDKesultado de -ormularioCtitleD
C(eadD
C!odB !$color="QCCDD00"D
C(+DKesultado -inal de su -ormularioC(+D
Su nom!re : CM=nom!reMDC!rD
Su apellido : CM=apellidoMDC!rD
Su domicilio : CM=domicilioMDC!rD
Su cuidad : CM=cuidadMDC!rD
Su pais : CM=paisMDC!rD
Su celular : CM=celMDC!rD
Su tele-ono : CM=telMDC!rD
Su nota : CM=notaMDC!rD
CpD
&l nom!re de su *C : CM=reUuest.$etKemote)ost()MDC!rD
&l I* de su *C : CM=reUuest.$etKemote0ddr()MDC!rD
C(rD
C(AD&nlacesC(AD
Ca (re-="index.jsp"DKe$resar al indiceCaDC!rD
Ca (re-="-ormulario.jsp"DKe$resar al -ormularioCaD
C!odBD
C(tmlD
Copyright Cdric Simon, 2005-2011 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> enva 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 utilizando <jsp:include> o <jsp:forward>.
Ejemplo:
Cjsp:-orward pa$e="ta$SinCuerpo.jsp"D
Cjsp:param name="test" value="mi paramXtro"D
Cjsp:-orwardD
Cjsp:include pa$e="ta$SinCuerpo.jsp"D
Cjsp:param name="test" value="mi pP$ina incluidaE"D
Cjsp:includeD
12.4<jsp:plugin>
Genera un cdigo HTML que contiene los elementos (OBJECT o EMBED ) apropiados dependiendo del navegador del
cliente, necesarios para ejecutar un Applet con el programa de Java Plugin.
Los atributos code8 code!ase, y tBpe son obligatorios.
Atributo Descripcin
ali$n
Alineacin del applet. Valores vlidas: !ottom8 middle8 top.
arc(ive
Lista de URIs para archivos conteniendo clases y otros recursos que sern precargados,
utilizando 0ppletClass?oader y el atributo Code!ase (URIs relativos).
code
El nombre completo de la clase del objeto.
code!ase
El camino relativo hacia la carpeta que contiene la clase. Debe ser una subcarpeta del
sitio.
(ei$(t
Altura de la zona del applet. En pxeles o en porcentaje.
(space
Cuantidad de espacio blanco a dejar a la derecha y izquierda de la zona del applet, en
pxeles.
ieplu$inurl
Direccin URL a donde se encuentra una versin del plugin Java para Internet 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 comunicarse.
nsplu$inurl
Direccin URL a donde se encuentra una versin del plugin Java para Nescape.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 30 / 46
Actualmente, el plugin se encuentra en el JRE.
tBpe
Tipo de objeto: applet o bean.
vspace
Cuantidad de espacio blanco a dejar arriba y abajo de la zona del applet, en pxeles.
widt(
Ancho de la zona del applet. En pxeles o en porcentaje.
Ejemplo de plugin:
...
&jemplo de plu$in...C!rD
Cjsp:plu$in tBpe="applet" code="Clock<.class"
code!ase="applet"
jreversion="+.<" widt(="+Z," (ei$(t="+4," D
Cjsp:paramsD
Cjsp:param name="!$color" value="ccdd--" D
Cjsp:param name="-$color+" value="ccd,,," D
Cjsp:param name="-$color<" value="c,,,,-" D
Cjsp:paramsD
Cjsp:-all!ackD
Cjsp:include pa$e="*ie" D
*lu$in ta$ =F@&C' or &1F&D not supported !B !rowser.
Cjsp:-all!ackD
Cjsp:plu$inD
...
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 elementos <object> o <embed>.
12.7<jsp:useBean>
Permite de poner un JavaBean disponible a dentro de una pgina. Ms detalles en el captulo de JavaBeans.
12.8<jsp:getProperty>
Saca el valor de una propiedad de un componente JavaBean y lo adjunta a la respuesta. 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 JavaBeans.
Copyright Cdric Simon, 2005-2011 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.1Errores de compilacin
Los errores de compilacin son las errores de sintaxis. Al compilar el cdigo, el servidor JSP detecta los errores que no
respetan la sintaxis del Java, as como errores de conversin de tipos, uso de variables no declaradas, etc...
Cuando ocurren errores de compilacin, el detalle de la error aparece en la pgina JSP.
13.2Errores de lgica
Los errores de lgica son errores debido a un diseo incorrecto del cdigo. Por ejemplo, un bucle que nunca termina,
una falta de ortografa en un texto, una formula de clculo equivocada,...
13.3Errores 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 &rror y la clase &xception.
Las excepciones de la clase &rror abarcan fallos graves que el programa no va a poder recuperar y, por tanto, no
pueden ser captadas.
Las excepciones de la clase &xception son excepciones que Java puede capturar. Existen varias subclases, como Kuntime
&xception8 I=&xception8 Interrupted&xception,...
Las excepciones de la clase &xcepcion pueden ser atrapada a dentro del cdigo, para 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 bloques, como se hace en el idioma Java, o
dejar la pagina de error que viene por defecto con el servidor JSP (no es muy linda...), 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 directiva 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)
CMNpa$e autoRlus(="-alse" error*a$e="&rror.jsp" MD
C(tmlD
C(eadD
CM
int i = 4,;
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 32 / 46
MD
CtitleD*rue!aCtitleD
C(eadD
C!odB !$color="w(ite"D
C(+D*rue!aC(+D
C(rD
?a valor de i es CM=iMD C!rD
C(rD
Ca (re-="-ormulario.jsp"DRormularioCaDC!rD
Ca (re-="'estFean.jsp"D'est FeanCaDC!rD
C!odBD
C(tmlD
Error.jsp (esta pgina se mira en vez de la pgina que engendro la error)
CMN pa$e is&rror*a$e="true" MD
C(tmlD
C(eadD
CtitleD*a$ina de errorCtitleD
C(eadD
C!odB !$color="RRCCCC"D
C(+ stBle="color=red;"DSe encontro un errorC(+D
C(rD
&stimado .suario8C!rD
C!rD
se encontro un error procesando su encuesta. C!rD
C!rD
?o sentimos8 B estamos (aciendo lo posi!le para reparar este error lo mPs pronto posi!le.C!rD
.sted puede reportar la error a nuestro servicio al cliente8 al correo electronico Ca
(re-="mailto:servicioalclienteNalcaldia.$o!.ni"D
Servicio al clienteCaD.
CpD%racias por comuncarnos el detall de la error.
CpD
?a pa$ina es: CM=reUuest.$etKeUuest.KI()MDCpD
CpD
?a error es: CM=exception.$et1essa$e()MDCpD
CpD1Ps detalles:C!rD
CM=exception.toStrin$()MD
Cp stBle="-ont/-amilB: 1onospace; -ont/si2e: +,px ;-ont/wei$(t: !old;"D
CM
exception.-illInStack'race();
-or (Stack'race&lement s : exception.$etStack'race())H
out.println(s.toStrin$()""C!rD");
L
MD
CpD
C(rD
Ca (re-="menu.jsp"D1enuCaDC!rD
C!odBD
C(tmlD
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 33 / 46
14Utilizacin de JavaBean
14.1Qu 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.2Declaracin 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 WEB-INF/classes.
Si alguna librera (archivo JAR) es necesario, como por ejemplo el driver JDBC, hay que ponerlo en la subcarpeta
WEB-INF/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
Cjsp:useFeanD 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 (pa$e8 reUuest8 session8 application) y que est puesto a pa$e por defecto.
Luego, se utiliza el Bean usando como si era un objeto Java, con el nombre del objeto que es el del ID.
Ejemplo:
LeerDB.java
packa$e !ean;
import java.sUl.Driver1ana$er;
pu!lic class ?eerDF extends com.solucionjava.d!.ConnectDFH
pu!lic ?eerDF() t(rows &xception H
super();
L
pu!lic ?eerDF(int sinTconexion) H
super(sinTconexion);
L
pu!lic ?eerDF(Strin$ ori$in) t(rows &xception H
super(ori$in);
L
pu!lic ?eerDF(Strin$ ori$in8 Strin$ datasource#ame) t(rows &xception H
super(ori$in8 datasource#ame);
L
protected void initConnectionVaria!les() H
datasource#ame=null;
trB H
de!u$("Fuscando el driver @DFC...");
Class.-or#ame(
"com.mBsUl.jd!c.Driver"
"or$.post$resUl.Driver"
"oracle.jd!c.driver.=racleDriver"
"com.microso-t.sUlserver.jd!c.S[?ServerDriver"
"or$.-ire!irdsUl.jd!c.RFDriver"
).newInstance();
de!u$("...&ncontr\ el driver @DFC");
L catc( (&xception e) H
de!u$("#o pudo encontrar el driver @DFC EEEE");
e.printStack'race(SBstem.out);
return;
L
trB H
de!u$("Connectando a la !ase de datos...");
con = Driver1ana$er.$etConnection(
"jd!c:mBsUl:local(ostcurso]user=cursoGpassword=+<A"
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 34 / 46
"jd!c:post$resUl:local(ostcurso:43A<"8"post$res"8"+<A"
"jd!c:oracle:t(in:N+;<.+Z:.,.+,:+4<+^&"8"curso"8"+<A"
"jd!c:sUlserver:+;<.+Z:.,.+,,:+3AAdata!ase=cursouser=cursopassword=+<A"
"jd!c:-ire!irdsUl:+<I.,.,.+:C:-ire!irddatacurso.$d!"8"curso"8"+<A"
);
de!u$("...Connectado a la !ase de datos");
L catc( (&xception e) H
de!u$("#o pudo conectarse a la !ase de datos EEEE");
e.printStack'race(SBstem.out);
return;
L
L
L
TestBean.jsp:
CMNpa$e content'Bpe="text(tml" MD
CED=C'O*& (tml *.F?IC "/7ACD'D ^)'1? +., 'ransitional&#" "(ttp:www.wA.or$'Kx(tml+D'Dx(tml+/transitional.dtd"D
C(tmlD
C(eadD
Cjsp:useFean id="leerDF" scope="pa$e" class="!ean.?eerDF" D
CtitleD'est FeanCtitleD
C(eadD
C!odB !$color="w(ite"D
C(+D*rue!a de @avaFean8 utili2ado para conectarse a =racleC(+D
C(rD
CcenterDC-orm name="-orm" action="testFean.jsp" met(od="$et"D
Cselect name="pais" onc(an$e="document.-orm.su!mit();"D
CM
Strin$ pais=reUuest.$et*arameter("pais");
i- (pais==null) pais="Rrance";
leerDF.select("select distinct jo!TcountrB -rom emploBee");
w(ile (leerDF.$et#ext())H
MD
Coption value="CM=leerDF.$etStrin$(+) MD" CM=((leerDF.$etStrin$(+).eUuals(pais))]" selected ":"") MDD
CM=leerDF.$etStrin$(+) MDCoptionD
CML MD
CselectD
C-ormDCcenterD
C(<D?ista de empleadosC(<D
Cta!leD
CtrD
Ct(D#om!reCt(DCt(D0pellidoCt(DCt(DSalarioCt(D
CtrD
CM
leerDF.select("select 9 -rom emploBee w(ere jo!TcountrB=_""pais""_");
w(ile (leerDF.$et#ext())
H
out.print("CtdD""leerDF.$etStrin$("-irstTname")""CtdD");
out.print("CtdD""leerDF.$etStrin$("lastTname")""CtdD");
out.print("CtdD""leerDF.$etStrin$("jo!TcountrB")""CtdD");
out.print("CtdD""leerDF.$etStrin$("salarB")"" Cordo!asCtdD");
out.println("CtrD");
L
leerDF.cleanup();
MD
Cta!leD
C(rD
Ca (re-="menu.jsp"D1enuCaD
C!odBD
C(tmlD
14.2.2 <jsp:getProperty>
Saca el valor de una propiedad de un componente JavaBean.
Ejemplo:
Cjsp:useFean id="clock" class="java.util.Date" D
?a -ec(a B (ora local del servidor son:
CulD
CliDDSa: Cjsp:$et*ropertB name="clock" propertB="date" D
CliD1es: Cjsp:$et*ropertB name="clock" propertB="mont(" D
CliD0Yo: Cjsp:$et*ropertB name="clock" propertB="Bear" D
CliD)ora: Cjsp:$et*ropertB name="clock" propertB="(ours" D
CliD1inuto: Cjsp:$et*ropertB name="clock" propertB="minutes" D
CulD
Copyright Cdric Simon, 2005-2011 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 parmetro del formulario enviado
(recibido), y debe existir el mtodo setAtributo para cada atributo.
Ejemplo:
Usuario.java:
packa$e !ean;
import java.io.Seriali2a!le;
pu!lic class .suario implements Seriali2a!le H
private static -inal lon$ serialVersion.ID = +?;
private Strin$ nom!re;
pu!lic Strin$ apellido;
pu!lic void set#om!re(Strin$ nom!re)H t(is.nom!re=nom!re; L
pu!lic void set0pellido(Strin$ apellido)H t(is.apellido=apellido; L
pu!lic Strin$ $et#om!re()H return t(is.nom!re; L
pu!lic Strin$ $et0pellido()H return t(is.apellido; L
L
formuBean.jsp:
C-orm name="-ormulario" action="set*ropertB.jsp" met(od=*=S'D
Cta!leDCtrD
Ct(DSu nom!re:Ct(DCtdDCinput tBpe=text name="nom!re" si2e=A,"DCtdD
CtrDCt(DSu apellido:Ct(DCtdDCinput tBpe=text name="apellido" si2e=A,DCtdD
CtrDCt(DCt(DCtdDC!utton tBpe=su!mitD&ntradaCtdD
CtrDC-ormD
Cta!leD
setProperty.jsp:
Cjsp:useFean id="usuario" class="!ean..suario"D
Cjsp:set*ropertB name="usuario" propertB="9" D
Cjsp:useFeanD
?a in-omaci\n si$uiente -ue $uardada:
CulD
CliD#om!re : Cjsp:$et*ropertB name="usuario" propertB="nom!re" D
CliD0pellido: CM=usuario.$et0pellido()MD
CulD
14.3Scope 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:
*a$e: vlido solamente a dentro de esta pgina
KeUuest: vlido a dentro de la misma consulta (sobrevive a un <jsp:forward>)
Session: vlido durante la sesin del usuario
0pplication: 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, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 36 / 46
15Utilizacin de servlets
15.1Qu es un servlet?
Un servlet es una clase Java que puede ser llamada directamente de desde el navegador 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 primera vez que se llama la pgina,
y luego el servidor solo ejecuta el servlet.
15.2Para que sirve un servlet?
El servlet pude servir para generar pginas HTML, pero es un poco fastidioso hacerlo nosotros, por eso existe el JSP.
El servlet que vamos a crear servirn mejor para tratar el resultado de un formulario y despus enviar el usuario a
otra pgina, o para regresar al navegador archivos binarios usando un flujo, lo que 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 encapsular la lgica, para que sea
transparente para en diseador web. Permiten tambin de crear cdigos que son reutilizables, disminuyendo el
mantenimiento, el tamao de la aplicacin, y el riesgo de error.
15.3Anatoma de un servlet
Un servlet es una clase Java que extiende la clase javax.servlet.(ttp.)ttpServlet. Esta clase est abstracta y debe ser
subclasada para crear un servlet HTTP capaz de servir para el web. Un servlet debe 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 DELETE
init and destroy, para manejar recursos que son guardados por la vida del servlet
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:
pu!lic class #om!reDelServlet extends )ttpServlet H
pu!lic void do%et()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception
H ... L
L
pu!lic void do*ost()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception
H ... L
L
Los mtodos init y destroy solo se utilizan en caso de que el servlet tiene que guardar recursos durante toda su vida.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 37 / 46
15.4Ciclo de vida de un servlet
La vida de un servlet tiene tres momentos importantes: su inicializacin, su utilizacin, 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 (principalmente cuando se apaga o
reinicia el servidor web). Este mtodo permite liberar los recursos que el ha adquirido con el mtodo init().
15.5Creacin de un servlet simple
Un servlet es una clase Java que extiende la clase )ttpServlet, y por la cual se sobre define el mtodo do%et o el mtodo
do*ost. El do*ost es un poco ms lento que el do%et, pero permite tratar formularios de ms de 2000 caracteres lo que el
do%et no puede.
Para que el servlet sea accesible en el sitio, el tiene que ser definido en el archivo de configuracin del sitio web, que es
el archivo web.xml, que se encuentra bajo la carpeta WEB-INF, o utilizar las anotaciones
N7e!Servlet("...") si el servidor soporta la versin 3.0 del API Java Servlet .
Ejemplo:
formuServlet.jsp :
C(tmlD
C(eadD
CtitleD*rue!a de -ormulario enviado a un servletCtitleD
C(eadD
C!odB !$color="QCCDD00"D
C(+DRormulario para ServletC(+D
C(rDCpD
C-orm name="-ormulario" action="servlet*rocesRormulario" met(od=*=S'D
Cta!le !order=,DCtrD
Ct(DSu nom!re:Ct(DCtdDCinput tBpe=text name="nom!re" si2e=A,DCtdD
CtrDCtrD
Ct(DCt(DCtdDC!utton tBpe=su!mitD&nviarCtdD
CtrDCta!leD
C-ormD
C!odBD
C(tmlD
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 38 / 46
ProcesFormulario.java
packa$e servlet;
import javax.servlet.9;
import javax.servlet.annotation.7e!Servlet;
import javax.servlet.(ttp.9;
import java.io.9;
N7e!Servlet("*rocesRormulario")
pu!lic class *rocesRormulario extends )ttpServlet H
99
9
9
private static -inal lon$ serialVersion.ID = +?;
pu!lic void do%et()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception
H
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
out.println("C(tmlD");
out.println("C(eadD");
out.println("CtitleDKesultado del ServletCtitleD");
out.println("C(eadD");
out.println("C!odBD");
out.println("C(+D?le$o con el metodo %&' EEEC(+D");
out.println("C(rD");
out.println("C!odBD");
out.println("C(tmlD");
SBstem.out.println("?le$o por el metodo %&' EEE");
L
pu!lic void do*ost()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception H
trB
H
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
out.println("C(tmlD");
out.println("C(eadD");
out.println("CtitleDKesultado del ServletCtitleD");
out.println("C(eadD");
out.println("C!odBD");
out.println("C(+DSu nom!re es :""reUuest.$et*arameter("nom!re")""C(+D");
out.println("C(rD");
out.println("&ste pa$ina -ue $enerada por un servletE");
out.println("C!odBD");
out.println("C(tmlD");
L
catc( (&xception e) H
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
out.println("t(e error is:""e.toStrin$());
out.-lus(();
SBstem.out.println("CcenterDC-ont si2e=4D &rror in insertin$ t(e dataC-ontDCcenterD");
SBstem.out.println("t(e error is:""e.toStrin$());
SBstem.out.println("&rror is:""e.toStrin$());
L
L
L
15.6Uso de servlet para mostrar imgenes o archivos binarios
Para poder mostrar imgenes o archivos binarios guardados en una base de datos, hay que utilizar un servlet, y el
paquete com.oreilly.servlet. El uso de este paquete es gratuito para uso no comercial. 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 colocada debajo de /WEB-INF/lib, as
como la del driver de la base de datos.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 39 / 46
Ejemplo:
Blob.jsp:
CMNpa$e content'Bpe="text(tml" MD
CED=C'O*& (tml *.F?IC "/7ACD'D ^)'1? +., 'ransitional&#" "(ttp:www.wA.or$'Kx(tml+D'Dx(tml+/transitional.dtd"D
C(tmlD
Clink (re-="curso.css" rel="stBles(eet"D
C(eadD CtitleD?ectura de F?=F_sCtitleDC(eadD
Cjsp:useFean id="readDF" scope="pa$e" class="!ean.?eerDF" D
C!odB !$color="QRRRRRR"D
C(+D?ista de arc(ivos !inarios disponi!les:C(+D
C(rDCim$ src="servletDocKetriever]p(otoTid=+"D
Cta!le class="ta!leA"D
Ct( class="t(<"D0djuntoCt(D
Ct( class="t(<"DCommentarioCt(D CtrD
CM int c(k=,;
readDF.consulta("select p(otoTid8p(otoT-ilename -rom p(otoT$allerB");
w(ile (readDF.$et#ext())
H
c(k"=+;
out.println("CtrD");
out.print("Ctd class=J"td<J"DCa (re-=J"servletDocKetriever]p(otoTid=""
readDF.$etStrin$("p(otoTid")""J" tar$et=J"T!lankJ"D""
readDF.$etStrin$("p(otoT-ilename")""CaD");
out.print("CtdDCtd class=J"tdAJ"D""readDF.$etStrin$("p(otoT-ilename")""CtdD");
out.print("CtrD");
L
i- (c(k==,)
H
out.print("Ctd widt(=J"<4MJ"DCtdDCtd widt(=J"34MJ"D#o (aB adjuntos.CtdD");
out.print("Ctd ali$n=J"centerJ"DCinput tBpe=J"!uttonJ" value=J"1anejo de adjuntosJ"
onClick=J"window.open((re-=_adjuntos.jsp_)J"DCtdDCtrD");
L
readDF.cleanup();
MD
Cta!leD
C!odBD
C(tmlD
Remover.java:
packa$e doc;
import java.io.*rint7riter;
import java.sUl.9;
import javax.servlet.Servlet;
import javax.servlet.Servlet&xception;
import javax.servlet.annotation.7e!Servlet;
import javax.servlet.(ttp.)ttpServlet;
import javax.servlet.(ttp.)ttpServletKeUuest;
import javax.servlet.(ttp.)ttpServletKesponse;
9
9 Creado por: Cedric Simon
9 .so: [uitar un arc(ivo !inario de una !ase de datos.
9 ?icencia : &l uso de este c di$o8 o perte de este c di$o esta permitido
9 para uso no comercial.
9
9 ?os paUuetes de com.oreillB.servlet Uue son importados en este c di$o
9 est n prote$ido por una licencia. 1as detalles el (ttp:servlets.comcoslicense.(tml
9
9
N7e!Servlet("Kemover")
pu!lic class Kemover extends )ttpServlet implements Servlet H
private static -inal lon$ serialVersion.ID = +?;
pu!lic void do*ost()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception H
trB
H
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
java.sUl.Connection con = null;
Class.-or#ame("or$.-ire!irdsUl.jd!c.RFDriver");
con =
Driver1ana$er.$etConnection("jd!c:-ire!irdsUl:+<I.,.,.+:C:-ire!irddatapul$as.$d!"8"pul$as"8"cs");
java.sUl.Statement stmt =
con.createStatement(KesultSet.'O*&TSCK=??TI#S&#SI'IV&8KesultSet.C=#C.KT.*D0'0F?&);
Strin$ UuerB = "delete -rom adjuntos w(ere noTadjunto=""reUuest.$et*arameter("noTadjunto");
stmt.execute(UuerB);
out.println("C(A ali$n=J"centerJ"DC-ont color=$reenD0rc(ivo UuitadoC-ontDC(AD");
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 40 / 46
out.println("Cp ali$n=J"centerJ"DCinput tBpe=J"!uttonJ" onClick=J"sel-.location.(re-=_..adjuntos.jsp]
noTpul$a=""reUuest.$et*arameter("noTpul$a")""_;J" value=J"Ke$ressar al manejo de adjuntosJ"D");
out.println("Gn!sp;Gn!sp;Cinput tBpe=J"!uttonJ" onClick=J"9alert(_&mpuja R4 para re-rescar la lista de
adjuntos en el detalle de la pul$a. Si (as (ec(os cam!ios a la pul$a8 no empuje R4 pero $uarda la pul$a._);9window.close();J"
value=J"Cierar la ventanaJ"DCpD");
con.close();
L
catc( (&xception e)H
print error messa$e
SBstem.out.println("CcenterDC-ont si2e=4D &rror in insertin$ t(e dataC-ontDCcenterD");
SBstem.out.println("t(e error is:""e.toStrin$());
SBstem.out.println("&rror is:""e.toStrin$());
L
L
pu!lic void do%et()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception H
do*ost(reUuest8response);
L
L
DocRetriever.java:
packa$e doc;
import java.io.9;
import javax.servlet.9;
import javax.servlet.annotation.7e!Servlet;
import javax.servlet.(ttp.)ttpServlet;
import javax.servlet.(ttp.)ttpServletKeUuest;
import javax.servlet.(ttp.)ttpServletKesponse;
import !d.?eerDF;
9
9 Creado por: Cedric Simon
9 .so: 'raer un arc(ivo !inario de una !ase de datos.
9 ?icencia : &l uso de este c di$o8 o perte de este c di$o esta permitido
9 para uso no comercial.
9
9 ?os paUuetes de com.oreillB.servlet Uue son importados en este c di$o
9 est n prote$ido por una licencia. 1as detalles el (ttp:servlets.comcoslicense.(tml
9
9
N7e!Servlet("DocKetriever")
pu!lic class Ketriever extends )ttpServlet implements Servlet H
private static -inal lon$ serialVersion.ID = +?;
pu!lic void do%et()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception H
?eerDF readDF = null;
trB H
readDF = new ?eerDF(t(is.$etServlet#ame());
Strin$ sUl = "select 9 -rom p(otoT$allerB w(ere p(otoTid="
" reUuest.$et*arameter("p(otoTid");
readDF.select(sUl);
i- (readDF.$et#ext()) H
int !lo!?en = readDF.$etInt("p(otoT-ilesi2e");
response.setContent'Bpe(readDF.$etStrin$("p(otoT-iletBpe"));
trB H
Servlet=utputStream sos = null;
sos = response.$et=utputStream();
Fu--eredInputStream !is = new Fu--eredInputStream(readDF
.$etFinarBStream("data"));
!Bte !indata56 = new !Bte5!lo!?en6;
int !Btesread = ,;
i- (EreadDF.was#ull()) H
i- ((!Btesread = !is.read(!indata8 ,8 !indata.len$t()) E= /+) H
sos.write(!indata8 ,8 !Btesread);
L else H
sos.write(!is.read());
L
L
!is.close();
L catc( (I=&xception ioe) H
SBstem.err.println("*ro!lem retrievin$ !inarB data+: "
" ioe);
ioe.printStack'race();
L catc( (&xception cn-e) H
SBstem.err.println("*ro!lem retrievin$ !inarB data<: "
" cn-e);
cn-e.printStack'race();
L
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 41 / 46
L
L catc( (&xception e) H
java.io.*rint7riter out = response.$et7riter();
out.print("C(+DC-ont color=redD&KK=K EEEEC-ontDC(+DC(rDC!r D"
" e);
e.printStack'race();
e.printStack'race();
Strin$ stack = "";
Stack'race&lement stack&lm56 = e.$etStack'race();
-or (int cntStack = ,; cntStack C stack&lm.len$t(; cntStack"") H
stack "= stack&lm5cntStack6 " "Jn";
L
trB H
readDF
.lo$&rror(t(is.$etServlet#ame()8 e.toStrin$()8 stack8
((Strin$) reUuest.$et)eaders(".ser/0$ent")
.next&lement())
" " / I*:"
" reUuest.$etKemote0ddr()
" " / )ost:"
" reUuest.$etKemote)ost()
" " / [uerB strin$="
" reUuest.$et[uerBStrin$()8 +);
L catc( (&xception e+) H
e+.printStack'race();
L
L -inallB H
close DF
trB H
i- (readDF E= null)
readDF.cleanup();
readDF = null;
L catc( (&xception e) H
e.printStack'race();
L
L
L
L
Uploader.java:
packa$e doc;
import java.io.9;
import java.sUl.9;
import java.io.I=&xception;
import javax.servlet.9;
import javax.servlet.annotation.7e!Servlet;
import javax.servlet.(ttp.)ttpServlet;
import javax.servlet.(ttp.)ttpServletKeUuest;
import javax.servlet.(ttp.)ttpServletKesponse;
import com.oreillB.servlet.1ultipartKeUuest;
import com.oreillB.servlet.multipart.De-aultRileKename*olicB;
import java.util.&numeration;
9
9 Creado por: Cedric Simon
9 .so: Car$ar un arc(ivo !inario en una !ase de datos.
9 ?icencia : &l uso de este c di$o8 o perte de este c di$o esta permitido
9 para uso no comercial.
9
9 ?os paUuetes de com.oreillB.servlet Uue son importados en este c di$o
9 est n prote$ido por una licencia. 1as detalles el (ttp:servlets.comcoslicense.(tml
9
9
N7e!Servlet(".ploader")
pu!lic class .ploader extends )ttpServlet implements Servlet H
private static -inal lon$ serialVersion.ID = +?;
pu!lic javax.sUl.DataSource ds = null;
pu!lic java.sUl.Connection con = null;
private Strin$ dir#ame;

pu!lic void init(ServletCon-i$ con-i$) t(rows Servlet&xception H
super.init(con-i$);
read t(e uploadDir -rom t(e servlet parameters
dir#ame = con-i$.$etInit*arameter("uploadDir");
i- (dir#ame == null) H
t(row new Servlet&xception("*lease supplB uploadDir parameter");
L
L
pu!lic void do%et()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception
H
L
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 42 / 46
NSuppress7arnin$s("unc(ecked")
pu!lic void do*ost()ttpServletKeUuest reUuest8 )ttpServletKesponse response)
t(rows Servlet&xception8 I=&xception H
SBstem.out.println("Step ,");
trBH
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
Strin$ name="";
Strin$ noTpul$a="";
Strin$ docTcomment="";
Class.-or#ame("or$.-ire!irdsUl.jd!c.RFDriver");
con = Driver1ana$er.$etConnection("jd!c:-ire!irdsUl:+<I.,.,.+:C:-ire!irddatapul$as.$d!"8"pul$as"8"cs");
trB H
1ultipartKeUuest multi =
new 1ultipartKeUuest(reUuest8 dir#ame8 +,9+,<39+,<38
"IS=/::4;/+"8 new De-aultRileKename*olicB());
&numeration params = multi.$et*arameter#ames();
w(ile (params.(as1ore&lements()) H
name = (Strin$)params.next&lement();
Strin$ value = multi.$et*arameter(name);
i- (name.eUuals("docTcomment")) docTcomment =value;
i- (name.eUuals("noTpul$a")) noTpul$a =value;
L
&numeration -iles = multi.$etRile#ames();
w(ile (-iles.(as1ore&lements()) H
name = (Strin$)-iles.next&lement();
Strin$ -ilename = multi.$etRilesBstem#ame(name);
Strin$ tBpe = multi.$etContent'Bpe(name);
Rile - = multi.$etRile(name);
i- (- E= null) H
RileInputStream -is = new RileInputStream(-);
*reparedStatement pstmt = con.prepareStatement("insert into adjuntos (adjunto8nom!re8
docTcomment8tipo8noTpul$a8medida) values(]8]8]8]8]8])");
int i=+;
pstmt.setFinarBStream(i8 -is8(int)-.len$t(()); i"";
pstmt.setStrin$(i8-ilename); i"";
pstmt.setStrin$(i8docTcomment); i"";
pstmt.setStrin$(i8tBpe); i"";
pstmt.setStrin$(i8noTpul$a); i"";
pstmt.setInt(i8(int)-.len$t(()); i"";
pstmt.execute();
-is.close();
-.delete();
out.println("C(A ali$n=J"centerJ"DC-ont color=$reenD0rc(ivo ""-ilename"" $uardado.C-ontDC(AD");
out.println("Cp ali$n=J"centerJ"DCinput tBpe=J"!uttonJ" onClick=J"sel-.location.(re-=_..adjuntos.jsp]
noTpul$a=""noTpul$a""_;J" value=J"Ke$ressar al manejo de adjuntosJ"D");
out.println("Gn!sp;Gn!sp;Cinput tBpe=J"!uttonJ" onClick=J"window.close();J" value=J"Cierar la
ventanaJ"DCpD");
L
else H
t(e -ield did not contain a -ile
out.println("C(A ali$n=J"centerJ"DC-ont color=redD&l arc(ivo " " name " " no -ue $uardado porUue esta!a
V0CI??= EEEC-ontDC(AD");
out.println("Cp ali$n=J"centerJ"DCinput tBpe=J"!uttonJ" onClick=J"sel-.location.(re-=_..adjuntos.jsp]
noTpul$a=""noTpul$a""_;J" value=J"Ke$ressar al manejo de adjuntosJ"D");
out.println("Gn!sp;Gn!sp;Cinput tBpe=J"!uttonJ" onClick=J"window.close();J" value=J"Cierar la
ventanaJ"DCpD");
out.println();
L
L
con.close();
L
catc( (I=&xception l&x) H
con.close();
out.println("error readin$ or savin$ -ile. 'alves el arc(ivo es demasiado $rande (max ;.4 1F).");
out.-lus(();
L
L
catc( (&xception e) H
print error messa$e
*rint7riter out = response.$et7riter();
response.setContent'Bpe("text(tml");
out.println("t(e error is:""e.toStrin$());
out.-lus(();
SBstem.out.println("CcenterDC-ont si2e=4D &rror in insertin$ t(e dataC-ontDCcenterD");
SBstem.out.println("t(e error is:""e.toStrin$());
SBstem.out.println("&rror is:""e.toStrin$());
L
L
L
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 43 / 46
16El modelo MVC
16.1Qu 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 con el manejo de los datos.
16.2MVC 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 resultado visible. Es bueno de utilizarlo
para aplicaciones pequeas o prototipo de aplicaciones grandes, y una vez la estructura 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 servlets y EJB nunca mira el da...
16.3MVC con JSP, JavaBeans y servlet
Este modelo, utilizando el JSP para la presentacin, los servlets para el manejo de la lgica del negocio, y los
JavaBeans para los datos, es una manera poderosa de desarrollar une aplicacin bien estructurada, fcil a mantener,
y lista para evolucionar.
Copyright Cdric Simon, 2005-2011 Versin 2.3 Reproduccin prohibida
Curso de Java Server Pages Nivel bsico Pagina 44 / 46
16.4MVC con JSP, servlet, JavaBeans y EJB
Este modelo, utilizando EJB, se utiliza para aplicaciones empresariales, con servidor J2EE. Es el ms complejo, pero
tambin el ms poderoso.
Los EJB sirven principalmente para el manejo de transaciones y un modelo de componente independiente del tipo de
cliente. Si Usted piensa en desarollar aplicaciones para varios tipos de clientes (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 un cliente. Los EJB de entidad
tienen una identidad nica: todos los clients que quieren utilizar este entidad utilizan la misma instancia de este EJB.
Los EJB de session se usan para manejar la lgica del negocio, y son utilizados solamente 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, 2005-2011 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 columnas (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 regresar 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 implcitos y utilizar las que les parece
interesante.
5) Formulario:
a) Crear un formulario de inscripcin a un concurso (nombre, apellido, email), y despus 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 verificaciones al nivel del servidor (los tres
campos no pueden ser nulo, el email debe contener un ?@?), y en caso de error (campo 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 no 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 (check 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 datos.
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 compras, ver las compras
anteriores, etc...
Copyright Cdric Simon, 2005-2011 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, 2005-2011 Versin 2.3 Reproduccin prohibida

También podría gustarte