Está en la página 1de 29

Curso de

Java Server Pages


Nivel Avanzado
Manual del alumno
<JSP>
Docente: Cdric Simon Versin 1.7

S
o
l
u
c
i
o
n
J
a
v
a
.
c
o
m


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
Curso de JSP Pagina 2 / 29
ndice
ndice .................................................................................................................................................................................... 2
1 Introduccin al curso ......................................................................................................................................................... 4
1.1 Objetivo de este curso ................................................................................................................................................ 4
1.2 Manual del alumno ..................................................................................................................................................... 4
1.3 Ejercicios prcticos .................................................................................................................................................... 4
1.4 Requisitos para atender a este curso ........................................................................................................................ 4
1.5 Soporte despus del curso .......................................................................................................................................... 4
2 Acciones personalizadas .................................................................................................................................................... 5
2.1.1 Introduccin a la etiqueta de extensin ................................................................................................................. 5
2.1.2 Primera accin personalizada ................................................................................................................................ 6
2.2 !cciones sin cuerpo .................................................................................................................................................... "
2.3 !tributos de tipo di#erente a Strin$ % otros parmetros del atributo ................................................................... &
2.4 !cciones con cuerpo ................................................................................................................................................... '
3 Utilizacin de COOKIES ................................................................................................................................................. 12
3.1 ()u son los *OO+,ES- ......................................................................................................................................... 12
3.2 *reaci.n de un *OO+,E ........................................................................................................................................ 12
3.3 Recuperaci.n de in#ormaci.n de un *OO+,E ...................................................................................................... 12
3.4 /orrado de un *OO+,E .......................................................................................................................................... 13
4 e!uest"ispac#er ............................................................................................................................................................ 14
4.1 ()u son los Request0ispac1er- ............................................................................................................................ 14
5 Autenticacin del usuario ................................................................................................................................................ 15
5.1 !utenticaci.n prove2da por el contenedor ............................................................................................................. 15
5.1.1 Mtodos de autenticacin .................................................................................................................................... 15
5.1.2 Control de acceso a los recursos web .................................................................................................................. 15
5.1. !ecuperacin de la in"ormacin del usuario ....................................................................................................... 1#
5.2 !utenticaci.n manejada por la aplicaci.n ............................................................................................................. 1"
$ Ar!uitectura %a&a 'a(in) "irector* Inter+ace ,%'"I- ................................................................................................. 1.
6.1.1 $%emplo de &'(I ................................................................................................................................................. 1)
/ 0ool de cone1iones ........................................................................................................................................................... 22
".1 ()u es un pool de cone3iones- .............................................................................................................................. 24
".2 *reaci.n de un pool de cone3iones ......................................................................................................................... 24
#.2.1 &*oss ConnectionPoolin+ .................................................................................................................................... 2,
#.2.2 -omcatConnectionPoolin+ .................................................................................................................................. 21
. 3o(cat con Apac#e .......................................................................................................................................................... 22
&.1 El servidor !pac1e 5667 ....................................................................................................................................... 22
&.2 7orque usar el servidor !pac1e .............................................................................................................................. 22
&.3 *onectar 6omcat con !pac1e ................................................................................................................................. 22
&.4 *onectar 6omcat " con !pac1e 2.4 ........................................................................................................................ 22
../.1 0rc1i2o 1ttpd.con"3 ............................................................................................................................................. 2
../.2 0rc1i2o ser2er.xml3 ............................................................................................................................................. 2
../. 'ue2o arc1i2o mod4%5.con" ................................................................................................................................ 2
.././ 'ue2o arc1i2o wor5ers.properties ...................................................................................................................... 2
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 3 / 29
&.5 *onectar 6omcat 5.5 o 8.4 con !pac1e 2.2 ............................................................................................................ 23
..5.1 0rc1i2o 1ttpd.con"3 ............................................................................................................................................. 2/
..5.2 0rc1i2o ser2er.xml3 ............................................................................................................................................. 2/
4 Ci+rar con SS5 * uso de 6330S ..................................................................................................................................... 25
'.1 7orque ci#rar ............................................................................................................................................................ 25
).1.1 0rc1i2o 1ttpd.con"3 ............................................................................................................................................. 25
).1.2 0rc1i2o ssl.con"3 ................................................................................................................................................. 25
12 7arcos de tra8a9o * E%: ............................................................................................................................................... 2$
14.1 Marcos de trabajo .................................................................................................................................................. 28
14.2 E9/ ........................................................................................................................................................................... 28
14.3 Marco de trabajo de Soluci.n9ava.com ............................................................................................................... 2"
11 ;"oclet ........................................................................................................................................................................... 2.
12 E9ercicios ........................................................................................................................................................................ 24
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 4 / 29
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 y el JSP es requerida para seguir este curso. La creacin y el manejo de
objetos Java as como el JSP bsico estn considerada cmo asimilado antes de empezar 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-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 5 / 29
2 Acciones personalizadas
Las acciones personalizadas permiten encapsular la lgica y ponerla a disposicin del diseador de
pgina en un formato familiar.
Vamos a ver ejemplos que permiten acceder a la base de datos, codificar URL, incluir contenido
personalizado a las opciones locales del sistema del clientes, etc... utilizando etiquetas personalizadas.
Las acciones personalizadas parecen mucho a los JavaBeans que veremos ms tarde, pero a la diferencia
de ellos, la accin personalizada tiene conocimiento del ambiente en el cual esta utilizada.
Como el JavaBean, la accin personalizada est contenida en una clase Java.
2.1.1 Introduccin a la etiqueta de extensin
La accin personalizada, que es en realidad una clase de manejo de etiqueta para una accin
personalizada, es bsicamente una clase Java con mtodo permitiendo de manejar sus propiedades,
correspondiendo a los atributos de la accin personalizada. La clase de manejo de etiqueta tiene que
implementar uno o dos interfaces definidos en las especificaciones del JSP.
Todas las clases e interfaces de acciones personalizadas deben de implementar un manejo de etiqueta
definido en el paquete javax.servlet.jsp.tagext. Los dos interfaces primarios se llaman Tag y BodyTag. El
interfaz Tag define los mtodos que necesitamos para cualquier accin. El interfaz BodyTag extiende el
interfaz Tag y adjunta mtodos utilizadas para acceder al cuerpo de un elemento de accin.
Para facilitar el desarrollo de manejo de etiquetas, dos clases de soporte han sido definidas por el API
TagSupport y BodyTagSupport. Estas clases pro!een una implementacin por defecto para los mtodos del
interfaz correspondiente.
Una librera de etiquetas es una coleccin de acciones personalizadas. Al lado de las clases de manejo de
etiquetas, la librera de etiqueta debe contener un descriptor de librera de etiquetas (Tag Library
Descriptor, o TLD). Este TLD es un archivo XML que traduce los nombres de acciones personalizadas a las
clase de manejo de etiquetas que le corresponde, y describe los atributos soportados por cada accin
personalizada. Por facilidad, se pueden meter las clases y el TLD en un archivo JAR, para facilitar su
instalacin.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 6 / 29
2.1.2 Primera accin personalizada
Vamos a crear nuestra primera accin personalizada, con el entorno JBoss ID.
Primero, creamos una nueva clase de manejo de etiqueta. Por eso, hacemos un clic derecho sobre la
carpeta curso, y elegimos New...Other, y debajo de JBoss-IDE...Webcontent, el JSP Tag Handler.
Lo creamos en el paquete tag, con el nombre HolaTag y el contenido siguiente:
pac!age tag"
i#port javax.servlet.jsp.tagext.TagSupport"
i#port java.io.$"
public class %olaTag exte&ds TagSupport '
private Stri&g &o#bre ( )Mu&do)"
public void set*o#bre+Stri&g #i*o#bre,'
t-is.&o#bre(#i*o#bre"
.
public i&t doStartTag+,'
Syste#.out.pri&tl&+)%ola/ )0t-is.&o#bre,"
retur& S1I23B4D5"
. public i&t do&dTag+,'
try'
page6o&text.get4ut+,.pri&tl&+)%ola )0t-is.&o#bre,"
Syste#.out.pri&tl&+)%ola7 )0t-is.&o#bre,"
.
catc- +I4xceptio& e, '. 88 Ig&oralo
retur& 9AL32A:"
.
.
Luego, debajo de la carpeta WEB-INF creamos una nueva carpeta tlds. Y a dentro, creamos un nuevo
Tag Library Descriptor (debajo JBoss-IDE...Descriptor), que llamamos miTagLib.tld.
Editamos el contenido de miTagLib y lo cambiamos por:
;<x#l versio&()/.=) e&codi&g()>T?@A)<B
;CD46T52 taglib
2>BLI6 )@88Su& Microsyste#sD I&c.88DTD JS2 Tag Library /.788*)
)-ttpE88java.su&.co#8dtd8Feb@jsptaglibrary3/37.dtd)B
;taglibB
;tlib@versio&B/.7;8tlib@versio&B
;jsp@versio&B7.=;8jsp@versio&B
;s-ort@&a#eB#iTest;8s-ort@&a#eB
;descriptio&BtiGueta de prueba;8descriptio&B
;tagB
;&a#eB-ola;8&a#eB
;tag@classBtag.%olaTag;8tag@classB
;body@co&te&tBe#pty;8body@co&te&tB
;attributeB
;&a#eB&o#bre;8&a#eB
;8attributeB
;8tagB
;8taglibB
Por fin, creamos tagSimple.jsp para que utiliza nuestra accin personalizada:
;HI taglib uri()8JB@I*?8tlds8#iTagLib.tld) preKix()#iTest) HB
;-t#lB
;-eadB
;titleB2rueba de Taglig;8titleB
;8-eadB
;body bgcolor()L??????)B
;-/B;#iTestE-ola &o#bre()6edric) 8B;8-/B
;8bodyB
;8-t#lB
Y miramos el resultado en http://localhost:8080/curso/tagSimple.jsp
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 7 / 29
2.2 Acciones sin cuerpo
Para llamar a una accin sin cuerpo, se utiliza una clase que extiende la clase TagSupport, y la etiqueta
siguiente: ;preKijoE&o#bre3accio& atributo/(Mvalor/M atributo7(Mvalor7M ... 8B
El prefijo es el prefijo declarado en la directiva de pgina Taglib.
El nombre de la accin corresponde al nombre de la accin declarado en la librera, y que refiere a una
clase Java.
Los atributos son valores que se pueden atribuir a variables de la clase, utilizando los mtodos
setAtributo/ +Nvalor/M,D setAtributo7 +Nvalor7M,, etc... definidas en la clase.
La secuencia de ejecucin es la siguiente:
;preKijoE&o#bre3accio&
atributo/(Mvalor/M @@@@@@@@@@ setAtributo/+Nvalor/M,
atributo7(Mvalor7M @@@@@@@@@@ setAtributo7+Nvalor7M,
8B @@@@@@@@@@ doStartTag+, 0 do&dTag+,
Se puede tambin definir as:
;preKijoE&o#bre3accio&
atributo/(Mvalor/M @@@@@@@@@@ setAtributo/+Nvalor/M,
atributo7(Mvalor7M @@@@@@@@@@ setAtributo7+Nvalor7M,
B @@@@@@@@@@ doStartTag+,
Mi cuerpo de etiGueta
;8preKijoE&o#bre3accio&B @@@@@@@@@@ do&dTag+,
En este ejemplo, como estamos utilizando una clase extendiendo TagSupport, por defecto el mtodo
doStarTag+, regresa S1I23B4D5, que significa que no utiliza el cuerpo de la etiqueta (aqu Mi cuerpo de
etiqueta). Las otras valores para el retur& son 9AL3B4D53I*6L>D y 9AL3B4D53B>??RD.
Afuera de los mtodos de inicializacin de atributos (setAtributo/,...), de doStarttag+, y do&dTag+,,
existen por lo menos dos otros mtodos importante: public void set2age6o&text+2age6o&text page6o&text,
y public void release+,. El mtodo set2age6o&text permite de acceder a la consulta y respuesta de la
pgina, as como a las variables JSP de la pgina.
Ejemplo:
pac!age tag"
i#port javax.servlet.jsp.tagext.TagSupport"
i#port javax.servlet.jsp.$"
i#port java.io.$"
public class TagSi&6uerpo exte&ds TagSupport '
private Stri&g co&text ( )Mu&do)"
protected 2age6o&text page6o&text"
public void set2age6o&text+2age6o&text page6o&text,'
t-is.page6o&text(page6o&text"
co&text(+Stri&g, page6o&text.getReGuest+,.get2ara#eter+)test),"
.
public i&t do&dTag+,'
try'
page6o&text.get4ut+,.pri&tl&+)2arO#etro ( )0t-is.co&text,"
Syste#.out.pri&tl&+)2arO#etro ( )0t-is.co&text,"
.
catc- +I4xceptio& e, '. 88 Ig&oralo
retur& 9AL32A:".
.
Adjuntar en miTagLib.tld antes </taglib>:
;tagB
;&a#eBsi&6uerpo;8&a#eB
;tag@classB tag.TagSi&6uerpo;8tag@classB
;8tagB
tagSinCuerpo.jsp:
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 8 / 29
;HI taglib uri()8JB@I*?8tlds8#iTagLib.tld) preKix()#iTest) HB
;-t#lB
;-eadB
;titleB2rueba de Taglig;8titleB
;8-eadB
;body bgcolor()L??????)B
;-/B;#iTestEsi&6uerpo 8B;8-/B
;8bodyB
;8-t#lB
Llamando a http://localhost:8080/curso/tagSinCuerpo.jsp?test=prueba produce en la consola y la pgina
JSP: 2arO#etro ( prueba
Para ahorrar la memoria, se debera de implementar el mtodo public void release+,D para quitar todas
las referencias a objetos que fueron puestas: Por eso, se les asigna el valor nulo y se llama al mtodo
release() del objeto mayor (super). Este mtodo ser llamada cuando el manejo de etiquetas no ser ms
necesario (por ejemplo, al recargo del contexto).
Ejemplo:
public void release+,'
&o#bre(&ull"
co&text(&ull"
page6o&text(&ull"
super.release+,"
Syste#.out.pri&tl&+)Liberado),"
.
2.3 Atributos de tipo diferente a String y otros parmetros
del atributo
Adems del nombre del parmetro, se puede tambin definir si el parmetro es requerido o no (por
defecto no lo es), si permite un valor a evaluar en tiempo real (= scriplet) o no (por defecto no lo es), y el
tipo de datos que accepta (por defecto es java.lang.String.
Ejemplo de un parmetro llamado precio, que es requerido (no se puede usar la accin sin definirlo),
permite un valor dinmica, y es de tipo entero.
;attributeB
;&a#eBprecio;8&a#eB
;reGuiredBKalse;8reGuiredB
;rtexprvalueBtrue;8rtexprvalueB
;typeBjava.la&g.I&teger;8typeB
;8attributeB
je#ploE
pac!age tag"
i#port javax.servlet.jsp.tagext.TagSupport"
i#port java.io.$"
public class TagSu#a exte&ds TagSupport '
private static Ki&al lo&g serial9ersio&>ID ( /L"
private I&teger &u#ero/ ( /"
private I&teger &u#ero7 ( 7"
public void set*u#ero/+I&teger &u#ero/,'
t-is.&u#ero/(&u#ero/"
.
public void set*u#ero7+I&teger &u#ero7,'
t-is.&u#ero7(&u#ero7"
.
I4verride
public i&t do&dTag+,'
try'
i&t resultado(="
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 9 / 29
resultado(&u#ero/0&u#ero7"
Syste#.out.pri&tl&+resultado,"
page6o&text.get4ut+,.pri&tl&+)Resultado )0resultado,"
.
catc- +I4xceptio& e, '. 88 Ig&oralo
retur& 9AL32A:"
.
public I&teger get*u#ero/+, '
retur& &u#ero/"
.
public I&teger get*u#ero7+, '
retur& &u#ero7"
.
.
Modificacin en el TLD:
;tagB
;&a#eBsu#a;8&a#eB
;tag@classB tag.TagSu#a;8tag@classB
;attributeB
;&a#eB&u#ero/;8&a#eB
;reGuiredBtrue;8reGuiredB
;rtexprvalueBtrue;8rtexprvalueB
;typeBjava.la&g.I&teger;8typeB
;8attributeB
;attributeB
;&a#eB&u#ero7;8&a#eB
;reGuiredBtrue;8reGuiredB
;rtexprvalueBtrue;8rtexprvalueB
;typeBjava.la&g.I&teger;8typeB
;8attributeB
;8tagB
tagSuma.jsp:
;HI taglib uri()8JB@I*?8tlds8#iTagLib.tld) preKix()#iTest) HB
;-t#lB
;-eadB
;titleB2rueba de Taglig;8titleB
;8-eadB
;body bgcolor()L??????)B
;-/B;#iTestEsu#a &u#ero/()/) &u#ero7()P) 8B;8-/B
;8bodyB
;8-t#lB
2.4 Acciones con cuerpo
Para llamar a una accin con cuerpo, se utiliza una clase que extiende la clase BodyTagSupport, y la
etiqueta siguiente: ;preKijoE&o#bre3accio& atributo/(Mvalor/M atributo7(Mvalor7M ... B
El uso y el funcionamiento es parecido a el de las acciones sin cuerpo, con tres mtodos ms:
setBody6o&te&t+,D doI&itBody+,D e doAKterBody+,.
Con el cuerpo, se debe utilizar una etiqueta de inicio y una de fin.
La secuencia de ejecucin es la siguiente:
;preKijoE&o#bre3accio&
atributo/(Mvalor/M @@@@@@@@@@ setAtributo/+Nvalor/M,
atributo7(Mvalor7M @@@@@@@@@@ setAtributo7+Nvalor7M,
B @@@@@@@@@@ doStartTag+,
@@@@@@@@@@ setBody6o&te&t+, 0 doI&itBody+,
Mi cuerpo de etiGueta
@@@@@@@@@@ doAKterBody+,
;8preKijoE&o#bre3accio&B @@@@@@@@@@ do&dTag+,
En este ejemplo, como estamos utilizando una clase extendiendo BodyTagSupport, por defecto el mtodo
doStarTag+,sobre escribe el mtodo de TagSupport para que regresa 9AL3B4D53I*6L>D, lo que significa que
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 10 / 29
se utiliza el cuerpo de la etiqueta (aqu Mi cuerpo de etiqueta). Las otras valores para el retur& son
S1I23B4D5 y 9AL3B4D53B>??RD.
El mtodo setBody6o&te&t+, guarda solamente el contenido del cuerpo en una variable.
Ejemplo:
protected Body6o&te&t body6o&te&t"
...
public void setBody6o&te&t+Body6o&te&t body, '
t-is.body6o&te&t ( body".
El mtodo doI&itBody+, se deja normalmente vaca. public void doI&itBody+ , t-roFs Jspxceptio& '.
El mtodo doAKterBody+, es el que utilizamos para manejar el contenido del cuerpo, si es necesario.
Si no se necesita una bucle, se utiliza retur& S1I23B4D5, si no retur& 9AL3B4D53A:AI*. Cuidado que el
cdigo debe siempre tener una posibilidad de llegar al S1I23B4D5, si no, entrara en una bucle infinita.
Ejemplo:
Clase CifraHTML:
pac!age tag"
i#port javax.servlet.jsp.tagext.BodyTagSupport"
i#port java.io.$"
i#port javax.servlet.jsp.$"
i#port javax.servlet.jsp.tagext.$"
public class 6iKra%TML exte&ds BodyTagSupport '
static Ki&al lo&g serial9ersio&>ID (7"
i&t cou&t (="
Stri&g output())"
public i&t doStartTag+,'
cou&t (="
output())"
retur& 9AL3B4D53B>??RD"
.
public i&t doAKterBody+ , t-roFs Jspxceptio& '
Body6o&te&t bc ( getBody6o&te&t+,"
JspJriter out ( get2revious4ut+,"
cou&t00"
iK +cou&tBQ, '
try '
output0();pBRo&da )0cou&t0);8pB)"
out.Frite+output,"
retur& S1I23B4D5"
.
catc- +I4xceptio& e, 'retur& S1I23B4D5". 88 Ig&ore
. else '
iK +cou&t((/,'
Stri&g #i6uerpo(bc.getStri&g+,"
#i6uerpo(#i6uerpo.replaceAll+)R)D)Ra#p"),"
#i6uerpo(#i6uerpo.replaceAll+);)D)Rlt"),"
#i6uerpo(#i6uerpo.replaceAll+)B)D)Rgt"),"
#i6uerpo(#i6uerpo.replaceAll+)S))D)RLQT"),"
#i6uerpo(#i6uerpo.replaceAll+)U)D)RLQV"),"
output0(#i6uerpo0);pBRo&da )0cou&t0);8pB)"
. else output0();pBRo&da )0cou&t0);8pB)"
retur& 9AL3B4D53A:AI* "
.
.
.
#iTagLib.tldE
;tagB
;&a#eB6iKra%TML;8&a#eB
;tag@classB tag.6iKra%TML;8tag@classB
;8tagB
tag6iKra%TML.jsp
;HI taglib uri()8JB@I*?8tlds8#iTagLib.tld) preKix()#iTest) HB
;-t#lB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 11 / 29
;-eadB
;titleB2rueba de Taglig;8titleB
;8-eadB
;body bgcolor()L??????)B
;-/B;#iTestE6iKra%TMLB
%ola )#is Gueridos) ;alu#&osB R Ua#igosU.
;8#iTestE6iKra%TMLB;8-/B
;-rB
;8bodyB
;8-t#lB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 12 / 29
3 Utilizacin de COOKIES
3.1 Qu son los COOKIES?
Los COOKIES son variable que se guardan en pequeos archivos de texto en la computadora del cliente
y que permiten guardar ciertas informaciones el cliente. Eso permite por ejemplo guardar el nombre del
cliente para recuperarlo la prxima vez que el cliente se conecta.
Al contrario de la variable de sesin que se borran al terminar la sesin, se puede definir el tiempo que el
COOKIE esta vlido. Por defecto, est valido solamente por la sesin corriente (como las variables de
sesin), pero se puede cambiar la valor de su tiempo de vencimiento para poder recuperarlo ms tarde,
en la prxima conexin.
3.2 Creacin de un COOKIE
El cdigo de creacin de un COOKIE tiene que ir de primero, antes la etiqueta ;%TMLB y de cualquier otro
cdigo JSP (directivas,...).
Despus de haber creado el COOKIE, hay que declarar por las pginas de cual carpeta el COOKIE est
disponible. Tambin se puede declarar por cual dominio est disponible.
Por fin hay que enviar el COOKIE a la computadora del cliente.
Una vez creado, el COOKIE puede ser ledo por las pginas JSP. Todos los COOKIES de un mismo sitio
web estn guardados juntos en un archivo texto en el cliente.
La sintaxis de creacin de un COOKIE es la siguiente:
;H
6oo!ie &o#breDeMi6oo!ie ( &eF 6oo!ie+)&o#breDeMi9ariable)D)valorDeMi9ariable),"
&o#breDeMi6oo!ie.set2at-+)8cursoAva&Wado),"
&o#breDeMi6oo!ie.setMaxAge+QX==," 88 u&a -oraD o QX== segu&dos
respo&se.add6oo!ie+&o#breDeMi6oo!ie,"
HB
3.3 Recuperacin de informacin de un COOKIE
Para poder leer un COOKIE, este debe existir. Para leerlo, se utiliza el mtodo get6oo!ies+, que regresa
un arreglo de objeto 6oo!ie. Una vez recuperada, se puede sacar el nombre de cada variable del COOKIE
y su valor con los mtodos get*a#e+, y get9alue+,. Hay que recorrer todo los COOKIES del arreglo para
buscar el que nos interesa.
Por defecto el arreglo de COOKIES siempre tiene el COOKIE llamado JSESSIONID con el valor de la
sesin. As que el arreglo siempre tiene por lo menos un valor.
Ejemplo:
;H
6oo!ie YZ #i6oo!ie ( reGuest.get6oo!ies+,"
Stri&g &o#bre>suario())D
Kor +i&t x(="x;#i6oo!ie.le&gt-"x00,
'
out.pri&t+#i6oo!ieYxZ.get*a#e+,0) tie&e el valor siguie&teE )0 #i6oo!ieYxZ.get9alue+,0);brB),"
88 Buscar 6oo!ie &o#bre>suario
iK +#i6oo!ieYxZ.get*a#e+,.eGuals+)&o#bre>suario), &o#bre>suario( #i6oo!ieYxZ.get9alue+,"
.
HB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 13 / 29
3.4 Borrado de un COOKIE
Para borrar un COOKIE, hay que seguir la misma sintaxis que para crearlo, solo que el valor del
setMaxAge igual a 0, as que el COOKIE expiar directamente.
La sintaxis de borrado de un COOKIE es la siguiente:
;H
6oo!ie &o#breDeMi6oo!ie ( &eF 6oo!ie+)&o#breDeMi9ariable)D)),"
&o#breDeMi6oo!ie.set2at-+)8cursoAva&Wado),"
&o#breDeMi6oo!ie.setMaxAge+=," 88 se ve&ce a-ora
respo&se.add6oo!ie+&o#breDeMi6oo!ie,"
HB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 14 / 29
4 RequestDispacher
4.1 Qu son los RequestDispacher?
El objecto RequestDispacher permite incluir dentro de un servlet el contenido que viene de otra pgina o
cdigo, o reenviar la consulta a otra pgina.
Esto es parecido al tag <jsp:include /> o un <jsp:forward />.
Ejemplo:
...
protected ReGuestDispatc-er rd ( &ull"
...
Servlet6o&text co&text ( t-is.getServlet6o&text+,"
rd ( co&text.getReGuestDispatc-er+)8logi&.jsp),"
rd.i&clude+reGuestD respo&se,"
rd ( co&text.getReGuestDispatc-er+)8test.txt),"
rd.i&clude+reGuestD respo&se,"
...
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 15 / 29
5 Autenticacin del usuario
5.1 Autenticacin proveda por el contenedor
En contenedor en el cual se ejecuta la pgina JSP provee un mecanismo de autenticacin integrado. Le
implementacin puede variar de un tipo de servidor a otro. Este mecanismo de autenticacin esta bien
probado y fiable, as que es un mecanismo de primera eleccin.
5.1.1 Mtodos de autenticacin
Existen cuarto tipos de autenticacin: autenticacin HTTP bsica, 'digest', autenticacin cliente HTTPS,
y autenticacin basado en un formulario.
5.1.1.1 Autenticacin HTTP bsica
Este tipo de autenticacin es muy simple, pero no muy seguro, porque utiliza el cifrado Base64, la cual es
conocida y se puede descifrar sin muchos esfuerzos por el que intercepta los paquetes de comunicacin.
5.1.1.2 Autenticacin HTTP 'digest'
Este medio de autenticacin es un poco ms complicado, pero ms seguro. El problema es que no todos
los navegadores soportan este tipo de autenticacin.
5.1.1.3 Autenticacin de cliente HTTPS
Este mtodo de autenticacin es el ms seguro, porque utiliza certificado de clave publica, y una clave
especifica por cada cliente, vlida mientras el cliente queda conectado.
5.1.1.4 Autenticacin por formulario
Este mtodo le permite personalizar la pgina de entrada. Pero como los datos estn enviados en texto
claro, se debera de mezclar con un cifrado SSL.
Por utilizar este mtodo, se requiere dos parmetros: j3user&a#e y j3passFord. La accin de"e ser
j3security3c-ec!.
Ejemplo:
;Kor# #et-od()24ST) actio&()j3security3c-ec!)B
;i&put type()text) &a#e()j3user&a#e)B
;i&put type()passFord) &a#e()j3passFord)B
;8Kor#B
5.1.2 Control de acceso a los recursos web
Para controlar el acceso a los recursos, se necesita por lo menos dos cosas: tener usuarios definidos, y
informacin registrada sobre el control del acceso a los recursos.
5.1.2.1 Definicin de usuarios
La definicin de usuario depende del servidor utilizado. Ciertos como IIS pueden utilizar los usuarios del
sistema, otros acceden a un servidor externo LDAP. Para Tomcat, los usuarios estn definidos en el
archivo to#cat@users.x#l que se encuentra debajo de la carpeta [T4M6AT3BAS8co&K. La lista de usuarios es
para todos los sitios del servidor.
Se pueden definir usuarios, y asignarlos a diferentes grupos.
Ejemplo:
;to#cat@usersB
;user &a#e()paula) passFord()boss) roles()ad#i&) 8B
;user &a#e()-a&s) passFord()secret) roles()user) 8B
;8to#cat@usersB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 16 / 29
5.1.2.2 Definicin de derechos de accesos
La definicin de usuario depende del servidor utilizado. Para Tomcat, los usuarios estn definidos en el
archivo web.xml que se encuentra debajo de la carpeta WEB-INF del sitio web.
Ejemplo:
;security@co&strai&tB
;Feb@resource@collectio&B
;Feb@resource@&a#eBad#i&;8Feb@resource@&a#eB
;url@patter&B8seguridad8$;8url@patter&B
;8Feb@resource@collectio&B
;aut-@co&strai&tB
;role@&a#eBad#i&;8role@&a#eB
;8aut-@co&strai&tB
;8security@co&strai&tB
;logi&@co&KigB
;aut-@#et-odB?4RM;8aut-@#et-odB
;real#@&a#eB2rueba curso JS2;8real#@&a#eB
;Kor#@logi&@co&KigB
;Kor#@logi&@pageB8security6-ec!.jsp;8Kor#@logi&@pageB
;Kor#@error@pageB8i&dex.jsp;8Kor#@error@pageB
;8Kor#@logi&@co&KigB
;8logi&@co&KigB
;security@roleB
;descriptio&BAd#i&istrador;8descriptio&B
;role@&a#eBad#i&;8role@&a#eB
;8security@roleB
El elemento ;security@co&strai&tB contiene un elemento ;Feb@resource@collectio&B que define los
recursos a proteger, y un elemento ;aut-@co&strai&tB que define quien tiene derecho de acceder al
recurso protegido.
A dentro del elemento ;Feb@resource@collectio&B est definido el patrn de URL para los recursos
protegidos, especificados en el elemento ;url@patter&B. As la carpeta con todas las pginas de registro
/seguridad/*.
El elemento ;role@&a#eB a dentro del elemento ;aut-@co&strai&tB menciona que solamente los usuarios
del grupo admin. tienen derecho de acceder a este recurso protegido.
Usted puede tambin definir el tipo de autenticacin a utilizar y un nombre asociado a las partes
protegidas de la aplicacin, conocidas como realm, con el elemento ;logi&@co&KigB. El elemento ;aut-@
#et-odB acepta los valores siguientes: BASIC, DIGEST, FORM, y CLIENT-CERT, que corresponden a los
mtodos vistas anteriormente. Cualquier texto puede ser utilizado para el valor del elemento ;real#@
&a#eB. E texto est enseado como parte del mensaje en la ventana de dialogo que se abre para pedir el
nombre y clave del usuario.
Si utilizas la autenticacin por formulario, hay que mencionar los nombres del formulario de
autenticacin y de la pgina de error en el elemento ;logi&@co&KigB.
Ejemplo:
;logi&@co&KigB
;aut-@#et-odB?4RM;8aut-@#et-odB
;real#@&a#eB2rueba curso JS2;8real#@&a#eB
;Kor#@logi&@co&KigB
;Kor#@logi&@pageB8security6-ec!.jsp;8Kor#@logi&@pageB
;Kor#@error@pageB8security6-ec!.jsp<estado(*41;8Kor#@error@pageB
;8Kor#@logi&@co&KigB
;8logi&@co&KigB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 17 / 29
5.1.3 Recuperacin de la informacin del usuario
A dentro de los scriptlets, se pueden recuperar el nombre de usuario y el grupo del usuario corriente
(autenticado) con el objeto reGuest y los mtodos reGuest.getRe#ote>ser+ , y
reGuest.is>serI&Role+)ad#i&),.
5.2 Autenticacin manejada por la aplicacin
Si la autenticacin por el mecanismo del contenedor debe ser la primera eleccin, este mecanismo tiene
sus limitaciones al nivel de dinamismo. El manejo de usuario es a veces muy esttico porque guardado
en un archivo texto (web.xml) en el servidor, y no en una base de datos.
Por esta razn, se puede utilizar un mecanismo de seguridad manejado por la aplicacin, que ser, por
ejemplo, ligado a una base de datos de usuarios.
La implementacin de un mecanismo de autenticacin de usuario y control de recursos necesita lo
siguiente:
1. Registro de usuario
2. Pgina de autenticacin
3. Mecanismo de autenticacin, llamado por la pgina de autenticacin
4. Informacin del usuario guardada al nivel de la sesin, como prueba de que el usuario est
autenticado
5. Verificacin de la validez de la informacin de sesin en cada pgina con acceso restringido.
Al momento que se verifica su nombre de usuario y su nombre, se le asigna una o varias variables de
sesin. En la pginas protegidas, se verifica si la variable de sesin existe (no es nulo) para este usuario.
Si es nulo, es que el usuario probo de llagar a la pgina con un URL directo, sin autenticarse.
Tambin, si el nombre del usuario es una de las variables de sesin, se puede recuperar de desde
cualquiera pgina JSP despus de la autenticacin.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 18 / 29
6 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.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 19 / 29
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.
6.1.1 Ejemplo de JNDI
...
2roperties e&v ( &eF 2roperties+,"
88 DeKi&ir las propiededes y ubicacio& de busGueda de *o#bres J*DI.
e&v.set2roperty+)java.&a#i&g.Kactory.i&itial)D )org.j&p.i&terKaces.*a#i&g6o&text?actory),"
e&v.set2roperty+)java.&a#i&g.provider.url)D )local-ostE/=VV),"
e&v.set2roperty+)java.&a#i&g.Kactory.url.p!gs)D )org.jboss.&a#i&g),"
try '
6o&text i&itial ( &eF I&itial6o&text+e&v,"
4bject objreK ( i&itial.loo!up+)ejb8#ployee6M2),"
#ployee6M2%o#e -o#e (
+#ployee6M2%o#e,2ortableRe#ote4bject.&arroF+objreKD
#ployee6M2%o#e.class,"
...
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 20 / 29
7 Pool de conexiones
7.1 Qu es un pool de conexiones?
Un pool de conexiones es un conjunto de conexiones que quedqn abiertas y que son compartidas segn
las necesidades.
El uso de pool de conexiones permite de mejorar las performancias de la aplicacin ahorando el tiempo
de conexin a la base de datos de cada conexin.
Con los pools de conexiones, se puede definir cuantas conexiones deben quedar abiertas de manera
permanente (minimo de conexiones), as como el mximo de conexiones permitidas.
El pool de conexiones reparte las encuestas a la base de datos segn las conexiones disponibles. Si el
mximo de conexiones est llegado, se creara una fila de encuestas, esperando que se libera una
conexin.
7.2 Creacin de un pool de conexiones
Los pools de conexiones se crean en el archivo de configuracin del servidor. Hay que reanudar el
servidor (servicio) para que las modificciones sean efectivas.
7.2.1 JBoss ConnectionPooling
Ejemplo con CursoDS.XML:
;<x#l versio&()/.=) e&codi&g()>T?@A)<B
;C@@ (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( @@B
;C@@ *eF 6o&&ectio&Ma&ager setup Kor Kirebird dbs usi&g jca@jdbc xa driver@@B
;C@@ Build j#x@api +build8build.s- all, a&d vieF Kor co&Kig docu#e&tatio& @@B
;C@@ (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( @@B
;co&&ectio&@KactoriesB
;C@@?BMa&ager ca& be used to create a&d drop databases.
Drop is especially useKul duri&g testi&gD si&ce it
assures a clea& start &ext ti#e. @@B
;#bea& code()org.KirebirdsGl.#a&age#e&t.?BMa&ager) &a#e()jboss.jcaEservice(?irebirdMa&ager)B
;attribute &a#e()?ile*a#e)B8?irebird8data86>RS4.?DB;8attributeB
;attribute &a#e()>ser*a#e)Bsysdba;8attributeB
;attribute &a#e()2assFord)B#aster!ey;8attributeB
;attribute &a#e()6reate4&Start)BKalse;8attributeB
;attribute &a#e()Drop4&Stop)BKalse;8attributeB
;8#bea&B
;tx@co&&ectio&@KactoryB
;j&di@&a#eB6ursoDS;8j&di@&a#eB
;xa@tra&sactio&8B

;rar@&a#eBKirebirdsGl.rar;8rar@&a#eB
;co&&ectio&@deKi&itio&Bjavax.sGl.DataSource;8co&&ectio&@deKi&itio&B
;co&Kig@property &a#e()Database)
type()java.la&g.Stri&g)Blocal-ost8Q=P=E8?irebird8data86>RS4.?DB;8co&Kig@propertyB
;user@&a#eBsysdba;8user@&a#eB
;passFordB#aster!ey;8passFordB
;C@@additio&al properties. o&ly use o&e Fay oK setti&g tx isolatio&D please
;co&Kig@property &a#e()Tra&sactio&Isolatio&)B;8co&Kig@propertyB
;co&Kig@property &a#e()Tra&sactio&Isolatio&*a#e)BTRA*SA6TI4*3RAD364MMITTD;8co&Kig@propertyB
;co&Kig@property &a#e()BlobBuKKerLe&gt-)B;8co&Kig@propertyB
;co&Kig@property &a#e()&codi&g)B>*I64D3?SS;8co&Kig@propertyB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 21 / 29
@@B
;#i&@pool@siWeB=;8#i&@pool@siWeB
;C@@ sGl to call F-e& co&&ectio& is created
;&eF@co&&ectio&@sGlBso#e arbitrary sGl;8&eF@co&&ectio&@sGlB
@@B
;C@@ sGl to call o& a& existi&g pooled co&&ectio& F-e& it is obtai&ed Kro# pool
;c-ec!@valid@co&&ectio&@sGlBso#e arbitrary sGl;8c-ec!@valid@co&&ectio&@sGlB
@@B
;C@@ correspo&di&g type@#appi&g i& t-e sta&dardjbossc#p@jdbc.x#l +optio&al, @@B
;#etadataB
;type@#appi&gB?irebird;8type@#appi&gB
;8#etadataB
;8tx@co&&ectio&@KactoryB
;8co&&ectio&@KactoriesB
7.2.2 TomcatConnectionPooling
Modificaciones en el archivo server.x#l:
;6o&text pat-()8dbTest) docBase()dbTest)
debug()P) reloadable()true) cross6o&text()true)B
;Logger class*a#e()org.apac-e.catali&a.logger.?ileLogger)
preKix()dbTest.) suKKix().txt) ti#esta#p()true)8B
;Resource &a#e()jdbc8dbTest) aut-()6o&tai&er) type()org.KirebirdsGl.pool.?BJrappi&gDataSource)8B
;Resource2ara#s &a#e()jdbc8dbTest)B
;para#eterB
;&a#eBKactory;8&a#eB
;valueBorg.KirebirdsGl.pool.?BJrappi&gDataSource;8valueB
;8para#eterB
;para#eterB
;&a#eBuser*a#e;8&a#eB
;valueBS5SDBA;8valueB
;8para#eterB
;para#eterB
;&a#eBpassFord;8&a#eB
;valueB#aster!ey;8valueB
;8para#eterB
;para#eterB
;&a#eBdatabase;8&a#eB
;valueBlocal-ost8Q=P=EcE8database8M2L45.:DB;8valueB
;8para#eterB
;para#eterB
;&a#eB#ax6o&&ectio&s;8&a#eB
;valueB/=;8valueB
;8para#eterB
;para#eterB
;&a#eB#i&6o&&ectio&s;8&a#eB
;valueBQ;8valueB
;8para#eterB
;8Resource2ara#sB
;86o&textB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 22 / 29
8 Tomcat con Apache
8.1 El servidor Apache HTTP
El servidor Apache HTTP es el servidor web el mas utilizado en Internet. Funciona bajo varias
plataformas, entre otros Windows y Linux.
El servidor Apache tiene varios mdulos que se le pueden agregar, lo que extiende considerablemente
sus capacidades.
Por defecto solo trata paginas estticas en formato HTML. Pero gracias al uso de mdulos, permite
tratar tambin paginas PHP, JSP, usar repartidor de carga (load balancing), servir como proxy, etc...
Las dos ltimas versiones mayores del servidor Apache HTTP son las versiones 2.0 y 2.2.
8.2 Porque usar el servidor Apache
El servidor Tomcat trabaja por defecto con el puerto 8080, lo que obliga a especificar el puerto en el URL,
ya que por defecto HTTP usa el puerto 80.
Tomcat se puede configurar para utilizar el puerto 80 en vez, pero bajo Linux eso nos obligara a correr
el servidor Tomcat como ROOT ya que los puertos menos de 1024 requieren en derecho de root.
Como Tomcat ejecuta cdigo en el servidor, es mejor no exponerlo directamente a Internet, ya que seria
un riesgo adicional a nivel de seguridad.
Tambin, el uso de Apache, ademas de ser mas seguro, permite hospedar varios sitios, con varias
tecnologas (PHP,...) bajo un mismo servidor. Nos permite tambin filtrar las solicitudes de paginas para
enviar a Tomcat solo las consultas JSP, y no las imgenes o otros tipos de archivos (paginas HTML,
PDF,...), ya que eso afectara el rendimiento de Tomcat que tendra que procesar paginas para nada.
8.3 Conectar Tomcat con Apache
La conexin en Tomcat y Apache se hace de diferente manera, dependiendo de la versin de Tomcat y de
la versin de Apache.
En practica vamos a ver la conexin de Tomcat 7 con Apache 2.2, pero dar tambin la informacin de
como conectar Apache 7 con Apache 2.0, ya que Apache 2.0 puede existir todava en muchos servidores
de produccin.
Apache trabaja con sitios virtuales (virtual host), lo que permite configurar y hospedar varios sitios en
un mismo servidor.
8.4 Conectar Tomcat 7 con Apache 2.0
Para conectar Tomcat 7 con Apache 2.0, se usa el modula mod_jk.
Para instalar el conector, hay que ponerlo disponible en la carpeta de mdulos de Apache, activarlo en el
archivo httpd.conf de Apache, crear los archivos mod_jk.conf y workers.properties, y activar el conector
AJP en server.xml de Tomcat.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 23 / 29
Para la documentacin completa, ver el sitio de Apache HTTPD (http://httpd.apache.org) y Tomcat
(http://tomcat.apache.org).
Aqu abajo un ejemplo de los archivos nuevos y las lineas a modificar en los archivos existentes.
8.4.1 Archivo httpd.conf:
Adjuntar las lineas siguientes:
LoadModule j!3#odule 8usr8lib8apac-e7@preKor!8#od3j! L Li&uxD ver abajo
I&clude 8to#cat8co&K8j!8#od3j!.co&K # ruta hacia nuevo archivo mod_jk.conf
# en openSuse, se modifica mejor el archivo /etc/sysconfig/apache2:
AA!"#_$%&'(#S)*... jk*
8.4.2 Archivo server.xml:
Adjuntar las lineas siguientes o quitar el comentario si estn en comentario:
;C@@ DeKi&e a& AJ2 /.Q 6o&&ector o& port A==V @@B
;6o&&ector port()A==V)
e&ableLoo!ups()Kalse) redirect2ort()ATTQ) protocol()AJ28/.Q) 8B
8.4.3 Nuevo archivo mod_jk.conf
;IKModule C#od3j!.cB
LoadModule j!3#odule )8usr8lib8apac-e78#od3j!.so)
;8IKModuleB
J!Jor!ers?ile )8to#cat8co&K8j!8For!ers.properties) # ruta hacia nuevo archivo +orkers.properties
J!Log?ile )8to#cat8logs8#od3j!.log)
J!LogLevel i&Ko
;9irtual%ost $EA=B
Server*a#e local-ost
ServerAd#i& cedricIsolucio&java.co#
Docu#e&tRoot 8srv8FFF8-tdocs # camino por defecto de los archivos del sitio +e, -no .omcat/
J!Mou&t 8$ #i6o&&ector # manda solicitud de archivos de en carpeta rais -// y a,ajo a mi!onnector
-.omcat/
J!>&Mou&t 8i#ages8$.$ #i6o&&ector # no manda solicitud de archvos de en carpeta /images a .omcat
# 0k'n$ount solo esta disponi,le en ultimas versiones del conector.
;89irtual%ostB
8.4.4 Nuevo archivo workers.properties
For!er.list( #i6o&&ector

For!er.#i6o&&ector.port(A==V
For!er.#i6o&&ector.-ost(local-ost
For!er.#i6o&&ector.type(ajp/Q
8.5 Conectar Tomcat 5.5 o 6.0 con Apache 2.2
En Apache 2.2, la configuracin es mas fcil que en Apache 2.0, y menos dependiendo de la versin de
Tomcat.
Se utilizan los mdulos de mod_proxy, mod_proxy_ajp, y opcionalmente el modulo de reparticion de
carga mod_proxy_balancer.
Solo hay que modificar dos archivos existentes. Los ejemplos abajo pueden necesitar adaptaciones,
dependiendo de las rutas a donde estn instalados los programas/archivos.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 24 / 29
8.5.1 Archivo httpd.conf:
Adjuntar las lineas siguientes:
LoadModule proxy3#odule 8usr8lib8apac-e7@preKor!8#od3proxy.so
LoadModule proxy3ajp3#odule 8usr8lib8apac-e7@preKor!8#od3proxy3ajp.so
LoadModule proxy3bala&cer3#odule 8usr8lib8apac-e7@preKor!8#od3proxy3bala&cer.so
;9irtual%ost $EA=B
Server*a#e local-ost # nom,re del servidor. &e,er1a coincidir con el nom,re de servidor .omcat
ServerAd#i& cedricIsolucio&java.co#
Docu#e&tRoot 8srv8FFF8-tdocs8reli-3-t#l # camino de archivos 2ue no son se envian a .omcat

ro3yass /images 4 # no manda solicitud hacia /images a .omcat pero las trata en Apache
ro3yass /scripts 4 # no manda solicitud hacia /images a .omcat pero las trata en Apache
ro3yass /styles 4 # no manda solicitud hacia /images a .omcat pero las trata en Apache
2roxy2ass 8 bala&cerE88ajp@cluster8 stic!ysessio&(JSSSI4*ID &oKailover(4& # rais ))5 .omcat
2roxy2assReverse 8 bala&cerE88ajp@cluster8
;2roxy bala&cerE88ajp@clusterB
Bala&cerMe#ber ajpE88local-ostEA==V8reli-8 route(to#cat/a # definition de un servidor .omcat
# en caso de load ,alancing, se pueden definir a2u1 varios servidores
;82roxyB
;89irtual%ostB
8.5.2 Archivo server.xml:
Adjuntar las lineas siguientes o quitar el comentario si estn en comentario:
;C@@ DeKi&e a& AJ2 /.Q 6o&&ector o& port A==V @@B
;6o&&ector port()A==V)
e&ableLoo!ups()Kalse) redirect2ort()ATTQ) protocol()AJ28/.Q) 8B
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 25 / 29
9 Cifrar con SSL y uso de HTTPS
9.1 Porque cifrar
Cuando su sitio contiene datos sensibles, o usa restriccin de acceso, cifrar la transmisin disminuye el
riesgo de que alguien intercepta y pueda entender el contenido de la transmisin (usuario y clave,
contenido,...)
El cifrado usa un poco mas de recursos al nivel del servidor y al nivel del cliente, y tambin aumenta un
poco el tamao de las transmisiones, pero en un nivel razonable.
Para poder cifrar, se necesita emitir un certificado. Los certificados SSL pueden ser auto firmado (uso
interno o sin necesidad de grande garanta de seguridad) o firmado por una autoridad certificadora (de
20 a 1,000 US$, dependiendo del tipo de certificado y la autoridad certificadora).
La creacin de certificados auto firmados depende del sistema operativo.
Por ejemplo en Suse 10.2, se usa una consola como usuario root, y de la carpeta
8usr8s-are8doc8pac!ages8apac-e7 se ejecuta .8#!cert.s- #a!e @@&o@pri&t@directory 8usr8bi&8ope&ssl
8usr8sbi&8 custo#
Mas detalles sobre los certificados SSL para Suse 10.2 en
http://www.novell.com/documentation/opensuse102/index.html?
page=/documentation/opensuse102/opensuse102_reference/data/sec_apache2_ssl.html
Es importante que el campo COMMON NAME corresponde con el URL del sitio web.
Los certificados deben estar disponible en el servidor.
Tomcat se puede configurar para trabajar con SSL directamente, pero aqu vamos a ver la configuracion
de Apache con SSL, ya que Apache es el principal servidor web y puede comunicar con Tomcat.
Al nivel de Apache, hay que instalar y configurar el modulo SSL, y iniciar Apache con la opcin @D SSL.
9.1.1 Archivo httpd.conf:
Adjuntar las lineas siguientes:
LoadModule ssl3#odule 8usr8lib8apac-e7@preKor!8#od3ssl.so
;IKModule #od3ssl.cB I&clude ssl.co&K # &epende de a donde guarda su archivo ssl.conf
;8IKModuleB
9.1.2 Archivo ssl.conf:
Revisarlo y modificar al menos las lineas siguientes:
;9irtual%ost $ETTQB
#Adjuntar modificaciones de virtual host normal -ver arri,a, depende de la versi6n/
...
SSL&gi&e o&
...
SSL6ertiKicate?ile 8etc8apac-e78ssl8server.crt # &epende de a donde guarda sus certificados
SSL6ertiKicate1ey?ile 8etc8apac-e78ssl8server.!ey # &epende de a donde guarda sus certificados
...
;89irtual%ostB
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 26 / 29
10Marcos de trabajo y EJB
10.1Marcos de trabajo
Los marcos de trabajo fueron diseados con la idea de estandarizar el desarrollo de aplicaciones, para
aumentar la rapidez del desarrollo (para los que ya conocen el marco) y disminuir el mantenimiento.
Los marcos de trabajo son muy populares, pero tienen sus pro y contra.
Pro:
Estndar de desarrollo
Trae objetos y cdigos 'preparados', listos para usar, bien probados
Usan el modelo MVC con EJB
Escoden parte del cdigo, lo que permite programar sin necesidad de entender lo que va detrs
Se integran con las herramientas de desarrollo
Facilita el reclutamiento de programadores (si el marco es lo suficiente popular en la rea)
Contra:
Necesidad de aprender como funciona el marco de trabajo, ademas de conocer el Java.
Genera mucho archivos de cdigos adicionales, que hay que mantener.
Agregan una o varias capas ms al cdigo: configuracin, acciones,... Puede dificultar la
depuracin del cdigo
Esconden parte del cdigo. Si uno quiere hacer algo no previsto en el marco de trabajo, le puede
salir difcil o a veces imposible
Trabajan con EJB para el modelo, lo que obliga duplicar la base de datos en EJB
Usan archivos XML para configuracin --> XML no es orientado objeto, y es un archivo 'fijo'
Obligan respetar el modelo MVC --> genera ms cdigo
No hay un estndar, existen muchos: Struts2, Spring, Hibernate, ADF, JSF,...
Para Nicaragua, ya es difcil hallar un programador Java. Ser ms difcil todava hallar un
programador que conoce el marco de trabajo que usted utiliza, ya que hay varios 'muy populares'
10.2EJB
Los Enterprise Java Beans son clases Java que se encuentran en un contenedor especfico del servidor de
aplicaciones, y que pueden ser llamados desde otros mquinas virtuales (de manera remota).
La ventaja es que un mismo objeto se puede compartir entre varias aplicaciones, web o de escritorio.
Se usan entre otros para guardar los datos en memoria (Java), con el doble objetivo de disminuir la carga
de la base de datos, y de independizar el cdigo Java de la base de datos (el driver se encarga que
generar los SQL necesarios).
Existen marcos de trabajo, como Hibernate, que tambin permiten un cache 'de segundo nivel', para
limitar al mximo las llamadas a la base de datos.
Pero el uso de EJB tambin tiene su lado malo:
Obliga a recrear todos los objetos de la base de datos como clase Java
Agrega otra capa de programacin --> de depuracin
Impide el uso de ciertas capacidades de la base de datos, como los triggers.
En ciertos casos, por razn de rendimiento, hay que escribir y hacer la llamada SQL
'manualmente', ya que posiblemente el SQL generado no es ptimo.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 27 / 29
10.3Marco de trabajo de SolucinJava.com
SolucionJava ha liberado parte del cdigo que utiliz para crear la aplicacin Relih (www.relih.com ).
Vamos a ver las clases de este marco que estn relacionadas con este curso:
ConnectDB (JavaBean)
Tools (JavaBean)
Calculo (JavaBean)
Report (TagLib)
Pager (JavaBean)
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 28 / 29
11XDoclet
Las notacion XDoclet son anotaciones que permiten generar los archivos de configuracin (web.xml,
taglib.xml,...) de manera automtica.
La versin de Eclipse Ganymede agrega automticamente los nuevos Servlet al archivo web.xml, y trae
una implementacin de XDoclet pero que no es satisfactoria a mis ojos.
Porque?
1. No genera los comentarios XDoclet al crear el servlet. Solo modifica el web.xml a la creacin (no
en caso de cambio del servlet a otro paquete, otro nombre,...)
2. Si alguna clase tiene un comentario XDoclet, borra el archivo web.xml y lo remplaza con una
generado a partir de lso tags XDoclet encontrados --> pierde todos los servlet si tag XDoclet.
3. No permite personalizar XDoclet (filtro de clases, versines, archivos adicionales a incluir,...)
4. Solo sirve para Servlet. No soporta los Taglibs.
5. Corre (por defecto) cada vez que se modifica un servlet --> si tienes centenas de servlet, se vuelve
muy pesado
Entonces, que usar?
Personalmente, uso el XDoclet del JBoss IDE para Eclipse. La funcion de XDoclet de JBoss IDE, permite
definir de manera muy precisa lo que debe incluir, y funciona tambin para Taglibs, EJB, Hibernate,
JMX,... Este plugin funciona con las versiones de JBoss Tools hasta la versin 2.1 (no en la versin 3 !).
Para activar el XDoclet de JBoss, hay que editar el archivo .project, cambiando en <buildCommand>:
<name>org.eclipse.jst.j2ee.ejb.annotations.xdoclet.xdocletbuilder</name>
<name>org.jboss.ide.eclipse.xdoclet.run.XDocletRunBuilder</name>
Ademas hay que copiar en la raiz del proyecto un archivo .xdoclet como el que se encuentra en el
proyecto JSP_Avanzado.
Hay que incluir tambien las librerias
Xdoclet en la configuracion de Eclipse.
Copiar las librerias en la carpeta de Eclipse,
y luego mencionar esta ubicacin en
Eclipse...Window...Preferences...XDoclet.
Para editar/correr la XDoclet, hay que estar
en la perspectiva Java y en la vista Package
Explorer.
La mala noticia:
XDoclet de JBoss est en abandono ya que
no est ms presente en la versin 3.0 de
JBoss Tools.
El mismo sitio XDoclet no tiene nuevas
versiones.
A medio plazo, har que ir por las soluciones
integradas en las herramientas existentes
(como Eclipse) :-(.
Copyright Cdric Simon, 2005-2009 Versin 1.7 Reproduccin prohibida
Curso de JSP Pagina 29 / 29
12Ejercicios
1) Acciones personalizadas:
a) Crear una accin personalizada que regresa la fecha y hora local.
b) Crear una accin personalizada que escribe el texto en rojo, en mayscula, y encuadrado.
c) Modificar el tag CifraHTML para que solo cifra el cdigo HTML, sin iteracin ni adjunto de
Ronda...
2) Cookies:
a) Utilizar un cookie para recordar el nombre de usuario, y proponer el ultimo nombre de usuario
por defecto.
b) Crear la opcin de borrar el cookie y invalidar la sesin al mismo tiempo
3) Autenticacin:
a) Crear sitios utilizando los mtodos de autenticacin BASIC, DIGEST, y FORM.
b) Crear una autenticacin manejada por la aplicacin
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 tres partes:
i. una publica: bienvenida, informaciones generales, pagina de registro, lista de
producto sin precio.
ii. una con autenticacin de la aplicacin: lista de productos con precio.
iii. una con autenticacin del contenedor: manejo de usuarios de a aplicacin
3) Tiene pgina de error personalizada utilizada por cada pgina.
4) Una vez autenticado, el nombre del usuario debe aparecer en las pantallas.
5) 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-2009 Versin 1.7 Reproduccin prohibida

También podría gustarte