Sie sind auf Seite 1von 17

Si te llegas a perder en este tutorial no te preocupes, al final encontraras un link para descargar el proyecto completo.

Mirando en las FAQS del foro de JAVA y utilizando el buscador no d con un aporte de ste tema, as que aqu estoy publicando. n este tema !ablaremos de una de las formas para conse"uir pro"ramar un re"istro y lo"eo de usuarios utilizando Ser#lets, JS$ y MySQ%, implcitamente di#idiremos la pro"ramaci&n en una arquitectura de ' capas o ni#eles, en la capa de presentacion no usaremos propiamente c&di"o JAVA si no en su lu"ar usaremos ta"libs y (pression%an"ua"e. Mas adelante e(plicaremos a que me refiero con capas y la importancia de estas. Proyecto realizado en NetBeans. ARQUITECTURA DE 3 CAPAS. n el libro )ead First Ser#lets de *at!y Sierra pa" ++', nuestra querida autora ofrece una de las me,ores e(plicaciones que !e #isto en los libros mas populares de Ja#a con JS$ y Ser#%ets. $ero yo solo ofrezco una de la mas bre#es e introductoras informaciones poco -tiles que e(isten en .nternet. / 0apa de presentaci&n1 2Son los JS$3 Formada por c&di"o )4M%, Ja#aScript, A,a( y para representar Ja#a 5 (pression%an"ua"e y 4a"%ibs. / 0apa de l&"ica o control1 $ropiamente JAVA usando Ser#lets /0apa de datos1 %os llamaremos 6eans, contienen los metodos que realizan las operaciones en el len"ua,e de la base de datos, en nuestro caso SQ%. $ara profundizar en el tema recomiendo el libro de *at!y Sierra 5 Head First Ser lets o #isitar "oo"le. 76re#e info1 !ttp188999.di5mare.com8adolfo8cursos...8pp5'capas.pdf 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 0omenzaremos creando un proyecto en netbeans. 2:o estoy utilizando la #ersion + aunque en la #ersion ; en este aspecto es e(actamente i"ual en cuando a los pasos que !ay que se"uir3
Cita:

<=4A1 )ay que tener instalado 4om0at >7? Si te descar"aste la #ersion mas pesada del <et6eans y cuando lo instalaste lo !iciste de la forma correcta, es decir dando clic@ en Aaceptar8aceptar8aceptarA entonces ya lo tienes instalado ?B. n caso contrario puedes #ol#er a correr el paquete de instalaci&n del netbeans o se"uir este tema1 !ttp188999.bibi"ee@.com8CDDE8D>8FC8i...nte5instalado8 0&di"o ForosBelGeb1
Ver original

1. * El tipo de proyecto ser: Java Web - Web Application 2. 3. * Yo le lla ar! "JavaWeb1" #. $. * El server %&e &sar! sera: Apac'e (o cat ) *.

). +. ,. 11. 11.

Java EE version: Java EE $

-onte.t /at': 0JavaWeb1

2ra e3or4s: 5ing&no

Se nos crea un inde(.,sp por defecto. 0omenzaremos a traba,ar aqui. inde(.,sp serH una pH"ina que se mostrarH e(clusi#amente en caso de que e(ista al"una sesion iniciada, en otras palabras, que al"un usuario se !aya in"resado con su Isuario y contraseJa correctamente, por lo que utilizaremos una condicional para #erificar. 555555555555555555555555555555555555555555555555555 )emos !ablado que los arc!i#os JS$ corresponden a la 0apa de presentaci&n, por lo que el uso de c&di"o Ja#a en este arc!i#o AtratHndose de una arquitectura de ' capasA no sera correcto aunque si sera funcional.
Cita:

AN!TACI"N

4ocando el tema de lo Acorrecto e incorrectoA? Vale aclarar que el uso de c&di"o Ja#a en un JS$ no es inadecuado o incorrecto, lo que sucede es que en principio cuando diseJadores y pro"ramadores traba,aban ,untos sur"ieron problemas ya que el BiseJador tena que saber Ja#a para poder manipular correctamente los JS$. $ara solucionar sto aparecieron unas etiquetas llamadas 4a"%ibs. %as 4a"libs tienen un limitado de pro"ramaci&n Ja#a, pero el suficiente. :o en mi e(periencia de F mes en pro"ramaci&n Ja#a ... (B .... no me !e topado con limitantes, sin embar"o *at!y Sierra nos menciona al"unos e,emplos en su "uia de estudio para obtener el S0J$ 2Sun 0ertified $ro"rammer for Ja#a ; 5 *at!y Sierra3 55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 l nombre de la base de datos de este e,emplo es1 javaweb1
1. -6EA(E (A78E 9&s&arios9 : 2. 9id9 int:11; 5<( 5=88 A=(<>?5-6E@E5(A 3. #. $. *. 9e ail9 varc'ar:111; 5<( 5=88A 9pass3ord9 varc'ar:$1; 5<( 5=88A 9na e9 varc'ar:111; 5<( 5=88A /6?@A6Y BEY :9id9;

). ; E5C?5ED@y?EA@ FE2A=8( -GA6EE(D&tH+ A=(<>?5-6E@E5(D1 I

$ara comenzar a utilizar 4a"%ibs y MySQ% !ay que aJadir C librerias al proyecto. 0lic@ sobre el nombre de proyecto AJa#aGebFA, propiedades, librerias y aJadimos #ST$%.% y &ySQ$ #DBC Dri er

AJadimos esta linea en la parte mas superior 2deba,o de los comentarios3 de nuestro inde(.,sp, lo"in.,sp y re"ister.,sp 0&di"o ,a#a1
Ver original

1. JKLtaglib preHi.DMtM &riDM'ttp:00Nava.s&n.co 0Nsp0Nstl0coreM KO

5K0=%=LMAr"b2N;, F'E, O+3AP

AN!TACI"NK80=%=LP

Supon"o que muc!os ya esta aburridos, siento que este tema se !aya e(tendido tanto pero me pareci& importante dar un poco de teora y no solo c&di"o e(plicado. Sin embar"o, a!ora pasemos a Asolo c&di"o (plicadoA 55555555555555555555555555555555555555555555555555555555555555555555555555 / 0rearemos un AbeanA para realizar todos los mtodos necesarios de las consultas SQ%. 2Lecordar que los AbeansA pertenecen a la Acapa de datosA as que podemos crear un nue#o paquete que se llame A6eansA dentro del Source $ac@a"es, dentro de ste paquete creare un Ja#a 0lass llamado ABao.,a#aA
1. pac4age beansI 2. i port Nava.s%l.*I 3. #. p&blic class Fao P $. p&blic -onnection cone.ionI p&blic Hinal static Etring &serFb D MrootMI p&blic Hinal static Etring passFb D M123#$*MI

;. +.
+. ,. 11.

00-onectar a la 7ase de datos p&blic void conectar:; t'ro3s EQ8E.ceptionA-lass5ot2o&ndE.ceptionP -lass.Hor5a e:Mco . ys%l.Ndbc.FriverM;I

FF.
12.

F'.
cone.ionDFriver@anager.get-onnection:MNdbc: ys%l:00local'ost:331*0Nava3 eb1MA&serFbA passFb;I 1#. 1$. R 00Fesconectar a la 7ase de datos p&blic void desconectar:; t'ro3s EQ8E.ceptionA -lass5ot2o&ndE.ceptionP cone.ion.close:;I R

F;.
1). 1+.

1,. 21. 00@etodo para cons&ltar si &n e ail y contraseSan pertenecen a &na c&enta registrada p&blic boolean isAco&ntE.ists:Etring e ailA Etring pass3ord; t'ro3s EQ8E.ceptionP Etring s%l D MEE8E-( * 26<@ &s&arios WGE6E e ailD"MTe ailTM" A5F pass3ordD"MTpass3ordTM"MI /reparedEtate ent ps D cone.ion.prepareEtate ent:s%l;I 6es&ltEet rs D ps.e.ec&teQ&ery:;I

CF. CC. C'. CN.


2$. 2*. 2). 2+. 2,.

ret&rn rs.ne.t:;I R

00@etodo para cons&ltar si el e ail recibido ya esta registrado p&blic boolean isE ail6egistered:Etring e ail; t'ro3s EQ8E.ceptionP Etring s%l D MEE8E-( * 26<@ &s&arios WGE6E e ailD"MTe ailTM"MI /reparedEtate ent ps D cone.ion.prepareEtate ent:s%l;I 6es&ltEet rs D ps.e.ec&teQ&ery:;I

'D. 'F. 'C. ''.


3#. 3$. 3*. 3). 3+.

ret&rn rs.ne.t:;I R

00@etodo para registrar &na c&enta p&blic void register=ser:Etring e ailA Etring pass3ordA Etring na e; t'ro3s EQ8E.ceptionP Etring s%l D M?5EE6( ?5(< 9&s&arios9:9e ail9A9pass3ord9A9na e9; VA8=EE :"MTe ailTM"A"MTpass3ordTM"A"MTna eTM";MI /reparedEtate ent ps D cone.ion.prepareEtate ent:s%l;I ps.e.ec&te=pdate:;I R

'E. ND. NF.


#2. #3. ##. #$. #*.

#). R

/ 0rearemos otro AbeanA para obtener el nombre de un usuario 55Q Se me ocurren C formas. =btenerlo mediante una consulta SQ% y de#ol#er una cadena, u obtenerlo mediante un ob,eto que llama a una consulta SQ%.

%' For(a)
BaoIser.,a#a
1. pac4age beansI 2. i port Nava.s%l.*I 3. #. p&blic class Fao=ser e.tends Fao P $. *.

+. O. E. FD.
11. 12. 13. 1#. 1$. 1*. 1). 1+. R

p&blic Etring get5a e7yE ail:Etring e ail; t'ro3s EQ8E.ceptionP Etring s%l D MEE8E-( * 26<@ &s&arios WGE6E e ailD"MTe ailTM"MI /reparedEtate ent ps D cone.ion.prepareEtate ent:s%l;I 6es&ltEet rs D ps.e.ec&teQ&ery:;I

iH:rs.ne.t:;;P ret&rn rs.getEtring:Mna eM;I R

ret&rn nullI R

K0=%=LMAr"b2C>>, FND, D3AP BaoIserC.,a#a


1. pac4age beansI 2.

*' For(a)K80=%=LP

3. p&blic class Fao=ser2 e.tends FaoP

N. >.
*.

p&blic Etring &ser5a eI p&blic Etring e ailI

).

O.
,. 11. 11. 12. 13. 1#. 1$.

p&blic Fao=ser2:Etring e ail;P Fao=ser d D ne3 Fao=ser:;I try P d.conectar:;I

set=ser5a e:d.get5a e7yE ail:e ail;;I

d.desconectar:;I R catc' :E.ception e; PR R

F;.
1). 1+.

FE.
21. 21. 22.

p&blic Etring get=ser5a e:; P ret&rn &ser5a eI R

C'.
2#. 2$. 2*.

p&blic Etring getE ail:; P ret&rn e ailI R

C+.
2+. 2,. 31.

p&blic void set=ser5a e:Etring &ser5a e; P t'is.&ser5a e D &ser5a eI R

'F.
32. 33. 3#. R

p&blic void setE ail:Etring e ail; P t'is.e ail D e ailI R

/ A!ora crearemos C formularios )4M% F para el in"reso de usuarios y el otro para el re"istro. lo"in.,sp 0&di"o ,a#a1
Ver original

1. JKLtaglib preHi.DMtM &riDM'ttp:00Nava.s&n.co 0Nsp0Nstl0coreM KO 2. JKLpage content(ypeDMte.t0't lM pageEncodingDM=(2-+MKO 3. JK-- En caso de %&e e.ista &na sesion iniciada redirecciono a inde..Nsp. M5< tiene caso ostrar este Hor &lario c&ando 'ay &na sesion iniciada --KO #. Jt:iH testDMUPsessionEcopeV"sessionE ail"WXDnullRMO $. JK response.send6edirect:Minde..NspM;IKO

*. J0t:iHO ). JXF<-(Y/E 't lO +. J't lO ,. 11. 11. 12. 13. 1#. 1$. 1*. 1). 1+. 1,. 21. 21. 22. J'eadO J eta 'ttp-e%&ivDM-ontent-(ypeM contentDMte.t0't lI c'arsetD=(2-+MO JtitleO?niciar sesionJ0titleO J0'eadO JbodyO J'1O?niciar sesionJ0'1O JpOJa 'reHDMregister.NspMO6egistrarseJ0aOJ0pO Jp styleDMcolor: YHH1111MOUPsessionEcopeV"error"WRJ0pO JHor actionDM8oginM et'odDMpostMO

JpO E ail: Jinp&t typeDMte.tM na eDMe ailMOJ0pO JpO -ontraseSa: Jinp&t typeDMpass3ordM na eDMpass3ordMOJ0pO JpOJinp&t typeDMs&b itM val&eDMEntrarMOJ0pO J0Hor O J0bodyO

23. J0't lO

re"ister.,sp 0&di"o ,a#a1


Ver original

1. JKLtaglib preHi.DMtM &riDM'ttp:00Nava.s&n.co 0Nsp0Nstl0coreM KO 2. JKLpage content(ypeDMte.t0't lM pageEncodingDM=(2-+MKO 3. JK-- En caso de %&e e.ista &na sesion iniciada redirecciono a inde..Nsp. M5< tiene caso ostrar este Hor &lario c&ando 'ay &na sesion iniciada --KO #. Jt:iH testDMUPsessionEcopeV"sessionE ail"WXDnullRMO $. JK response.send6edirect:Minde..NspM;IKO

*. J0t:iHO ). JXF<-(Y/E 't lO +. J't lO ,. 11. 11. 12. 13. 1#. 1$. 1*. 1). 1+. 1,. 21. 21. 22. 23. 2#. 2$. Jp styleDMcolor: YHH1111MOUPsessionEcopeV"error"WRJ0pO JHor actionDM6egisterM et'odDMpostMO J'eadO J eta 'ttp-e%&ivDM-ontent-(ypeM contentDMte.t0't lI c'arsetD=(2-+MO JtitleO6egistrarseJ0titleO J0'eadO JbodyO J'1O?niciar sesionJ0'1O JpOJa 'reHDMlogin.NspMO?niciar EesionJ0aOJ0pO

JpO5o bre: Jinp&t typeDMte.tM na eDMna eMOJ0pO JpOE ail: Jinp&t typeDMte.tM na eDMe ailMOJ0pO JpO-ontraseSa: Jinp&t typeDMpass3ordM na eDMpass3ord1MOJ0pO JpO-onHir a contraseSa Jinp&t typeDMpass3ordM na eDMpass3ord2MOJ0pO JpOJinp&t typeDMs&b itM val&eDMEntrarMOJ0pO J0Hor O J0bodyO

2*. J0't lO

n el atributo action de la etiqueta form de ambos formularios #emos el nombre de C ser#lets ARe+isterA y A$o+inA A!ora pasaremos a traba,ar en la ca,a de control. 0reando los ser#lets ARe+isterA y A$o+inA 5 <ue#o $aquete llamado Aser letsA. 0lic@ derec!o Asobre le paquete ser letsA lue"o en ne9 55Q ser#let Re+ister.-a a 0&di"o ,a#a1
1. pac4age servletsI 2. 3. i port beans.*I

#. i port clases.*I $. i port Nava.&til.rege..*I *. i port Nava.io.*I ). i port Nava..servlet.EervletE.ceptionI +. i port Nava..servlet.'ttp.GttpEervletI ,. i port Nava..servlet.'ttp.GttpEervlet6e%&estI 11. i port Nava..servlet.'ttp.GttpEervlet6esponseI 11. i port Nava..servlet.'ttp.GttpEessionI 12. 13. p&blic class 6egister e.tends GttpEervlet P 1#. 1$. 1*. L<verride protected void doCet:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P 0* En este proyectoI este servlet no recibe ni debe recibir nada por CE(A * asi %&e si se lleva a entrar al servelt * &sando el *0 response.send6edirect:Minde..NspM;I R etodo CE( sola ente redireccion al inde..Nsp

F+.
1+. 1,. 21. 21. 22. 23. 2#. 2$. 2*. 2). 2+.

L<verride protected void do/ost:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P GttpEession resp&esta D re%&est.getEession:true;I /rintWriter o&t D response.getWriter:;I 00Feclaro e inicio las variables Etring no bre=s&ario D re%&est.get/ara eter:Mna eM;I Etring e ail=s&ario D re%&est.get/ara eter:Me ailM;I Etring pass3ord D re%&est.get/ara eter:Mpass3ord1M;I Etring conHir >pass3ord D re%&est.get/ara eter:Mpass3ord2M;I /attern p D /attern.co pile:MZ:V1-,a-[A-\W:V>.3W*V1-,a-[A\W;*L:V1-,a-[A-\WV-3W*V1-,a-[A-\W.;T:Va-[A-\WP2A,R.;TVa-[A-\WP2A3R;UM;I

CE.
31.

'F. 'C. ''. 'N.


3$.

3*. 3). 3+. 3,. #1. #1. #2. #3. ##. #$. #*. #). #+. #,. $1. $1. vlida $2. $3. $#. $$. $*. $). $+.

@atc'er

D p. atc'er:e ail=s&ario;I

Validador v D ne3 Validador:;I Fao d D ne3 Fao:;I 00-o ien[o con las validaciones 0* * /ode os 'acer &n onton de validacionesA por eNe plo:

* -a pos no vaciosA direccion de e ail validaA no bre de &s&ario y contraseSa * sin espacios y0o caracteres especiales. *0

00ca pos vacios iH:no bre=s&ario.isE pty:; ]] e ail=s&ario.isE pty:; ]] pass3ord.isE pty:; ]] conHir >pass3ord.isE pty:;;P resp&esta.setAttrib&te:MerrorMA MGay ca pos vaciosM;I

R else P 005o 'ay ca pos vaciosA veo %&e la direccion de e ail sea iH: .Hind:;;P resp&esta.setAttrib&te:MerrorMA M8a direccion de e ail no es correctaM;I

R else P 008a direccion de e ail si es correctaA veriHico %&e la contraseSa ta bien lo sea iH:v.is=serna e<r/ass3ordValid:pass3ord;;P 00A'ora veriHico si la contraseSa 1 y la contraseSa 2 son ig&ales iH:pass3ord.e%&als:conHir >pass3ord;;P try P d.conectar:;I iH:d.isE ail6egistered:e ail=s&ario;;P resp&esta.setAttrib&te:MerrorMA MEsta direccion de correo ya H&e registradaM;I R else P

$,. *1. *1. *2. *3. *#. *$. **.

008egado a este p&nto signiHica %&e todo esta correctoA por lo tanto ingreso a la F7

*). pass3ordA no bre=s&ario;I *+. null;I *,. )1. )1. )2. R

d.register=ser:e ail=s&arioA resp&esta.setAttrib&te:MerrorMA

d.desconectar:;I

+'.
sig e.ception: M Te;I R )#. )$. )*. )). )+. no son ig&alesM;I ),. +1. +1. +2. +3. vlidaM;I +#. +$. +*. +). ++. +,. ,1. ,1. ,2. ,3. ,#. ,$. R R R R R R else P R

R catc' :E.ception e; P o&t.println:M<c&rrio la

R else P resp&esta.setAttrib&te:MerrorMA M8as contraseSas

resp&esta.setAttrib&te:MerrorMA M-ontraseSa no es

response.send6edirect:Mregister.NspM;I

Respuesta: [Aporte] Registro y Login de usuarios con JSP,SERVLETS,MySQL

n el Ser#let anterior estamos #iendo el funcionamento de una (presi&n Le"ular para #erificar que una direcci&n de email sea correcta, tambien sur"i& la necesidad de #erificar que no e(istan

espacios o caracteres especiales en el nombre de usuario y en la contraseJa. $ara esto podemos !acer uso de otra (presion Le"ular, pero como aprendices de pro"ramaci&n !aremos las cosas por el modo mas lar"o, asi que crearemos un mtodo para realizar sta #erificacion )e creado un paquete llamado AclasesA y dentro de el una Ja#aclase llamada AValidador.,a#aA que contiene al mtodo isUserna(e!rPass.ord/alid 0&di"o ,a#a1
0&di"o ,a#a1
Ver original

F. p&blic boolean is=serna e<r/ass3ordValid:Etring Ucadena; P


2. 3. #. $. *. ). +. ,. R Hor :int i D 1I i J cadena.lengt'I iTT; P 00-o pr&ebo %&e no e.istan caracteres especiales :sola ento los %&e podrian ser &sados para &na inyeccion EQ8 o perN&dicar en la cons&lta;I iH :cadenaViW DD " " ]] cadenaViW DD "D" ]] cadenaViW DD "^" ]] cadenaViW DD "T" ]] cadenaViW DD "*" ]] cadenaViW DD "-" ]] cadenaViW DD "K" ]] cadenaViW DD "0" ]] cadenaViW DD "." ]] cadenaViW DD "A" ]] cadenaViW DD "I" ]] cadenaViW DD "X" ]] cadenaViW DD "J" ]] cadenaViW DD "O" 00-o pr&ebo la longit&d iH :cadena.lengt' JD *; P ret&rn falseI c'arVW cadena D Ucadena.to8o3er-ase:;.to-'arArray:;I

11. 11. 12. 13. 1#. 1$. 1*. 1). 1+. 1,. 21. 21. 22. 23.

2#. 2$. 2*. 2). 2+. 2,. 31. R R R

]] cadenaViW DD ":"; P ret&rn falseI

ret&rn trueI

ser#let $o+in.-a a 0&di"o ,a#a1


1. pac4age servletsI 2. 3. i port beans.Fao=serI #. i port clases.ValidadorI $. i port Nava.io.?<E.ceptionI *. i port Nava.&til.rege..*I ). i port Nava..servlet.EervletE.ceptionI +. i port Nava..servlet.'ttp.GttpEervletI ,. i port Nava..servlet.'ttp.GttpEervlet6e%&estI 11. i port Nava..servlet.'ttp.GttpEervlet6esponseI 11. i port Nava..servlet.'ttp.GttpEessionI 12. 13. p&blic class 8ogin e.tends GttpEervlet P 1#. 1$. 1*. L<verride protected void doCet:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P 0* En este proyectoI este servlet no recibe ni debe recibir nada por CE(A * asi %&e si se lleva a entrar al servelt * &sando el *0 response.send6edirect:Minde..NspM;I R etodo CE( sola ente redireccion al inde..Nsp

F+.
1+. 1,. 21. 21. 22. 23. 2#.

2$. 2*. 2). 2+.

L<verride protected void do/ost:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P GttpEession resp&esta D re%&est.getEession:true;I Etring e ail D re%&est.get/ara eter:Me ailM;I Etring pass3ord D re%&est.get/ara eter:Mpass3ordM;I /attern p D /attern.co pile:MZ:V1-,a-[A-\W:V>.3W*V1-,a-[A\W;*L:V1-,a-[A-\WV-3W*V1-,a-[A-\W.;T:Va-[A-\WP2A,R.;TVa-[A-\WP2A3R;UM;I @atc'er D p. atc'er:e ail;I

CE. 'D.
31. 32. 33. 3#. 3$. 3*. 3). 3+. 3,. #1. #1. vlida #2. #3. ##. #$. #*. #). #+. #,. $1. $1. $2.

Validador v D ne3 Validador:;I Fao=ser d D ne3 Fao=ser:;I

00ca pos vacios iH :e ail.isE pty:; ]] pass3ord.isE pty:;; P resp&esta.setAttrib&te:MerrorMA MGay ca pos vaciosM;I

R else P 005o 'ay ca pos vaciosA veo %&e la direccion de e ail sea iH : .Hind:;; P resp&esta.setAttrib&te:MerrorMA M8a direccion de e ail no es correctaM;I

R else P 008a direccion de e ail si es correctaA veriHico %&e la contraseSa ta bien lo sea iH :v.is=serna e<r/ass3ordValid:pass3ord;; P try P d.conectar:;I iH :d.isAco&ntE.ists:e ailA pass3ord;; P 00EigniHica %&e la c&enta si e.iste 00<7(E5C< E8 5<@76E FE8 =E=A6?< Y 8< C=A6F< E5 =5A EEE?<5

>'.
d.get5a e7yE ail:e ail;I $#. 5o bre=s&ario;I

Etring 5o bre=s&ario D resp&esta.setAttrib&te:Msession5o breMA

$$. e ail;I $*. $). $+. $,. *1. *1. *2.

resp&esta.setAttrib&te:MsessionE ailMA

R else P resp&esta.setAttrib&te:MerrorMA MEsta direccion de correo ya H&e registradaM;I R

d.desconectar:;I

;'.
*#. *$. **. *). *+. *,. vlidaM;I )1. )1. )2. )3. )#. )$. )*. )). )+. ),. +1. R R R R R R else P

R catc' :E.ception e; PR

resp&esta.setAttrib&te:MerrorMA M-ontraseSa no es

response.send6edirect:Mlogin.NspM;I

$or -ltimo falta crear el arc!i#o que in#alida las sesiones -til para 20errar Sesion3, en nuestro e,emplo serH un ser#let $o+o0t.-a a 0&di"o ,a#a1
1. pac4age servletsI 2.

3. i port Nava.io.?<E.ceptionI #. i port Nava.io./rintWriterI $. i port Nava..servlet.EervletE.ceptionI *. i port Nava..servlet.'ttp.GttpEervletI ). i port Nava..servlet.'ttp.GttpEervlet6e%&estI +. i port Nava..servlet.'ttp.GttpEervlet6esponseI ,. i port Nava..servlet.'ttp.GttpEessionI 11. 11. p&blic class 8ogo&t e.tends GttpEervlet P 12. 13. 1#. 1$. 1*. 1). 1+. 1,. 21. 21. 22. 23. 2#. 2$. 2*. 2). 2+. L<verride protected void doCet:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P process6e%&est:re%&estA response;I R R 006edirecciono a inde..Nsp response.send6edirect:Minde..NspM;I 00-errar sesion sesion.invalidate:;I 00Ya sea %&e el !todo sea por CE( o /<E(A cerrare os la sesion.

protected void process6e%&est:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P response.set-ontent(ype:Mte.t0't lIc'arsetD=(2-+M;I /rintWriter o&t D response.getWriter:;I GttpEession sesion D re%&est.getEession:true;I

CE.
31. 31. 32. 33. 3#.

L<verride protected void do/ost:GttpEervlet6e%&est re%&estA GttpEervlet6esponse response; t'ro3s EervletE.ceptionA ?<E.ception P

'>.

3*. 3). 3+. R R

process6e%&est:re%&estA response;I

Das könnte Ihnen auch gefallen