Professional Documents
Culture Documents
Servlets
I
imilares a los scripts !"#, salvo que ofrecen una independencia de la plataforma.
mperez@fi.upm.es
Applets
cliente
El usuario pi e un applet en !a"a NAVEGADOR WEB Lle#a un applet en !a"a
ser"i or
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
*a4arta ,omcat
+ttp'55java.sun.com5webservices5 downloads5webservicespac4.+tml
* -D6 7.8
+ttp'55java.sun.com5products5servlet59.7
mperez@fi.upm.es
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
mperez@fi.upm.es
mperez@fi.upm.es
./
>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 ..
mperez@fi.upm.es
.3
)iblioteca Mjava:.servlet/
Servlet 3ttpServlet 4iServlet mperez@fi.upm.es .4
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
.'
&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
.)
&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
mperez@fi.upm.es
2.
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
// 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
mperez@fi.upm.es
25
getReader getInputStream()
mperez@fi.upm.es
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#
mperez@fi.upm.es
2'
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)
mperez@fi.upm.es
3/
mperez@fi.upm.es
3.
mperez@fi.upm.es
32
mperez@fi.upm.es
33
mperez@fi.upm.es
34
mperez@fi.upm.es
35
3ecanismos'
I!oo4iesJ eguimiento de sesiones Nsession trac ingO
mperez@fi.upm.es
>so de ,oo?ies
I
mperez@fi.upm.es
3#
mperez@fi.upm.es
3'
%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)
*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
mperez@fi.upm.es
42