Académique Documents
Professionnel Documents
Culture Documents
Miguel Hernndez Martos <enlavin@gcubo.org> Ingeniera y Control Remoto S. . !aniel Molina Cabrera <daniel.molina@"is#alinu$.es> !%CS I &!e#artment o' Com#uter Science and I(
Programacin web
)rotocolo H**) Carencia de estado en el cliente Inter'aces de usuario de'inidas con H*M+ ,eneralmente multi#lata'orma
Alternativa 1: CGI
*ecnologa veterana y muy #robada .astante sim#le Muy 'cil encontrar servicios de "osting
%n contra
Alternativa 2: Zope
'avor
%n contra
%levada curva de a#rendiza4e %dici5n #or -eb !*M+ Consume muc"os recursos %scasa documentaci5n avanzada
Alternativa 3: Webware
'avor
Ms r#ido /ue C,I y ms sim#le /ue 6o#e Com#leto 'rame-or1 orientado a ob4etos ce#ta di'erentes modelos de desarrollo
%n contra
0o es tan estndar como C,I 0o es 'cil encontrar "osting &como con 6o#e(
%stu#endo9 #5ngame : 7(
!" e# Webware$
%scrito y #ensado en )yt"on ;rientado a ob4etos r/uitectura modular ;#en Source Multi#lata'orma
%&!lo# Webware
Web'it7 servidor de a#licaciones P(P: )yt"on Server )ages9 #arecido a BS) )#er'it7 mane4o de usuarios %i&&le'it7 middle-are &ob4ect<relational ma##er( *a#+'it7 gesti5n de tareas #eri5dicas Cheetah7 motor e$terno de #lantillas
Web'it
Ar,!itect!ra
Browser
!"
cliente XML-RP
!"
Apache
WebKit$c%i !"!# mod_webkit !"!#
WebKit
Servlets PSPs
ontenido &statico
Ms r#ido /ue >eb8it.cgi Scri#t lias <-1 E<usr<lib<cgi2bin<-1cgiE %l ms r#ido de los ada#tadores Con'iguraci5n un #oco ms liosa Merece la #ena en entornos de alta carga
webware/ Cache/ Configs/Application.config AppServer.config ErrorMsgs/ Logs/ Context1/ Context2/ . . Sessions/ AppServer AppServer.bat Launch.py !Service.py "eb#it.cgi $neShot.cgi
Cache de clasess, servlets, etc Configuracin de las aplicaciones instaladas Configuracin del servidor de aplicaciones Mensajes de error que se van generando Logs del servidor Contextos (pueden llamarse como se quiera)
Datos persistentes de las sesiones Script para lan ar el servidor de aplicaciones Lo mismo pero en !in"# Lan ador del servidor de aplicaciones Wrapper para instalar servicio en Win32 $daptador C%& $daptador C%& para depuracin
(ervlet#
;b4etos /ue se e4ecutan dentro de >eb8it Se cargan en memoria en la #rimera #etici5n Ms r#idos /ue los C,I )ueden mantener estado en el servidor de a#licaciones %/uivalentes a los servlets de B:%% Heredan de Web'it.(ervlet o de cual/uiera de sus descendientes
Web'it.2**P(ervlet Web'it.Page
Conte3to#
Se e4ecuta antes /ue cual/uier servlet )uede #onerse a" c5digo de inicializaci5n Si contiene una 'unci5n conte3tInitiali1e entonces se llamar a conte3tInitiali1e4application/ path0o50conte3t6
+a con'iguraci5n de los conte$tos se guarda en Application.con5ig 0ota7 me4or #oner todos los m5dulos de accesorios 'uera de los conte$tos
2ello Worl&7
Se reutiliza una instancia de FServletG del #ool de instancias9 o si el #ool est vaco se crea una nueva Se crea un ob4eto F*ransactionG Se e4ecutan en secuencia los mHtodos7
<e,!e#t7 #etici5n del cliente <e#pon#e7 res#uesta &cabeceras9 contenido( (ervlet (e##ion
;tro e4em#lo
world!')
writeTitle()
Peticione#: 2**P<e,!e#t
Cam#os ,%*<);S* .5iel&4name/ ?&e5a!lt@6 .ha#Aiel&4name6 .5iel. Coo1ies7 .coo+ie4name/ ?&e5a!lt@6 .ha#Coo+ie4name6 .coo+ie#46 Cuando da lo mismo si es ,%*<);S*<Coo1ie se usa .val!e4name/ ?&e5a!lt@6 .ha#Bal!e4name6 .val!e#46 Se usa tambiHn #ara #asar variables a los C,I Rutas en el servidor ms cosas ...
<e#p!e#ta#: 2**P<e#pon#e
)or de'ecto el te$to se acumula en un bu''er "asta /ue se termina de generar el contenido o se vaca e$#lcitamente
.#et2ea&er4name/ val!e6 I cambia<a3ade una cabecera .5l!#h46 I vacia los bu''ers y envia el contenido
Cuando se estn enviando 'ic"eros grandes Cuando se /uieren mostrar resultados #arciales
.tran#action46/ .repon#e46/ .re,!e#t46/ .#e##ion46/ . application46 .write46 I e/uivalent to .res#onse&(.-rite&( .writeln46 I adds a ne-line at t"e end .html>nco&e46 .!rl>nco&e46 .5orwar&46 .incl!&e)<D46 .call%etho&-5(ervlet46
Ctilidades varias
Aorm!lario#
+os 'ormularios #ueden #rocesarse a mano consultando los valores .5iel&46 en writeContent46 o bien )ueden #rocesarse algo ms automticamente con los F ctionsG de >eb8it
socian di'erentes botones o acciones con mHtodos de un servlet C5digo ms lim#io y reutilizable /ue si se com#rueban uno #or uno los #armetros
Action#
El mtodo .respond() revisa los campos _action_ACCION donde ACCION debe corresponder con un mtodo devuelto por .actions() Si se encuentra un campo con el nombre adecuado se llamar! a handleAction(ACCION) en ve" de a writeHTML()
Aorwar&#
%s como una redirecci5n de la /ue ni el servidor -eb ni el cliente tienen constancia Se enca#sula un nuevo Re/uest en la transacci5n y se le #asa al nuevo servlet Cuando el servlet llamado termina se devuelve el control al servlet llamador9 #ero todo el contenido y las cabeceras del llamador son eliminadas )uede usarse #ara im#lementar validadores Se usa con #el5.5orwar&4E(ervletE6
+as sesiones sirven #ara guardar datos entre #eticiones +as sesiones caducan des#uHs de un cierto tiem#o
%emory7 las sesiones activas se mantienen todas en memoria Fynamic7 se establece un umbral de antigMedad #or encima del cual las sesiones se #asan a disco9 y en caso contrario se mantienen en memoria Aile7 #ara cada #etici5n la sesi5n se lee de disco y se guarda en disco
+as sesiones siem#re se guardan en disco cuando 'inaliza la e4ecuci5n del servidor de a#licaciones
Cada sesi5n se identi'ica #or un identi'icador aleatorio )or de'ecto dic"o identi'icador se almacena en una coo1ie en el navegador Si se cambia )#eA!tomaticPath(e##ion# a N
%l identi'icador de sesi5n se #asa #or la CR+ Oa no se re/uiere ninguna coo1ie +as urls son ms com#le4as y susce#tibles de 'allos de seguridad
>eb8it #or a"ora no #uede determinar cul es el me4or sistema #ara mantener la sesi5n
Sinta$is ins#irada en BS) .asado en )yt"on cceso al )I de >eb8it Dle$ible )S) .ase Class 'rame-or1 Se #ueden a3adir mHtodos a las clases generadas #or )S) Se com#ila una clase derivada de >eb8it.)age )or de'ecto se incluye todo el contenido en el mHtodo write2*%D46
%arca# P(P
GHI e3pr HJ
GH blo,!e0&e0c&igo HJ
.lo/ue de c5digo a e4ecutar en el conte$to del servlet Cuidado es#ecial con los es#acios y tabuladores
Firectiva# P(P
MHtodo del servlet donde se generar el H*M+. )or de'ecto ser write2*%D46
Firectiva# P(P
Incluye un 'ic"ero en tiem#o de com#ilaci5n. Se #arsea como )S) Si el 'ic"ero cambia durante la e4ecuci5n no se vern los cambios %/uivalente #el5.incl!&e)<D4Emyincl!&eE6 Se carga el 'ic"ero en cada #etici5n Se lee de disco sin #arsear )S) Se lee de disco en cada #etici5n Se incluye el 'ic"ero tal cual en tiem#o de com#ilaci5n9 sin #arsear )S) Solo se lee el 'ic"ero una vez en la com#ilaci5n
Gp#p:incl!&e pathI:myincl!&e;J
Gp#p:in#ert 5ileI:myincl!&e.html;J
.lo/ues automticos
.lo/ues manuales
GH 'or i in range&N@(7 4 P i MHJ de'ine automticamente un blo/ue /ue indenta al mismo nive /ue la siguiente instrucci5n del bucle y termina con cual/uier tag GH HJ &#.e4. GH #ass HJ(
+laves
Se #ueden em#lear llaves N O #ara la indentaci5n y eliminar ambigMedades debidas al 'ormateo del H*M+
*a#+'it
Clases
*as18it.*as1 *as18it.Sc"eduler
Cheetah
QRuH tenemosS
(ervlet7 %structura de Clases #ara generar datos dinmicos9 y generar la salida Fen c5digoG. P(P7 )ginas H*M+ con )yt"on em#otrado #ara generar #ginas dinmicas.
(ervlet7 C5digo de salida FH*M+G a 'uego en el c5digo. P(P7 )uede conducir a e$ceso de c5digo en las #ginas.
Q;tra o#ci5nS
,enerar mediante Servlet la in'ormaci5n dinmica. Ctilizar #lantillas #ara generar la salida.
Mayor se#araci5n C5digo<)resentaci5n. %structura de )lantillas &)ginas H*M+( con un sublengua4e de acceso a datos en )yt"on. )uede utilizarse integrado en >eb>are y como m5dulo inde#endiente. +engua4e Dcil de a#render. Sistema vanzado de Cac"H. dmite divisi5n 4err/uica de las #lantillas.
Realiza las o#eraciones /ue desee &acceso a .ase de !atos9 identi'icaci5n del usuario ...(. ,uardar los datos /ue a'ectan a la #resentaci5n &usuario9 t"eme elegido9 ...( en variables de comunicaci5n con la #lantilla. !evolver como salida la a#licaci5n de la #lantilla. C5digo H*M+ con #arte dinmica /ue utilizan dic"as variables #ara generarse.
Cheetah* E.e%plo
Hello.p&
from WebKit.Page import Page from C'eeta'.(emplate import (emplate class Hello(Page): def ))init))(self): Page.))init))(self) self.template * (emplate(file*'(emplates+'ello.tmpl') def writeContent(self): "ser.self.re,"est.field('"ser' 'anon&mo"s') self.template."ser * "ser self.writeln(self.template)
2ello.tmpl
Hello.tm#l
-'tml. -'ead. -title./ienvenido 0"ser-+title. -+'ead. -bod&. -'1./ienvenido -+bod&. -+'tml. 0"ser a esta primera pr"eba-+'1.
+os identi'icadores /ue em#iezan #or T son variables9 se sustituyen dmite condionales Ui' ... Uend i'. dmite bucles U'or9U'oreac" y U-"ile dmite encadenar #lantillas dentro de otras
Uinclude #ara incluir #lantillas Uinclude ra- #ara incluir 'ic"eros sin analizar
/"cle if
'4r"g"a&' 'Per"' 'Colombia' 'Costa 5ica'
senorita!-+H1.
bab&!-+H1.
@
nombre: 0"ser.name 3pellidos: 0"ser.apellidos
Cheetah: Cache
C"eeta" admite un sistema de cac"H muy avanzado. s9 mientras se mantenga las mismas variables de interacci5n devolvera la misma cac"H. Se #uede guardar en cac"H regiones de 'ic"eros mediante Pcache .... Pen& cache +as cac"Hs se #ueden guardar mientras se cum#la una condici5n o durante un tiem#o establecido. Se #uede asignar un identi'icador a un regi5n cac"H &#or usuario9 #or e4em#lo(9 #ara discriminar.
2cac'e timer*'3Bm'
id*'cac'e1'
2C 3ct"ali7ado cada media 'ora C2 2for 0c"st in 0c"stomer 0c"st.name: 0c"st.street D 0c"st.cit& 2end for 2end cac'e
2cac'e id*'sidebar'
test*(0is</4pdated or 0someEt'erCondition)
2C3ct"ali7ado mientras no se modifi,"e la /ase de <atos C2 ... left sidebar H(8: ... 2end cac'e
%n este caso el servlet no es una #lantilla9 sino /ue lo crea y le #asa los #armetros indicados.
template ' (emplate(file')ca*ecera+tmpl)) print (template)
!e esta 'orma se #ermite generar automticamente #or un tmpl el c5digo .py /ue genera la misma salida. c"eeta" com#ile <'ic"ero.tm#l>
s9 sim#lemente "aciendo un im#ort de dic"a clase se generara la salida. *ambiHn se #uede generar las #lantillas .tm#l a un 'ic"ero esttico H*M+.
<e5erencia#
"tt#7<<-eb-are.source'orge.net
!ocumentaci5n introductoria
"tt#7<<-eb-are.source'orge.net<)a#ers<
"tt#7<<-eb-are.source'orge.net<>i1i<
"tt#7<<---.c"eeta"tem#late.org<
"tt#7<<'un'orm1it.source'orge.net<
Q)reguntasS