You are on page 1of 42

JAVA: Servlets

Diseo de aplicaciones web


mperez@fi.upm.es

Servlets
I

Programas que se ejecutan en los servidores.


Aaden funcionalidad a un servidor web, del mismo modo que los applets aaden funcionalidad a los navegadores.

imilares a los scripts !"#, salvo que ofrecen una independencia de la plataforma.

mperez@fi.upm.es

Cundo se suelen utilizar


I

$a p%gina web se basa en datos que proporciona el usuario.


&jemplo' e-commerce sites.

$os datos cambian frecuentemente.


&jemplo' Partes meteorol(gicos.

$a p%gina web utiliza informaci(n de )Ds u otras fuentes.


&jemplo' Aplicaciones comerciales.
mperez@fi.upm.es 3

Applets
cliente
El usuario pi e un applet en !a"a NAVEGADOR WEB Lle#a un applet en !a"a

ser"i or

Arranca la $%&uina Virtual e !a"a ' (e e!ecuta el applet

MQUINA VIRTUAL JAVA

mperez@fi.upm.es

Servlets
Servidor

Cliente

Base de datos

mperez@fi.upm.es

Servlets. !e"uisitos
I I I

&l servidor debe tener una m%quina virtual *ava. &l servidor debe soportar la AP# de los servlets *ava. ervidores capaces de ejecutar servlets'
Apac+e ,omcat *ava -eb erver ./0eill1 -eb ite Professional $otus Domino "o -eb erver 2ovel #ntra2et-are #)3 #nternet !onnection erver .tros

mperez@fi.upm.es

$nstalando un servidor %e&


I

*a4arta ,omcat
+ttp'55java.sun.com5webservices5 downloads5webservicespac4.+tml

* -D6 7.8
+ttp'55java.sun.com5products5servlet59.7

mperez@fi.upm.es

Java Servlet A($


I

&:tensi(n al *D6 est%ndar


&:tensiones del *D6 e:tensiones son empaquetados bajo java:

Paquetes'
java:.servlet java:.servlet.+ttp
; Da soporte al protocolo <,,P 1 a la generaci(n de <,3$ mperez@fi.upm.es '

*+e,u,i-n de un servlet
I

=ormas de iniciar la ejecuci(n'


#ntroducir la direcci(n >0$ del servlet en un navegador web. $lamar al servlet desde una p%gina web. &jecutar un servlet llam%ndolo desde otro servlet.

mperez@fi.upm.es

0esde un nave1ador 2e&


I

+ttp'55nombre?maquina'puerto5ruta?serv let5nombre?servlet $as llamadas a servlets pueden contener par%metros'


+ttp'55www.datsi.fi.upm.es5@mperez5servlet s5serv7Anum7BCDnum9BE

mperez@fi.upm.es

./

0esde una p1ina 2e&


I

>n servlet tambiFn puede ser llamado desde el c(digo de una p%gina web, al igual que se llamarGa a cualquier !"#. &jemplo'
Hform action B I+ttp'55www.datsi.fi.upm.es5@mperez5servlet s5serv9J met+odBIpostJK
mperez@fi.upm.es ..

0esde otro servlet


I

e puede lanzar la ejecuci(n de un servlet desde otro. Pasos'


!onocer el nombre del servlet que queremos llamar. Proporcionar acceso al objeto I ervletJ del servlet llamado. $lamar al mFtodo pLblico del servlet.
mperez@fi.upm.es .2

0esde otro servlet


public class servletCalling extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, !Exception { """ Servlet servlet#get $ (Servlet) getServletCon%ig()"getServletContext()"getServlet(&servl etCalled')( String data#get $ servlet#get")ethod*(data)( """ + +

mperez@fi.upm.es

.3

Ar"uite,tura de los servlets


I

)iblioteca Mjava:.servlet/
Servlet 3ttpServlet 4iServlet mperez@fi.upm.es .4

Ci,lo de vida de un servlet


Servidor Servlet
Car1a init56

Cliente Servlet Servidor


4ane+o de peti,iones servi,e56
do8et56 do(ost56

Cliente
0es,ar1a destro756

Servidor

Servlet mperez@fi.upm.es

.5

$ni,ializa,i-n de un servlet
I I

public void init N ervlet!onfig configO =inaliza antes de la invocaci(n de cualquier mFtodo sobre el servlet (lo se invoca una vez, a menos que el servidor recargue el servlet ervlet!onfig' argumentos de inicializaci(n para el servlet &j.' abrir fic+eros o establecer cone:iones a los servidores
mperez@fi.upm.es .

Servi,io
I

public void service N ervlet0equest req, ervlet0esponse res O $ee la petici(n 1 produce el mensaje de respuesta .bjeto ServletRequest'
!omunicaci(n que flu1e del cliente al servidor

.bjeto ServletResponse'
&ncapsula la informaci(n enviada desde el servidor al cliente

mperez@fi.upm.es

.#

399( Servlets

mperez@fi.upm.es

.'

4:todo 399( 8*9


I

&jemplo'

GET /servlet/MyServlet?nombre=Juan& institucion=FI HTTP/ ! "onnection# $ee%&'live (ser&')ent# Mo*illa/+!, com%atible. MSIE +!, . /in0o1s 2T3 Host# 111!0atsi!4i!u%m!es 'cce%t# ima)e/)i45 ima)e/6&6bitma%5 ima)e/7%e)5 ima)e/%7%e)

$imitaci(n' !u%ntos datos son pasados como parte del >0$ >so de <,,P P. ,

mperez@fi.upm.es

.)

4:todo 399( (;S9


I

Permite al cliente enviar datos al servidor


Pasar m%s informaci(n que en una petici(n <,,P "&,

&jemplo'
P8ST /servlet/MyServlet HTTP/ ! (ser&')ent# Mo*illa/+!, com%atible. MSIE +!, . /in0o1s 2T3 Host# 111!0atsi!4i!u%m!es 'cce%t# ima)e/)i45 ima)e/6&6bitma%5 ima)e/7%e)5 ima)e/%7%e)5 9/ "ontent&ty%e# a%%lication/6&111&4orm&urlenco0e0 "ontent&len)t:# ;< nombre=Juan&institucion=FI

mperez@fi.upm.es

2/

do8et56 7 do(ost56
I

obreescribir mFtodos do"etNO 1 doPostNO


public void doGet ( HttpServletRequest request, HttpServletResponse response)( public void do,ost ( HttpServletRequest request, HttpServletResponse response)(

mperez@fi.upm.es

2.

0estru,,i-n del servlet


I I

public void destro1NO $iberar los recursos Ncerrar fic+eros abiertos o cerrar cone:iones con bases de datosO. Puede ser un mFtodo vacGo. &l servidor espera a llamar al mFtodo destro1NO +asta que todos los servicios se +a1an completado o +a1a pasado una cantidad de tiempo determinada

mperez@fi.upm.es

22

*stru,tura de un Servlet
i)port -ava"io".( i)port -avax"servlet".( i)port -avax"servlet"http".( public class So)eServlet extends HttpServlet { // El servidor env0a una p1gina // web al cliente public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, !Exception { // 2tili3ar request para leer // datos procedentes del // cliente (e-4 coo5ies, // otros datos)

// // // //

2tili3a response para especi%icar la respuesta (tipo de contenido, establecer coo5ies, """)

,rint6riter out $ response"get6riter()( // 2tili3ar out para enviar el // contenido al navegador + // 7n1loga)ente, sobreescribir // do,ost()" +

mperez@fi.upm.es

23

*+emplo Servlets: 3ola 4undo


i)port -ava"io".( i)port -avax"servlet".( i)port -avax"servlet"http".( public class Hola8undoSrvlt extends HttpServlet { // El servidor env0a una p1gina web al cliente public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, !Exception { ,rint6riter out( String titulo$&Hola 8undo'(

// 2tili3a response para // especi%icar la respuesta response"setContent9:pe (&text/ht)l')( out $ response"get6riter()( out"println(&;H98<=;HE7>=;9 9<E=')( out"println(titulo)( out"println(&;/9 9<E=;/HE7>=;?!>@=')( out"println(&;H*='AtituloA;/H*=')( out"println(&;/?!>@=;/H98<=')( out"close()( + +

mperez@fi.upm.es

24

*+emplo Servlets: 3ola 4undo

mperez@fi.upm.es

25

;&ten,i-n 7 env<o de informa,i-n


I

.btenci(n de datos del cliente'


getParameter()
; getParameterValues() ; getParameterNames()

&nvGo de datos al cliente'


getWriter getOutputStream

getReader getInputStream()

mperez@fi.upm.es

*+emplo: =e,tura de parmetros


i)port -ava"io".( i)port -avax"servlet".( i)port -avax"servlet"http".( public class 9hree,ara) extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, !Exception { ,rint6riter out( String title$B<e:endo C par1)etrosB( response"setContent9:pe (Btext/ht)lB)( out $ response"get6riter()( out"println(B;H98<=;HE7>=;9 9<E=B)( out"println(title)(

out"println(B;/9 9<E=;/HE7>=;?!>@=B)( out"println(B;H* 7< GD$CED9ER=BA title AB;/H*=B)( out"println(B;2<=B)( out"println(B;< =para)*4 BA request"get,ara)eter(Bpara)*B))( out"println(B;< =para)E4 BA request"get,ara)eter(Bpara)EB))( out"println(B;< =para)C4 BA request"get,ara)eter(Bpara)CB))( out"println(B;/2<=B)( out"println(B;/?!>@=;/H98<=B)( out"close()( + public void do,ost(HttpServletRequest request,HttpServletResponse response) throws ServletException, !Exception { doGet(request,response)( + +

mperez@fi.upm.es

2#

*+emplo: =e,tura de parmetros

mperez@fi.upm.es

2'

*+emplo: =e,tura de parmetros $$


i)port i)port i)port i)port -ava"io".( -avax"servlet".( -avax"servlet"http".( -ava"util".(

public class Show,ara)eters extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, !Exception { ,rint6riter out( String title$B<e:endo todos los par1)etrosB( response"setContent9:pe (Btext/ht)lB)( out $ response"get6riter()( out"println(B;H98<=;HE7>=;9 9<E=B)( out"println(title)( out"println(B;/9 9<E=;/HE7>=;?!>@=B)(

mperez@fi.upm.es

2)

*+emplo: =e,tura de parmetros $$


out"println(B;H* 7< GD$CED9ER=BA title AB;/H*=B)( out"println(B;97?<E ?!R>ER$* 7< GD$CED9ER=B)( out"println(B;9R=;9H=Do)bre de par1)etro;9H=Falores de par1)etroB)( Enu)eration no)bres>e,ara) $ request"get,ara)eterDa)es()( while (no)bres>e,ara)"has8oreEle)ents()){ String no)bre,ara) $ (String) no)bres>e,ara)"nextEle)ent()( out"println(B;9R=;9>=B A no)bre,ara))( out"println(B;9>=B)( StringGH valores>e,ara)$ request"get,ara)eterFalues(no)bre,ara))( i% (valores>e,ara)"length $$ *) { String valor,ara) $ valores>e,ara)GIH( i% (valor,ara)"length()$$ I) out"print(B; =Do existe valor;/ =B)(
else out"print(valor,ara))( + else { out"println(B;2<=B)( %or (int i$I( i;valores>e,ara)"length( iAA) { out"println(B;< =B A valores>e,ara)GiH)( + out"println(B;/2<=B)( + + out"println(B;/97?<E=B)( out"println(B;/?!>@=;/H98<=B)( out"close()( + public void do,ost(HttpServletRequest request,HttpServletResponse response) throws ServletException, !Exception { doGet(request,response)( + +

mperez@fi.upm.es

3/

*+emplo: =e,tura de parmetros $$

mperez@fi.upm.es

3.

*+emplo: >so de formulario


;H98<= ;HE7>= ;9 9<E= 2n e-e)plo de %or)ulario que utili3a ,!S9 ;/9 9<E= ;/HE7>= ;H* 7< GD$CED9ER= 2n e-e)plo de %or)ulario que utili3a ,!S9 ;/H*= ;J!R8 7C9 !D$B""/servlet/Show,ara)etersB 8E9H!>$B,!S9B= DK)ero 7rt0culo4 ; D,29 9@,E$B9EL9B D78E$Bnu) te)B= ;?R= Cantidad4 ; D,29 9@,E$B9EL9B D78E$BcantidadB= ;?R= ,recio 2nidad4 ; D,29 9@,E$B9EL9B D78E$BprecioB F7<2E$BMB= ;?R= ;HR= Do)bre4 ; D,29 9@,E$B9EL9B D78E$Bno)breB= ;?R= 7pellidos4 ; D,29 9@,E$B9EL9B D78E$BapellidosB= ;?R=

mperez@fi.upm.es

32

*+emplo: >so de formulario


>irecciNn4 ;9EL97RE7 D78E$BdireccionB R!6S$C C!<S$OI= ;/9EL97RE7=;?R= 9ar-eta de crPdito4 ;?R= ; D,29 9@,E$BR7> !B D78E$Btipo9ar-etaB F7<2E$BFisaB=Fisa;?R= ; D,29 9@,E$BR7> !B D78E$Btipo9ar-etaB F7<2E$B8aster CardB=8aster Card;?R= ; D,29 9@,E$BR7> !B D78E$Btipo9ar-etaB F7<2E$B7)exB=7)erican Express;?R= ; D,29 9@,E$BR7> !B D78E$Btipo9ar-etaB F7<2E$B>iscoverB=>iscover;?R= DK)ero de tar-eta de crPdito4 ; D,29 9@,E$B,7SS6!R>B D78E$Bnu)9ar-etaB= ;?R= RepeticiNn del nK)ero de tar-eta de crPdito4 ; D,29 9@,E$B,7SS6!R>B D78E$Bnu)9ar-etaB= ;?R=;?R= ;CED9ER= ; D,29 9@,E$BS2?8 9B F7<2E$BEnviar solicitudB= ;/CED9ER= ;/J!R8= ;/?!>@= ;/H98<=

mperez@fi.upm.es

33

*+emplo: >so de formulario

mperez@fi.upm.es

34

*+emplo: >so de formulario

mperez@fi.upm.es

35

Alma,enamiento del estado de un ,liente


I

&stado del cliente'


ituaci(n en la que se encuentra un cliente en sucesivas peticiones al servidor &jemplo tGpico de aplicaci(n' carrito de la compra Nalmacenamiento de productos por parte del clienteO.

3ecanismos'
I!oo4iesJ eguimiento de sesiones Nsession trac ingO

mperez@fi.upm.es

>so de ,oo?ies
I

"oo=ie mi"oo=ie = ne1 "oo=ie->"iu0a0>5 >Ma0ri0>3.

3Ftodos sobre coo4ies'


set?alue-3/)et?alue-3' Palores de una coo4ie set"omment-3/)et"omment-3' !omentario de una coo4ie setMa6')e-3/)etMa6')e-3' ,iempo de caducidad de una coo4ie )et2ame-3' 2ombre de una coo4ie

$as coo4ies se envGan en la cabecera de la respuesta al cliente


a00"oo=ie-3, sobre el objeto de la clase Htt%Servlet@es%onse

mperez@fi.upm.es

3#

*sta&le,imiento de una ,oo?ie


%ublic voi0 0oPost -Htt%Servlet@eAuest reAuest5 Htt%Servlet@es%onse res%onse3 t:ro1s ServletE6ce%tion5 I8E6ce%tion B Print/riter out. !!! "oo=ie mi"oo=ie = ne1 "oo=ie->"iu0a0>5>Ma0ri0>3. mi"oo=ie!set"omment->"oo=ie %ara establecer la ciu0a0 0e ori)en>3. mi"oo=ie!setMa6')e-;C,,3. res%onse!a00"oo=ie-mi"oo=ie3. out = res%onse!)et/riter-3. !!! D

mperez@fi.upm.es

3'

!e,upera,i-n de una ,oo?ie


I

)et"oo=ies-3' devuelve un arra1 de objetos de tipo "oo=ie

%ublic voi0 0oPost -Htt%Servlet@eAuest reAuest5 Htt%Servlet@es%onse res%onse3 t:ro1s ServletE6ce%tion5 I8E6ce%tion B Strin) valor"oo=ie. boolean encontra0o = 4alse. int i = ,. "oo=ieEF mis"oo=ies. "oo=ie mi"oo=ie. mis"oo=ies = reAuest!)et"oo=ies-3. 1:ile -Gencontra0o && iHmis"oo=ies!len)t:3 B mi"oo=ie = mis"oo=iesEiF. encontra0o = mi"oo=ie!)et2ame-3!eAuals->"iu0a0>3. i4 -encontra0o3 valor"oo=ie = mi"oo=ie!)et?alue-3. iII. D!!! D

mperez@fi.upm.es

3)

A,,eso a &ases de datos


I I

*D)!, interfaz de acceso a un sistema de gesti(n de bases de datos o 0D)3 Paquete java.sql' contiene un gran nLmero de clases e interfaces Ltiles para la programaci(n del acceso a bases de datos mediante *D)! !lases m%s utiles'
Driver !onnection tatement 0esult et

mperez@fi.upm.es

4/

Servlets vs C8$
I

&ficiencia
!"# inicia un nuevo proceso para cada petici(n <,,P. N oluci(n' =ast!"#O &l servlet se ejecuta solamente la primera vez que es llamado. Permanece en memoria una vez cargado 1 puede compartir informaci(n entre varias llamadas de clientes. >so de t+reads para las distintas peticiones.

I I I

Portabilidad 3odularidad &l uso de par%metros es m%s sencillo en el caso de los servlets

mperez@fi.upm.es

4.

Servlets 7 JS(
I

* P N*ava erver PagesO


P%ginas din%micas aadiendo funcionalidad al c(digo <,3$ imilar a A P o P<P, aunque puede utilizar diferentes plataformas como servidores &:tensi(n de la tecnologGa de servlets
7. 9. C. E. R. !liente realiza una petici(n de una p%gina * P al servidor web Qste envGa la solicitud al motor de * P !ompila la p%gina * P, convirtiFndola en un servlet &jecuta el servlet Devuelve los resultados al cliente en formato <,3$.

mperez@fi.upm.es

42

You might also like