Está en la página 1de 171

U n i v er si d ad d e N av ar r a

N af ar r o ak o U n i b er t si t at ea
Es c u e l a Su p e r i o r d e I n g e n i e r o s
I n g e n i a r i e n G o i M a i l a k o Es k o l a



CAMPUS TECN O L GICO DE LA UN IVERSIDAD DE N AVARRA. N AFARROAKO UN IBERTSITATEKO CAMPUS TEKN O LOGIKO A
Paseo de Manuel Lar dizbal 13. 20018 Donost ia-San Sebast in. Tel.: 943 219 877 Fax: 943 311 442 www.t ecnun.es infor macion@t ecnun.es











INFORMTICA III










Fernando Al onso Bl zquez
Dr . Ingeni er o Indust r i al

Ni col s Serrano Brcena
Dr . Ingeni er o Indust r i al

Soni a Cal zada Mnguez
Ingeni er o Indust r i al



San Sebast i n, Febr er o de 2004




Pref aci o

El pr esent e l i br o ha si do concebi do como un mat er i al de apoyo muy bsi co a l as cl ases de l a asi gnat ur a
Inf or mt i ca III, y en ni ngn caso sust i t uye a l as expl i caci ones de cl ase, t ant o t er i cas como pr ct i cas.
Debi do a l a var i edad de t emas que se t ocan en l a asi gnat ur a, cada uno de el l os es t r at ado de f or ma
muy somer a. Est e document o es pues, bsi cament e, una r ecopi l aci n de var i os manual es de di f er ent e
nat ur al eza y t emt i ca. En concr et o, se han i ncor por ado par t es, r eal i zando ci er t as act ual i zaci ones, de l os
si gui ent es manual es de l a col ecci n Apr enda Inf or mt i ca como si est uvi er a en pr i mer o , di sponi bl es
en l a Escuel a Super i or de Ingeni er os, TECNUN:
Apr enda Int er net como si est uvi er a en pr i mer o.
Apr enda Java como si est uvi er a en pr i mer o.
Apr enda Ser vl et s de Java como si est uvi er a en pr i mer o.
Por ot r o l ado, el l i br o r ecoge a su vez mat er i al pr oveni ent e de l as especi f i caci ones of i ci al es de HTML,
XML y de l as APIs (Appl i cat i on Pr ogr ammi ng Int er f aces) de Java.
Si n embar go, se ha t r at ado no sl o de i ncor por ar e i nt egr ar en un sol o document o mat er i al t an di spar ,
si no que se ha hecho un esf uer zo par a consegui r dar ci er t a coher enci a a t odo est e mat er i al , dest i l ar en l o
posi bl e l os concept os i mpor t ant es y segui r un hi l o conduct or : consegui r di sear , pr ogr amar y poner en
f unci onami ent o Si st emas de Inf ormaci n basados en l a Web.
Est e l i br o no t i ene l a i nt enci n de ser un manual de r ef er enci a par a ni nguno de l os t emas que t r at a, ya
que se queda a un ni vel i nt r oduct or i o en t odos el l os, si no que debe t omar se como si de not as de cl ase se
t r at ar a y que por s sol as no ser n de mucha ut i l i dad par a el al umno. Es f undament al l a asi st enci a a cl ase
y sobr e t odo l a r eal i zaci n de l as pr ct i cas semanal es que es donde se apl i ca l o vi st o en l as exposi ci ones
t er i cas.
Par a pr of undi zar y l l egar a domi nar cada uno de l os t emas o t ecnol ogas que se exponen en el pr esent e
document o se hace necesar i o no sol o acudi r a manual es especi al i zados, manual es de r ef er enci a y
especi f i caci ones si no t ambi n un uso cont i nuado de l as mi smas.
Como compl ement o a est os apunt es, l a pgi na web de l a asi gnat ur a de Inf ormt i ca III
(ht t p: / / www. t ecnun. es/ Asi gnat ur as/ Inf or mat 3/ def aul t . ht ml ) pone a di sposi ci n del al umno una ser i e de
recursos sobr e cada una de l as t ecnol ogas expuest as y sobr e ot r as que no se desar r ol l an en l a asi gnat ur a
por l a r est r i cci n que l a dur aci n de st a i mpone, per o que guar dan r el aci n con l os cont eni dos que
conf or man el ncl eo de l a asi gnat ur a y adems t i enen un i nt er s especi al . A su vez, en l a pgi na web de l a
asi gnat ur a se encuent r a t odo el mat eri al que se va a usar dur ant e el cur so. Al l se pueden encont r ar est os
apunt es, l os gui ones de l as pr ct i cas, l as pr esent aci ones Power poi nt ut i l i zadas en l as cl ases t er i cas, l os
f i cher os con el cdi go f uent e que apar ece en est os apunt es, l os f i cher os de par t i da necesar i os par a l as
pr ct i cas as como l a sol uci n a est as.



Fernando Al onso Bl zquez
Febr er o de 2004




ndi ce
1. Int roducci n 1
1. 1. Int er net en l a act ual i dad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1. 1. 1. Int er net , r evol uci ona l a maner a de hacer negoci os? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1. 1. 1. 1. Mul t i naci onal es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1. 1. 1. 2. Pequeas Y Medi anas Empr esas ( PYMEs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1. 1. 1. 3. Las empr esas pur as de Int er net ". com". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. 2. Mot i vaci n y Obj et i vos de l a asi gnat ur a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. 2. 1. Papel dent r o de l a Int ensi f i caci n en Tecnol ogas de l a Inf or maci n (Ingeni er a Indust r i al ) 3
1. 2. 2. Papel dent r o de l a Int ensi f i caci n en Tel emt i ca (Ingeni er a de Tel ecomuni caci n) . . . . . . . . . 3
1. 3. Est r uct ur a de l a asi gnat ur a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. 4. Sof t war e necesar i o par a l a asi gnat ur a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. General i dades de Int er net 7
2. 1. Pr ot ocol o TCP/ IP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. 2. Pr ot ocol o HTTP y l enguaj e HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. 3. URL (Uni f or m Resour ce Locat or ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2. 3. 1. URLs del pr ot ocol o HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. 3. 2. URLs del pr ot ocol o FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. 3. 3. URLs del pr ot ocol o cor r eo el ect r ni co (mai l t o) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. 3. 4. URLs del pr ot ocol o Tel net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2. 3. 5. Nombr es especf i cos de f i cher os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3. Lenguaj e HTML 11
3. 1. Int r oducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. 2. Tags gener al es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3. 3. For mat o de t ext o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. 3. 1. TAGs gener al es de un document o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. 3. 2. Coment ar i os en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. 3. 3. Car act er es de separ aci n en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. 3. 4. TAGs de or gani zaci n o par t i ci n de un document o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. 3. 5. For mat eo de t ext os si n par t i ci ones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3. 3. 6. Cent r ado de pr r af os y cabecer as con <CENTER>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. 3. 7. Ef ect os de f or mat o en t ext o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3. 3. 8. Car act er es especi al es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3. 4. Li st as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3. 4. 1. Li st as desor denadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
ii Indice
3. 4. 2. Li st as or denadas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3. 4. 3. Li st as de def i ni ci ones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3. 5. Imgenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3. 6. Li nks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. 7. Tabl as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. 8. Fr ames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. 8. 1. Int r oducci n a l os f r ames. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3. 8. 2. Sal i da a vent anas o f r ames concr et as de un br owser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3. 8. 3. Nombr es de TARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3. 9. Mapas de i mgenes o i mgenes sensi bl es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3. 9. 1. Cmo f unci ona un mapa de i mgenes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3. 9. 2. Mapas de i mgenes pr ocesados por el br owser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3. 10. Edi t or es y conver sor es HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4. Formul ari os y CGIs 23
4. 1. For mul ar i os (For ms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4. 2. Pr ogr amas CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5. JavaScri pt 29
5. 1. Int r oducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. 1. 1. Pr opi edades del Lenguaj e JavaScr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. 1. 2. El l enguaj e JavaScr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5. 1. 3. Var i abl es y val or es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5. 1. 4. Sent enci as, Expr esi ones y Oper ador es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5. 1. 5. Est r uct ur as de Cont r ol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5. 1. 6. Funci ones y Obj et os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5. 1. 6. 1. Funci ones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5. 1. 6. 2. Obj et os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5. 1. 7. La TAG Scr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5. 2. Act i vaci n de JavaScr i pt : Event os (Event s). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5. 2. 1. Event os y acci ones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5. 2. 1. 1. Acci ones de Navegaci n y Event os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5. 2. 2. Gest or es de Event os (Event Handl er s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5. 2. 2. 1. Decl ar aci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5. 2. 2. 2. Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5. 2. 2. 2. 1. Gest or es a ni vel de document o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5. 2. 2. 2. 2. Gest or es a ni vel de f or mul ar i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5. 2. 2. 2. 3. Gest or es a ni vel de el ement os de f or mul ar i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5. 3. Cl ases en JavaScr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5. 3. 1. Cl ases Pr edef i ni das (Bui l t -In Obj ect s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5. 3. 1. 1. Cl ase St r i ng. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5. 3. 1. 2. Cl ase Mat h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5. 3. 1. 3. Cl ase Dat e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5. 3. 2. Funci ones Pr edef i ni das (Bui l t -i n Funct i ons) : eval , par seFl oat , par seInt . . . . . . . . . . . . . . . . . . . . . . . . 39
ndice iii
5. 3. 2. 1. eval (st r i ng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5. 3. 2. 2. par seFl oat (st r i ng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5. 3. 2. 3. par seInt (st r i ng, base) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5. 3. 3. Cl ases del br owser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5. 3. 3. 1. Cl ase Wi ndow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5. 3. 3. 2. Cl ase Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5. 3. 3. 3. Cl ase Locat i on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5. 3. 3. 4. Cl ase Hi st or y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5. 3. 4. Cl ases del document o HTML (anchor s, f or ms, l i nks) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5. 4. Cl ases y Funci ones def i ni das por el usuar i o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5. 4. 1. Funci ones (mt odos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5. 4. 2. Obj et os como Ar r ays (Vect or es) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5. 4. 3. Ext ender Obj et os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5. 4. 4. Funci ones con un nmer o var i abl e de ar gument os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5. 5. Expr esi ones y oper ador es de JavaScr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5. 5. 1. Expr esi ones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5. 5. 1. 1. Expr esi ones Condi ci onal es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5. 5. 2. Oper ador es de asi gnaci n (=, +=, -=, *=, / =) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5. 5. 3. Oper ador es ar i t mt i cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5. 5. 4. Oper ador es l gi cos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5. 5. 5. Oper ador es de Compar aci n (= =, >, >=, <, <=, ! =) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5. 5. 6. Oper ador es de St r i ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. 5. 7. Pr i or i dad de l os oper ador es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. 6. Sent enci as de cont r ol de JavaScr i pt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. 6. 1. La sent enci a i f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. 6. 2. Bucl es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. 6. 2. 1. Bucl e f or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5. 6. 2. 2. Bucl e whi l e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5. 7. Coment ar i os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6. Int roducci n a Java 53
6. 1. Pr ogr amaci n Or i ent ada a Obj et os. Fundament os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6. 2. El l enguaj e de pr ogr amaci n Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6. 3. Car act er st i cas gener al es de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6. 4. Ent or nos de desar r ol l o de Java. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6. 4. 1. Java Devel opment Ki t (JDK) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6. 4. 1. 1. Inst al aci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6. 4. 1. 2. Document aci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6. 4. 1. 3. Manos a l a obr a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6. 4. 2. Ent or nos IDE (Int egr at ed Devel opment Envi r onment ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6. 5. Est r uct ur a gener al de un pr ogr ama en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6. 5. 1. Concept o de Cl ase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6. 5. 2. Her enci a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
iv Indice
6. 5. 3. Concept o de Int er f ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6. 5. 4. Concept o de Package. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6. 5. 5. La j er ar qua de cl ases de Java (API) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7. GUI y ot ros el ement os de Java 61
7. 1. Gr aphi c User Int er f aces (GUI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. 1. 1. Component es gr f i cos: Abst r act Wi ndow Tool ki t (AWT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. 1. 1. 1. Wi dget s o component es el ement al es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. 1. 1. 2. Mt odos de or gani zaci n: Cont enedor es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. 1. 1. 3. Di seo Vi sual : Layout s. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. 1. 2. Event os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7. 1. 3. Appl et s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7. 2. Ot r os el ement os de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7. 2. 1. Manej o de Excepci ones y Er r or es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7. 2. 2. Ent r ada/ Sal i da de Dat os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7. 2. 3. Subpr ocesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8. JDBC: acceso a bases de dat os 73
8. 1. Int r oducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8. 1. 1. Qu es ODBC?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8. 1. 2. Qu es y que hace JDBC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8. 1. 3. JDBC ver sus ODBC y ot r as APIs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8. 1. 4. Cont r ol ador es JDBC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8. 1. 4. 1. Ti pos de cont r ol ador es (Dr i ver s) de JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8. 1. 4. 2. Cmo obt ener l os Dr i ver s de JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8. 1. 5. JDBC- ODBC Br i dge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8. 2. JDBC 3. 0 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8. 2. 1. Paquet e java.sql. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Connect i on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8. 2. 2. Dr i ver Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
8. 2. 3. Connect i on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8. 2. 4. St at ement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8. 2. 5. Resul t Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8. 3. Empezando con JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8. 3. 1. Base de dat os en f or mat o Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8. 3. 2. Cr eaci n de un Dat a Sour ce Name (DSN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8. 3. 3. Ej empl o de una apl i caci n JDBC si mpl e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8. 3. 4. Ej empl o de una apl i caci n JDBC con excepci ones y Met aDat a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9. Servl et s 85
9. 1. Cl i ent es y Ser vi dor es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9. 1. 1. Cl i ent es (cl i ent s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9. 1. 2. Ser vi dor es (ser ver s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9. 2. Tendenci as Act ual es par a l as apl i caci ones en Int er net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9. 3. Di f er enci as ent r e l as t ecnol ogas CGI y Ser vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
ndice v
9. 4. Car act er st i cas de l os ser vl et s. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
9. 5. JSDK 2. 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
9. 5. 1. Vi si n gener al del API de JSDK 2. 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
9. 5. 2. La apl i caci n ser vl et r unner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9. 5. 3. Fi cher os de pr opi edades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9. 5. 4. Ej ecuci n de l a apl i caci n ser vl et r unner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9. 6. Ej empl o Int r oduct or i o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9. 6. 1. Inst al aci n del Java Ser vl et Devel opment Ki t (JSDK 2. 0) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9. 6. 2. For mul ar i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9. 6. 3. Cdi go del Ser vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
9. 7. El Ser vl et API 2. 0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9. 7. 1. El ci cl o de vi da de un ser vl et : cl ase Gener i cSer vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9. 7. 1. 1. El mt odo i ni t ( ) en l a cl ase Gener i cSer vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9. 7. 1. 2. El mt odo ser vi ce( ) en l a cl ase Gener i cSer vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
9. 7. 1. 3. El mt odo dest r oy() en l a cl ase Gener i cSer vl et : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
9. 7. 2. El cont ext o del ser vl et (ser vl et cont ext ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9. 7. 2. 1. Inf or maci n dur ant e l a i ni ci al i zaci n del ser vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9. 7. 2. 2. Inf or maci n cont ext ual acer ca del ser vi dor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9. 7. 3. Cl ases de ut i l i dades (Ut i l i t y Cl asses) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
9. 7. 4. Cl ase Ht t pSer vl et : sopor t e especf i co par a el pr ot ocol o HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9. 7. 4. 1. Mt odo GET: codi f i caci n de URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
9. 7. 4. 2. Mt odo HEAD: i nf or maci n de f i cher os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
9. 7. 4. 3. Mt odo POST: el ms ut i l i zado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9. 7. 4. 4. Cl ases de sopor t e HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9. 7. 4. 5. Modo de empl eo de l a cl ase Ht t pSer vl et . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
10. Servl et s con acceso a bases de dat os 107
10. 1. Acceso a bases de dat os medi ant e ser vl et s y JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
10. 2. Ej empl o 1: Escr i bi r en una base de dat os t i po Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
10. 3. Ej empl o 2: Consul t ar una base de dat os Ti po Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
11. Sesi n en Servl et s 119
11. 1. For mas de segui r l a t r ayect or i a de l os usuar i os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11. 2. Cooki es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11. 2. 1. Cr ear un obj et o Cooki e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
11. 2. 2. Est abl ecer l os at r i but os de l a cooki e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
11. 2. 3. Envi ar l a cooki e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11. 2. 4. Recoger l as cooki es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11. 2. 5. Obt ener el val or de l a cooki e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
11. 3. Sesi ones (Sessi on Tr acki ng) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
11. 4. Reescr i t ur a de URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
12. XML (eXt ensi bl e Markup Language) 127
12. 1. INTRODUCCIN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
12. 1. 1. CONCEPTOS BSICOS DE XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
vi Indice
12. 1. 2. DTD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12. 2. DOCUMENTOS XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12. 2. 1. CABECERA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12. 2. 1. 1. Inst r ucci ones de pr oceso ( PI) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12. 2. 1. 2. Decl ar aci n de t i po de document o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
12. 2. 2. CONTENIDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12. 2. 2. 1. El ement o r az. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12. 2. 2. 2. El ement os de dat os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12. 2. 2. 3. At r i but os de el ement o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12. 2. 2. 4. Ref er enci as a ent i dad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12. 2. 2. 5. Dat os no anal i zados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12. 3. RESTRINGIR XML CON DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12. 3. 1. ESPECIFICAR ELEMENTOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12. 3. 1. 1. Pal abr a r eser vada ANY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
12. 3. 1. 2. El ement os ani dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12. 3. 1. 3. Pal abr a r eser vada #PCDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12. 3. 1. 4. El ement os vacos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12. 3. 1. 5. Indi cador es de r epet i ci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12. 3. 1. 6. Gr upos de el ement os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12. 3. 1. 7. Oper ador de opci n | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12. 3. 2. DEFINIR ATRIBUTOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12. 3. 2. 1. Modi f i cador es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12. 3. 2. 2. Ti pos de at r i but o. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12. 3. 3. REFERENCIAS A ENTIDAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
13. SAX y DOM: Java APIs f or XML Parsi ng 135
13. 1. JAVA Y XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13. 1. 1. SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13. 1. 2. DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13. 2. ANALIZAR XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13. 2. 1. INSTANCIAR UN LECTOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13. 2. 2. ANALIZAR EL DOCUMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13. 2. 3. MANEJADORES DE CONTENIDO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
13. 2. 3. 1. Int er f az Cont ent Handl er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
13. 2. 3. 2. Int er f az Er r or Handl er . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13. 2. 4. PORTABILIDAD AL CARGAR EL ANALIZADOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13. 2. 5. VALIDAR XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13. 3. RECORRER XML: ANALIZAR CON DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13. 3. 1. INSTANCIAR UN ANALIZADOR DOM Y ANALIZAR EL DOCUMENTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
13. 3. 2. OBTENER EL RBOL DOM (OBJETO DOCUMENT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
13. 3. 3. ACCEDER A LOS NODOS DEL RBOL DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
13. 3. 3. 1. El nodo Document o (case Node. DOCUMENT_NODE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13. 3. 3. 2. El ement os (case Node. ELEMENT_NODE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
ndice vii
13. 3. 3. 3. Nodo de t i po t ext o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
13. 3. 4. MUTABILIDAD DE UN RBOL DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
13. 4. PROCESADORES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
14. Servi ci os Web XML 145
14. 1. Int r oducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14. 2. Escenar i os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14. 2. 1. Ser vi ci os si mpl es. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14. 2. 2. Int egr aci n de Apl i caci ones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14. 2. 3. Sol uci ones par a l a Gest i n de Pr ocesos de Negoci o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14. 3. Inf r aest r uct ur a de l os Ser vi ci os Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14. 3. 1. XML Web Ser vi ces Di r ect or i es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14. 3. 2. XML Web Ser vi ce Di scover y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14. 3. 3. XML Web Ser vi ce Descr i pt i on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14. 3. 4. XML Web Ser vi ce Wi r e For mat s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14. 4. Pr ot ocol o SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14. 5. Pr oceso de uso de un Ser vi ci o Web XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14. 6. Cmo se desar r ol l a un Ser vi ci o Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14. 7. Cmo se desar r ol l a un cl i ent e de Ser vi ci o Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14. 8. Her r ami ent as Java par a el di seo de Ser vi ci os Web XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
14. 8. 1. JAXR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14. 8. 2. JAXM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
14. 8. 3. JAX-RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Bi bl i ograf a 151

ANEXOS
A1. Int r oducci n a SQL 155
A1. 1. Int r oducci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A1. 2. Regl as si nt ct i cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A1. 3. Ej ecuci n de sent enci as SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
A1. 3. 1. Ti pos de dat os SQL y equi val enci a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
A1. 3. 2. Cr eaci n de t abl as . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
A1. 3. 3. Recuper aci n de i nf or maci n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
A1. 3. 4. Al macenar i nf or maci n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
A1. 3. 5. El i mi naci n de dat os. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
A1. 3. 6. Act ual i zaci n de dat os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159



CAPITULO 1
1. Int roducci n
1. 1. Int ernet en l a act ual i dad
1.1.1. Int er net , r evol uci ona l a maner a de hacer negoci os?
En un moment o en el que par ece que l o ms f ci l es deci r que Int er net "no es par a t ant o" y "que sl o es
un medi o ms", est e ar t cul o def i ende el ar gument o cont r ar i o: Int er net est empezando a r evol uci onar l a
maner a de hacer negoci os y cada vez ser ms i mpor t ant e.
En el mundo de Int er net hemos pasado por var i as et apas:
Et apa 1: Int er net i ba a ser l a r evol uci n. Nada i ba a ser como ant es. Tant o el B2C (comer ci o a
consumi dor es) como B2B ( comer ci o ent r e empr esas) i ban a ser un xi t o no compar abl e a t odo l o
sucedi do ant er i or ment e. Lo ni co i mpor t ant e er a ser r pi do. Se compr aba un domi ni o
(busi ness. com) por 7, 5 mi l l ones de dl ar es y t odo i ba muy r pi do y posi bl ement e muy mal .
Et apa 2: Tr as l os pr i mer os "sust os", se l l ega a l a concl usi n que el B2C es un desast r e aunque B2B
va a r evol uci onar el mundo ent r e empr esas. Empi ezan a af l or ar gr an cant i dad de por t al es ". com"
enf ocados al comer ci o el ect r ni co ent r e empr esas y empi ezan a cer r ar empr esas B2C (boo. com por
ej empl o) .
Et apa 3: Tr as l os segundos "sust os", se cambi a y se di ce que ni el B2B ni el B2C van a f unci onar .
Int er net ha si do un engao. Es sl o un medi o ms como l o son el cor r eo y el t el f ono.
Ent onces, no hay ms que habl ar ?. Cl ar o que s Int er net sl o est naci endo como her r ami ent a par a
hacer negoci os.
Al gunos def endemos que l a r eal i dad es que Int er net va a r evol uci onar l a maner a de hacer negoci os
aunque eso no va a ser cr eando empr esas pur as de Int er net "si n pi es ni cabeza" si no par a que l as empr esas
que oper aban ya en el mundo f si co usen Int er net par a mej or ar sus r esul t ados r educi endo cost es e
i ncr ement ando i ngr esos.
Int er net y l os si st emas de i nf or maci n modi f i car n l as est r uct ur as de cost es de l as empr esas, l a maner a
en l a que se r el aci onan con cl i ent es y pr oveedor es, l os concept os de f i del i zaci n de cl i ent es y de
empl eados, et c.
Per o cl ar o, ni nguna r evol uci n ha si do ni ser nunca ni f ci l ni r pi da. Cuando James Wat t descubr i l a
mqui na de vapor , di f ci l ment e nadi e podr a haber i magi nado l os cambi os que gener ar a. En aquel l os
moment os mucha gent e deca "nunca dej ar emos de usar cabal l os" y en el si gl o XXI pensamos dnde est n
ahor a l os cabal l os?.
De hecho, l a penet r aci n de Int er net est si endo mucho ms r pi da que el r est o de t ecnol ogas que
ahor a conocemos y ampl i ament e ut i l i zamos. Si se cal cul a el t i empo que se ha t ar dado en al canzar l os 50
mi l l ones de usuar i os de di st i nt as t ecnol ogas t enemos que l a r adi o t ar d 38 aos, l a t el evi si n 13 aos, l os
or denador es 16 aos e Int er net sl o 5 aos.
El pr obl ema y l a conf usi n que ha habi do con Int er net han si do l os pl azos. Se pensaba que l a r evol uci n
se i ba a hacer en un ao. Pensando en el i mpact o en l as empr esas, se podr an di st i ngui r t r es gr andes
gr upos.

2 Informtica III

1. 1. 1. 1. Mul t i naci onal es
Par a l as mul t i naci onal es y gr andes empr esas, Int er net es una pr i or i dad est r at gi ca ya que es una
maner a de mej or ar sus r esul t ados de una maner a r adi cal .
En est as empr esas, en l as que el nmer o de pr oveedor es, cl i ent es y empl eados es muy al t o, Int er net
l es of r ece gr andes posi bi l i dades debi do a l a i mpor t ant e r educci n de cost es de i nt er acci n con est os
gr upos.
Si gui endo l a f r mul a:
Cost e t ot al comuni caci n = Nmer o de comuni caci ones x cost e uni t ar i o de comuni caci n
En l as gr andes empr esas, al ser muy al t o el nmer o de comuni caci ones, l o ni co que pueden hacer par a
r educi r el cost e t ot al de comuni caci n es r educi r el cost e uni t ar i o de cada una de el l as.
Pensemos en un caso t an senci l l o como l a consul t a del pr eci o sobr e un pr oduct o det er mi nado.
Consegui r der i var est as consul t as a t r avs de Int er net consi gue que l os mi l es de consul t as que se r eal i zan
par a conocer el pr eci o de est e pr oduct o se r eal i cen a cost e pr ct i cament e nul o.
Razonami ent os anl ogos se pueden hacer par a el envo de i nf or maci n a cl i ent es, l a comuni caci n
i nt er na a sus empl eados, par a l as sol i ci t udes de mat er i al a pr oveedor es, par a l a gener aci n y envo de
of er t as a cl i ent es, et c.
1. 1. 1. 2. Pequeas Y Medi anas Empr esas (PYMEs)
En cuant o a l as PYMEs, en un est udi o r eal i zado por el equi po de Impr oven Consul t or es, se concl uy que
l as or gani zaci ones no est n consi gui endo mej or ar sus r esul t ados empl eando Int er net por una o var i a de l as
si gui ent es causas:
1. Desconoci mi ent o t ot al o par ci al de l as i mpor t ant es opor t uni dades que of r ecen l as nuevas
t ecnol ogas en gener al ( e Int er net en par t i cul ar ) l o que l l eva a poco apoyo por par t e de l a
di r ecci n.
2. Ret or no de l a i nver si n poco cl ar o.
3. Se subest i man l as posi bi l i dades que br i nda Int er net a l a empr esa.
4. Fal t a de pl ani f i caci n en el pr oceso de i nt egr aci n de Int er net .
5. Fal t a de per sonal cual i f i cado par a est a r ea.
6. No se r emodel an l os pr ocesos de l a empr esa par a l a cor r ect a adecuaci n del negoci o.
7. No se t i ene como pr i or i t ar i o.
8. Resi st enci a al cambi o.
9. Fal t a de met odol oga en el desar r ol l o del pr oyect o.
Captulo 1. Introduccin 3
Con l o que, como se puede obser var an hay mucho cami no por r ecor r er aunque muchas de el l as ya
han empezado a r ecor r er l o. Las PYMEs t i enen mul t i t ud de posi bi l i dades en Int er net , con un enf oque
di st i nt o a l as mul t i naci onal es, con i nver si ones mucho menor es, per o t i enen muchsi mas posi bi l i dades.
1. 1. 1. 3. Las empr esas pur as de Int er net ". com"
Aunque est as empr esas son una mi nor a, es i mpor t ant e hacer una r esea en el l as por que han si do l a
bander a de est a nueva r evol uci n y ms en un moment o en el que un cl si co de l as . com, Amazon. com ha
dado por pr i mer a vez benef i ci os.
Y est o que es al go casi nor mal en cual qui er empr esa, en el caso de Amazon es una gr an not i ci a. Basada
en una vi si n muy cl ar a sobr e l as posi bi l i dades del l i der azgo y del posi ci onami ent o en Int er net , Amazon ha
l anzado una car r er a haci a est e l i der azgo basada en i nver si ones y gast os si n medi da y a cost a de l a
conf i anza "casi ci ega" de sus i nver sor es.
Tr as unos aos dur os par a Amazon. com, par ece que act ual ment e est cer ca de al canzar un
posi ci onami ent o que l e puede dar unas cuant as dcadas de r ent abi l i dad. Aunque el mer cado y l os
i nver sor es si empr e t endr n su l t i ma pal abr a.
1. 2. Mot i vaci n y Obj et i vos de l a asi gnat ura
El obj et i vo de l a asi gnat ur a es i ni ci ar se en el conoci mi ent o de l as t ecnol ogas i nf or mt i cas que
per mi t an post er i or ment e el desar r ol l o de apl i caci ones y si st emas de i nf or maci n basados en l a Web. En
l as asi gnat ur as pr evi as de i nf or mt i ca se ha conoci do l a par t e cl i ent e de l as apl i caci ones por l o que est a se
cent r a en l a par t e ser vi dor e Int er net .
1.2.1. Papel dent r o de l a Int ensi f i caci n en Tecnol ogas de l a Inf or maci n (Ingeni er a Indust r i al )
Par a un Ingeni er o Indust r i al i nt ensi f i cado en Tecnol ogas de l a Inf or maci n es i mpor t ant e el
conoci mi ent o de l as posi bi l i dades que of r ece Int er net par a l os negoci os. Debe conocer l as t ecnol ogas que
en l a act ual i dad per mi t en:
Ar t i cul ar l os pr ocesos de negoci o dent r o de una empr esa. Si st emas de Inf or maci n.
Expl ot ar posi bi l i dades de negoci o ant es i mposi bl es. Comer ci o El ect rni co (e-Comer ce).
Int egr ar a l os di f er ent es act or es i nvol ucr ados en l a cadena de val or . Empresa Ext endi da.
Real i zar oper aci ones ent r e empr esas a t r avs de l a r ed. Servi ci os Web.
1.2.2. Papel dent r o de l a Int ensi f i caci n en Tel emt i ca (Ingeni er a de Tel ecomuni caci n)
Par a un Ingeni er o de Tel ecomuni caci n i nt ensi f i cado en Tel emt i ca, Int er net y l as t ecnol ogas
asoci adas br i ndan una ser i e de posi bi l i dades muy i nt er esant es como son l as si gui ent es:
Cont rol remot o de Di sposi t i vos a t ravs de Int ernet y desde cual qui er ordenador . Por nombr ar
al guna apl i caci n i nt er esant e, cabr a r esal t ar el cont r ol de l a domt i ca del hogar va Int er net o el
cont r ol de cual qui er di sposi t i vo de una pl ant a desde cual qui er or denador va Int er net .
Si st emas di st ri bui dos. Desar r ol l o de apl i caci ones di st r i bui das y su i mpact o i nher ent e dent r o del
cont ext o de l as r edes de comuni caci ones. Est as t ecnol ogas est n di seadas dent r o del escenar i o
de l as ar qui t ect ur as de pr ot ocol os par a l a comuni caci n t ant o de pr ocedi mi ent os como de obj et os
r emot os y di st r i bui dos.
1. 3. Est ruct ura de l a asi gnat ura
La asi gnat ur a est est r uct ur ada en cuat r o secci ones:
Secci n 1: Int ernet . En est a secci n se exponen l os f undament os de HTML. Se apr ender a cr ear
f or mul ar i os medi ant e l os cual es envi ar o pedi r i nf or maci n del ser vi dor . Se dar n una pi ncel adas
sobr e JavaScr i pt , l enguaj e scr i pt que sopor t an l os navegador es y que nos per mi t i r n dar ci er t a
f unci onal i dad a l as pgi nas Web.
Secci n 2: Java. Est a secci n es una i nt r oducci n muy bsi ca a l a pr ogr amaci n con l enguaj e Java.
Se ver n l os f undament os y se apr ender a manej ar el ent or no de desar r ol l o di st r i bui do
gr at ui t ament e por Sun Mi cr osyst ems Inc.
Secci n 3: Java avanzado. En est a secci n se pr of undi zar en el l enguaj e Java, vi endo ci er t as
f unci onal i dades ms avanzadas como son l a conect i vi dad con Bases de Dat os medi ant e JDBC y l os
Ser vl et s.
4 Informtica III
Secci n 4: Comuni caci ones en red. Est a l t i ma secci n t i ene como obj et i vo most r ar el pot enci al
de Int er net como her r ami ent a de comuni caci n, no sl o ent r e per sonas si no t ambi n ent r e
mqui nas. Se dar n unas noci ones sobr e XML, que se est i mponi endo como est ndar en l as
comuni caci ones, apr endi endo a t r at ar document os XML medi ant e Java. Fi nal ment e se i nt r oduci r n
l os l l amados Ser vi ci os Web XML.
Como el ement o i nt egr ador de t odas est as t ecnol ogas, una sesi n se dedi car a l a puest a en mar cha de
una apl i caci n de Comer ci o El ect r ni co desar r ol l ada ut i l i zando t odas l as t ecnol ogas expuest as en l a
asi gnat ur a y que dar una vi si n gl obal de est a.
La f or ma de eval uar al al umno sobr e l os conoci mi ent os adqui r i dos en l a asi gnat ur a ser a t r avs de l a
l abor que el al umno desar r ol l e dur ant e el cur so, y est ar desgl osado en cuat r o par t es:
Eval uaci n cont i nua dur ant e el cur so
Val oraci n del t rabaj o: di f i cul t ad del t ema, sol uci ones adopt adas y r esul t ado f i nal
Document o pr esent ado acer ca del t r abaj o
Present aci n y def ensa del t r abaj o
La met odol oga de t r abaj o de l a asi gnat ur a es l a si gui ent e: cada semana hay una cl ase t er i ca y una
cl ase pr ct i ca. En l as cl ases t er i cas se desar r ol l an l os concept os necesar i os sobr e un t ema concr et o que
ms t ar de se ponen en pr ct i ca en l as sesi ones en el aul a de or denador es.
Los gui ones de l as pr ct i cas est n di seados de f or ma que el al umno pueda acabar l a pr ct i ca semanal
en un mxi mo de 45 mi nut os. De est a f or ma, l os 45 mi nut os r est ant es de l a cl ase pr ct i ca est n
di sponi bl es par a i r desar r ol l ando el t r abaj o en gr upo.
A su vez, dur ant e l as cl ases pr ct i cas el pr of esor se r euni r con l os gr upos de t r abaj o e i r r eal i zando
una eval uaci n cont i nua de l os al umnos y vi endo l a evol uci n de l os di f er ent es t r abaj os.
1. 4. Sof t war e necesari o para l a asi gnat ura
Todo el sof t war e necesar i o par a l a asi gnat ur a es de l i br e di st r i buci n y est a di sposi ci n de l os
al umnos en l as pgi nas Web de l os desar r ol l ador es. A cont i nuaci n se muest r a un l i st ado con l os
pr ogr amas ut i l i zados:
Sof t ware Coment ari o

Cr i mson Edi t or
Edi t or de t ext o. Ti ene l a vent aj a de
enf at i zar l as pal abr as cl ave t ant o de
Java como de HTML.

Java 2 Sof t war e Devel opment Ki t 1. 4. 2
Compi l ador e i nt r pr et e de Java
di st r i bui do gr at ui t ament e por Sun.
Incl uye API est ndar y document aci n.
Java Ser vl et Devel opment Ki t 2. 0
Incl uye l as cl ases necesar i as par a l a
pr ogr amaci n de Ser vl et s as como el
pr ogr ama Ser vl et r unner . exe que nos
si mul ar el ser vi dor de ser vl et s.

Xer ces Java Par ser 1. 4. 4 Rel ease
Par ser de XML. Incl uye l a API de Java
que nos per mi t i r l eer f i cher os XML
desde nuest r os pr ogr amas en Java.









SECCIN 1
Int ernet



CAPITULO 2
2. General i dades de Int ernet
2. 1. Prot ocol o TCP/ IP
Lo que consi gue que l os or denador es r emot os se ent i endan y que Int er net f unci one es un conj unt o de
i nst r ucci ones compl i cadas l l amadas pr ot ocol o. La Int er net ut i l i za var i os pr ot ocol os, l os ms i mpor t ant es
son el Tr anspor t Cont r ol Pr ot ocol ( TCP) y el l l amado Int er net Pr ot ocol ( IP), o TCP/ IP par a abr evi ar . Son
una ser i e de r egl as par a mover l os dat os el ect r ni cos en paquet es y asegur ar se de que son r eensambl ados
cor r ect ament e cuando l l egan al dest i no. Todos l os or denador es en Int er net habl an TCP/ IP, y gr aci as a el l o
se consi gue el i mi nar l a bar r er a de l a het er ogenei dad de l os or denador es.
2. 2. Prot ocol o HTTP y l enguaj e HTML
Gr aci as a l os pr ot ocol os se puede r eci bi r cual qui er t i po de f i cher o de cual qui er or denador conect ado a
Int er net , se puede envi ar cor r eo, se puede conect ar a un ser vi dor r emot o, et c. Per o ni nguno de est os
ser vi ci os per mi t en l a posi bi l i dad de col abor ar en l a cr eaci n de un ent or no mul t i medi a, es deci r , no se
pueden pedi r dat os a un or denador r emot o par a vi sual i zar l os l ocal ment e ut i l i zando TCP/ IP. Es por el l o que
en 1991 se cr e un nuevo pr ot ocol o l l amado HTTP (Hyper Text Tr anspor t Pr ot ocol ).
Una de l as car act er st i cas del pr ot ocol o HTTP es que no es per manent e, es deci r , una vez que el
ser vi dor ha r espondi do a l a pet i ci n del cl i ent e l a conexi n se pi er de y se queda en esper a, al cont r ar i o de
l o que ocur r e con l os ser vi ci os de f t p o t el net , en l os cual es l a conexi n es per manent e hast a que el
usuar i o t r ansmi t e l a or den de desconexi n. Est o t i ene l a vent aj a de que el ser vi dor no se col apsa, y el
i nconveni ent e de que compl i ca l a segur i dad cuando l os accesos se hacen con passwor d, pues no se puede
pedi r el passwor d cada vez que se r eal i za una conexi n (sl o se pi de l a pr i mer a vez).
La gr andeza del HTTP es que se pueden cr ear r ecur sos mul t i medi a l ocal ment e, t r ansf er i r l os f ci l ment e
a un or denador r emot o y vi si onar l os donde se han envi ado. HTTP es una her r ami ent a muy poder osa y que
es l a esenci a del Wor l d Wi de Web.
Par a l a cr eaci n de un Web en Int er net se ut i l i za el l enguaj e l l amada HTML (Hyper Text Mar kup
Language). Es un l enguaj e muy si mpl e cuyo cdi go se puede escr i bi r con cual qui er edi t or de t ext o. Se basa
en comandos r econoci bl es por el br owser y que van ent r e l os smbol os '<' y '>'. El l enguaj e HTML j unt o con
apl i caci ones CGI (Common Gat eway Int er f ace) y Java hacen posi bl e l a cr eaci n de pgi nas Web muy
vi st osas.
2. 3. URL (Uni f or m Resource Locat or )
Todo or denador en Int er net y t oda per sona que use Int er net t i ene su pr opi a di r ecci n el ect r ni ca.
Todas est as di r ecci ones si guen un mi smo f or mat o. Par a el al umno Pedr o Gmez de l a Escuel a Super i or de
Ingeni er os de San Sebast i n su di r ecci n puede ser : pgomez@gavi ot a. t ecnun. es donde pgomez es el
i dent i f i cador ID que Pedr o ut i l i za par a conect ar se a l a r ed. Es as como el or denador l e conoce. La par t e
de l a di r ecci n que si gue al smbol o de ar r oba (@) se l l ama el domi ni o. El domi ni o es l a di r ecci n
especf i ca del or denador , en est e caso el or denador se l l ama gavi ot a adj unt o a TECNUN en Espaa (es).
Nunca hay espaci os en una di r ecci n de Int er net .
El domi ni o est di vi di do en est e caso en t r es subdomi ni os que se l een de der echa a i zqui er da. Ent r e
est os domi ni os se pueden encont r ar l os si gui ent es ( ut i l i zados en Est ados Uni dos):
com or gani zaci ones comer ci al es. mi l mi l i t ar .
gov gobi er no. net or gani zaci n de r edes.
i nt or gani zaci n i nt er naci onal . org or gani zaci ones si n ni mo de l ucr o.
8 Informtica III
Est os subdomi ni os se r ef i er en al t i po de or gani zaci n al que per t enece el ser vi dor . Tambi n podemos
encont r ar i nf or maci n sobr e el pas en el que se encuent r a el or denador al que per t enece l a di r ecci n:
at Aust r i a au Aust r al i a es Espaa f i Fi nl andi a
ca Canad ch Sui za f r Fr anci a gr Gr eci a
de Al emani a dk Di namar ca j p Japn uk Rei no Uni do

Los or denador es t ambi n son conoci dos por un nmer o l l amado l a di r ecci n IP y es l o que el or denador
r eal ment e ent i ende. Los nombr es son par a f aci l i t ar l a t ar ea a l os usuar i os. Por ej empl o el nmer o que
cor r esponde al domi ni o gavi ot a. t ecnun. es es 193. 145. 249. 21.
As, qu es un URL? Pues podr a concebi r se como l a ext ensi n del concept o de ar chi vo: no sl o puede
apunt ar se a un ar chi vo en un di r ect or i o, si no que adems t al ar chi vo y t al di r ect or i o exi st en de hecho en
cual qui er or denador de l a r ed. Los URLs posi bi l i t an el di r ecci onami ent o, t ant o de gent e como de
apl i caci ones de sof t war e a una gr an var i edad de i nf or maci n, di sponi bl e en di st i nt os pr ot ocol os de
Int er net . El ms conoci do es el HTTP, per o l os FTP t ambi n pueden ser r ef er enci ados por medi o de URLs.
Incl uso l a di r ecci n de e- mai l de Int er net de al gui en puede ser r ef er i da con un URL. Un URL es como l a
di r ecci n compl et a de cor r eo: pr opor ci ona t oda l os dat os necesar i os par a que l a i nf or maci n l l egue al
l ugar de dest i no.
En r esumen, un URL es una maner a muy conveni ent e y suci nt a de r ef er i r se a un ar chi vo u ot r o r ecur so
el ect r ni co.
La si nt axi s genr i ca de l os URLs es l a que si gue:
mtodo://ordenador.dominio/ruta-completa-del-fichero
donde mt odo puede ser una de l as si gui ent es pal abr as: ht t p, f t p, t el net , Ensegui da se ver l a
si nt axi s especf i ca de cada mt odo.
Per o ant es, unas br eves obser vaci ones:
Hay ocasi ones en l as que se ver que el URL empl eado t i ene l a mi sma si nt axi s que ar r i ba, per o acabada
l a r ut a compl et a del f i cher o con una bar r a (/ ) . Est o no qui er e deci r ms que no se apunt a a un ar chi vo
especf i co, si no a un di r ect or i o. El ser vi dor gener al ment e devol ver el ndi ce por def ect o de ese
di r ect or i o (un l i st ado de ar chi vos y subdi r ect or i os de ese di r ect or i o par a acceder al que se desee), o un
ar chi vo por def ect o que el ser vi dor busca aut omt i cament e en el di r ect or i o.
Qu hacer una vez que se t i ene un URL y se qui er e ut i l i zar ? Muy senci l l o: como se ver ms adel ant e,
t odos l os br owser s poseen una vent ana ( l ocat i on box) donde es posi bl e escr i bi r o pegar un URL.
Cmo pr esent ar un URL a ot r os? Se suel e r ecomendar l a si gui ent e maner a:
<URL: mtodo://ordenador.dominio/ruta-completa-del-fichero>
par a di st i ngui r l os URLs de l os URIs ( Uni f or m Resour ce Ident i f i cat i on) , que r epr esent an un concept o
si mi l ar .
Fi nal ment e, dest acar que hay car act er es consi der ados r eser vados o i nsegur os. Par a poder usar l os,
habr que empl ear l as secuenci as de escape, que ut i l i zan el f or mat o %+US-ASCII-val or de un car ct er
hexadeci mal como puede ver se en l as t abl as que hay a cont i nuaci n:
1. Car act er es i nsegur os: son aquel l os consi der ados como t al es por al guna r azn det er mi nada,
nor mal ment e por que t i enen su pr opi o si gni f i cado en al gn si st ema oper at i vo.
Espacio %20 < %3C > %3E # %23
% %25 { %7B } %7D | %7C
\ %74 ^ %5E ~ %7E [ %5B
] %5D ` %60

2. Car act er es r eser vados: son aquel l os consi der ados como t al es por t ener un si gni f i cado especi al
en l os URLs; par a evi t ar t al si gni f i cado t ambi n habr que codi f i car l os en hexadeci mal .
; %3B / %2F @ %40 = %3D
? %3F : %3A & %26

Captulo 2. Generalidades de Internet 9
A cont i nuaci n se muest r an l as di st i nt as f or mas de const r ui r l os URLs segn l os di st i nt os ser vi ci os de
Int er net :
2.3.1. URLs del pr ot ocol o HTTP
HTTP es el pr ot ocol o especf i cament e di seado par a usar con l a Wor l d Wi de Web. Su si nt axi s es:
http://<host>:<puerto>/<ruta>#<parte a buscar>
donde host es l a di r ecci n del ser vi dor WWW, el puer t o puede ser omi t i do (val or por def ect o, 80) , l a
r ut a i ndi ca al ser vi dor el f i cher o que se desea y #par t e a buscar nos si t a en una par t e del t ext o que est
apunt ada por una TAG ancl a (anchor ) , que se expl i car n ms adel ant e.
As, por ej empl o, ht t p: / / www. msn. com/ i ndex/ pr ev/ wel come. ht m#of f er s accede al Web de Mi cr osof t
Net wor k, al ar chi vo wel come. ht m (cuya r ut a de acceso es i ndex/ pr ev) y dent r o de st e, al l ugar mar cado
con el ancl a of f er s.
2.3.2. URLs del pr ot ocol o FTP
La si nt axi s especf i ca del f t p es:
ftp://<usuario>:<password>@<host>:<puerto>/<cwd1>/<cwd2>//<cwdN>/<nombre>
Los comandos usuar i o y passwor d pueden ser omi t i dos. Host es l a di r ecci n del f t p. El puer t o, como
ant es, puede ser omi t i do. Las ser i es <cwd1>/ / <cwdN> son l os comandos que el cl i ent e deber empl ear
par a mover se al di r ect or i o en el que r esi de el document o.
As, por ej empl o, f t p: / / www. msn. com/ i ndex/ pr ev/ wel come. ht m t r aer el f i cher o wel come. ht m (cuya
r ut a de acceso es i ndex/ pr ev) del web de Mi cr osof t Net wor k.
2.3.3. URLs del pr ot ocol o cor r eo el ect r ni co (mai l t o)
Su si nt axi s di f i er e de l as ant er i or es, y es l a que si gue:
mailto:<cuenta@lugar>
si endo cuent a@l ugar l a di r ecci n de cor r eo el ect r ni co a l a cual se desea envi ar un mensaj e. Por
ej empl o, mai l t o: pgomez@cei t . es manda un mensaj e a P. Gmez, en el CEIT, en Espaa.
2.3.4. URLs del pr ot ocol o Tel net
El URL par a Tel net desi gna una sesi n i nt er act i va con un l ugar r emot o en Int er net , medi ant e el
pr ot ocol o Tel net . Su si nt axi s es l a si gui ent e:
telnet://<usuario>:<password>@<host>:<puerto>/
Los par met r os user y passwor d pueden ser omi t i dos, host se r ef i er e al l ugar al que se va a r eal i zar l a
conexi n y por t puede ser i gual ment e omi t i do (si endo su val or por def ect o 23 ).
2.3.5. Nombr es especf i cos de f i cher os
El URL de mt odo f i l e supone que un f i cher o puede ser obt eni do por un cl i ent e. Est o suel e conf undi r se
con el mt odo f t p. La di f er enci a r adi ca en que f t p es un mt odo especf i co par a l a t r ansmi si n de
f i cher os, mi ent r as que el mt odo f i l e dej a el mt odo de t r ada de f i cher os a el ecci n del cl i ent e que, en
al gunas ci r cunst anci as, bi en podr a ser el mt odo f t p. La si nt axi s par a el mt odo f i l e es l a que se ve a
cont i nuaci n:
file://<host>/<ruta-de-acceso>
Como si empr e, host es l a di r ecci n y r ut a-de-acceso es el cami no j er r qui co par a acceder al
document o ( con una est r uct ur a di r ect or i o/ di r ect or i o/ / nombr e del ar chi vo) . Si el par met r o host se
dej a en bl anco, se supondr por def ect o l ocal host , es deci r , que se van a t r aer f i cher os l ocal ment e.



CAPTULO 3
3. Lenguaj e HTML
3. 1. Int roducci n
HTML ( Hyper Text Mar kup Language) es el l enguaj e ut i l i zado en Int er net par a def i ni r l as pgi nas del
Wor l d Wi de Web. Los f i cher os HTML son f i cher os de t ext o pur ament e ASCII, que pueden ser escr i t os con
cual qui er edi t or bsi co, t al como Not epad en Wi ndows o vi en Uni x. Tambi n se pueden ut i l i zar
pr ocesador es de t ext o ms compl i cados como Mi cr osof t Wor d, per o en est e caso hay que asegur ar se que
el f i cher o es guar dado en di sco como "t ext onl y". En est e f i cher o de t ext o se i nt r oducen unas mar cas o
car act er es de cont r ol l l amadas TAGs (en est o, HTML se par ece a l os pr i mer os pr ocesador es de t ext o) , que
son i nt er pr et adas por el br owser . Cuando st e l ee un f i cher o ASCII con ext ensi n *.ht m o *.ht ml
i nt er pr et a est as TAGs y f or mat ea el t ext o de acuer do con el l as.
En gener al puede deci r se que HTML es un l enguaj e senci l l o y ef i ci ent e. Aunque no puede compet i r con
l os pr ocesador es de t ext o en capaci dades de f or mat o, es uni ver sal , es hi per t ext o e hi per medi a, es muy
accesi bl e, sus f i cher os ocupan poco espaci o en di sco; por ot r a par t e es f ci l de i nt er pr et ar y de envi ar a
t r avs de l as r edes. De hecho, es uno de l os est ndar es en l os cual es l as empr esas est n basando sus
Int r anet s y sus ser vi ci os de i nf or maci n i nt er na.
En l a pgi na web de l a asi gnat ur a est di sponi bl e l a especi f i caci n HTML 4. 01 ( l t i ma ver si n) .
3. 2. Tags general es
El f or mat o con el que i mpr i me o vi sual i za un f i cher o HTML depende de unas mar cas especi al es
l l amadas TAGs. Todas l as TAGs de HTML van encer r adas ent r e l os car act er es < y > , como por ej empl o
<HTML>. Adems, l a mayor par t e de el l as son dobl es: hay una TAG de comi enzo y ot r a de f i nal ; ent r e
ambas hay un cont eni do o t ext o af ect ado por di chas TAGs. La TAG de f i nal es como l a de comi enzo, per o
i ncl uyendo una bar r a (/ ) ant es del nombr e, por ej empl o </ HTML>. Nor mal ment e l as TAGs se escr i ben en
l et r a mayscul a par a hacer ms l egi bl e el cuer po del document o (di st i ngui ndol as del t ext o or di nar i o),
per o de hecho t ambi n se pueden escr i bi r en mi nscul as. La f or ma gener al de est as TAGs dobl es es l a
si gui ent e:
<COMANDO>Texto afectado</COMANDO>
Exi st en t ambi n TAGs si mpl es (si n TAG de ci er r e), que no t i enen un t ext o cont eni do al que se apl i can.
Por ej empl o, l a mar ca de comi enzo de pr r af o <P> er a un comando si mpl e hast a l a ver si n 3. 0 de HTML,
pues cada vez que empi eza un pr r af o se sobr eent i ende que ha t er mi nado el ant er i or . La ver si n 3. 0 de
HTML ha i nt r oduci do l a TAG </ P>, aunque su uso es opci onal .
Una TAG, t ant o si es dobl e o si mpl e, puede t ener uno o ms at ri but os, que son par met r os que def i nen
su f or ma de act uar . Los at r i but os se i ncl uyen despus del nombr e de l a TAG, ant es del car ct er > ,
separ ados por uno o ms bl ancos. Si l a TAG es dobl e, l os at r i but os se i ncl uyen si empr e en l a TAG de
aper t ur a.
Los at r i but os que an se sopor t an per o pueden quedar obsol et os en f ut ur as ver si ones se i ndi car n como
[ depr ecat ed] . Est os at r i but os han si do sust i t ui dos por ot r as al t er nat i vas, gener al ment e ut i l i zando hoj as de
est i l o (st yl e sheet s), que no se ver n en est a asi gnat ur a.
Se puede ani dar unas TAGs dent r o de ot r as. Se podr a deci r que en est e caso l os ef ect os son
acumul at i vos, como en el si gui ent e ej empl o:
12 Informtica III

<TAG1>
Texto afectado por el comando 1
<TAG2>
Texto afectado por las TAGs 1 y 2
</TAG2>
</TAG1>

Advert enci a: La ani daci n de TAGs debe hacer se de f or ma coher ent e, pues de l o cont r ar i o puede dar
unos r esul t ados que no son l os esper ados: l a l t i ma TAG en abr i r se debe ser l a pr i mer a en ser cer r ada, es
deci r que no se pueden ent r ecr uzar l os domi ni os de act uaci n de l as TAGs.
Todos l os f i cher os HTML t i enen una est r uct ur a si mi l ar a l a si gui ent e:
<HTML>
<HEAD>
<TITLE>Ttulo de la pgina</TITLE>
...
</HEAD>
<BODY>
...
</BODY>
</HTML>
donde l as mar cas most r adas i ndi can l o si gui ent e:
<HTML>. . . </ HTML>: Indi ca el comi enzo y el f i n de un document o HTML. Es necesar i o par a que el
br owser sepa que t i ene que i nt er pr et ar un f i cher o en l enguaj e HTML.
<HEAD>. . . </ HEAD>: Indi ca l a cabecer a del document o donde se guar da di ver sa i nf or maci n sobr e el
mi smo, como por ej empl o el t t ul o de l a vent ana en l a que apar ecer (<TITLE>Est e
es el t t ul o</ TITLE>).
<BODY>. . . </ BODY>: En l apar ece el cuer po del document o Web pr opi ament e di cho, que cont i ene el
t ext o, l as i mgenes, l os enl aces o l i nks a ot r as pgi nas, et c.
3. 3. Format o de t ext o
En est e apar t ado se ver cmo or gani zar y f or mat ear el t ext o de un document o.
3.3.1. TAGs gener al es de un document o.
Exi st en una ser i e de at r i but os par a l a TAG BODY, que af ect ar n a t odo el document o, dado que t odo el
cdi go de l as pgi nas web se escr i be dent r o de l a TAG dobl e BODY. Ent r e ot r os, l os ms ut i l i zados son
st os:
[ depr ecat ed] BGCOLOR= nombr e_col or BGCOLOR= #00FF00 , donde nombr e_col or es uno de l os
nombr es r econoci dos por l os br owser s ( exi st e una t abl a def i ni da por Net scape, mayor i t ar i ament e
acept ada), y #00FF00 es el cdi go RGB del col or deseado (dos dgi t os hexadeci mal es por cada col or
f undament al r oj o, ver de y azul , par a r epr esent ar hast a 256 i nt ensi dades de cada col or , y unos 16
mi l l ones de col or es di st i nt os). Est a segunda opci n es l a ms empl eada, por ser l a est ndar ( y por el l o
no da er r or es).
[ depr ecat ed] BACKGROUND="i magen. ext ": si r ve par a poner un di buj o como f ondo de document o,
si endo i magen. ext el nombr e del f i cher o y l a ext ensi n. Si el di buj o no ocupa l a pant al l a ent er a, se
di spondr en mosai co hast a l l enar l a.
<BODY BACKGROUND="imagen.ext">
...
</BODY>
[ depr ecat ed] TEXT= cdi go de col or : def i ne el col or del t ext o del document o.
[ depr ecat ed] LINK= cdi go de col or : def i ne el col or del t ext o def i ni do como l i nk.
[ depr ecat ed] VLINK= cdi go de col or : def i ne el col or de l os l i nks vi si t ados (es deci r , l os l i nks sobr e
l os que ya se ha cl i cado en al guna ocasi n) .
Captulo 3. Lenguaje HTML 13

3.3.2. Coment ar i os en HTML
El l enguaj e HTML per mi t e i nt r oduci r coment ar i os, con el f i n de que un document o sea ms cl ar o y
compr ensi bl e cuando se anal i za su cdi go. Lgi cament e, t al es coment ar i os no apar ecer n en el br owser .
La si nt axi s de l os coment ar i os, que pueden ocupar t ant as l neas como se desee, es l a que si gue:
<!-- Comentario -->
3.3.3. Car act er es de separ aci n en HTML
Se consi der an car act er es de separ aci n el espaci o en bl anco, el t abul ador y el sal t o de l nea. Un punt o
i mpor t ant e a consi der ar es que, en pr i nci pi o, HTML consi der a var i os car act er es de separ aci n consecut i vos
como un ni co car ct er de separ aci n. Adems, l es ot or ga a t odos el l os l a mi sma cat egor a, es deci r ,
consi der a t odos como si f uesen espaci os en bl anco. Est o qui er e deci r que el aspect o del f i cher o ASCII que
cont i ene el cdi go HTML y el aspect o del document o vi st o en el br owser pueden di f er i r not abl ement e. De
ah que al escr i bi r un f i cher o l uego haya que compr obar l o en el br owser par a ver si el r esul t ado f i nal es el
esper ado. Por ej empl o, i nt r oduci r un sal t o de l nea en un f i cher o HTML no i mpl i ca, en pr i nci pi o, un sal t o
de l nea en l a pgi na Web.
As pues, par a or gani zar el t ext o HTML no se basa en l os car act er es de separ aci n ci t ados si no en TAGs
especi al es par a el l o. Esas TAGs se consi der n en el apar t ado si gui ent e. Los punt os suspensi vos () ent r e
l as TAGs de comi enzo y f i nal r epr esent an un cont eni do a concr et ar
3.3.4. TAGs de or gani zaci n o par t i ci n de un document o
Las TAGs ms i mpor t ant es de or gani zaci n del cont eni do de un document o son l as si gui ent es:
Tag <P></ P> (de par agr aph). Cada pr r af o deber i r i ncl ui do ent r e est as TAGs. Ent r e pr r af o y
pr r af o se dej a el espaci o cor r espondi ent e a una l nea en bl anco (apr oxi madament e) .
Se puede aadi r a <P> el at r i but o ALIGN [ depr ecat ed] par a especi f i car cmo debe ser al i neado un
pr r af o. Est e at r i but o puede t omar l os val or es "LEFT", "CENTER" y "RIGHT".
Tag <BR> (de br eak). Sal t a de l nea si n dej ar una l nea en bl anco a cont i nuaci n. Es un comando
si mpl e.
Tag <HR> (de har d r ul e). Est e comando si mpl e i nt r oduce una l nea hor i zont al que dej a espaci os
ant es y despus, por l o que no hace f al t a aadi r <P> o <BR> supl ement ar i os.
Al gunos at r i but os de est e comando son:
[ depr ecat ed] WIDTH: def i ne l a l ongi t ud de l a l nea hor i zont al en l a pant al l a, que puede especi f i car se
usando un val or absol ut o ( nmer o de pi xel s) o bi en i ndi cando un por cent aj e (opci n r ecomendada, ya
que no es posi bl e conocer a pr i or i l a anchur a de l a vent ana del cl i ent e Web) , con l o que el r esul t ado
f i nal podr a no ser el esper ado. El val or por def ect o es del 100%.
<HR WIDTH=75%>
[ depr ecat ed] ALIGN: al i nea l a l nea donde se desee. Puede t omar l os val or es LEFT, RIGHT y CENTER
<HR ALIGN=RIGHT>
[ depr ecat ed] SIZE: especi f i ca l a anchur a o gr osor de l a l nea hor i zont al en nmer o de pi xel s. El val or
por def ect o es 1 pi xel
<HR SIZE=4>
[ depr ecat ed] NOSHADE: Por def ect o, est as l neas apar ecen sombr eadas, con un ci er t o ef ect o 3-D. Con
est e comando, t al ef ect o desapar ecer .
Puede obser var se que no hay ni ngn at r i but o que haga r ef er enci a al col or de l a l nea, que si empr e se
di buj a en negr o. Convi ene t ener est o en cuent a a l a hor a de el egi r col or es de f ondo.
3.3.5. For mat eo de t ext os si n par t i ci ones
Tag <PRE></ PRE>(de pr ef or mat t ed). Como ya se ha menci onado, el br owser i gnor ar de or di nar i o
t odos l os espaci ados de l nea, ml t i pl es espaci os consecut i vos, t abul ador es, et c. Por l o gener al est a
pr ct i ca es muy adecuada, per o pueden pr esent ar se ocasi ones en l as que se desee un f or mat o
especf i co de t ext o, que apar ezca en l a pant al l a t al y como se ha escr i t o ( un caso t pi co son l os
l i st ados de pr ogr amas de or denador , poesas, l et r as de canci ones, et c. ) . Est e obj et i vo se l ogr a
14 Informtica III

encer r ando el t ext o ent r e el comando dobl e <PRE> t ext o </ PRE>, t al como puede ver se en l a Fi gur a
3. 1.
Por ejemplo,
si quisiera
crear alguna
figura con
palabras,
Necesitara
usar
el TAG
PRE
para
hacerlo.
Fi gura 3. 1
Tag <BLOCKQUOTE></ BLOCKQUOTE> (de bl ock quot e). Est a TAG de f or mat eo de pr r af os es muy
t i l . Inser t a un sal t o de pr r af o e i ndent a t odo el t ext o que vi ene a cont i nuaci n, hast a l l egar a su
TAG empar ej ada que, a su vez, i nser t ar ot r o sal t o de pr r af o y supr i mi r l a i ndent aci n ant er i or . As
l a TAG BLOCKQUOTE debe empl ear se par a i ndent ar bl oques det er mi nados de t ext os, per o en ni ngn
caso con el ni co obj et i vo de mover el mar gen, ya que el compor t ami ent o del t ext o af ect ado por est e
comando var a segn l os br owser s.
3.3.6. Cent r ado de pr r af os y cabecer as con <CENTER>
Tag <CENTER></ CENTER>. Est a TAG se empl ea par a cent r ar t odo t i po de t ext o, f i gur as, t abl as y
ot r os el ement os, como por ej empl o:
<CENTER> Texto afectado por el centrado </CENTER>
3.3.7. Ef ect os de f or mat o en t ext o
Tag <H>. . . </ H>(de headi ng). Es una t ag dobl e que t oma necesar i ament e un ar gument o, un nmer o
compr endi do ent r e 1 y 6, de t al modo que <H1> es un t t ul o de pr i mer ni vel ( nor mal ment e el ms
gr ande) y <H6> es un t t ul o de sext o ni vel (de or di nar i o el ms pequeo, aunque el hecho de que sea
ms gr ande o pequeo que el est ndar depende del br owser ). Inser t a aut omt i cament e un sal t o de
pr r af o, ant es y despus. Puede t omar como at r i but o ALIGN [ depr ecat ed] , ut i l i zado de l a mi sma
f or ma que en <P>
Tags <B>. .. </ B>, <I>. .. </ I> y <U>.. . </ U> (de bol d, i t al i c y under l i ned respect i vament e). <B>
hace que el t ext o af ect ado est en negr i t a (bol d), <I> apl i ca el est i l o cur si va y <U> [ depr ecat ed] l o
subr aya.
Tag <TT></ TT>(de t el et ype). Est a TAG hace que l a l et r a que se i mpr i ma sea de est i l o t el et i po, es
deci r , que su apar i enci a sea si mi l ar a l a que de una mqui na de escr i bi r (f uent e Cour i er o si mi l ar ).
Tag <FONT></ FONT> [ depr ecat ed] . Est a TAG si r ve par a cont r ol ar , por medi o de sus at r i but os, el
t amao, el col or y el t i po de l et r a con el que se r epr esent ar el t ext o (si el br owser es capaz de el l o) .
Los at r i but os de est a TAG son l os si gui ent es:
[ depr ecat ed] SIZE=n (si endo n un ent er o ent r e 1 y 7). Con est e at r i but o se puede cambi ar el
t amao de l a l et r a. El t amao base o t amao por def ect o es el 3.
[ depr ecat ed] SIZE=+n SIZE=-n. Con est a TAG se cambi a el t amao de l a l et r a r espect o al t amao
base, aument ando o r educi ndol o segn se apl i que un i ncr ement o posi t i vo o negat i vo. Los
t amaos deben est ar compr endi dos en l a escal a de 1 a 7.
[ depr ecat ed] COLOR= nombr e_col or COLOR= #00FF00 , donde nombr e_col or es uno de l os
nombr es r econoci dos por l os br owser s y #00FF00 es el cdi go RGB del col or deseado.
[ depr ecat ed] FACE= t i po_l et r a , donde t i po_l et r a puede ser Ar i al , Ti mes New Roman , et c.
Ej empl o: <FONT SIZE=4 COLOR="Bl ue" FACE="Ar i al ">Text o a r epr esent ar </ FONT>
Tag <BASEFONT SIZE=n> [ depr ecat ed] . Est abl ece el t amao de l et r a base o por def ect o. Es un TAG
si mpl e.
Tags <SUP></ SUP> y <SUB></ SUB> ( de super scr i pt y subscr i pt ). <sup> y <sub> cr ean l os est i l os
de super ndi ce o subndi ce, r espect i vament e.
Captulo 3. Lenguaje HTML 15

Tags <BIG></ BIG> y <SMALL></ SMALL>. Las TAGs <BIG> y <SMALL> hacen al t ext o ms gr ande y
ms pequeo r espect i vament e.
3.3.8. Car act er es especi al es
Exi st en al gunos car act er es, denomi nados especi al es, que mer ecen una pequea menci n. Los que
t i enen ms ut i l i dad par a el cast el l ano son:
Las vocal es acent uadas se escr i ben en HTML como si gue:
Si son mayscul as, &( LETRAMAYSC)acut e. Por ej empl o, se escr i be &Aacut e.
Si son mi nscul as, &(l et r ami n)acut e. Por ej empl o, se escr i be &eacut e.
es &Nt i l de y es &nt i l de.
3. 4. Li st as
3.4.1. Li st as desor denadas
Una l i st a desor denada es una l i st a de el ement os en l neas separ adas pr ecedi das de un gui n o si mi l ar
(en Ingl s bul l et ).
Tag <UL>. . . </ UL> (de unor der ed l i st ): comi enzo de una l i st a no or denada
Un at r i but o de est a Tag es TYPE [ depr ecat ed] , que def i ne l a f or ma del bul l et y puede t omar l os
val or es: DISC(), CIRCLE( ), que es el val or por def ect o y SQUARE() .
Tag <LI> (de l i ne): nuevo el ement o de l a l i st a.

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
Esto es una lista no ordenada:
<UL>
<LI>Elemento 1
<LI>Elemento 2
<LI>Elemento 3
</UL>
</BODY>
</ HTML>

3.4.2. Li st as or denadas
En est e t i po de l i st as se empl ean nmer os en l ugar de bul l et s.
Tag <OL>. . . </ OL> (de or der ed l i st ): comi enzo de una l i st a or denada.
Su at r i but o TYPE [ depr ecat ed] per mi t e def i ni r el t i po de numer aci n. Puede t omar l os val or es: A ( par a
numer ar A, B, C), a (a, b, c), I ( I, II, III), i (i , i i , i i i ) , 1 ( 1, 2, 3) que es el val or por def ect o.
Tag <LI> (de l i ne): nuevo el ement o de l a l i st a .
Su at r i but o VALUE [ depr ecat ed] per mi t e def i ni r a par t i r de qu val or se empi eza a numer ar .
Obvi ament e, por def ect o comi enza a numer ar se por el pr i nci pi o. Por ej empl o, <LI VALUE=i i i > numer ar
i i i , i v, v Cada vez que se ut i l i ce est e at r i but o VALUE dent r o de una mi sma l i st a or denada se r ompe con l a
numer aci n ant er i or .
16 Informtica III

<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
Esto es una lista ordenada:
<OL>
<LI>Elemento 1
<LI>Elemento 2
<LI>Elemento 3
</OL>
</BODY>
</ HTML>


3.4.3. Li st as de def i ni ci ones
Est e t i po de l i st a es t i l par a obt ener r esul t ados como el que se ve a cont i nuaci n:
Trmino 1
Definicin del trmino 1
Trmino 2
Definicin del trmino 2
...
Tag <DL>. . . </ DL> (de def i ni t i on l i st ). comi enzo de l a def i ni ci n de l a l i st a.
Tag <DT> (de def i ni t i on t er m) - nueva def i ni ci n.
Tag <DD> (de def i ni t i on descr i pt i on) - cuer po o descr i pci n de l a def i ni ci n.
3. 5. Imgenes
El l enguaj e HTML adems de hi per t ext o, es hi per medi a, es deci r , que por l o t ant o per mi t e i ncl ui r
i nf or maci n de t i po gr f i co. Las i mgenes se t r at an de f or ma separ ada al t ext o, y, debi do al t amao que
st as suel en t ener en gener al , se t ar da ms t i empo t ant o en gener ar como en vi sual i zar pgi nas HTML con
i mgenes.
Tag IMG (de i mage): Es un comando si mpl e que se ut i l i za par a i nser t ar una i magen en el document o.
Al gunos at r i but os de est a t ag son:
o SRC= i magen. ext : es r equer i do y si r ve par a i ndi car dnde se va a encont r ar l a i magen, si endo
i magen. ext el nombr e del f i cher o y l a ext ensi n.
<IMG SCR="imagen.ext">
o ALT= t ext o donde t ext o es el t ext o que se ver en l ugar de l a i magen, bi en por que se han
desact i vado l os gr f i cos par a navegar ms r pi dament e por Int er net , bi en por que el br owser es
t ext onl y . Es r equer i do par a evi t ar pr obl emas en di chos casos.
o WIDTH y HEIGHT: cont r ol an el t amao de l a vent ana, que puede especi f i car se usando un val or
absol ut o ( nmer o de pi xel s) o bi en i ndi cando un por cent aj e (opci n r ecomendada, ya que no es
posi bl e conocer a pr i or i l a anchur a de l a vent ana del cl i ent e Web).
<IMG WIDTH=33% HEIGHT=60% SCR="imagen.ext">
o ALIGN: al i nea el t ext o donde se desee r espect o a l a i magen. Puede t omar l os val or es TOP,
BOTTOM, MIDDLE, LEFT, RIGHT, TEXTTOP, ABSMIDDLE, BASELINE, ABSBOTTON.
o BORDER=n. Per mi t e aadi r un bor de o mar co a l a i magen, si endo n l a anchur a de st e en pi xel s.
BORDER=0 i mpl i ca l a supr esi n del bor de.
o HSPACE=n y VSPACE=n. Est os at r i but os dej an un espaci o hor i zont al y ver t i cal r espect i vament e
al r ededor de l a i magen, si endo n el val or en pi xel s.
o LOWSRC=URL car ga pr i mer o una i magen de baj a r esol uci n y cuando t er mi na de car gar t odo el
document o l a sust i t uye por l a ver si n de al t a r esol uci n.
Captulo 3. Lenguaje HTML 17

3. 6. Li nks
Encer r ando un t ext o o un gr f i co ent r e l as TAGs <A> ... </ A> se consi gue conver t i r di cho t ext o en
hi per t ext o. Est e l i nk puede hacer se, ent r e ot r as posi bi l i dades, a:
Ot r a pgi na Web.
El cor r eo el ect r ni co de ot r a per sona (se empl ea el l i nk par a envi ar l es cor r eo) .
Un ar chi vo l ocal ( pr ct i ca a evi t ar si se pr et ende que l os dems puedan acceder a ese l i nk! ).
Una di r ecci n r el at i va a document os en di r ect or i os super i or es o i nf er i or es al di r ect or i o en que se est
en ese moment o o en el di r ect or i o act ual .
Por l o gener al , l os l i nks t i enen l a f or ma <A HREF="URL">t ext o</ A>. A su vez, l os URLs t i ene una
est r uct ur a del t i po si gui ent e:
mtodo://localizacin/archivo/
donde mt odo hace r ef er enci a al modo de acceder al f i cher o (ht t p, f t p, gopher , news, mai l t o) ,
l ocal i zaci n es el l ugar donde se encuent r a el f i cher o act ual ment e y ar chi vo es el nombr e compl et o del
ar chi vo r equer i do en el si st ema especi f i cado. Veamos al gunos ej empl os:
<A HREF="http://www.ceit.es/">WEB CEIT</A>
l l eva al web del CEIT al cl i car sobr e l as pal abr as WEB CEIT, que apar ecer n subr ayadas y en ot r o col or
(hi per l i nk).
<A HREF="mailto://president@whitehouse.gov">mail</A>
mandar un e-mai l al Pr esi dent e de l os EE. UU.
En el caso en que se qui er a "sal t ar " a ot r o punt o del pr opi o document o, se pr oceder como se ve en el
si gui ent e ej empl o: Est abl ecemos el l i nk <A NAME="al i ni ci odel document o"> (At enci n: si es posi bl e evi t ar
l os espaci os, es mej or hacer l o, pues pueden or i gi nar pr obl emas). A est e t i po de l i nks se l es denomi na
ancl as o anchor s puest o def i nen zonas f i j as de un document o a l as que se va a hacer r ef er enci a. Una vez
ef ect uada est a oper aci n, si ahor a hacemos <A HREF="#al i ni ci odel document o"> t ext o </ A> , al cl i car
sobr e l a pal abr a t ext o i r emos al l ugar donde se ha def i ni do el l i nk.
3. 7. Tabl as
Las t abl as se def i nen empl eando l os cdi gos par eados <TABLE> y </ TABLE>.
Las cel das se agr upan en f i l as, que se def i nen con l os cdi gos par eados <TR> y </ TR> (de Tabl e
Row).
Una t abl a se compone de cel das de dat os. Una cel da se def i ne usando l os cdi gos par eados <TD> y
</ TD> (de Tabl e Dat a).
Las cel das pueden cont ener cual qui er el ement o HTML: t ext o, i mgenes, enl aces e i ncl uso ot r as t abl as
ani dadas.
<TH>. . . </ TH> (de Tabl e Header ): Par a cr ear cel das cuyo t ext o sea r esal t ado (por ej empl o, en l os
encabezami ent os) se sust i t uye el TD habi t ual por TH.
Al gunos at r i but os que pueden aadi r se a TABLE son:
WIDTH: especi f i ca l a anchur a de l a t abl a. Puede dar se un val or absol ut o en pi xel s o un val or r el at i vo
en por cent aj e. Si no se especi f i ca l a anchur a por def ect o depender del br owser .
BORDER: Si se qui er e que l a t abl a posea bor des: <TABLE BORDER(=n)> . . . </ TABLE>
si endo n el gr osor del bor de en pi xel s. Por ser opci onal (t oma un val or por def ect o) se ha denot ado
ent r e par nt esi s.
[ depr ecat ed] ALIGN: Posi ci ona l a t abl a r espect o al document o. POSIC puede t omar l os val or es LEFT,
CENTER y RIGHT.
CELLSPACING: espaci ado ent r e cel di l l as: <TABLE CELLSPACING(=n)> . . . </ TABLE>
CELLPADDING(=n) : per mi t e especi f i car el ancho que debe exi st i r desde l os bor des de cada cel di l l a a
l os el ement os en el l a i ncl ui dos.
18 Informtica III

[ depr ecat ed] BGCOLOR: i ndi ca el col or de f ondo de l a t abl a.
Al gunos at r i but os de TR son:
ALIGN: se ut i l i za par a det er mi nar l a al i neaci n del cont eni do de l as cel das de l a f i l a.
VALIGN: se ut i l i za par a det er mi nar l a posi ci n ver t i cal del cont eni do de l as cel das de l a f i l a.
[ depr ecat ed] BGCOLOR: i ndi ca el col or de f ondo de l a f i l a.
Al gunos at r i but os que pueden aadi r se a TH y TD son:
ROWSPAN(=n) : i ndi ca el nmer o de f i l as que debe abar car l a cel da act ual .
COLSPAN (=n): i ndi ca el nmer o de col umnas de l a f i l a que abar car l a cel da act ual .
ALIGN: se ut i l i za par a det er mi nar l a al i neaci n del cont eni do de l a cel da.
VALIGN: se ut i l i za par a det er mi nar l a posi ci n ver t i cal del cont eni do de l a cel da.
WIDTH: especi f i ca l a anchur a de l a cel da, en pi xel s o en por cent aj e.
HEIGHT: especi f i ca l a al t ur a de l a cel da, en pi xel s o en por cent aj e.
[ depr ecat ed] BGCOLOR: i ndi ca el col or de f ondo de l a cel da.
Un ej empl o de t abl a con var i os de l os el ement os vi st os ser a l a de l a Fi gur a 1. 4. , que cor r esponde al
si gui ent e cdi go:
<HTML>
<HEAD><TITLE>Ejemplo de tabla</TITLE></HEAD>
<BODY>
<TABLE BORDER=3>
<CAPTION><STRONG>Ejemplo</STRONG></CAPTION>
<TR>
<TD>Elemento 1</TD>
<TD>Elemento 2</TD>
<TD ROWSPAN=3>Elemento</TD>
<TD>Total</TD>
</TR>
<TR>
<TD>Elemento 3</TD>
<TD>Elemento 4</TD>
</TR>
<TR>
<TD>Elemento 5</TD>
<TD>Elemento 6</TD>
</TR>
<TR>
<TD COLSPAN=3><CENTER>Elemento</CENTER></TD>
</TR>
</TABLE>
</BODY>
</HTML>

3. 8. Frames
3.8.1. Int r oducci n a l os f r ames
Una vent ana HTML puede ser di vi di da en subvent anas o f r ames , en cada una de l as cual es se puede
most r ar un document o o un URL di st i nt o. Cada f r ame puede t ener un nombr e al que se puede di r i gi r el
r esul t ado (medi ant e el at r i but o TARGET, obj et i vo) de una acci n (por ej empl o cl i car un hi per l i nk). El
t amao de l os f r ames se puede cambi ar i nt er act i vament e con el r at n (sal vo que se haya el i mi nado st a
posi bi l i dad expl ci t ament e, al def i ni r l os. ) .
Puede haber f r ames de cont eni do f i j o o est t i co (por ej empl o un l ogo de una empr esa, un anunci o) y
ot r os cuyo cont eni do vaya var i ando. Un f r ame puede cont ener un ndi ce y ot r o ( ms gr ande) va most r ando
l os apar t ados a l os que se hace r ef er enci a en el ndi ce.
Se l l ama f r ameset a una vent ana con f r ames. Un f r ameset puede cont ener ot r os f r ameset s.
Captulo 3. Lenguaje HTML 19

Dent r o del TAG dobl e <FRAMESET></ FRAMESET> sl o puede haber l os si gui ent es cont eni dos:
1. Ot r o <FRAMESET></ FRAMESET>
2. Def i ni ci n de f r ames con el TAG si mpl e <FRAME>
Par a cr ear f r ames es necesar i o un f i cher o HTML con una est r uct ur a semej ant e a l a si gui ent e
(obsr vese que l a TAG <FRAMESET> sust i t uye a <BODY>):
<HTML>
<HEAD><TITLE>Ttulo</TITLE></HEAD>
<FRAMESET>
Definicin de marcos o frames
</FRAMESET>
</HTML>
La TAG <FRAMESET> t i ene dos at r i but os: COLS y ROWS. Ambos at r i but os admi t en una l i st a de val or es
separ ados por comas; est os pueden ser dados en val or es absol ut os ( n de pi xel s) o en por cent aj es (muy
r ecomendabl e) . En est e cont ext o el ast er i sco ( *) r epr esent a el r est o del t amao di sponi bl e.
A cont i nuaci n se exponen al gunos ej empl os:
Par a di vi di r ver t i cal ment e l a vent ana en dos par t es separ adas por una l nea ver t i cal :
<FRAMESET COLS="20%, 80%">
Si se desea r eser var dos r eas hor i zont al es de 80 y 160 pi xel s y una t er cer a con el r est o de l a vent ana:
<FRAMESET ROWS="80, 160, *>
Par a cr ear una r ej i l l a de 2x3 vent anas:
<FRAMESET rows="30%,70%" cols="33%,34%,33%">
Como no se sabe l a r esol uci n de l a pant al l a en l a que se ej ecut ar el br owser , convi ene si empr e
ut i l i zar t amaos r el at i vos, o si se ut i l i zan t amaos absol ut os, di sponer de una par t i ci n cuyo t amao se
det er mi na con el ast er i sco (*) . Hay que t ener en cuent a que si se ut i l i zan por cent aj es r el at i vos que no
suman 100, a di chos por cent aj es se l es apl i ca un f act or de escal a de modo que r epr esent en cor r ect ament e
l os t amaos r el at i vos de l os di st i nt os f r ames.
La TAG <FRAME> es si mpl e y def i ne l as pr opi edades de cada f r ame en el f r ameset . Al gunos de sus
at r i but os son:
<FRAME SRC="URL"> Def i ne el cont eni do del f r ame, es deci r el URL cuyo cont eni do se most r ar en l .
Si n est e at r i but o apar ecer en bl anco.
<FRAMESET COLS="20%,60%,20%">
<FRAME SRC="frame1.html">
<FRAME SRC="frame2.html">
<FRAME SRC="frame3.html">
</FRAMESET>
En est e ej empl o se cr ea una di vi si n ver t i cal de l a vent ana del br owser en t r es f r ames, en l os que
apar ecen l as pgi nas: f r ame1.ht ml , f r ame2.ht ml y f r ame3.ht ml .
NAME="nombr e": Def i ne un "nombr e" par a poder di r i gi r a ese f r ame cont eni dos poni endo ese nombr e
en el at r i but o TARGET de un hi per l i nk.
MARGINWIDTH="n_pi xel s": es opci onal , y det er mi na l a di st anci a hor i zont al del cont eni do a l os
mr genes de l os f r ames.
MARGINHEIGHT="n_pi xel s": Si mi l ar al ant er i or par a l a di st anci a ver t i cal .
SCROLLING="YES/ NO/ AUTO: Par a que haya o no bar r as de despl azami ent o en el f r ame. Con AUTO l as
habr o no segn quepa o no el cont eni do.
NORESIZE: El usuar i o no podr cambi ar el t amao del f r ame con el r at n.
Vase el si gui ent e ej empl o, cor r espondi ent e a l a Fi gur a 3. 2 con f r ames ani dados:
20 Informtica III

<HTML><HEAD><TITLE>Ejemplo de frames</TITLE></HEAD>
<FRAMESET ROWS="30%,30%,40%">
<FRAME SRC="PRAC5.HTM" NORESIZE>
<FRAMESET cols="25%,25%,50%">
<FRAME SRC="prac1.htm">
<FRAME SRC="prac2.htm">
<FRAME SRC="prac3.htm">
</FRAMESET>
<FRAME SRC="PRAC4.HTM">
</FRAMESET>
</HTML>
Par a l os br owser s que no admi t en f r ames se puede empl ear l a TAG dobl e <NOFRAMES> y </ NOFRAMES>,
pudi endo vi sual i zar se el document o si n pr obl emas de f or ma al t er nat i va:
<HTML><HEAD><TITLE> Ejemplo de FRAMES</TITLE></HEAD>
<FRAMESET COLS="80%, 20%">
<FRAME SRC="Indice.htm">
<FRAME SRC="Tema1.htm">
</FRAMESET>
<NOFRAMES>
<A HREF="Tema1.htm">Tema 1</A><BR>
</NOFRAMES>
</HTML>

Fi gura 3. 2.
3.8.2. Sal i da a vent anas o f r ames concr et as de un br owser .
Si n f r ames, al cl i car en un l i nk el nuevo document o apar eca en l a mi sma vent ana en que se est aba (o
en una vent ana nueva si as se haba est abl eci do en el br owser ).
Cuando se ut i l i zan f r ames se puede especi f i car dnde se desea que apar ezca el r esul t ado cuando se
cl i que en un hi per l i nk. Par a el l o se pueden asi gnar nombr es (medi ant e el at r i but o NAME) a l as vent anas o
f r ames donde se most r ar n l os document os.
A su vez, hay que asi gnar un at r i but o TARGET que haga r ef er enci a al NAME de un f r ame o vent ana. Si
no exi st e, se cr ear una vent ana con di cho nombr e.
TARGET en l a TAG <A></ A>: <A HREF="URL" TARGET="nom_ventana">Texto</A>
donde el document o i ndi cado en el URL apar ecer en l a vent ana cuyo nombr e sea "nom_vent ana".
Captulo 3. Lenguaje HTML 21

TARGET con l a TAG <BASE>, par a hacer que t odos l os l i nks de un document o se di r i j an al mi smo
TARGET. As se est abl ece un TARGET por def ect o par a t odo el document o, que puede cambi ar se con
TARGETs especf i cos en TAGs t i po <A>. La TAG <BASE> debe i ncl ui r se en el <HEAD> del document o.
<HEAD>
<TITLE>Our Products</TITLE>
<BASE href="http://www.aviary.com/intro.html" TARGET="ventana">
</HEAD>
TARGET con l a TAG <FORM>, de modo que l os r esul t ados de un pr ogr ama CGI (sal i da est ndar ) se
di r i j an a l a vent ana i ndi cada. Los f or mul ar i os <FORM> y l os CGI se est udi ar n ms adel ant e.
<FORM ACTION="URL" TARGET="nom_ventana">
3.8.3. Nombr es de TARGET
El at r i but o TARGET puede cont ener nombr es de vent ana. Los nombr es vl i dos son l os si gui ent es:
1. Cual qui er nombr e que empi ece por car ct er al f anumr i co.
2. Los nombr es que empi ezan por el car ct er (_) son especi al es:
TARGET="_bl ank": Sal i da di r i gi da a una vent ana nueva en bl anco y si n nombr e.
TARGET="_sel f ". Sal i da di r i gi da a l a pr opi a vent ana del hi per l i nk.
TARGET="_par ent ". Sal i da di r i gi da al f r ameset padr e del document o act ual . Si no hay
padr e el r esul t ado es como el de _sel f .
TARGET="_Top". Dest r uye t odas l as FRAMES que haya y l a sal i da se di r i ge a l a vent ana
pr i nci pal del br owser .
Advert enci a: No se admi t en f r ameset s r ecur si vos (cuando en un f r ame de un f r ameset , se car ga el
pr opi o f r ameset ); si se i nt ent a act a como FRAME= _bl ank".
3. 9. Mapas de i mgenes o i mgenes sensi bl es
3.9.1. Cmo f unci ona un mapa de i mgenes
Los mapas de i mgenes son i mgenes cl i cabl es que per mi t en al usuar i o acceder a un URL o a ot r o
dependi endo de dnde se cl i ca sobr e di cha i magen. Ini ci al ment e l as i mgenes sensi bl es er an pr ocesadas
en el ser vi dor r emot o ht t p, por l o que se per da mucho t i empo y adems no se i ndi caba l a di r ecci n a l a
que se i ba a acceder . La sol uci n a est os pr obl emas f ue pr ocesar l as i mgenes sensi bl es en el br owser ,
acel er ando el pr oceso en gr an medi da y con l a vent aj a adi ci onal de que el br owser i nf or ma en l a bar r a de
est ado acer ca de l a di r ecci n URL a l a que se va a acceder si se cl i ca en ese punt o.
3.9.2. Mapas de i mgenes pr ocesados por el br owser
Un mapa de i mgenes se el abor a medi ant e var i as TAGs si mpl es <AREA> ent r e l as TAG dobl es
<MAP>. . . </ MAP>. La TAG <MAP> debe t ener un at r i but o NAME par a i dent i f i car el mapa de i mgenes.
Las TAGs si mpl es <AREA> def i nen t ant as zonas geomt r i cas act i vas sobr e una i magen como se desee, y
pueden t ener var i os at r i but os:
HREF="URL". Def i ne el URL de dest i no del r ea.
ALT="t ext o". Cont i ene una descr i pci n t ext ual al t er nat i va del r ea (como en <IMG>). Se r equi er e par a
que l os br owser s que no t engan gr f i cos di sponi bl es puedan ut i l i zar sat i sf act or i ament e el Web.
SHAPE="f or ma". Indi ca l a f or ma de l a zona act i va; puede t omar l os val or es: POLY, CIRCLE, RECT
(si endo est e l t i mo el val or por def ect o) .
COORDS= x1, y1, x2, y2, Est e at r i but o def i ne una l i st a de coor denadas ( en pi xel s) separ adas por
comas que det er mi nan l as zonas act i vas. Las coor denadas son r el at i vas a l a esqui na super i or i zqui er da
de l a i magen. El or den y el val or de est as coor denadas depende del at r i but o SHAPE:
En el caso de RECT: X i zda. , Y sup. X dcha. , Y i nf .
En el caso de CIRCLE: X del cent r o, Y del cent r o, r adi o.
En el caso de POLY: X e Y de cada uno de l os vr t i ces, si endo el l t i mo par de coor denadas
coi nci dent e con el pr i mer o par a cer r ar el pol gono.
22 Informtica III

NOHREF. Est e es un at r i but o opci onal que i ndi ca que no se debe r eal i zar ni nguna acci n si el
usuar i o cl i ca en l a zona cor r espondi ent e. En t odo caso, l as zonas de l a i magen no i ncl ui das en
ni nguna zona act i va def i ni da se consi der an de t i po NOHREF.
Par a hacer r ef er enci a a un det er mi nado mapa de i mgenes se ut i l i za el at r i but o USEMAP a l a TAG
<IMG>, i ndi cando el NAME del mapa deseado como val or del at r i but o USEMAP. A cont i nuaci n se expone
un ej empl o:
<HTML><BODY>
<IMG SRC="concha.gif" USEMAP="#FOTO" ALT="Baha de San Sebastin">
<MAP NAME="FOTO">
<AREA SHAPE="RECT" COORDS=20,25,155,83 HREF="historia.html" ALT="Historia">
<AREA SHAPE="CIRCLE" COORDS=60,150,100,150 HREF="plano.html" ALT="Planos">
<AREA SHAPE="POLY" COORDS=106,100,126,170,254,170,254,49,222,100
HREF="fotos.html" ALT="Fotos">
<AREA SHAPE="POLY" COORDS=169,26,169,93,267,26 NOHREF ALT="Idioma">
</MAP>
</BODY></HTML>
Par a que f unci one est e cdi go se ha cr eado el gr f i co concha. gi f i ncl uyendo el di buj o de l os cont or nos
de l as f ut ur as zonas act i vas. Se han obt eni do l as coor denadas de l as zonas act i vas y se han escr i t o en el
at r i but o COORDS t al y como se ha expl i cado. Se han cr eado t ambi n l os ar chi vos pl ano.ht ml ,
hi st or i a.ht ml y f ot os.ht ml , a l os que se acceder t r as cl i car sobr e esas r eas.
En est e ej empl o, se supone que l a opci n
del i di oma no est an pr epar ada. Por el l o,
l a TAG AREA no hace r ef er enci a a ni ngn
ar chi vo o l i nk. Se ha empl eado el at r i but o
NOHREF par a i ndi car expr esament e que no se
acceda a ni ngn URL al cl i car en est a zona.
De est e modo, cuando est ya pr epar ado el
ar chi vo i di omas. ht ml , no habr ms que
cambi ar est a par t e de cdi go. Fi nal ment e,
podr deci r se que l a i magen sensi bl e
f unci ona si al despl azar el r at n si n cl i car
sobr e un r ea act i va apar ece en l a bar r a de
est ado l a di r ecci n a l a que se acceder si se
cl i ca sobr e el l a. Obvi ament e, est o l t i mo no
se cumpl e par a l as r eas def i ni das con
NOHREF.

Fi gura 3. 3.
3. 10. Edi t ores y conversor es HTML
Con un si mpl e edi t or de t ext o como Not epad se pueden cr ear l os f i cher os HTML ms sof i st i cados. Si n
embar go, hay que seal ar que l a t ar ea se si mpl i f i ca mucho si se di spone de un buen edi t or o conver sor
especi al ment e pr epar ado par a pr oduci r est e t i po de f i cher os.
Los edi t or es per mi t en i nt r oduci r de modo aut omt i co o semi aut omt i co l as TAGs de HTML a medi da
que se va t ecl eando el t ext o. Los hay de dos t i pos: edi t or es aut omt i cos WYSIWYG (What You See Is What
You Get ) en l os que al i nt r oduci r el t ext o se muest r a t al como se ver en el br owser , y edi t or es
semi aut omt i cos ms senci l l os que si mpl ement e pr opor ci onan ayuda par a i r i nt r oduci endo l os TAGs; de
or di nar i o est os edi t or es per mi t en l l amar al br owser pr ef er i do pul sando un si mpl e bot n, par a compr obar
cmo se ve el f i cher o que se est cr eando. Son edi t or es semi aut omt i cos CMED y Hot Dog y aut omt i cos
l os edi t or es Net scape Navi gat or Gol d y Fr ont Page HTML Edi t or .
Los conver sor es son pr ogr amas que convi er t en l os f or mat os pr opi os de una apl i caci n ( por ej empl o
Wor d, Excel y Power poi nt ) a f or mat o HTML. Es posi bl e que en l a conver si n se pi er dan o cambi en
al gunas car act er st i cas de f or mat o, per o eso no r est a ut i l i dad a l os conver sor es. Cada vez ms, l os
conver sor es son pr ogr amas i nt egr ados, es deci r , es l a pr opi a apl i caci n or i gi nal l a que t i ene l a posi bi l i dad
de cr ear f i cher os *.ht ml . Int er net Assi st ant f or Wor d, Excel y Power poi nt son conver sor es i nt egr ados en
l os pr ogr amas de Mi cr osof t Of f i ce.


CAPTULO 4
4. Formul ari os y CGIs
4. 1. Formul ari os (Forms)
Hast a el moment o se ha vi st o cmo el ser vi dor puede cr ear pgi nas Web que son vi sual i zadas por medi o
de un br owser en el or denador del usuar i o r emot o, y cmo se mant i ene ci er t a i nt er act i vi dad medi ant e el
car ct er de hi per t ext o, medi ant e el cual el usuar i o va sol i ci t ando di st i nt os cont eni dos segn sus
pr ef er enci as. Si n embar go, en l o vi st o hast a ahor a se echa en f al t a l a posi bi l i dad de que el usuar i o enve
dat os al ser vi dor , t al es como suger enci as, nombr es, dat os per sonal es, et c. Est a posi bi l i dad se consi gue por
medi o de l os f or mul ar i os (FORMs) que per mi t en el envo de dat os medi ant e di ver sos t i pos de bot ones,
cuadr os de di l ogo y vent anas de t ext o. En est e apar t ado l os f or mul ar i os y sus di st i nt os el ement os se
est udi ar n con un ci er t o det eni mi ent o. En l a Fi gur a 4. 1. se pr esent a un f or mul ar i o con di st i nt os
el ement os: caj as de t ext o, bot ones de sel ecci n o de opci n, l i st as despl egabl es, et c.

Fi gura 4. 1.
Los f or mul ar i os t i enen un modo pr opi o de f unci onar que convi ene ent ender cor r ect ament e, pr i mer o de
un modo ms gener al y l uego ms en det al l e. Cada uno de l os el ement os del f or mul ar i o t i ene un nombr e,
det er mi nado por l a per sona que l o ha pr ogr amado. Ese nombr e se asoci ar post er i or ment e a l a opci n
el egi da o al t ext o i nt r oduci do por el usuar i o. Un el ement o par t i cul ar ment e i mpor t ant e (por l o deci si vo,
ms que por su compl ej i dad) es el bot n Envi ar (o Submi t , Send, O. K. , o como se l e haya quer i do l l amar ) ,
cuya mi si n es dar por concl ui da l a r ecogi da de dat os en el br owser y envi ar al ser vi dor t oda l a
i nf or maci n que el usuar i o haya i nt r oduci do. Cuando se pul sa est e bot n se enva al ser vi dor (en l a f or ma
que ms adel ant e se ver ) una l ar ga cadena de car act er es que cont i ene l os nombr es de t odos l os
el ement os del f or mul ar i o j unt o con l a i nf or maci n que el usuar i o ha i nt r oduci do en cada uno de el l os.
Qu hace el ser vi dor con t oda l a i nf or maci n que l e l l ega de un f or mul ar i o debi dament e
cumpl i ment ado? Pues al go muy senci l l o: ar r ancar un pr ogr ama cuyo nombr e est especi f i cado en el pr opi o
f or mul ar i o, pasar l e t oda l a i nf or maci n que ha r eci bi do, r ecoger l a i nf or maci n que di cho pr ogr ama l e
enva como r espuest a, y envi ar l a al cl i ent e o br owser que r el l en el f or mul ar i o. Adems de r esponder al
cl i ent e, est e pr ogr ama podr r eal i zar cual qui er ot r a acci n, como por ej empl o guar dar l a i nf or maci n
r eci bi da en un f i cher o o en una base de dat os. Ya se ve que en t odo est e pr oceso el ser vi dor act a como
una especi e de i nt er medi ar i o ent r e el br owser y el pr ogr ama que r eci be l a i nf or maci n del f or mul ar i o y l a
pr ocesa. La f or ma en l a que el ser vi dor se ent i ende con el pr ogr ama al que l l ama par a que pr ocese l os
dat os del f or mul ar i o r eci be el nombr e de CGI (Common Gat eway Int er f ace) . La Fi gur a 4. 2. r epr esent a de
f or ma si mbl i ca t odo est e pr oceso.
As pues t odo f or mul ar i o se def i ne medi ant e l a dobl e TAG <FORM></FORM>, dent r o de l as cul es se
def i ni r n l os di st i nt os el ement os. Al cr ear un f or mul ar i o se debe def i ni r el mt odo de envo de dat os
(GET o POST) que el ser vi dor ut i l i zar par a envi ar al pr ogr ama CGI l os dat os que debe pr ocesar . Tambi n
se debe especi f i car l a acci n que el ser vi dor deber empr ender cuando r eci ba l os dat os, y que ser
24 Informtica III

ar r ancar di cho pr ogr ama CGI cuyo nombr e debe conocer . Est as dos t ar eas se def i nen, r espect i vament e,
con l os at r i but os METHOD y ACTION.

Cliente
****
Servidor
Servidor HTTP CGI
Base
de
datos
QUERY
STRING
Respuesta
HTML

Fi gura 4. 2.
A cont i nuaci n se pr esent a un ej empl o si mpl e que per mi t e ver cmo se def i ne un f or mul ar i o y cmo
apar ece en el br owser . El cdi go HTML es el si gui ent e:
<FORM ACTION="/cgi-bin/form1.exe" METHOD="GET">
Introduzca su nombre:
<INPUT TYPE="text" NAME="nombre"><br>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>
En l a Fi gur a 4. 3. apar ece r epr esent ado el f or mul ar i o cor r espondi ent e, que sl o t i ene dos el ement os: un
cuadr o de t ext o par a que el usuar i o t ecl ee el nombr e y un bot n par a envi ar l os dat os al ser vi dor cuando
el nombr e haya si do ya i nt r oduci do. Todos l os el ement os de un f or mul ar i o que r ecogen i nf or maci n se
def i nen con l a TAG si mpl e <INPUT>. El at r i but o TYPE def i ne el t i po de el ement o de que se t r at a (si se
omi t e, por def ect o se supone que el t i po es t ext ) . A cada el ement o ( except o a l os si ngul ar es -que no se
pueden r epet i r - como el bot n Envi ar ) hay que aadi r l e un at r i but o NAME que def i na el nombr e con el
que se i dent i f i car l uego su cont eni do.


Fi gura 4. 3.
En el ej empl o ant er i or , el cuadr o de t ext o se ha def i ni do con l a TAG INPUT; en esa TAG se ha
i nt r oduci do un par met r o NAME def i ni endo que ese cuadr o se l l ama nombr e .
Se ha i nt r oduci do el at r i but o TYPE= SUBMIT par a el segundo el ement o del f or mul ar i o. Est e el ement o
es un bot n cuya f unci n es envi ar l os dat os de l os el ement os del f or mul ar i o al pr ogr ama CGI que l o va a
pr ocesar . Di cho pr ogr ama se especi f i ca medi ant e el at r i but o ACTION, y r esul t a ser / cgi -bi n/ f or m1. exe .
En gener al cgi -bi n es un di r ect or i o l ocal i zado en el ser vi dor , que cont i ene l os pr ogr amas CGI.
Tambi n se puede cr ear un bot n ( l l amado en i ngl s RESET) que r ei ni ci e el f or mul ar i o a su est ado
i ni ci al , anul ando t odos l os cambi os que hubi er a podi do i nt r oduci r el usuar i o. La maner a de cr ear l o se ver
en el si gui ent e ej empl o, que cont i ene al gunos el ement os y at r i but os nuevos con l os que se t r at a de
r ecoger l os dat os del domi ci l i o de una per sona. La Fi gur a 4. 4. muest r a como se ve en el br owser el
f or mul ar i o def i ni do. Gr aci as a l a TAG <PRE>. . . </ PRE> que i mpone paso const ant e y r espet a l os espaci os en
bl anco se consi gue que l os cuadr os de t ext o queden al i neados. El at r i but o NAME per mi t e def i ni r un
nombr e par a cada el ement o. El at r i but o SIZE det er mi na l a l ongi t ud del cuadr o de t ext o, mi ent r as que
MAXLENGTH l i mi t a el nmer o de car act er es que se pueden i nt r oduci r en cada cuadr o. Ini ci al ment e t odos
l os cuadr os de t ext o est n en bl anco, t al como se ve en l a f i gur a 4. 4. Si el usuar i o i nt r oduce dat os y pul sa
l uego el bot n Bor r ar , el f or mul ar i o vol ver a l a condi ci n i ni ci al . Los bot ones SUBMIT y BORRAR no
necesi t an NAME por que quedan i dent i f i cados por su at r i but o TYPE. Por su par t e l os cuadr os de t ext o no
necesi t an at r i but o TYPE por que el t i po por def ect o es TEXT.
Captulo 4. Formularios y CGIs 25

<FORM ACTION="/cgi-bin/form3" METHOD="POST">
<PRE>
Nombre: <INPUT NAME="nombre" SIZE=30>
Calle: <INPUT NAME="calle" SIZE=40>
Localidad: <INPUT NAME="localid" SIZE=35>
Provincia: <INPUT NAME="prov" SIZE=25>
Cd. Postal: <INPUT NAME="cp" SIZE=5 MAXLENGTH=5>
</PRE>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
<INPUT TYPE="RESET" VALUE="Borrar">
</FORM>

Fi gura 4. 4.
Consi dr ese un nuevo ej empl o cor r espondi ent e al f or mul ar i o que se muest r a en l a Fi gur a 4. 5. En l se
ve que t ambi n se pueden cr ear r eas de t ext o en l as cual es no se l i mi t a l a cant i dad de t ext o a
i nt r oduci r , y que pueden ser vi r par a pedi r suger enci as u opi ni ones. La f or ma de cr ear l as es con l a TAG
dobl e <TEXTAREA>. . . </ TEXTAREA>. Los par met r os que se l e envan son el nombr e (at r i but o NAME) y l os
nmer os de f i l as y de col umnas de l a vent ana (at r i but os ROWS=n y COLS=m) . En est e caso l a TAG dobl e
<TEXTAREA> sust i t uye a l a TAG si mpl e <INPUT>. Ms adel ant e se ver n ot r os TAGs al t er nat i vas par a cr ear
di st i nt os el ement os del f or mul ar i o. A cont i nuaci n se muest r a un ej empl o (Fi gur a 4. 5).
<H2>Sugerencias y crticas</H2>
<P><FORM ACTION="/cgi-bin/form3" METHOD="POST">
Por favor, introduzca cualquier sugerencia o crtica positiva:<BR>
<TEXTAREA ROWS=5 COLS=30 NAME="positivo">Me encanta este Web porque...
</TEXTAREA></P>
<P>Introduzca los comentarios negativos:<BR>
<TEXTAREA ROWS=2 COLS=15 NAME="negativo"></TEXTAREA></P>
<P><INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM></P>
Fi gura 4. 5.
Fi gura 4. 6.

Fi gura 4. 7.
26 Informtica III

En el si gui ent e ej empl o se va a ver que es posi bl e cr ear cuadr os de t ext o en l os que l o que se escr i be
no apar ezca (que apar ezca como car act er es *). Est os el ement os se empl ean par a que el usuar i o i nt r oduzca
un password. En l a Fi gur a 4. 6. se muest r a el r esul t ado del cdi go HTML que si gue:
<FORM>
Introduzca el nombre del usuario: <INPUT NAME="login" SIZE=25><BR>
Introduzca cdigo de acceso:
<INPUT TYPE="PASSWORD" NAME="acceso" SIZE=6 MAXLENGTH=10><P>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
<INPUT TYPE="RESET" VALUE="Borrar">
</FORM>
Como se puede ver , el modo de cr ear est e t i po de cuadr os de t ext o es anl ogo a l os ant er i or es:
ni cament e hay que i nt r oduci r el at r i but o TYPE= passwor d .
Una de l as opci ones ms i nt er esant es de l os f or mul ar i os es l a de poder cr ear casi l l as de ver i f i caci n.
En l a Fi gur a 4. 7 apar ece un ej empl o de est e t i po de el ement o. Par a poder cr ear est as casi l l as se debe
ut i l i zar l a TAG INPUT, poni endo el at r i but o TYPE= CHECKBOX y el mi smo NAME par a t odas l as casi l l as del
gr upo. La car act er st i ca de est as casi l l as es que se pueden sel ecci onar var i as a l a vez. Si al def i ni r l as se
i nt r oduce adems el at r i but o CHECKED, apar ecer n i ni ci al ment e sel ecci onadas (Pese a que l uego puedan
no sel ecci onar se) . El cdi go HTML necesar i o par a cr ear est e f or mul ar i o es el que si gue a cont i nuaci n:
<FORM ACTION="/cgi-bin/form" METHOD="POST">
Indique qu sistemas operativos conoce:<P>
<INPUT TYPE="checkbox" NAME="sisoper" VALUE="Unix" CHECKED>Unix<BR>
<INPUT TYPE="checkbox" NAME="sisoper" VALUE="OS/2">OS/2<BR>
<INPUT TYPE="checkbox" NAME="sisoper" VALUE="MacOS">MacOS<BR>
<INPUT TYPE="checkbox" NAME="sisoper" VALUE="DOS" CHECKED>DOS<BR>
<INPUT TYPE="checkbox" NAME="sisoper" VALUE="WinNT" CHECKED>Windows NT<BR>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
<INPUT TYPE="RESET" VALUE="Borrar">
</FORM>
En el si gui ent e ej empl o se va a ver que t ambi n se pueden cr ear bot ones de r adi o, que son si mi l ar es a
l os CHECKBOX, per o con l a condi ci n de que sl o se puede sel ecci onar uno de el l os a l a vez. La Fi gur a 4. 8.
muest r a el r esul t ado en el br owser del cdi go que se i ncl uye a cont i nuaci n:
<FORM ACTION="/cgi-bin/form" METHOD="POST">
Indique su estado civil:<P>
<INPUT TYPE="radio" NAME="estado" VALUE="Soltero">Soltero/a <BR>
<INPUT TYPE="radio" NAME="estado" VALUE="Casado">Casado/a <BR>
<INPUT TYPE="radio" NAME="estado" VALUE="Viudo">Viudo/a <BR>
<INPUT TYPE="radio" NAME="estado" VALUE="Otros">Otros <BR>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
<INPUT TYPE="RESET" VALUE="Borrar">
</FORM>
Fi nal ment e se pr esent an ej empl os de
ot r a de l as opci ones que per mi t en l os
f or mul ar i os: l as vent anas de sel ecci n
despl egabl es y l as vent anas de scr ol l
(o vent anas con bar r as de
desl i zami ent o). Las pr i mer as est n
basadas en una TAG dobl e l l amado
<SELECT></ SELECT>. En el cont eni do
de est a TAG se pueden i ncl ui r t ant os
TAGs si mpl es <OPTION> como se desee.
El TAG <SELECT> t i ene el at r i but o NAME,
l o que no ocur r e con l as TAGs
<OPTION>. Cada TAG <OPTION> cont i ene
un at r i but o VALUE que descr i be el t ext o
que apar ecer en l a vent ana.
Fi gura 4. 8.

Fi gura 4. 9.

Captulo 4. Formularios y CGIs 27

El aspect o vi sual del pr i mer o de l os ej empl os se muest r a en l a Fi gur a 4. 9 y su cdi go HTML:
<FORM>
Indique cul es el medio de<BR>
transporte que usa con mayor<BR>
frecuencia para ir al trabajo:<P>
<SELECT NAME="Transp">
<OPTION VALUE="coche"> Coche particular </OPTION>
<OPTION VALUE="bus"> Autobs </OPTION>
<OPTION VALUE="taxi"> Taxi </OPTION>
<OPTION VALUE="tren"> Tren </OPTION>
<OPTION VALUE="metro"> Metro </OPTION>
<OPTION VALUE="bici"> Bicicleta </OPTION>
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>
Como se puede ver cada una de l as opci ones de l a vent ana se i nt r oduce con l a TAG si mpl e <OPTION
VALUE= nombr e >, y es necesar i o que t odas l as opci ones est n ent r e l as TAGs <SELECT> y </ SELECT>
En el si gui ent e ej empl o se va a ut i l i zar , en vez de una vent ana despl egabl e, una vent ana con bar r as de
desl i zami ent o o vent ana de scr ol l . En l a Fi gur a 4. 10 se muest r a el r esul t ado del cdi go que si gue:
<FORM>
Indique cul es el medio de<BR>
transporte que usa con mayor<BR>
frecuencia para ir al trabajo:<P>
<SELECT NAME="Transp" SIZE=3>
<OPTION VALUE="coche"> Coche particular </OPTION>
<OPTION VALUE="bus"> Autobs </OPTION>
<OPTION VALUE="taxi"> Taxi </OPTION>
<OPTION VALUE="tren"> Tren </OPTION>
<OPTION VALUE="metro"> Metro </OPTION>
<OPTION VALUE="bici"> Bicicleta </OPTION>
<SELECT>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>

Fi gura 4. 10. Fi gura 4. 11.
La ni ca di f er enci a r espect o al ej empl o ant er i or es el at r i but o SIZE que def i ne el t amao ver t i cal
(nmer o de l neas) de l a vent ana. Si SIZE=1 l a vent ana ser despl egabl e, y en caso cont r ar i o apar ecer
una vent ana con bar r as de desl i zami ent o.
En l os dos ej empl os ant er i or es sl o se poda sel ecci onar uno de l as opci ones de l a vent ana. En el
si gui ent e ej empl o se va a cr ear una vent ana de sel ecci n ml t i pl e. El r esul t ado se muest r a en l a Fi gur a
4. 11. y el cdi go HTML es como si gue:
28 Informtica III

<FORM>
Indique las reas que sean<BR>
de su inters:<P>
<SELECT NAME="Areas" SIZE=4 MULTIPLE>
<OPTION VALUE="lan"> Redes de rea Local
<OPTION VALUE="inet"> Internet
<OPTION VALUE="teleco"> Telecomunicaciones
<OPTION VALUE="sop"> Sistemas Operativos
<OPTION VALUE="soft"> Software
<OPTION VALUE="hard"> Hardware
</SELECT>
<INPUT TYPE="SUBMIT" VALUE="Enviar">
</FORM>
Ni que deci r t i ene que t ambi n es posi bl e cr ear vent anas despl egabl es de sel ecci n ml t i pl e: pr ubese
copi ando st e mi smo cdi go el i mi nando el par met r o SIZE=4 o, si mpl ement e, haci endo SIZE= 1) En l os
ej empl os ant er i or es se han pr esent ado l as posi bi l i dades abi er t as por l os f or mul ar i os. En el apar t ado
si gui ent e se consi der ar cmo se debe pr ocesar est a i nf or maci n cuando l l ega al ser vi dor .
4. 2. Programas CGI
Ya se ha vi st o en el apar t ado ant er i or cmo cr ear f or mul ar i os con l os que r ecoger dat os de di ver so t i po
par a envi ar l os al ser vi dor , per o cmo se envan y cmo se pr ocesan est os dat os? La r espuest a est en que
l os dat os se envan como cadena de car act er es aadi da a un URL como quer y st r i ng, pr ecedi da con un
car ct er ( ?) ; par a pr ocesar l os se ut i l i zan l os pr ogr amas CGI ( Common Gat eway Int er f ace) , que el ser vi dor
ar r anca y a l os que pasa l os dat os r eci bi dos del br owser .
Los CGI son pr ogr amas hechos por l o gener al en Per l (l enguaj e i nt er pr et ado muy popul ar en el ent or no
UNIX, per o que t ambi n exi st e en Wi ndows NT) o en C/ C++.
A gr andes r asgos un pr ogr ama CGI debe r eal i zar l as si gui ent es t ar eas:
Reci bi r l os dat os que son envi ados por el br owser e i nt er pr et ar l os, separ ando l a ent r ada
cor r espondi ent e a cada el ement o del f or mul ar i o.
Real i zar l as t ar eas necesar i as par a pr ocesar esos dat os, que de or di nar i o consi st i r n en al macenar l os
en al gn ar chi vo o base de dat os y envi ar una r espuest a al br owser donde se encuent r a el usuar i o.
Est a r espuest a debe t ener l a f or ma de pgi na HTML i ncl uyendo t odos l os el ement os necesar i os
(<HEAD>, <BODY>, et c. ) .
Par a que un pr ogr ama CGI f unci one cor r ect ament e debe est ar en un di r ect or i o / cgi -bi n/ del ser vi dor
HTTP (ser vi dor Web). En caso que se ut i l i ce Vi sual C++ (u ot r o compi l ador compat i bl e) es i mpor t ant e, par a
que el ej ecut abl e CGI f unci one cor r ect ament e, el compi l ar l o par a que f unci one en modo MS-DOS (o modo
Consol a). Par a un pr ogr ama de est e t i po l a ent r ada de dat os est ndar es el t ecl ado y l a sal i da de dat os
est ndar es l a pant al l a. Par a un pr ogr ama CGI el ser vi dor HTTP asume el papel de ent r ada y sal i da de
dat os est ndar .


CAPTULO 5
5. JavaScri pt
5. 1. Int roducci n
JavaScr i pt es un l enguaj e de pr ogr amaci n que per mi t e el scr i pt de event os, cl ases y acci ones par a el
desar r ol l o de apl i caci ones Int er net ent r e el cl i ent e y el usuar i o. JavaScr i pt per mi t e con nuevos el ement os
di nmi cos i r ms al l de cl i car y esper ar en una pgi na Web. Los usuar i os no l eer n ni cament e l as
pgi nas si no que adems l as pgi nas ahor a adqui er en un car ct er i nt er act i vo. Est a i nt er acci n per mi t e
cambi ar l as pgi nas dent r o de una apl i caci n: poner bot ones, cuadr os de t ext o, cdi go par a hacer una
cal cul ador a, un edi t or de t ext o, un j uego, o cual qui er ot r a cosa que pueda i magi nar se.
Los navegador es i nt er pr et an l as sent enci as de JavaScr i pt i ncl ui das di r ect ament e en una pgi na HTML,
per mi t i endo l a cr eaci n de apl i caci ones si mi l ar es a l os CGI.
An no hay def i ni ci n cl ar a del scr i pt i ng l anguage ("l enguaj e i nt er pr et ado de comandos") . A veces el
t r mi no se usa par a di st i ngui r est e t i po de l enguaj e de l os l enguaj es compi l ados como el C++. Qui z,
al gunos l enguaj es como el C o C++ puedan ser usados par a scr i pt s de apl i caci ones. JavaScr i pt es en
muchos aspect os un l enguaj e de pr ogr amaci n par eci do al C o C++.
Como ot r os l enguaj es scr i pt , JavaScr i pt ext i ende l as capaci dades de l a apl i caci n con l a que t r abaj an,
as JavaScr i pt ext i ende l a pgi na Web ms al l de su uso nor mal . Hay numer osas maner as de dar vi da al
Web y dar f l exi bi l i dad al l enguaj e. El ni co l mi t e es l a i magi naci n.
5.1.1. Pr opi edades del Lenguaj e JavaScr i pt
Las pr opi edades ms i mpor t ant es de JavaScr i pt son l as si gui ent es:
Se i nt er pr et a por el or denador que r eci be el pr ogr ama, no se compi l a.
Ti ene una pr ogr amaci n or i ent ada a obj et os. El cdi go de l os obj et os est pr edef i ni do y es
expandi bl e. No usa cl ases ni her enci a.
El cdi go est i nt egr ado (i ncl ui do) en l os document os HTML.
Tr abaj a con l os el ement os del HTML.
No se decl ar an l os t i pos de var i abl es.
Ej ecuci n di nmi ca: l os pr ogr amas y f unci ones no se chequean hast a que se ej ecut an.
Los pr ogr amas de JavaScr i pt se ej ecut an cuando sucede al go, a ese al go se l e l l ama event o.
5.1.2. El l enguaj e JavaScr i pt
JavaScr i pt est basado en un model o or i ent ado al WWW. El ement os de una pgi na como un bot n o un
cuadr o de sel ecci n, pueden causar un event o que ej ecut ar una acci n. Cuando ocur r e al guno de est os
event os se ej ecut a una f unci n en JavaScr i pt . Est a f unci n est compuest a de var i as sent enci as que
exami nan o modi f i can el cont eni do de l a pgi na Web, o hacen ot r as t ar eas par a dar r espuest a de al gn
modo al event o.
Por l o gener al , l os comandos de un pr ogr ama en JavaScr i pt se di vi den en 5 cat egor as:
Var i abl es y sus val or es.
Expr esi ones, que mani pul an l os val or es de l as var i abl es.
Est r uct ur as de cont r ol , que modi f i can cmo l as sent enci as son ej ecut adas.
Funci ones, que ej ecut an un bl oque de sent enci as
30 Informtica III

Cl ases y ar r ays (vect or es), que son maner as de agr upar dat os.
A cont i nuaci n se pr esent a una br eve i nt r oducci n sobr e est as cat egor as.
5.1.3. Var i abl es y val or es
En JavaScr i pt , a di f er enci a de l a mayor a de l os l enguaj es de pr ogr amaci n, no se debe especi f i car el
t i po de dat os. No hay maner a de especi f i car que una var i abl e r epr esent a un ent er o, una cadena de
car act er es, un nmer o con deci mal es (que se escr i ben con punt o y no con coma), o un val or l gi co
bool eano. De hecho, l a mi sma var i abl e puede ser i nt er pr et ada de di f er ent es modos en di f er ent es
moment os.
Todas l as var i abl es se decl ar an usando el comando var . Una var i abl e puede ser i ni ci al i zada cuando se
da un val or al ser decl ar ada, o puede no ser i ni ci al i zada. Adems, var i as var i abl es pueden ser decl ar adas a
l a vez separ adas por comas.
Ej empl o 1:
var variable1= "coche"
var cuaderno
var mi_variable = 123456, decimal =2342.89
var n_casas, n_habitaciones, n_cuadros, nombre = "Franklin"
5.1.4. Sent enci as, Expr esi ones y Oper ador es
Como en l a mayor a de l os l enguaj es de pr ogr amaci n, l a uni dad bsi ca de t r abaj o en JavaScr i pt es l a
sent enci a. Una sent enci a de JavaScr i pt hace que al go sea eval uado. Est o puede ser el r esul t ado de dar
val or a una var i abl e, l l amar a una f unci n, et c. Cual qui er a de l as l neas del ej empl o 1 es una sent enci a.
Los pr ogr amas de JavaScr i pt son un gr upo de sent enci as, nor mal ment e or gani zadas en f unci ones que
mani pul an l as var i abl es y el ent or no HTML en el cual el scr i pt t r abaj a.
Los oper ador es hacen que en una sent enci a l as var i abl es sean eval uadas y se l es asi gne un val or o un
r esul t ado. Los oper ador es pueden act uar de di st i nt o modo en di f er ent es si t uaci ones. Al gunos oper ador es
de JavaScr i pt pueden ser sobr ecar gados, es deci r , pueden t ener di ver sas i nt er pr et aci ones segn su modo
de uso.
No hay ni ngn car ct er especi al o si gno que mar que el f i nal de una sent enci a en un pr ogr ama. Por
def ect o se consi der a que una sent enci a ha acabado cuando se l l ega al f i nal de l a l nea, aunque se puede
especi f i car el f i n con el car ct er punt o y coma (; ) . st o hace posi bl e poner var i as sent enci as en una sol a
l nea separ adas ent r e s por un punt o y coma.
Las dos si gui ent es sent enci as r eal i zan l a mi sma oper aci n, par a JavaScr i pt no t i enen ni nguna di f er enci a
Ej empl o 2:
var variable1= "coche"
var variable1= "coche";
y est os dos gr upos de sent enci as t ambi n:
Ej empl o 3:
var a = 0; a = 2+4; var c = a / 3 (;)
var a = 0
a = 2+4
var c = a / 3
Los segunda sent enci a es una expr esi n.
5.1.5. Est r uct ur as de Cont r ol .
Con l o expl i cado, an no es posi bl e escr i bi r cdi go par a un pr ogr ama compl et o; hay que conocer
const r ucci ones de ni vel ms el evado. Exi st en var i os mt odos par a cont r ol ar el modo de ej ecuci n de
sent enci as que se ver n ms adel ant e.
5.1.6. Funci ones y Obj et os
Las sent enci as, expr esi ones y oper ador es bsi cos se agr upan en bl oques ms compl ej os dent r o de un
mi smo pr ogr ama l l amadas f unci ones. El cont r ol de est r uct ur as r epr esent a el si gui ent e ni vel de
or gani zaci n de JavaScr i pt . Las f unci ones y l os obj et os r epr esent an el ni vel ms al t o de or gani zaci n del
l enguaj e.
5. 1. 6. 1. Funci ones
Una f unci n es un bl oque de cdi go con un nombr e. Cada vez que se usa el nombr e, se l l ama a l a
f unci n y el cdi go de l a f unci n es ej ecut ado. Las f unci ones pueden l l amar se con val or es, conoci dos
Captulo 5. JavaScript 31

como par met r os, que se usan en l a f unci n. Las f unci ones t i enen dos obj et i vos: or gani zaci n del
pr ogr ama (ar chi vo o document o) y ej ecuci n del cdi go de l a f unci n. Al cl i car con el r at n, apr et ar un
bot n, sel ecci onar t ext o y ot r as acci ones pueden l l amar a f unci ones.
El nombr e de una f unci n se escr i be i nmedi at ament e despus del comando f unct i on. Todos l os
nombr es de f unci ones deben ser ni cos y di f er ent es de l os nombr es de l os comandos que usa JavaScr i pt .
No puede haber dos f unci ones con el mi smo nombr e. La l i st a de par met r os de una f unci n se separ a por
comas. La f unci n usa esos par met r os en l as sent enci as de su cuer po que l a conf i gur an. Los ar gument os
que se l e pasan a una f unci n no pueden ser cambi ados en su i nt er i or .
Ej empl o 4:
function valor_abs (num){
if (num >= 0)
return num
else
return -num
}
num es el ar gument o que se ut i l i za dent r o de l a f unci n. El cdi go de l a f unci n va ent r e l l aves.
5. 1. 6. 2. Obj et os
Las f unci ones se usan par a or gani zar el cdi go. Los obj et os t i enen el mi smo pr opsi t o per o con dat os.
Los t i pos de dat os conoci dos hast a ahor a son var i abl es decl ar adas o i ni ci al i zadas con var. Cada uno de
est os t i pos puede t ener un sol o val or . Los obj et os per mi t en l a capaci dad de t ener var i os val or es, de t al
maner a que un gr upo de dat os pueda est ar r el aci onado con ot r o.
Lo que en JavaScr i pt se l l ama obj et o en ot r os l enguaj es se l l ama est r uct ur a de dat os o cl ase. Como l as
f unci ones, l os obj et os t i enen 2 aspect os: cmo se cr ean y cmo se usan.
Al usar JavaScr i pt , t enemos pr edef i ni dos una ser i e de obj et os. Un obj et o de JavaScr i pt es un conj unt o
de component es, l l amados pr opi edades o mi embr os. Si se supone que se t i ene un obj et o l l amado ci t a par a
or gani zar ci t as, st e t endr l as pr opi edades da, hor a, con qui n y par a qu.
A cada una de est as pr opi edades del obj et o se hace r ef er enci a con el oper ador punt o ( . ) .
As, par a r ef er i r se al mes de l a ci t a se usa una_ci t a. mes mi ent r as que una_ci t a. con_qui en cont endr el
nombr e de con qui n nos hemos ci t ado.
Cada obj et o puede cont ener t odas l as var i abl es que nos i nt er esen. Puede cont ener f unci ones que
r eal i cen al gn t r abaj o. Puede i ncl uso cont ener ot r os obj et os, de t al maner a que se pueden or gani zar l os
dat os de modo j er r qui co.
Ms adel ant e se ver n ej empl os al ent r ar en det al l e con l os obj et os.
5.1.7. La TAG Scr i pt .
En el sent i do ms gener al , cada pgi na Web est hecha con sent enci as de HTML que di vi den l a pgi na
en dos par t es: el HEAD y el BODY.
La secci n HEAD de un document o HTML es l a que debe cont ener el cdi go de JavaScr i pt par a l os
gest or es de event os. Aunque no es necesar i o que t odo el cdi go de JavaScr i pt vaya en el HEAD, es
i mpor t ant e que vaya en l par a asegur ar que t odo el cdi go de JavaScr i pt haya si do def i ni do ant es del
BODY del document o. En par t i cul ar , si el document o t i ene cdi go par a ej ecut ar un event o, y est e event o
se acci ona ant es de que el cdi go se l ea, podr a ocur r i r un er r or por que l a f unci n est si n def i ni r .
En un document o HTML, el cdi go de JavaScr i pt se i nt r oduce medi ant e l a TAG SCRIPT. Todo l o que
haya ent r e <SCRIPT> y </ SCRIPT> se consi der a como un t i po de cdi go scr i pt , como JavaScr i pt . La si nt axi s
par a l a TAG SCRIPT es:
<SCRIPT LANGUAGE=Nombre del lenguaje SRC=URL>
El el ement o Nombr e del l enguaj e da el l enguaj e que se usa en el subsi gui ent e scr i pt .
El at r i but o SRC es necesar i o cuando se qui er e hacer r ef er enci a a un f i cher o que cont i ene el cdi go del
scr i pt . Par a JavaScr i pt , el f i cher o suel e t ener ext ensi n . j s. Si se usa el at r i but o SRC l a TAG <SCRIPT> es
i nmedi at ament e segui da por </ SCRIPT>. Por ej empl o un bl oque <SCRIPT> que car ga un cdi go JavaScr i pt
del f i cher o cl i ck. j s en el di r ect or i o r el at i vo al document o, se har a del si gui ent e modo:
Ej empl o 5
<SCRIPT LANGUAGE=text/javascript SRC=click.js></SCRIPT>

32 Informtica III

Si no se pone el at r i but o SRC, ent onces ent r e l as TAGs <SCRIPT> y </ SCRIPT> se escr i be el cdi go en el
l enguaj e i ndi cado en l a pr i mer a TAG. La est r uct ur a gener al del cdi go es:
<SCRIPT LANGUAGE=text/javascript>
Sentencias
</SCRIPT>
El si gui ent e pr ogr ama usa l a f unci n del ej empl o 4. Con el f or mul ar i o, <FORM>, nos pi de un nmer o
que eval uamos con l a f unci n y devol vemos su val or absol ut o. Puede que haya cosas que no queden cl ar as,
per o t odo se expl i car con ms det al l e a post er i or i . La f unci n de est os ej empl os pr evi os no es si no l a de
dar una vi si n gener al del l enguaj e.
Ej empl o 6:
<HTML>
<BODY>
<SCRIPT LANGUAGE="text/javascript">
function valor_abs(form){
var num = eval(form.expr.value)
if (num >= 0)
form.result.value = num
else
num = -num
form.result.value = num
}
</SCRIPT>
<FORM>
<SCRIPT>
document.write("Introduce un nmero:") // Salida por pantalla
</SCRIPT>
<INPUT TYPE="text" NAME="expr" SIZE=15 ><BR>
<INPUT TYPE="button" VALUE="Calcular" onClick="valor_abs(this.form)"><BR>
<P ALIGN=LEFT>
<SCRIPT>document.write("Valor Absoluto:")</SCRIPT>
<INPUT TYPE="text" NAME="result" SIZE=15 >
</P>
</FORM>
</BODY>
</HTML>
5. 2. Act i vaci n de JavaScri pt : Event os (Event s).
El nmer o de cosas que se pueden hacer en una pgi na HTML es bast ant e l i mi t ado. La mayor a de l os
usuar i os si mpl ement e l een un t ext o, mi r an gr f i cos y como mucho escuchan soni dos. Par a muchos, l a
exper i enci a del Web consi st e en vi si t ar una ser i e de pgi nas si n i nt er acci onar pr ct i cament e con el l as. La
ni ca i nt er acci n ocur r e cuando el usuar i o sel ecci ona un l i nk o cl i ca un mapa de i magen.
Los f or mul ar i os de HTML han cambi ado gr adual ment e est e model o par a i ncr ement ar el ni vel de
i nt er acci n. Un f or mul ar i o t i ene var i os modos de acept ar ent r adas. El usuar i o r el l ena el f or mul ar i o y l o
enva. Es di f ci l saber si el f or mul ar i o ha si do r el l enado cor r ect ament e y el t i empo de pr oceso del
f or mul ar i o es nor mal ment e bast ant e l ar go. En el caso del HTML, est e pr oceso ocur r e por que el cont eni do
del f or mul ar i o t i ene que ser envi ado a t r avs de l a r ed a al gn f i cher o en el ser vi dor , donde se pr ocesa y
ent onces se da una r espuest a al usuar i o. Incl uso el ms si mpl e er r or causa el r echazo del f or mul ar i o, y por
l o t ant o que deba r epet i r se el pr oceso.
Uno de l os obj et i vos de JavaScr i pt es l ocal i zar l a mayor a de est os pr ocesos y mej or ar l os dent r o del
br owser del usuar i o. JavaScr i pt es capaz de asegur ar se que un f or mul ar i o se r el l ene y enve
cor r ect ament e; evi t ando que el usuar i o t enga que r epet i r el f or mul ar i o a causa de al gn er r or .
JavaScr i pt r eal i za est o medi ant e l os gest or es de event os. Est os son sent enci as de JavaScr i pt ,
nor mal ment e f unci ones, que se l l aman cada vez que al go ocur r e. Las f unci ones de JavaScr i pt pueden ser
l l amadas cuando se enva un f or mul ar i o o cuando el usuar i o usa campos del f or mul ar i o.
5.2.1. Event os y acci ones
Par a ent ender el model o de gest or es de event os de JavaScr i pt , hay que pensar pr i mer o sobr e l as cosas
que pueden ocur r i r act ual ment e en una pgi na Web. Aunque al gunas cosas se pueden hacer con el
Captulo 5. JavaScript 33

br owser , l a mayor a de est as no t i enen que ver con l a navegaci n en el Web (sal var una pgi na como
t ext o, i mpr i mi r l a, edi t ar un bookmar k, et c. ).
Par a ent ender qu acci ones del br owser cor r esponden a l os event os de JavaScr i pt y cual es no, es
i mpor t ant e di st i ngui r aquel l as acci ones que causan al gn cambi o en l a pgi na Web cuando se muest r a. De
hecho, r eal ment e hay sl o dos t i pos de acci ones: l as que per mi t en que el usuar i o pueda navegar o l as que
hacen posi bl e que el usuar i o pueda i nt er act uar con un el ement o de un f or mul ar i o HTML.
5. 2. 1. 1. Acci ones de Navegaci n y Event os
En l a cat egor a de navegaci n se pueden di st i ngui r l as si gui ent es acci ones:
Sel ecci onar un l i nk de hi per t ext o
Mover haci a adel ant e o haci a at r s en l a l i st a de Webs vi si t ados.
Abr i r ot r o f i cher o.
Cer r ar el br owser
En l a mayor a de est os casos l a pgi na act i va se descar ga, y ot r a nueva se car ga y se muest r a en l a
vent ana del br owser . Per o cual qui er per sona que ha usado l a WWW sabe que al sel ecci onar un l i nk de
hi per t ext o no si empr e se t i ene xi t o, puest o que l a mqui na puede est ar desconect ada o i naccesi bl e. El
l i nk puede haber muer t o. Sel ecci onando un l i nk muer t o se descar ga l a pgi na act i va, y no se car ga una
nueva.
Dependi endo del t i po de er r or y del br owser usado puede per der se l a pgi na act i va. Est os event os,
car gar y descar gar una pgi na, son l os ni cos event os que pueden ser manej ados por JavaScr i pt a ni vel de
l os document os. Est o si gni f i ca que es posi bl e escr i bi r cdi go JavaScr i pt cont eni do dent r o de l a def i ni ci n
de HTML de una pgi na, que se ej ecut ar cada vez que l a pgi na sea car gada o descar gada.
5.2.2. Gest or es de Event os (Event Handl er s)
5. 2. 2. 1. Decl ar aci n
En l a i nt r oducci n se ha di cho que l as f unci ones de JavaScr i pt sl o se ej ecut an en r espuest a a event os.
Se sabe que l os event os ocur r en cuando se pr oduce al guna i nt er acci n o cambi o en l a pgi na Web act i va.
Las decl ar aci ones de l os gest or es de event os es muy si mi l ar a l os at r i but os de HTML. Cada nombr e del
at r i but o empi eza con l a pal abr a on y si gue con el nombr e del event o, as por ej empl o onCl i ck es el
at r i but o que se usar a par a decl ar ar un gest or de event os par a el event o Cl i ck ( cl i car un obj et o).
La decl ar aci n de un gest or de event os es: onEvent = Cdi go_JS .
Nor mal ment e, por conveni o, se escr i be on en mi nscul a y el nombr e del event o con l a l et r a i ni ci al en
mayscul a. Est o ayuda a di st i ngui r st e de l os dems at r i but os.
Los t i pos de event os y gest or es de event os son l os si gui ent es:
Event o Ocur re Cuando Gest or
bl ur El usuar i o qui t a el cur sor de un el ement o de f or mul ar i o onBl ur
cl i ck El usuar i o cl i ca un l i nk o un el ement o de f or mul ar i o onCl i ck
change El usuar i o cambi a el val or de un t ext o, un r ea de t ext o o
sel ecci ona un el ement o.
onChange
f ocus El usuar i o col oca el cur sor en un el ement o de f or mul ar i o. onFocus
l oad El usuar i o car ga una pgi na en el Navegador onLoad
Mouseover El usuar i o mueve el r at n sobr e un l i nk onMouseOver
Sel ect El usuar i o sel ecci ona un campo del el ement o de un
f or mul ar i o
onSel ect
Submi t Se enva un f or mul ar i o onSubmi t
Unl oad Se descar ga l a pgi na onUnl oad

El val or del at r i but o es un conj unt o de cdi go JavaScr i pt o una r ef er enci a a una f unci n de JavaScr i pt .
El cdi go o l a f unci n se ej ecut a al act i var el event o.
Ej empl o 7:
<INPUT TYPE=button NAME=mycheck VALUE=HA!
onClick=alert(Te he dicho que no me aprietes)>

34 Informtica III

Est a sent enci a cr ea un bot n (INPUT TYPE= but t on ) . Al cl i car el bot n, el gest or de event os onCl i ck
despl i ega una vent ana con el mensaj e que se pasa como ar gument o.
Nor mal ment e una pgi na HTML con pr ogr amaci n en JavaScr i pt t i ene l os si gui ent es component es:
Funci ones JavaScr i pt dent r o de un bl oque Scr i pt dent r o del <HEAD> del document o.
HTML no i nt er act i vo dent r o del <BODY> del document o
HTML i nt er act i vo con at r i but os gest or es de event os cuyos val or es son f unci ones de JavaScr i pt .
En gener al , ya sabemos decl ar ar gest or es de event os. Ahor a se ver qu gest or es de event os pueden
asoci ar se con l os TAGs especf i cos de HTML.
Los event os de JavaScr i pt suceden en t r es ni vel es: a ni vel del document o Web, a ni vel de un f or mul ar i o
i ndi vi dual dent r o del document o y a ni vel de un campo de f or mul ar i o.
5. 2. 2. 2. Uso
5.2.2.2.1. Gest or es a ni vel de document o
La TAG HTML BODY cont i ene l a descr i pci n del cont eni do de l a pgi na HTML. La TAG BODY puede
cont ener dos decl ar aci ones de gest or es de event os usando l os at r i but os onLoad y onUnl oad. Una
decl ar aci n podr a ser :
Ej empl o 8:
<BODY onLoad=cargarfuncion() onUnload=descargarfuncion()>

El at r i but o onLoad= car gar f unci on() decl ar a un gest or de JavaScr i pt que manej ar l a car ga. El event o
l oad se gener a despus de que el cont eni do de l a pgi na ent r e <BODY> y </ BODY> se haya l edo per o ant es
de que se haya most r ado. El gest or de event o onLoad es un buen l ugar par a most r ar el nombr e de l a
compaa o l a i nf or maci n de copyr i ght , una vent ana de segur i dad pr egunt ando el passwor d de
aut or i zaci n, et c.
El at r i but o onUnl oad= descar gar f unci on( ) decl ar a un gest or de event os que se l l ama cada vez que l a
pgi na se descar ga. Est o ocur r e cuando se car ga una pgi na nueva en l a mi sma vent ana, si una pgi na no
se car ga con xi t o y l a pgi na act i va est aun descar gada. El gest or de event os onUnl oad puede ser vi r par a
asegur ar se de que no se ha per di do cont act o con l a pgi na, por ej empl o si un usuar i o ha r el l enado un
f or mul ar i o per o se ha ol vi dado de mandar l o.
Event os apl i cados a l as TAGs de HTML:
FOCUS, BLUR, CHANGE: campos de t ext o, r eas de t ext o y sel ecci ones.
CLICK: bot ones, bot ones de t i po r adi o, caj as de chequeo, bot n de envo, bot ones de r eset y l i nks.
SELECT: campos de t ext o, r eas de t ext o, cuadr so de sel ecci n.
MOUSEOVER: l i nks.
El event o f ocus se gener a cuando el i t em de t ext o de un el ement o de l a l i st a obt i ene el f oco,
nor mal ment e como r esul t ado de cl i car con el r at n. El event o bl ur se gener a cuando un t em pi er de el
f oco. El event o change se gener a cada vez que un t em suf r e al gn cambi o. En un t em de t ext o est o
r esul t a cuando se i nt r oduce nuevo t ext o o el que exi st a se bor r a. En una l i st a de sel ecci n ocur r e cada
vez que una nueva sel ecci n se hace, i ncl uso en una l i st a que per mi t e ml t i pl es sel ecci ones. El event o
sel ect se gener a cuando el usuar i o sel ecci ona al gn t ext o o hace una sel ecci n en el cuadr o de sel ecci n.
Est os event os pueden usar se par a obt ener un buen cont r ol sobr e el cont eni do de un t ext o o una l i st a de
sel ecci n de i t ems. Las apl i caci ones ms comunes usan el event o change o bl ur par a asegur ar se de que el
t ext o t i ene el val or apr opi ado.
El ar gument o/ comando especi al t hi s: Est e comando se usa par a r ef er i r se al obj et o act i vo. Cuando l a
f unci n a l a que se l e pasa el ar gument o t hi s es l l amada, el par met r o que usa l a f unci n en su def i ni ci n
se i nt r oduce con el obj et o sobr e el que se act a.
Si nos f i j amos en el ej empl o 9, l a f unci n cambiar() se act i va cuando el f or mul ar i o , en est e caso un
cuadr o de sel ecci n, pi er de el f oco. A l a f unci n se l e pasa como ar gument o el f or mul ar i o medi ant e el
comando t hi s. form.cap.selectedIndex es el ndi ce de l a sel ecci n escogi da del f or mul ar i o (form)
l l amado cap.
Captulo 5. JavaScript 35

5.2.2.2.2. Gest or es a ni vel de f or mul ar i o
La TAG FORM se usa par a comenzar l a def i ni ci n de un f or mul ar i o HTML. Incl uye at r i but os como el
METHOD usado par a el egi r el modo de envo del f or mul ar i o, l a acci n que se debe cumpl i r ( ACTION) y el
at r i but o onSubmi t . La si nt axi s es como l a que si gue:
<FORM NAME="nombre_del_formulario" ... onSubmit="funcin_o_sentencia">
El gest or onSubmi t es l l amado cuando el cont eni do del f or mul ar i o se enva. Tambi n es posi bl e
especi f i car una acci n onCl i ck en un bot n de envo. El uso comn del gest or onSubmi t es ver i f i car el
cont eni do del f or mul ar i o: el envo cont i na si el cont eni do es vl i do y se cancel a si no l o es.
5.2.2.2.3. Gest or es a ni vel de el ement os de f or mul ar i o
Casi t odos l os el ement os de un f or mul ar i o t i enen uno o ms gest or es de event os. Los bot ones pueden
gener ar event os cl i ck, el t ext o y l a sel ecci n de el ement os pueden gener ar l os event os f ocus, bl ur , sel ect
y change.
Hay dos excepci ones a l a r egl a que t odos l os el ement os de un f or mul ar i o pueden t ener gest or es de
event os. La pr i mer a excepci n se apl i ca a l os i t ems ocul t os, <INPUT TYPE= "hi dden">. No se ven, no se
pueden cambi ar y no pueden gener ar event os. La segunda se apl i ca a l os el ement os i ndi vi dual es OPTION
dent r o de una l i st a de sel ecci n (que se cr ean con l a opci n SELECT). La TAG SELECT puede t ener
at r i but os decl ar ando gest or es de event os (f ocus, bl ur y change) , per o l as OPTION no pueden gener ar
event os.
Los campos de t ext o (t ext f i el ds) de HTML, <INPUT> con el at r i but o TYPE de t ext o "t ext " pueden
decl ar ar gest or es de event os como combi naci n de l os 4 el ement os de t ext o: f ocus, bl ur , change y
sel ect . Con l a TAG TEXTAREA se cr ea l a ent r ada de t ext o en var i as l neas y pueden gener ar se est os
gest or es de event os. En cambi o l a sel ecci n de l i st as cr eadas con <SELECT> pueden gener ar t odos l os
event os menos el sel ect .
Est os event os pueden usar se par a obt ener un buen cont r ol sobr e el cont eni do de un t ext o o una l i st a de
sel ecci n de t ems. Las apl i caci ones ms comunes usan el event o change o bl ur par a asegur ar se de que el
campo t i ene el val or apr opi ado.
Ej empl o 9:
<HTML><HEAD>
<TITLE>EJEMPLO DEL COMANDO this</TITLE>
<SCRIPT LANGUAGE="text/javascript">
function cambiar(form){
var indice = form.cap.selectedIndex
if(indice==0){var archivo="cap1.htm"}
if(indice==1){var archivo="cap2.htm"}
if(indice==2){var archivo="cap3.htm"}
window.open(archivo,'capitulos')
window.open('marcador.htm','resultados')
}
</SCRIPT>
</HEAD>
<BODY>
<CENTER><FORM>
<SELECT NAME="cap" SIZE=1 onBlur="cambiar(this.form)">
<OPTION VALUE=1>1. HISTORIA Y CONCEPTOS DE LA AP</OPTION>
<OPTION VALUE=2>2. MTODOS EN PATOLOGA</OPTION>
<OPTION VALUE=3>3. PATOLOGA MOLECULAR</OPTION>
<SELECT>
</FORM></CENTER>
</BODY></HTML>
5. 3. Cl ases en JavaScri pt
Las cl ases en JavaScr i pt se pueden agr upar en t r es cat egor as:
Cl ases Pr edef i ni das, i ncl uyen l as cl ases Mat h, St r i ng y Dat e.
Cl ases del Br owser , t i enen que ver con l a navegaci n.
36 Informtica III

Cl ases del HTML, est n asoci adas con cual qui er el ement o de una pgi na Web (l i nk, f or mul ar i o,
et c) .
5.3.1. Cl ases Pr edef i ni das (Bui l t -In Obj ect s).
5. 3. 1. 1. Cl ase St r i ng
Cada vez que se asi gna un val or st r i ng (cadena de car act er es a una var i abl e o pr opi edad, se cr ea un
obj et o de l a cl ase st r i ng. Al asi gnar un st r i ng a una var i abl e no se usa el oper ador new.
Los obj et os st r i ng t i enen una pr opi edad, l engt h ( nmer o de car ct er es de l a cadena), y var i os mt odos
que mani pul an l a apar i enci a de l a cadena ( col or , t amao, et c. ).
Mt odos sobre el cont eni do: (r ecor dar que l as st r i ng t i enen como base de ndi ces el cer o. )
char At ( i ndi ce ) , muest r a el car ct er que ocupa l a posi ci n i ndi ce en l a cadena.
i ndexOf ( car act er ), muest r a el pr i mer ndi ce del car ct er .
l ast IndexOf (car act er ) , muest r a el l t i mo car ct er del ndi ce.
subSt r i ng ( pr i mer i ndi ce, ul t i moi ndi ce ) , muest r a l a cadena que hay que hay ent r e el pr i mer ndi ce
(pr i mer i ndi ce) y el l t i mo ndi ce ( ul t i moi ndi ce) i ncl udos.
t oLower Case( ), muest r a t odos l os car ct er es de l a cadena en mi nscul as.
t oUpper Case( ), muest r a t odos l os car ct er es de l a cadena en mayscul as.
Suponi endo que l a var i abl e cadena es un obj et o de l a cl ase st r i ng, el uso de l os mt odos se r eal i za de
l a si gui ent e maner a: cadena.mtodo( ).

Mt odos sobre l a apari enci a:
bi g ( ) , muest r a l as l et r as ms gr andes.
bl i nk ( ), muest r a t ext o i nt er mi t ent e (par padeando).
bol d ( ), muest r a l as l et r as en negr i t a.
f i xed ( ) , muest r a el t ext o en paso f i j o (l et r a Cour i er New) .
f ont col or ( col or ) , cambi a el col or de l as l et r as.
f ont si ze ( si ze ) , cambi a el t amao de l as l et r as.
i t al i cs ( ) , muest r a en l et r a i t l i ca.
smal l ( ), muest r a l as l et r as ms pequeas.
st r i ke ( ) , muest r a l as l et r as t achadas por una r al l a.
sub ( ) , muest r a l a l et r a en subndi ce.
sup ( ) , muest r a l a l et r a en super ndi ce.

Ej empl o 10:
var cadena = "Mira hacia aqu".
cadena.charAt ( 2 ) = "r"
cadena.indexOf ( i ) = 1
cadena.lastIndexOf (a ) = 11
cadena.subString ( 5, 9 )
cadena.toLowerCase( ) = "mira hacia aqu"
cadena.toUpperCase( ) = "MIRA HACIA AQU"

Mt odos sobre el HTML:
anchor ( nombr e_st r i ng ) , est e mt odo cr ea un ancl a, l l amada nombr e_st r i ng como val or par a el
at r i but o NAME.
l i nk ( hr ef _st r i ng ), est e mt odo cr ea un l i nk a un URL desi gnado por el ar gument o hr ef _st r i ng.
Captulo 5. JavaScript 37

Ej empl o 11:
cadena.big() = "Mira hacia aqu".
cadena.blink() = "Mira hacia aqu". cadena.blink() = " "
cadena.bold() = "Mira hacia aqu".
cadena.fixed() = "Mira hacia aqu". // ste es el tipo de letra Courier New
cadena.fontcolor("red") = "Mira hacia aqu".
cadena.fontsize(3) = "Mira hacia aqu".
cadena.italics() = "Mira hacia aqu".
cadena.small() = "Mira hacia aqu".
cadena.strike()= "Mira hacia aqu".
cadena.sup()= "
Mira hacia aqu
".
cadena.sub()= "
Mira hacia aqu
".
5. 3. 1. 2. Cl ase Mat h
La cl ase Mat h se usa par a ef ect uar cl cul os mat emt i cos. Cont i ene pr opi edades gener al es como pi =
3. 14159, y var i os mt odos que r epr esent an f unci ones t r i gonomt r i cas y al gebr ai cas. Todos l os mt odos
de Mat h pueden t r abaj ar con deci mal es. Los ngul os se dan en r adi anes, no en gr ados.
La cl ase Mat h es el pr i mer ej empl o de cl ase est t i ca (que no cambi a) . Todos sus ar gument os son
val or es. Est a cl ase no per mi t e cr ear obj et os, por l o que hay que r ef er i r se di r ect ament e a l a cl ase par a
usar l os mt odos.
Propi edades (se usan del modo Math.propiedad) :
E, nmer o "e". Es un nmer o t al que su l ogar i t mo neper i ano es 1, l n( e) = 1
LN10, l ogar i t mo neper i ano del nmer o 10.
LN2, l ogar i t mo neper i ano del nmer o 2.
PI, nmer o pi = 3. 14159
SQRT1_2, r az cuadr adada de .
SQRT2, r az cuadr ada de 2.
Mt odos:
abs (numer o) , cal cul a el nmer o absol ut o de numer o.
acos (numer o), cal cul a el ngul o cuyo coseno es numer o.
asi n ( numer o), cal cul a el ngul o cuyo seno es numer o.
at an (numer o) , cal cul a el ngul o cuya t angent e es numer o.
cei l ( numer o) , cal cul a el ent er o mayor o i gual que numer o.
cos ( angul o ) , cal cul a el coseno de angul o.
exp (numer o) , cal cul a el nmer o e el evado a l a pot enci a numer o.
f l oor (numer o) , cal cul a el ent er o menor o i gual que numer o.
l og (numer o) , cal cul a el l ogar i t mo nat ur al de numer o.
max (numer o1, numer o2 ), cal cul a el mxi mo ent r e numer o1y numer o2.
mi n ( numer o1, numer o2 ) , cal cul a el mni mo ent r e numer o1y numer o2.
pow (numer o1, numer o2 ) , cal cul a numer o1 exponent ado a numer o2.
r andom ( ), cal cul a un nmer o deci mal al eat or i o ent r e 0 y 1, SLO PARA UNIX.
r ound ( numer o) , devuel ve el ent er o ms cer cano a numer o.
si n (angul o) , cal cul a el seno de angul o.
sqr t (numer o) , cal cul a l a r az cuadr ada de numer o.
t an (angul o), cal cul a l a t angent e de angul o.

38 Informtica III

Ej empl o 12:
Math.abs(-4) = 4
Math.abs(5) = 5
Math.max(2,9).=.9
Math.pow(3,2) = 9
Math.sqrt(144) = 12

5. 3. 1. 3. Cl ase Dat e
Una de l as cosas ms compl i cadas de cual qui er l enguaj e es t r abaj ar con f echas. Est o es por que hay
gent e que par a r epr esent ar f echas y hor as t oma un si st ema no deci mal ( l os meses en uni dades sobr e 12,
l as hor as sobr e 24 y l os mi nut os y segundos sobr e 60). Par a el or denador es i l gi co t r abaj ar con nmer os
boni t os y r edondeados.
La cl ase dat e si mpl i f i ca y aut omat i za l a conver si n ent r e l as r epr esent aci ones hor ar i as del or denador y
l a humana.
La cl ase dat e de JavaScr i pt si gue el est ndar de UNIX par a al macenar l os dat os hor ar i os como el
nmer o de mi l i segundos desde el da 1 de ener o de 1970 a l as 0: 00. Est a f echa se denomi na "l a poca".
Aunque l a cl ase dat e no t i ene pr opi edades, t i ene var i os mt odos. Par a usar l a cl ase dat e hay que
ent ender cmo const r ui r un obj et o de est a cl ase. Par a eso hay t r es mt odos:
new Dat e( ) , i ni ci al i za un obj et o con l a hor a y f echa act ual .
new Dat e(st r i ng_dat o) , i ni ci al i za un obj et o con el ar gument o st r i ng_dat o. El ar gument o debe ser
de l a f or ma "Mes da, ao" como "Novi embr e 29, 1990".
new Dat e( ao, mes, da), i ni ci l i aza un obj et o t omando 3 ent er os que r epr esent an el ao, mes y
da. NOTA: l os meses t i enen como base el 0, l o que si gni f i ca que 2 cor r esponde con el mes de
mar zo y 10 con el mes de novi embr e.
Ej empl o 13:
var dato = new Date(90, 10, 23)
var dato = new Date(1990, 10, 23)

Est as dos decl ar aci ones se r ef i er en a l a f echa del 23 de novi embr e de 1990.
Hay un modo opci onal par a decl ar ar l a hor a adems de l a f echa. Hay poner 3 ar gument os ms a l a vez
que se ponen l os ar gument os de l a f echa.
Ej empl o 14:
var dato2 = new Date(90, 10, 23, 13,5,9)

Est a decl ar aci n se r ef i er e a l a 1: 05: 09 PM del da 23 de novi embr e de 1990.
Mt odos:
get Dat e ( ), devuel ve el nmer o de da del mes (1-31) .
get Day ( ) , devuel ve el nmer o de da de l a semana ( 0-6).
get Hour s ( ) , devuel ve el nmer o de hor as del da (0- 23).
get Mi nut es ( ) , devuel ve el nmer o de mi nut os de l a hor a (0-59)
get Mont h ( ) , devuel ve el nmer o de mes del ao (0- 11).
get Seconds ( ), devuel ve el nmer o de segundos del mi nut o (0-59)
get Ti me ( ), devuel ve l a hor a.
get Year ( ), devuel ve el ao.
set Dat e ( ), f i j a l a f echa.
set Hour s ( ) , f i j a el nmer o de hor as del da.
set Mi nut es ( ) , f i j a el nmer o de segundos del mi nut o.
Captulo 5. JavaScript 39

set Mont h ( ) , f i j a el nmer o de mes.
set Second ( ), f i j a el nmer o de l os segundos del mi nut o.
set Ti me ( ), f i j a l a hor a.
set Year ( ), f i j a el ao.
Ej empl o 15:
var dato2 = new Date(90, 10, 23, 13,5,9)
dato2.getHours() = 13
dato2.getDay() = 0 (si es lunes),1 (si es martes), etc.
dato2.getSeconds = 9
dato2.setMonth() = 2 // el mes cambia a marzo
dato2.setYear() = 96

5.3.2. Funci ones Pr edef i ni das (Bui l t -i n Funct i ons): eval , par seFl oat , par seInt .
Adems de l os cl ases St r i ng, Mat h y Dat e hay un pequeo conj unt o de f unci ones pr edef i ni das por
JavaScr i pt . No son mt odos ni se apl i can a l os obj et os. Ti ene el mi smo compor t ami ent o que cuando se
cr ean f unci ones con el comando function.
5. 3. 2. 1. eval (st r i ng)
Est a f unci n i nt ent a eval uar su ar gument o de t i po st r i ng como una expr esi n y devol ver su val or . Est a
f unci n es muy pot ent e por que eval a cual qui er expr esi n de JavaScr i pt .
Ej empl o 16:
w = (x * 14) - (x / z) + 11
z = eval ("(x * 14) - (x / z) + 11")

Si x es una var i abl e con el val or 10 l as si gui ent es expr esi ones asi gnan 146 a w y z.
5. 3. 2. 2. par seFl oat (st r i ng)
Est a f unci n i nt ent a conver t i r su ar gument o de t i po st r i ng como un nmer o deci mal (de coma
f l ot ant e).
Ej empl o17:
parseFloat("3.14pepecomeperas345") = 3.14
5. 3. 2. 3. par seInt (st r i ng, base)
Est a f unci n se compor t a de f or ma muy si mi l ar a l a ant er i or . Int ent a conver t i r su ar gument o de t i po
st r i ng como un ent er o en l a base el egi da.
Ej empl o 18:
ParseInt(10111, 2)= 23
Se convi er t e el nmer o 10111 en base bi nar i a.
5.3.3. Cl ases del br owser
El model o de cl ases de JavaScr i pt y su conj unt o de cl ases, mt odos y f unci ones pr edef i ni das dan un
moder no l enguaj e de pr ogr amaci n. Puest o que JavaScr i pt se desi gn par a t r abaj ar con y en el Wor l d
Wi de Web t uvo que haber un nexo ent r e JavaScr i pt y el cont eni do de l as pgi nas HTML. Est e nexo vi ene
dado por un conj unt o de cl ases del br owser y del HTML.
Las cl ases del br owser son una ext r acci n del ent or no del br owser e i ncl uye cl ases par a usar en l a
pgi na act ual , en l a l i st a de document os vi si t ados ( hi st or y l i st ) y en el URL act ual . Exi st en mt odos par a
abr i r nuevas vent anas, most r ar caj as de di l ogos y escr i bi r di r ect ament e HTML ( en al gunos ej empl os se ha
usado el mt odo wr i t e de l a cl ase document .
Las cl ases del br owser (o navegador ) son el ni vel ms al t o de l a j er ar qua de obj et os de JavaScr i pt .
Repr esent an i nf or maci n y acci ones que no necesar i ament e hay que asoci ar con una pgi na Web. Dent r o
de una pgi na Web cada el ement o HTML t i ene su obj et o cor r espondi ent e, un obj et o HTML dent r o de l a
j er ar qua de obj et os. Cada f or mul ar i o HTML y cada el ement o dent r o de un f or mul ar i o HTML t i ene su
cor r espondi ent e obj et o.
La si gui ent e f i gur a muest r a l a j er ar qua de l os obj et os del br owser y del HTML r ef er i dos a t odos l os
el ement os de una pgi na Web.
40 Informtica III

5. 3. 3. 1. Cl ase Wi ndow
Es el ni vel ms al t o de l a j er ar qua de obj et os de JavaScr i pt . Cada vent ana de un br owser que est
abi er t a t i ene su cor r espondi ent e obj et o wi ndow. Todo el r est o de obj et os desci ende del obj et o wi ndow.
Nor mal ment e, cada vent ana se asoci a a una pgi na Web y l a est r uct ur a HTML de esa pgi na se r ef l ej a en
el obj et o document de l a vent ana. Cada vent ana se cor r esponde con al gn URL que se r ef l ej a en el obj et o
l ocat i on. Cada vent ana t i ene una l i st a de document os vi si t ados que se han most r ado en esa vent ana (
hi st or y l i st ) , l as cual es se r epr esent an por var i as pr opi edades del obj et o hi st or y.
Los mt odos de un obj et o wi ndow son:
al er t (st r i ng_mensaj e)
conf i r m(st r i ng_mensaj e)
open(URL_st r i ng, nombr e_vent ana)
cl ose( )
pr ompt (st r i ng_mensaj e)

Ej empl o 19:
alert("No clicar el botn izquierdo")
confirm("Quieres continuar?")
window.open("fichero.htm", ventana_1)
window.close() // cierra una ventana
prompt("Rellena el cuestionario")

Todos est os mt odos se usan par a mani pul ar el est ado de l a vent ana del br owser . Los mt odos al er t y
conf i r m se usan par a most r ar su ar gument o st r i ng_mensaj e en una caj a de di l ogo. El mt odo al er t se usa
par a avi sar al usuar i o sobr e al go que no debe hacer . La caj a de di l ogo de al er t cont i ene el bot n OK,
Captulo 5. JavaScript 41

mi ent r as que l a de conf i r m muest r a el mensaj e con un bot n OK y ot r o Cancel . Devuel ve, como val or de
r et or no, true si se cl i ca OK o false si se cl i ca Cancel .
El mt odo pr ompt se usa par a sol i ci t ar al usuar i o una ent r ada de dat os, en f or ma de cadena de
car act er es. Muest r a una caj a de di l ogo con el st r i ng_mensaj e y un campo de t ext o edi t abl e. Est e mt odo
acept a un segundo ar gument o opci onal que se usa par a f i j ar un val or por def ect o en el campo de t ext o.
Devuel ve l o que escr i be el usuar i o en el campo de t ext o.
El mt odo open se usa par a abr i r una vent ana nueva en el br owser . El ar gument o URL_st r i ng
r epr esent a el URL que ser car gado en l a vent ana donde el ot r o ar gument o nombr e_vent ana da nombr e a
l a vent ana. Est e mt odo devuel ve una i nst anci a del obj et o wi ndow que r epr esent a l a nueva vent ana
cr eada. Est e mt odo t ambi n acept a un t er cer ar gument o opci onal que se usa par a especi f i car l os modos
de most r ar l a nueva vent ana. Cuando el mt odo cl ose se l l ama desde un ej empl ar del obj et o wi ndow, esa
vent ana se ci er r a y el URL se descar ga.
5. 3. 3. 2. Cl ase Document
Cada vent ana se asoci a con un obj et o document . El obj et o document cont i ene pr opi edades par a cada
ancl a, l i nk, y f or mul ar i o en l a pgi na. Tambi n cont i ene pr opi edades par a su t t ul o, col or de f ondo,
col or es de l os l i nks y ot r os at r i but os de l a pgi na. El obj et o document t i ene l os si gui ent es mt odos:
cl ear ( )
cl ose( )
open()
wr i t e(st r i ng)
wr i t el n(st r i ng)
El mt odo cl ear se usa par a bor r ar compl et ament e un document o. Ti ene mucho uso si se est
const r uyendo una pgi na Web sl o con JavaScr i pt , y se qui er e asegur ar que est vaca ant es de empezar .
Los mt odos open y cl ose se usan par a empezar y par ar l a sal i da de dat os a memor i a. Si se l l ama al
mt odo open, se ej ecut an ser i es de wr i t e y/ o wr i t el n, y se l l ama al mt odo cl ose, el r esul t ado de l as
oper aci ones que se han escr i t o se muest r an en l a pgi na.
El mt odo wr i t e se usa par a escr i bi r cual qui er cadena de car act er es, i ncl uyendo pr ogr amaci n HTML, al
document o act ual . Est e mt odo puede usar un nmer o var i abl e de ar gument os. El mt odo wr i t el n es
i dnt i co al mt odo wr i t e, except o que en l a sal i da i mpr i me un sal t o de l nea al acabar de escr i bi r sus
ar gument os. Hay que not ar que el sal t o de l nea ser i gnor ado por el br owser , el cual no i ncl uye espaci os
en bl anco, a menos que el wr i t el n est dent r o de t ext o pr ef or mat eado.
Ej empl o 20:
document.clear()
document.close()
document.open()
document.write("Juan come peras") -> Juan come peras
document.writeln("Juan come peras") -> Juan come peras

5. 3. 3. 3. Cl ase Locat i on
El obj et o l ocat i on descr i be el URL del document o. Est e t i ene pr opi edades r epr esent ando var i os
component es del URL, i ncl uyendo su par t e de pr ot ocol o, de host name, de pat hname, de nmer o de
puer t o, ent r e ot r as pr opi edades. Tambi n t i ene el mt odo t oSt r i ng el cual se usa par a conver t i r el URL a
una cadena de car act er es. Par a most r ar el URL act ual podemos usar el si gui ent e cdi go:
Ej empl o 21:
var lugar = document.location
document.write("<BR>El URL actual es " + lugar.toString())
document.write("<BR>")

5. 3. 3. 4. Cl ase Hi st or y
El obj et o hi st or y se usa par a r ef er i r se a l a l i st a de URLs vi si t ados (hi st or y l i st ) ant er i or ment e. Ti ene una
pr opi edad conoci da como l engt h, l a cual i ndi ca cunt os URLs est n pr esent es en l a hi st or y l i st
act ual ment e. Ti ene l os si gui ent es mt odos:
back( )
42 Informtica III

f or war d()
go(donde)
El mt odo go se usa par a navegar en l a hi st or y l i st . El ar gument o donde puede ser un nmer o o un
st r i ng. Si el ar gument o donde es un nmer o i ndi ca el nmer o de or den del l ugar donde se desea i r en l a
hi st or y l i st . Un nmer o posi t i vo si gni f i ca que avance t ant os document os como i ndi que el nmer o, y un
nmer o negat i vo si gni f i ca que se at r ase t ant os document os como i ndi que el nmer o. Si donde es una
cadena de car act er es que r epr esent a un URL, ent onces pasa a ser como el document o act ual .

Ej empl o 22:
history.back()
history.forward()
history.go(-2)
history.go(+3)

5.3.4. Cl ases del document o HTML (anchor s, f or ms, l i nks)
Par a ent ender cmo t r abaj an l os obj et os HTML en JavaScr i pt , hay que consi der ar ci er t as pi ezas de
HTML que cr ean un ancl a, un f or mul ar i o y un l i nk a est e ancl a. Par a acl ar ar est os concept os nos basamos
en el ej empl o 23.
Est e cdi go cr ea una pgi na HTML con un ancl a al pr i nci pi o de l a pgi na y un l i nk al ancl a al f i nal .
Ent r e ambas hay un si mpl e f or mul ar i o que per mi t e al usuar i o poner su nombr e. Hay un submi t but t on
(bot n de envo) por si se qui er e envi ar y un bot n de r eset por si no se qui er e envi ar . Si el usuar i o enva
con xi t o el cont eni do del f or mul ar i o va post al e-mai l f i ct i ci o nobody@dev. nul l .
Ej empl o 23:
<HTML>
<HEAD><TITLE>Ejemplo sencillo de pgina HTML</TITLE></HEAD>
<BODY>
<A NAME="principio">Este es el principio de la pgina</A> <HR>
<FORM METHOD="post">
<P> Introduzca su nombre: <INPUT TYPE="text" NAME="me" SIZE="70"></P>
<INPUT TYPE= "reset" VALUE="Borrar Datos">
<INPUT TYPE= "submit" VALUE="OK">
</FORM><HR>
Clica aqu para ir al
<A HREF="#principio">principio</A> de la pgina // link
<BODY/>
</HTML>

El aspect o ms i mpor t ant e de est e ej empl o es el hecho de que l os el ement os HTML se r ef l ej an en l a
j er ar qua de obj et os de JavaScr i pt . Se puede acceder al t t ul o del document o a t r avs de l a pr opi edad
t i t l e del obj et o document o. Se puede acceder a ot r os el ement os HTML de est e document o usando l as
si gui ent es pr opi edades:
anchor s(ancl as)
f or ms(f or mul ar i os)
l i nks
Est as pr opi edades del obj et o document son ar r ays que r epr esent an cada el ement o HTML como un
ancl a, f or mul ar i o o l i nk de una pgi na. En el ej empl o, el ancl a en el pr i nci pi o de l a pgi na se r ef er i r a
como document . anchor s[ 0] , el l i nk al f i nal de l a pgi na como document . l i nks[ 0] , y el f or mul ar i o en medi o
de l a pgi na como document . f or ms[ 0] . Est os son el ni vel ms al t o de l os obj et os r epr esent ados por est e
document o. Cada uno de est os el ement os t i ene pr opi edades y mt odos que se usan par a descr i bi r y
mani pul ar l os.
El obj et o f or m cor r espondi ent e a f or ms[ 0] t i ene sub-obj et os par a cada uno de l os t r es el ement os (el
bot n de r eset , el bot n de envo y el campo de t ext o) y pr opi edades par a el mt odo submi t .
f or ms[ 0] . el ement s[ 0] cor r esponde a l a ent r ada del campo de t ext o. f or ms[ 0] . el ement s[ 0] . name es el
nombr e de est e campo, como el especi f i cado por el at r i but o NAME, el cual en est e caso es "me". La
Captulo 5. JavaScript 43

si gui ent e f i gur a r epr esent a el cdi go HTML del ej empl o y muest r a cmo cada el ement o en l a pgi na se
asoci a con el obj et o HTML.
document . t i t l e
<TITLE>Ej empl o senci l l o de pgi na HTML</ TITLE>
document . anchor s[ 0]
<A NAME="pri nci pi o">Est e es el pri nci pi o de l a pgi na</ A>
document . anchor s[ 0] . name

document . f or ms[ 0] . met hod
<FORM METHOD="post " ACTION="mai l t o:nobody@dev.nul l ">
document . f or ms[ 0] document . f or ms[ 0] . act i on

document . f or ms[ 0] . el ement s[ 0]
<INPUT TYPE="t ext " NAME="me" SIZE="70">
document . f or ms[ 0] . el ement s[ 0] . name

document . f or ms[ 0] . el ement s[ 1]
<INPUT TYPE= "reset " VALUE="Oops">
document . f or ms[ 0] . el ement s[ 1] . val ue

document . f or ms[ 0] . el ement s[ 2 ]
<INPUT TYPE= "submi t " VALUE="OK">
document . f or ms[ 0] . el ement s[ 2] . val ue

document . l i nks[ 0]
Cl i ca aqu para i r al <A HREF="#pri nci pi o">pri nci pi o</ A> de l a pgi na
document . l i nks[ 0] . hr ef

5. 4. Cl ases y Funci ones def i ni das por el usuari o.
Par a ent ender est e t i po de pr ogr amaci n vamos a ver un ej empl o donde cr eamos un obj et o l l amado
casa que t i ene l as si gui ent es pr opi edades: n de habi t aci ones, ao de const r ucci n, t i ene gar aj e?, est i l o
ar qui t ect ni co. Par a def i ni r un obj et o par a guar dar est a i nf or maci n (l as pr opi edades) hay que hacer una
f unci n que l as muest r e en un l i st ado. Not a: Est a f unci n usa el comando t hi s, que hace r ef er enci a al
obj et o act i vo. En est e caso hace r ef er enci a al obj et o act i vo que est amos cr eando.
Est a f unci n es una especi e de const r uct or que se usa en C++ par a def i ni r un obj et o. Est o es por que en
est e sent i do l os obj et os de JavaScr i pt son si mi l ar es a l as est r uct ur as de C y a l as cl ases de C++. En l os 3
casos a l os mi embr os, f unci ones mi embr o o pr opi edades del obj et o/ cl ase/ est r uct ur a se accede con el
oper ador punt o ( . ):
estructura.miembro
clase.funcin_miembro()
objeto.propiedad.
Hay var i as cosas a ver en est e ej empl o. El nombr e de l a f unci n es el nombr e del obj et o: casa (en C++
el const r uct or t i ene el nombr e de l a cl ase) . La f unci n no t i ene val or de r et or no.
El ej empl o muest r a cmo se def i ne un obj et o casa, per o no cr ea ni ngn obj et o especf i co del t i po
casa.

44 Informtica III

Ej empl o 24:
function casa( habs, estil, fecha, garage){
this.habitaciones = habs
this.estilo = estil
this.fecha_construccin = fecha
this.tiene_garage = garage
}

Un obj et o especf i co de casa t endr l as 4 pr opi edades con sus val or es. Las i nst anci as se cr ean usando l a
sent enci a new con una f unci n de l l amada. Se cr ear a un obj et o de casa, l l amado mi casa del si gui ent e
modo:
Ej empl o 25:
var micasa = new casa(10,Colonial, 1989, verdadero)
Ahor a el obj et o mi casa es ot r a var i abl e. Ti ene que decl ar ar se usando var . Ahor a que mi casa ha si do
cr eada podemos r ef er i r nos a sus pr opi edades con el oper ador punt o ( . ) :
Ej empl o 26:
micasa.habitaciones = 10 (entero, int)
micasa.estilo = colonial (cadena de caracteres, String)
micasa.fecha_construccin = 1989 (entero ,int)
micasa.tiene_garage = true (booleano)
No hay nada que evi t e poner yes en l a pr opi edad t i ene_gar age en vez de un val or bool eano, por est o
hay que t ener cui dado con est e t i po de conf usi n. Si se pone yes , t i ene_gar age no ser bool eana si no
una cadena de car act er es.
5.4.1. Funci ones (mt odos)
Uno de l os aspect os ms pot ent es de l a pr ogr amaci n or i ent ada a obj et os de JavaScr i pt es l a
posi bi l i dad de cr ear cl ases con f unci ones mi embr o, l l amadas mt odos. Est o t i ene var i as vent aj as como l a
or gani zaci n y l a asoci aci n de f unci ones con cl ases. Los mt odos, aunque pr ogr amando se t r abaj e como
si f uer an pr opi edades no se t i enen en cuent a a l a hor a de cont ar l os como t al es.
Por ej empl o, t enemos una f unci n que muest r a l as pr opi edades de l os obj et os de l a cl ase casa l l amada
muest r a_pr ops( ) . Par a aadi r l a como pr opi edad (se l l amar muest r a) a un obj et o o a su cl ase se deber a
escr i bi r :
Ej empl o 27:
this.muestra = muestra_props dentro de la definicin de la clase casa.
Micasa.muestra = muestra_props como una sentencia normal.
y par a usar l as, con l os obj et os de l a cl ase casa:
micasa.muestra( ) o bien muestra_props( micasa )
5.4.2. Obj et os como Ar r ays (Vect or es)
Al gunos l enguaj es de pr ogr amaci n sopor t an dat os de t i po ar r ay (C, C++, Vi sual Basi c, Java, et c. ). Un
ar r ay es una col ecci n de i t ems con ndi ces l os cual es son del mi smo t i po. En C por ej empl o par a decl ar ar
un ar r ay de 10 dat os de t i po ent er o, se hace de l a f or ma: i nt nombr e[ 10] ; y est os ent er os son def i ni dos
desde el nombr e[ 0] al nombr e[ 9] . Es ms comn que l a base del pr i mer ndi ce sea un 0 ( zer o- based
i ndexi ng) que un 1 (one- based i ndexi ng) .
JavaScr i pt usa 0 como base del pr i mer ndi ce. En JavaScr i pt , qui z, ar r ays y obj et os son 2 punt os de
vi st a del mi smo concept o. Cada obj et o es un ar r ay de l os val or es de sus pr opi edades, y cada ar r ay es
t ambi n un obj et o. Vol vi endo al ej empl o ant er i or , el obj et o mi casa es un ar r ay con l os si gui ent es cuat r o
el ement os:
Ej empl o 28:
micasa[0]=10 (habitacin)
micasa[1]=colonial (estilo)
micasa[2]=1989 (fecha_construccin)
micasa[4]=True (tiene garaje)

Captulo 5. JavaScript 45

No par ece haber muchas vent aj as al r ef er i r se a obj et os de est e modo ms numr i co y menos
i nf or mt i co. Qui z, est a f or ma al t er nat i va per mi t e acceder a l as pr opi edades secuenci al ment e (p. ej con
un bucl e) l o que es muy usado.
Es aconsej abl e def i ni r t odos l as cl ases con una pr opi edad que d el nmer o de pr opi edades en el
obj et o y haci ndol a l a pr i mer a pr opi edad. Ahor a el obj et o mi casa es un ar r ay de 5 el ement os. La nueva
pr opi edad se denomi na l engt h ( l ongi t ud) .
Ej empl o 29:
micasa.lenght = 5
micasa[0]=10 (habitacin)
micasa[1]=colonial (estilo)
micasa.habitaciones = micasa[2]=1989 (fecha_construccin)
micasa.estilo=micasa[3] = True (tiene garaje)
micasa.tiene_garage = micasa[4] = True (tiene garaje)

Aun hay ot r o modo de dar val or a l as pr opi edades:
Ej empl o 30:
micasa[length] = 5
micasa[habitaciones] = 10
micasa[estilo] = colonial
micasa[fecha_construccion] = 1989
micasa[tiene_garaje] = true

5.4.3. Ext ender Obj et os
Qu pasa si quer emos ms pr opi edades en un obj et o: nada. Es posi bl e ext ender di nmi cament e un
obj et o si mpl ement e t omando una nueva pr opi edad. Con el Ej empl o 31 se ver mej or :

Ej empl o 31:
tucasa = new casa(26, restaurante,1993, false)
tucasa.paredes = 6
tucasa.tiene_terraza = true

Est as dos sent enci as aaden dos pr opi edades al f i nal del ar r ay t ucasa. Las ext ensi ones di nmi cas se
apl i can sl o a obj et os especf i cos. El obj et o mi casa no se ve af ect ado ni l a cl ase casa se ve af ect ada ni el
obj et o casa cambi a de ni ngn modo.
Est a car act er st i ca que se puede apl i car a l os obj et os si mpl i f i ca mucho l a pr ogr amaci n. Par a
asegur ar se de que no se pr oducen er r or es al i nt ent ar most r ar l as pr opi edades de un obj et o es i mpor t ant e
cambi ar l a pr opi edad que al macena el nmer o de pr opi edades.

Ej empl o 32:
tucasa.length += 2

Un caso comn donde l a ext ensi n di nmi ca es muy usada es en ar r ays de nmer o var i abl e.
5.4.4. Funci ones con un nmer o var i abl e de ar gument os.
Todas l as f unci ones de JavaScr i pt t i enen l as si gui ent es 2 pr opi edades: cal l er y argument s.
La pr opi edad cal l er es el nombr e de cada uno que l l ama a l a f unci n. La pr opi edad argument s es un
ar r ay de t odos l os ar gument os que no est n en l a l i st a de ar gument os de l a f unci n. La pr opi edad cal l er
per mi t e a una f unci n i dent i f i car y r esponder al ent or no desde donde se l l ama. La pr opi edades argument s
per mi t e escr i bi r f unci ones que t oman un nmer o de ar gument o var i abl e. Los ar gument os de l a l i st a de
ar gument os de una f unci n son obl i gat or i os mi ent r as que l os que est n en l a pr opi edad argument s son
opci onal es.

El si gui ent e ej empl o muest r a l os ar gument os obl i gat or i os y opci onal es de una f unci n.
46 Informtica III

Ej empl o 33:
function anadir( string){
var nargumentos = anadir.arguments.length
var totalstring
var parcialstring =
for (var i = 1; i < nargumentos; i++ ){
parcialstring += " " + anadir.arguments[i] ","
}
totalstring = "El argumento obligatorio es " + string + ". El nmero de
argumentos opcionales es " + nargumentos + " y los argumentos opcionales
son " + parcialstring
return (totalstring)
}
5. 5. Expr esi ones y operador es de JavaScri pt .
5.5.1. Expr esi ones
Una expr esi n es cual qui er conj unt o de l et r as, var i abl es y oper ador es que eval a un val or si mpl e. El
val or puede ser un nmer o, una cadena, o un val or l gi co. Hay dos t i pos de expr esi ones:
aquel l as que asi gnan un val or a una var i abl e, x =7
aquel l as que si mpl ement e t i enen un val or , 3 + 4
JavaScr i pt t i ene l os si gui ent es t i pos de expr esi ones:
Ar i t mt i cas: eval an un nmer o.
De cadena: eval an un st r i ng de car ct er , por ej empl o "Fr ed" or "234".
Lgi cas: eval an si son ver dader o o f al so.
5. 5. 1. 1. Expr esi ones Condi ci onal es
Una expr esi n condi ci onal puede t omar uno de dos posi bl es val or es segn una condi ci n. La si nt axi s es
(condi ci n) ? val or 1 : val or 2.
Si l a condi ci n es ver dader a (t r ue) t oma el val or val or 1, y si es f al sa (f al se) t oma el val or 2. Se puede
usar una expr esi n condi ci onal en cual qui er par t e.
Por ej empl o: est ado = ( edad >= 18) ? "adul t o" : "menor de edad". Si edad es mayor o i gual que 18 a l a
var i abl e est ado se l e asi gna l a cadena "adul t o", si no se l e asi gna el val or "menor de edad".
5.5.2. Oper ador es de asi gnaci n (=, +=, -=, *=, / =)
Un oper ador de asi gnaci n da un val or a l a i zqui er da de su oper ando basado en l a par t e der echa de su
oper ando. El oper ador bsi co de asi gnaci n es el i gual (=) , el cual asi gna el val or de l a der echa de su
oper ando al de l a i zqui er da de su oper ando. x = y, asi gna el val or de y a x.
Los ot r os oper ador es de asi gnaci n par a oper aci ones ar i t mt i cas son l os si gui ent es:
x = y
x += y si gni f i ca x = x + y
x -= y si gni f i ca x = x - y
x *= y si gni f i ca x = x * y
x / = y si gni f i ca x = x / y
x %= y si gni f i ca x = x %y
Est as sent enci as pr i mer o oper an a l a der echa del oper ador y despus devuel ven el val or obt eni do a l a
var i abl e si t uada a l a i zqui er da del oper ador .
5.5.3. Oper ador es ar i t mt i cos
Los oper ador es t oman val or es numr i cos (sean l et r as o var i abl es) y devuel ven un ni co val or numr i co.
Los oper ador es est ndar son l a suma (+), l a r est a ( -) , l a mul t i pl i caci n (*) , y l a di vi si n (/ ). Est os
oper ador es t r abaj an de l a f or ma est ndar oper ando1 oper ador oper ando2.
Captulo 5. JavaScript 47

Adems hay ot r os oper ador es no t an conoci dos como:
Rest o (%) El oper ador r est o devuel ve el r est o ent er o al di vi di r el pr i mer oper ando ent r e el segundo
oper ando. Si nt axi s: var 1 %var 2 .
Ej empl o 34:
12 % 5 returns 2.
Incr ement o (++) El oper ador i ncr ement o se usa de l a si gui ent e maner a: var ++ o ++var . Est e oper ador
suma uno a su oper ando y devuel ve el val or .
1. var ++, pr i mer o devuel ve el val or de l a var i abl e y despus l e suma uno.
2. ++var , pr i mer o suma uno y despus devuel ve el val or de l a var i abl e.
Por ej empl o si x es 3, l a sent enci a y = x++, i ncr ement a x a 4 y asi gna 3 a y, per o si l a sent enci a es y =
++x, i ncr ement a x a 4 y asi gna 4 a y.
Decr ement o (- - ) El oper ador decr ement o se usa de l a si gui ent e maner a: var -- o --var . Est e oper ador
r est a uno a su oper ando y devuel ve el val or .
1. var -- pr i mer o devuel ve el val or de l a var i abl e y despus l e r est a uno.
2. --var , pr i mer o suma uno y despus devuel ve el val or de l a var i abl e.
Por ej empl o si x es 3, l a sent enci a y = x-- , decr ement a x a 2 y asi gna 3 a y, per o si l a sent enci a es y = -
-x, decr ement a x a 2 y asi gna 2 a y.
Negaci n ( -) El oper ador negaci n pr ecede a su oper ando. Devuel ve su oper ando negado. Por ej empl o,
x = -x, hace negat i vo el val or de x, que si f uer a 3, ser a -3.
5.5.4. Oper ador es l gi cos
Los oper ador es l gi cos t oman val or es l gi cos ( bool eanos) como oper andos. Devuel ven un val or l gi co.
Los val or es l gi cos son t r ue (ver dader o) y f al se (f al so). Se suel en usar en l as sent enci as de cont r ol .
And ( &&) Uso: expr 1 && expr 2. Est e oper ador devuel ve t r ue si ambas expr esi ones l gi cas son
ver dader as, o f al se si al guna no es t r ue.
Or ( | | )Uso: expr 1 | | expr 2. Est e oper ador devuel ve t r ue si una de l as dos expr esi ones l gi cas, o
ambas, son ver dader as, o f al se si ambas son f al sas.
Not (! ) Uso: ! expr . Est e oper ador ni ega su expr esi n. Devuel ve t r ue si es f al se y f al se si es t r ue.
Ej empl o 35:
if ((edad_pepe>=18)&&(edad_juan==18)){
document.write("Juan y pepe son adultos")
} else {
document.write("Uno de los dos no es adulto")
}
5.5.5. Oper ador es de Compar aci n (= =, >, >=, <, <=, !=)
Un oper ador de compar aci n compar a sus oper andos y devuel ve un val or l gi co segn sea l a
compar aci n ver dader a o no. Los oper andos pueden ser nmer os o cadenas de car act er es. Cuando se usan
cadenas de car act er es, l as compar aci ones se basan en el or den al f abt i co. Al i gual que l os oper ador es
l gi cos, se suel en usar en sent enci as de cont r ol .
Los oper ador es son:
Igual ( ==), devuel ve t r ue si l os oper andos son i gual es.
Desi gual (! =) , devuel ve t r ue si l os oper andos son di f er ent es.
Mayor que (>), devuel ve t r ue si su oper ando i zqui er do es mayor que el der echo.
Mayor o i gual que (>=), devuel ve t r ue si su oper ando i zqui er do es mayor o i gual que el der echo.
Menor que (>), devuel ve t r ue si su oper ando i zqui er do es menor que el der echo.
Menor o i gual que (>=) , devuel ve t r ue si su oper ando i zqui er do es menor o i gual que el der echo.
48 Informtica III

5.5.6. Oper ador es de St r i ng
Adems de l os oper ador es de compar aci n, que pueden usar se con cadenas de car act er es, exi st e el
oper ador concat enaci n ( +) que une dos cadenas, devol vi endo ot r a cadena que es l a uni n de l as dos
ant er i or es.
Ej empl o 36:
"mi " + "casa" devuelve la cadena "mi casa".

El oper ador de asi gnaci n += se puede usar par a concat enar cadenas. Por ej empl o, si l a var i abl e l et r a
es una cadena con el val or "al f a", ent onces l a expr esi n l et r a += "bet o" eval a a "al f abet o" y asi gna est e
val or a l et r a.
5.5.7. Pr i or i dad de l os oper ador es
La pr i or i dad de l os oper ador es det er mi na el or den con el cual se apl i can cuando se eval an. Est a
pr i or i dad se r ompe cuando se usan par nt esi s.
La pr i or i dad de oper ador es, de menor a mayor es l a que si gue:
coma ,
asi gnaci n = += -= *= / = %=
condi ci onal ?:
l gi co-or | |
l ogi cal -and &&
i gual dad == ! =
r el aci n < <= > >=
adi ci n/ sust r acci n + -
mul t i pl i caci n / di vi si n / r est o * / %
negaci n/ i ncr ement o ! ~ - ++ --
par nt esi s, cor chet es () [ ] .
5. 6. Sent enci as de cont rol de JavaScri pt .
JavaScr i pt sopor t a un conj unt o de sent enci as que se pueden usar par a hacer i nt er act i vas l as pgi nas
Web.
5.6.1. La sent enci a i f
Una sent enci a i f es como un i nt er r upt or . Si l a condi ci n especi f i cada es ci er t a, se ej ecut an ci er t as
sent enci as. Si l a condi ci n es f al sa, se pueden ej ecut ar ot r as. Un sent enci a i f es :
if (condicin) {
sentencias 1 }
[else {
sentencias 2}]
La par t e el se es opci onal .
Ej empl o 37:
if ((edad_pepe>=18)&&(edad_juan==18)){
document.write("Juan y pepe son adultos")
} else {
docuemnt.write("Uno de los dos no es adulto")
}

5.6.2. Bucl es
Un bucl e es un conj unt o de comandos que se ej ecut an r epet i dament e hast a que una condi ci n
especi f i cada se encuent r a. JavaScr i pt pr opor ci ona dos t i pos de bucl es: f or y whi l e.

Captulo 5. JavaScript 49

5. 6. 2. 1. Bucl e f or
Una sent enci a f or r epi t e un bucl e hast a que una condi ci n se eval e como f al se. Est e bucl e es si mi l ar
al t r adi ci onal bucl e f or en Java, C y C++.
Un bucl e f or es:
for ([expresin_inicial]; [condicin] ;[expresin_incremento]) {
sentencias
}
Ej empl o 38:
for (var contador = 0; contador <= 5; contador++) {
document.write("Nmero "+ contador + "<br>")
}

Y l a sal i da por pant al l a del ej empl o es:
Nmero 0
Nmero 1
Nmero 2
Nmero 3
Nmero 4
Nmero 5
Cuando se encuent r a un bucl e f or , se ej ecut a l a expr esi n i ni ci al . Las sent enci as se ej ecut an mi ent r as
l a condi ci n sea t r ue. La expr esi n_i ncr ement o se ej ecut a cada vez que vuel ve a r eal i zar se una vuel t a o
paso en el bucl e.

5. 6. 2. 2. Bucl e whi l e
Una sent enci a whi l e r epi t e un bucl e mi ent r as l a condi ci n eval uada sea t r ue. Un bucl e whi l e es:
while (condicin)
{
sentencias
}
Ej empl o 39:
var contador = 0
while (contador <= 5){
document.write("Nmero "+ contador + "<br>")
contador++
}

Es el mi smo ej empl o que el 38 per o con el bucl e whi l e.
Si l a condi ci n l l ega a ser f al se, l as sent enci as dent r o del bucl e dej an de ej ecut ar se y el cont r ol pasa a
l a si gui ent e sent enci a despus del bucl e.
La condi ci n se eval a cuando l as sent enci as en el bucl e han si do ej ecut adas y el bucl e est a punt o de
ser r epet i do. Dent r o del bucl e debe haber una sent enci a que en al gn moment o haga par ar l a ej ecuci n
del bucl e.
La compr obaci n de l a condi ci n t i ene l ugar ni cament e cuando l as sent enci as del bucl e se han
ej ecut ado y el bucl e est a punt o de vol ver se a ej ecut ar . Est o es, l a compr obaci n de l a condi ci n no es
cont i nuada, si no que t i ene l ugar por pr i mer a vez al pr i nci pi o del bucl e y de nuevo a cont i nuaci n de l a
l t i ma sent enci a del bucl e, cada vez que el bucl e l l ega a est e punt o.
50 Informtica III


Ej empl o 40:
n = 0; x = 0
while( n < 3 ) {
n++; x += n;
}
5. 7. Coment ari os
Los coment ar i os son anot aci ones del aut or par a expl i car qu hace cada sent enci a. Son i gnor ados por el
navegador . JavaScr i pt sopor t a el est i l o de coment ar i os de C, C++ y Java.
Los coment ar i os de una sol a l nea son pr ecedi dos por una dobl e bar r a nor mal (/ / ).
Los coment ar i os de ms de una l nea van escr i t os ent r e / * y */ .
Ej empl o 41:
// Esto es un comentario de una sola lnea.
/* Esto es un comentario de ms de una lnea. Puede
tener la extensin que se quiera. */







SECCIN 2
Java



CAPTULO 6
6. Int roducci n a Java
6. 1. Programaci n Ori ent ada a Obj et os. Fundament os.
La pr oducci n de apl i caci ones de al t as pr est aci ones suel e si gni f i car l a pr esenci a de una compl ej i dad
cada vez mayor . Los si st emas or i ent ados a obj et os t i enen car act er st i cas adecuadas par a expr esar l a
compl ej i dad de un si st ema, al gunas de l as cual es son:
Adapt abi l i dad, es deci r , f aci l i dad de t r anspor t e de unos si st emas a ot r os.
Reusabi l i dad, t ot al o par ci al , par a r educi r cost es y r eut i l i zar component es sof t war e cuya
f i abi l i dad est compr obada.
Mant eni bi l i dad: Los pr ogr amas son desar r ol l ados por muchas per sonas agr upadas en equi pos de
t r abaj o. Las per sonas cambi an per o l a apl i caci n per manece e i ncl uso necesi t a modi f i caci ones.
Por el l o, es i mpor t ant e que l os pr ogr amas sean f ci l es de compr ender y mant ener . En caso
cont r ar i o, podr a ser necesar i o descar t ar l a apl i caci n y hacer una nueva.
Par a consegui r est os obj et i vos, es necesar i o apl i car de f or ma r i gur osa cr i t er i os de di seo cl ar os y bi en
def i ni dos que per mi t an hacer f r ent e a l a compl ej i dad de l as apl i caci ones. El di seo ori ent ado a obj et os
es l a met odol oga que consi st e en def i ni r cul es son l os obj et os de un si st ema, l as cl ases en l as que
pueden agr upar se y l as r el aci ones ent r e obj et os.
Las car act er st i cas f undament al es de l a Progr amaci n Ori ent ada a Obj et os (POO) son:
Abst racci n: Es l a r epr esent aci n de l as car act er st i cas esenci al es de al go si n i ncl ui r l os
ant ecedent es o det al l es i r r el evant es. La cl ase es una abst r acci n por que en el l a se def i nen l as
pr opi edades y l os at r i but os genr i cos de un conj unt o de obj et os
Encapsul aci n u ocul t ami ent o de i nf or maci n: Las var i abl es y l as f unci ones mi embr o de una cl ase
pueden ser decl ar adas como public, private o protected. De est a f or ma se puede cont r ol ar
el acceso a l os mi embr os de l a cl ase y evi t ar un uso i nadecuado.
Herenci a: Es el mecani smo par a compar t i r aut omt i cament e mt odos y at r i but os ent r e cl ases y
subcl ases. Una cl ase puede der i var de ot r a, y en est e caso her eda t odas l as var i abl es y f unci ones
mi embr o. As, puede aadi r nuevas f unci ones y dat os mi embr os.
Pol i morf i smo: Est a car act er st i ca per mi t e i mpl ement ar ml t i pl es f or mas de un mi smo mt odo,
dependi endo cada una de el l as de l a cl ase sobr e l a que se r eal i ce l a i mpl ement aci n.
Una Cl ase es un t i po de dat os def i ni do por el usuar i o consi st ent e, bsi cament e, en una agr upaci n de
l as def i ni ci ones de l os dat os (vari abl es) y de l as f unci ones ( mt odos) que oper an sobr e esos dat os. Un
Obj et o es un ej empl ar concr et o de una cl ase: un conj unt o concr et o de dat os y de l os mt odos par a
mani pul ar st os. La cr eaci n de un obj et o a par t i r de una cl ase se denomi na i nst anci aci n. , es deci r ,
cr ear una i nst anci a concr et a de l a cl ase.
La def i ni ci n de una cl ase const a de dos par t es:
La pr i mer a, f or mada por el nombr e de l a cl ase pr ecedi do por l a pal abr a r eser vada Class.
La segunda par t e es el cuer po de l a cl ase, encer r ado ent r e l l aves, y que const a de:
Especi f i cadores de acceso: publ i c, pr ot ect ed y pr i vat e.
At ri but os: dat os mi embr o de l a cl ase (var i abl es) .
Mt odos: def i ni ci ones de f unci ones mi embr o de l a cl ase.
54 Informtica III

Una f or ma de asegur ar que l os obj et os si empr e cont engan val or es vl i dos y que puedan ser
i ni ci al i zados en el moment o de l a decl ar aci n es escr i bi endo un const ruct or. Un const r uct or es una
f unci n mi embr o especi al de una cl ase que es l l amada de f or ma aut omt i ca si empr e que se decl ar a un
obj et o de esa cl ase. Su f unci n es cr ear e i ni ci al i zar un obj et o de su cl ase. Dado que un const r uct or es una
f unci n mi embr o, admi t e ar gument os al i gual que st as. El const r uct or se puede di st i ngui r cl ar ament e,
con r espect o a l as dems f unci ones mi embr o de l a cl ase, por que t i ene el mi smo nombr e que el de l a
cl ase. Un const r uct or no r et or na ni ngn val or ni se her eda. Si el usuar i o no ha cr eado uno, el compi l ador
cr ea uno por omi si n, si n ar gument os. Una cl ase puede t ener var i os const r uct or es, si empr e que t engan
di st i nt os ar gument os de ent r ada.

Fi gura 6. 1. Cl ase Poi nt y dos obj et os de l a cl ase Poi nt .
6. 2. El l enguaj e de programaci n Java
Java sur gi en 1991 cuando un gr upo de i ngeni er os de Sun Mi cr osyst ems Inc. t r at ar on de di sear un
nuevo l enguaj e de pr ogr amaci n dest i nado a el ect r odomst i cos. La r educi da pot enci a de cl cul o y
memor i a de l os el ect r odomst i cos l l ev a desar r ol l ar un l enguaj e senci l l o capaz de gener ar cdi go de
t amao muy r educi do.
Debi do a l a exi st enci a de di st i nt os t i pos de CPUs y a l os cont i nuos cambi os, er a i mpor t ant e consegui r
una her r ami ent a i ndependi ent e del t i po de CPU ut i l i zada. Est o hi zo de Java un l enguaj e i deal par a
di st r i bui r pr ogr amas ej ecut abl es va l a WWW, adems de un l enguaj e de pr ogr amaci n de pr opsi t o
gener al par a desar r ol l ar pr ogr amas que sean f ci l es de usar y por t abl es en una gr an var i edad de
pl at af or mas. Desar r ol l ar on un cdi go "neut r o" que no dependa del t i po de el ect r odomst i co, el cual se
ej ecut aba sobr e una "mqui na hi pot t i ca o vi r t ual " denomi nada Java Vi r t ual Machi ne (JVM) . Er a l a JVM
qui en i nt er pr et aba el cdi go neut r o convi r t i ndol o a cdi go par t i cul ar de l a CPU ut i l i zada. Est o per mi t a l o
que l uego se ha conver t i do en el pr i nci pal l ema del l enguaj e: "Wr i t e Once, Run Ever ywher e". A pesar de
Class Point extends Object{
//-------CONSTRUCTORES---------
Point();
Point(int x, int y);
Point(Point p);
//---VARIABLES DE INSTANCIA----
int x;
int y;
//---------METODOS-------------
boolean equals(Point p);
void move(int x, int y);
void setLocation(Point p);
void setLocation(int x, int y);
void translate(int dx, int dy);
}
x 13
y 21
Point()
Point(int, int)
Point(Point)
boolean equals(Point)
void move(int, int)
void setLocation(Point)
void setLocation(int, int)
void translate(int, int)
Punto1
x 24
y 3
Point()
Point(int, int)
Point(Point)
boolean equals(Point)
void move(int, int)
void setLocation(Point)
void setLocation(int, int)
void translate(int, int)
Punto2
Captulo 6. Introduccin a Java 55

l os esf uer zos r eal i zados por sus cr eador es, ni nguna empr esa de el ect r odomst i cos se i nt er es por el nuevo
l enguaj e.
Como l enguaj e de pr ogr amaci n par a comput ador as, Java se i nt r oduj o a f i nal es de 1995. Se us en
var i os pr oyect os de Sun (en aquel ent onces se l l amaba Oak) si n mucho xi t o comer ci al . Se di f undi ms
cuando se uni con Hot Java, un navegador Web exper i ment al , par a baj ar y ej ecut ar subpr ogr amas (l os
f ut ur os appl et s) . La cl ave del xi t o f ue l a i ncor por aci n de un i nt r pr et e Java en l a ver si n 2. 0 del
pr ogr ama Net scape Navi gat or en 1994, pr oduci endo una ver dader a r evol uci n en Int er net . Obt uvo t ant a
at enci n que en Sun l a di vi si n de Java se separ en l a subsi di ar i a JavaSof t .
Java 1.1 apar eci a pr i nci pi os de 1997, mej or ando sust anci al ment e l a pr i mer a ver si n del l enguaj e.
Java 1.2, ms t ar de r ebaut i zado como Java 2, naci a f i nal es de 1998.
A ni vel de cdi go f uent e, l os t i pos de dat os pr i mi t i vos de Java t i enen t amaos consi st ent es en t odas l as
pl at af or mas de desar r ol l o. Las bi bl i ot ecas de cl ases f undament al es en Java f aci l i t an l a escr i t ur a de
cdi go, el cual puede ser t r anspor t ado de una pl at af or ma a ot r a si n necesi dad de r escr i bi r l o par a que
t r abaj e en l a nueva pl at af or ma. Lo ant er i or t ambi n se apl i ca al cdi go bi nar i o. Se puede ej ecut ar si n
necesi dad de r ecompi l ar l o.
Con l os l enguaj es convenci onal es al compi l ar se gener a cdi go bi nar i o par a una pl at af or ma en
par t i cul ar . Si se cambi a l a pl at af or ma se t endr que r ecompi l ar el pr ogr ama. Por ej empl o un pr ogr ama en
C par a una PC, no ser vi r en un ser vi dor UNIX y vi cever sa.
Al pr ogr amar en Java no se par t e de cer o. Cual qui er apl i caci n que se desar r ol l e "cuel ga" (o se apoya,
segn como se qui er a ver ) en un gr an nmer o de cl ases pr eexi st ent es. Al gunas de el l as l as ha podi do
hacer el pr opi o usuar i o, ot r as pueden ser comer ci al es, per o si empr e hay un nmer o muy i mpor t ant e de
cl ases que f or man par t e del pr opi o l enguaj e (el API o Appl i cat i on Pr ogr ammi ng Int er f ace de Java). Java
i ncor por a en el pr opi o l enguaj e muchos aspect os que en cual qui er ot r o l enguaj e son ext ensi ones
pr opi edad de empr esas de sof t war e o f abr i cant es de or denador es (t hr eads, ej ecuci n r emot a,
component es, segur i dad, acceso a bases de dat os, et c. ) . Por eso muchos exper t os opi nan que Java es el
l enguaj e i deal par a apr ender l a i nf or mt i ca moder na, por que i ncor por a t odos est os concept os de un modo
est ndar , mucho ms senci l l o y cl ar o que con l as ci t adas ext ensi ones de ot r os l enguaj es. Est o es
consecuenci a de haber si do di seado ms r eci ent ement e y por un ni co equi po.
El pr i nci pal obj et i vo del l enguaj e Java es l l egar a ser el "nexo uni ver sal " que conect e a l os usuar i os con
l a i nf or maci n, est st a si t uada en l a comput ador a l ocal , en un ser vi dor de Web, en una base de dat os o
en cual qui er ot r o l ugar .
Java es un l enguaj e muy compl et o (de hecho se est convi r t i endo en un macr ol enguaj e: Java 1.0
t ena 12 paquet es; Java 1.1 t ena 23 y Java 1.2 t i ene 59) . En ci er t a f or ma casi t odo depende de casi
t odo. Por el l o, convi ene apr ender l o de modo i t er at i vo: pr i mer o una vi si n muy gener al , que se va
r ef i nando en sucesi vas i t er aci ones. Una f or ma de hacer l o es empezar con un ej empl o compl et o en el que
ya apar ecen al gunas de l as car act er st i cas ms i mpor t ant es.
Java 2 (ant es l l amado Java 1.2 o JDK 1.2) es l a t er cer a ver si n i mpor t ant e del l enguaj e de
pr ogr amaci n Java. No hay cambi os concept ual es i mpor t ant es r espect o a Java 1.1 ( en Java 1.1 s l os
hubo r espect o a Java 1.0) , si no ext ensi ones y ampl i aci ones, l o cual hace que a muchos ef ect os, sea casi
l o mi smo t r abaj ar con Java 1.1 o con Java 1.2.
La compaa Sun descr i be el l enguaj e Java como "si mpl e, or i ent ado a obj et os, di st r i bui do,
i nt er pr et ado, r obust o, segur o, de ar qui t ect ur a neut r a, por t abl e, de al t as pr est aci ones, mul t i t ar ea y
di nmi co". Adems de una ser i e de hal agos por par t e de Sun haci a su pr opi a cr i at ur a, el hecho es que t odo
el l o descr i be bast ant e bi en el l enguaj e Java, aunque en al gunas de esas car act er st i cas el l enguaj e sea
t odava bast ant e mej or abl e.
6. 3. Caract erst i cas general es de Java
Java es un l enguaj e de pr opsi t o gener al , de al t o ni vel y or i ent ado a obj et os. Java es un l enguaj e
compi l ado e i nt er pr et ado. Una de l as her r ami ent as de desar r ol l o es el compi l ador de Java, que r eal i za un
anl i si s de si nt axi s del cdi go escr i t o en l os f i cher os f uent e de Java (con ext ensi n *.j ava) . Si no
encuent r a er r or es en el cdi go gener a l os denomi nados byt ecodes o f i cher os compi l ados ( con ext ensi n
*.cl ass). En ot r o caso muest r a l a l nea o l neas donde se han encont r ado er r or es.
Por ot r o l ado, l a denomi nada Java Vi r t ual Machi ne (JVM) ant er i or ment e menci onada es el i nt r pret e
de Java, de f or ma que convi er t e el cdi go neut r o a cdi go par t i cul ar de l a CPU que se est ut i l i zando. Se
evi t a t ener que r eal i zar un pr ogr ama di f er ent e par a cada CPU o pl at af or ma. La JVM ej ecut a l os
byt ecodes (f i cher os compi l ados con ext ensi n *.cl ass) cr eados por el compi l ador de Java.
56 Informtica III

Int rpret e
Hola.jav
Compi l ador
Hola.clas
Uni x
Wi ndows
Maci nt osh

Fi gura 6. 2. Java, un l enguaj e compi l ado e i nt erpret ado.

La API de Java es muy r i ca, est f or mada por un conj unt o de paquet es de cl ases que l e pr opor ci onan
una gr an f unci onal i dad. El ncl eo de l a API vi ene con cada una de l as i mpl ement aci ones de l a Java
Vi r t ual Machi ne.
Java of r ece l a posi bi l i dad de cr ear pr ogr amas que di f i er en en su f or ma de ej ecuci n:
Apl i caci n i ndependi ent e (St and-al one Appl i cat i on): Es anl oga a l a de ot r os l enguaj es.
Appl et : Es una apl i caci n especi al que se descar ga desde el ser vi dor Web, vi aj a a t r avs de l a
Int er net y se ej ecut a dent r o de un navegador o br owser al car gar una pgi na HTML. El appl et no
r equi er e i nst al aci n en el or denador donde se encuent r a el br owser .
Ser vl et : Es una apl i caci n si n i nt er f ace gr f i ca que se ej ecut a en un ser vi dor de Int er net .
Java per mi t e f ci l ment e el desar r ol l o t ant o de ar qui t ect ur as cl i ent e-ser vi dor como de apl i caci ones
di st r i bui das, consi st ent es en cr ear apl i caci ones capaces de conect ar se a ot r os or denador es y ej ecut ar
t ar eas en var i os or denador es si mul t neament e, r epar t i endo por l o t ant o el t r abaj o. Aunque t ambi n ot r os
l enguaj es de pr ogr amaci n per mi t en cr ear apl i caci ones de est e t i po, Java i ncor por a en su pr opi o API
est as f unci onal i dades.
6. 4. Ent ornos de desarrol l o de Java
6.4.1. Java Devel opment Ki t (JDK)
El JDK es un conj unt o de her r ami ent as (pr ogr amas y l i br er as) que per mi t en desar r ol l ar (compi l ar ,
ej ecut ar , gener ar document aci n, et c. ) pr ogr amas en l enguaj e Java. Incor por a adems el denomi nado
Debugger , que per mi t e l a posi bi l i dad de ej ecut ar par ci al ment e el pr ogr ama, det eni endo l a ej ecuci n en
el punt o deseado y est udi ando en cada moment o el val or de cada una de l as var i abl es, par a poder depur ar
el pr ogr ama. Exi st e t ambi n una ver si n r educi da del JDK, denomi nada JRE ( Java Runt i me Envi r onment )
dest i nada ni cament e a ej ecut ar cdi go Java (no per mi t e compi l ar ) . Aunque vi ene i ncl ui da en el JDK,
t ambi n se puede baj ar de f or ma separ ada. Es de l i br e di st r i buci n, l uego se puede i ncl ui r j unt o con l os
pr ogr amas a l a hor a de di st r i bui r apl i caci ones si el usuar i o f i nal no di spone de l a Java Vi r t ual Machi ne
(JVM).
La compaa Sun Mi cr osyst ems Inc. , cr eador a de Java, di st r i buye gr at ui t ament e est as her r ami ent as,
baj o el nombr e de Java 2 Sof t war e Devel opment Ki t (SDK), St andar d Edi t i on. Exi st en ver si ones par a l os
si gui ent es si st emas oper at i vos: Wi ndows 95/ 98/ NT, Sol ar i s y Li nux. Hast a el moment o, l a l t i ma
ver si n del SDK es l a 1. 4. 2 y est di sponi bl e di r ect ament e desde l a di r ecci n
ht t p: / / j ava. sun. com/ j 2se/ 1. 4/ downl oad. ht ml , r ecor dar pi nchar en l a f i l a cor r espondi ent e a
Wi ndows (al l l anguages) y l a col umna de SDK.
6. 4. 1. 1. Inst al aci n
Par a comenzar a t r abaj ar se necesi t a t ener una i nst al aci n del Java Devel opment Ki t (JDK) en el
ordenador l ocal o en una uni dad de red ( par t i endo de un pr ogr ama de i nst al aci n o copi ndol o desde
Captulo 6. Introduccin a Java 57

ot r o or denador ) . Se l l amar JAVAPATH al pat h compl et o del di r ect or i o donde se encuent r a i nst al ado el
JDK. Di cha i nst al aci n pone a di sposi ci n una ser i e de ej ecut abl es par a poder compi l ar y ej ecut ar
pr ogr amas en Java, que se encuent r an en el di r ect or i o \ bi n dent r o del JAVAPATH. Al gunos de est os
pr ogr amas son:
appl et vi ewer.exe Per mi t e l a vi sual i zaci n de Appl et s.
j ava. exe Ej ecuci n de pr ogr amas como apl i caci ones St and-al one
j avac.exe Compi l aci n de cdi go
j avadoc.exe Cr eaci n de document aci n a par t i r de l as cl ases de Java
j ar. exe Cr eaci n o ext r acci n de f i cher os *. j ar (f i cher os compr i mi dos)
La ej ecuci n de pr ogr amas en Java ut i l i zando el JDK se r eal i za desde consol as MS-DOS. Desde una
vent ana de comandos de MS-DOS, sl o se pueden ej ecut ar l os pr ogr amas que se encuent r en en l os
di r ect or i os i ndi cados en l a var i abl e de ent or no PATH o en el di r ect or i o act i vo. Par a que se encuent r en
accesi bl es l as her r ami ent as de compi l aci n ( j avac. exe) y ej ecuci n (j ava.exe), l a var i abl e de ent or no
PATH del or denador debe i ncl ui r el di r ect or i o JAVAPATH\ bi n.
Adems, Java r equi er e de una nueva var i abl e de ent or no denomi nada CLASSPATH que det er mi na
dnde encont r ar l as cl ases o l i br er as de Java o del usuar i o. A par t i r de l a ver si n 1. 1. 4 del JDK no es
necesar i o i ndi car est a var i abl e sal vo que se desee aadi r conj unt os de cl ases de usuar i o que no vengan con
di cho JDK. La var i abl e CLASSPATH puede i ncl ui r l a r ut a de di r ect or i os o f i cher os *.zi p o *.j ar en l os que
se encuent r en l os f i cher os *.cl ass.
Una f or ma ms gener al de i ndi car est as dos var i abl es es cr ear un f i cher o bat ch o de pr oceso por l ot es
de MS- DOS (*.bat ) donde se i ndi quen l os val or es de est as dos var i abl es. Cada vez que se abr a una vent ana
de MS-DOS ser necesar i o ej ecut ar est e f i cher o *. bat par a asi gnar adecuadament e est os val or es. El
f i cher o cont endr l as l neas:

set JAVAPATH=C:\j2sdk1.4.2
set PATH=.;%JAVAPATH%\bin;%PATH%
set CLASSPATH=

Si no se desea t ener que ej ecut ar est e f i cher o cada vez que se abr e una consol a de MS-DOS es
necesar i o i ndi car est os cambi os de f or ma per manent e. La f or ma de hacer l o di f i er e segn l a pl at af or ma:
Wi ndows 95/ 98: Consi st e en modi f i car el f i cher o Aut oexec. bat si t uado en el di r ect or i o r az C: \
aadi endo l as l neas ant es menci onadas. Una vez r e- ar r ancado el or denador est ar n pr esent es en
cual qui er consol a MS-DOS que se cr ee.
Wi ndows NT: Se aadi r n l as var i abl es JAVAPATH, PATH y CLASSPATH en Set t i ngs -> Cont r ol Panel
-> Syst em -> Envi r onment - > User Var i abl es f or Nombr eUsuar i o.
6. 4. 1. 2. Document aci n
Exi st e una document aci n muy compl et a que acompaa a cada ver si n del JDK, aunque hay que
baj ar l a en un f i cher o apar t e. Inf or ma sobr e l os packages, cl ases e i nt er f aces, con descr i pci ones bast ant e
det al l adas de l as var i abl es y mt odos, as como de l as r el aci ones j er r qui cas. La document aci n de Java
est escr i t a en HTML y se expl or a con un br owser como Net scape Navi gat or o Mi cr osof t Int er net Expl or er .
De or di nar i o, en Java hay que pr ogr amar t eni endo a l a vi st a est a i nf or maci n.
Puedes consegui r l a de f or ma gr at ui t a descar gndol a desde ht t p: / / j ava. sun. com/ docs/ , o ms
exact ament e, par a Java 1. 4 desde ht t p: / / j ava. sun. com/ j 2se/ 1. 4/ downl oad. ht ml .
6. 4. 1. 3. Manos a l a obr a
Una vez que di sponemos de una i nst al aci n del JDK, ya podemos compi l ar y ej ecut ar pr ogr amas en
Java. Vamos a apr ender en pr i mer l ugar a desar r ol l ar Apl i caci ones Independi ent es (St and-al one
Appl i cat i ons). Comenzar emos con una de l as apl i caci ones ms senci l l as que pueden escr i bi r se en Java,
una apl i caci n que muest r a un t ext o en l a consol a, y que nos ser vi r par a ver cmo es l a est r uct ur a
gener al de un pr ogr ama en Java.
El pr i mer paso es escr i bi r el pr ogr ama. Par a el l o ut i l i zar emos un edi t or de t ext o cual qui er a (por
ej empl o el Not epad) . Abr amos, pues, el edi t or de t ext o y escr i bamos el si gui ent e pr ogr ama, r espet ando
l as mayscul as y mi nscul as:
58 Informtica III


/* Estructura general de un programa en Java */
// Otra forma de comentar slo una lnea
public class MiPrograma {
public static void main (String args[]){
System.out.println(Mi primer programa en Java);
} // Fin de main()
} // Fin de la clase MiPrograma

Guar damos el pr ogr ama en el f i cher o Mi Pr ogr ama. j ava. Abr i mos una vent ana o consol a de MS-DOS.
Recor dar que cada vez que abr i mos una vent ana o consol a de MS-DOS debemos est abl ecer el val or de l a
var i abl e PATH del ent or no (si empr e que no l a t engamos def i ni da de maner a per manent e en el si st ema) .
Par a el l o ya sabemos que podemos cr ear un f i cher o bat ch ( *. bat ) y ej ecut ar l o.
Ya podemos pr oceder a compi l ar el pr ogr ama. En l a l nea de comandos de l a vent ana de MS-DOS
i nt r oduci mos l as r denes necesar i as par a si t uar nos en el di r ect or i o donde se encuent r a nuest r o f i cher o
Mi Pr ogr ama. j ava y despus ej ecut amos l a sent enci a:
javac MiPrograma.java
Si se ha compi l ado y no ha most r ado er r or es, se habr cr eado un nuevo f i cher o Mi Pr ogr ama. cl ass en el
di r ect or i o act ual . En caso cont r ar i o, hay que cor r egi r l os er r or es y vol ver a compi l ar . Par a ej ecut ar el
pr ogr ama, se hace medi ant e l a si gui ent e sent enci a:
java MiPrograma
En l a consol a debe apar ecer : Mi primer programa en Java
En l a f i gur a 1. 3. se muest r a el pr oceso compl et o, desde l a cr eaci n del pr ogr ama medi ant e un edi t or
de t ext o, hast a l a ej ecuci n del mi smo.
Fi gura 6. 3. Uso del JDK.

6.4.2. Ent or nos IDE (Int egr at ed Devel opment Envi r onment )
Se t r at a de ent or nos de desar r ol l o vi sual i nt egr ados. Las vent aj as que t i enen son l as si gui ent es:
Per mi t en desar r ol l ar ms r pi dament e apl i caci ones puest o que t i enen i ncor por ado el edi t or de
t ext o, el compi l ador , el i nt r pr et e y per mi t en gest i onar de maner a ef i ci ent e pr oyect os o
pr ogr amas de ci er t a ent i dad.
Incor por an l i br er as de component es, l os cual es se aaden al pr oyect o o pr ogr ama.
Faci l i t an enor mement e el uso del Debugger .
Como i nconveni ent es se pueden seal ar al gunos f al l os de compat i bi l i dad ent r e pl at af or mas y ar chi vos
r esul t ant es de mayor t amao que l os basados en cl ases est ndar .
Al gunos IDEs conoci dos son l os si gui ent es:
Jbui l der, de Bor l and.
VisualAge for Java, de IBM
Vi sual J++ 6.0, de Mi cr osof t .
Si n
Er r or
Er r or es Er r or es
Int rpret e
(j ava. exe)
Mi Pr ogr ama. j ava
Compi l ador
(j avac. exe)
Edi t or de
Text o
Mi Pr ogr ama. cl ass
Captulo 6. Introduccin a Java 59

Sun ONE St udi o 4 updat e 1, Communi t y Edi t i on. Se puede obt ener de f or ma gr at ui t a desde l a
web de Sun. Ant es se conoca como FORTE f or Java, Communi t y Edi t i on .

Fi gura 6. 4. Aspect o del IDE Sun ONE St udi o 4 updat e 1, Communi t y Edi t i on
6. 5. Est ruct ura general de un pr ograma en Java
El ej empl o del apar t ado 6. 4. 1. 3. pr esent a l a est r uct ur a habi t ual de un pr ogr ama r eal i zado en Java.
Apar ece una cl ase que cont i ene el pr ogr ama pr i nci pal (aquel que cont i ene l a f unci n mai n()) . Un f i cher o
f uent e (*. j ava) puede cont ener ms de una cl ase, per o sl o una puede ser publ i c. El nombr e del f i cher o
f uent e debe coi nci di r con el de l a cl ase publ i c ( con l a ext ensi n *.j ava). Es i mpor t ant e que coi nci dan
mayscul as y mi nscul as puest o que Java es sensi bl e a el l o, de f or ma que Mi Cl ase y mi cl ase ser an dos
cl ases di f er ent es.
Por cada cl ase def i ni da en l os f i cher os f uent e (*.j ava) el compi l ador gener a un *.cl ass par a di cha
cl ase, l uego de or di nar i o, una apl i caci n de Java est const i t ui da por var i os f i cher os *.cl ass. Cada cl ase
r eal i za unas f unci ones par t i cul ar es, per mi t i endo const r ui r l as apl i caci ones con gr an modul ar i dad e
i ndependenci a ent r e cl ases. La apl i caci n se ej ecut a por medi o del nombr e de l a cl ase que cont i ene l a
f unci n mai n() (si n l a ext ensi n *.cl ass) .
6.5.1. Concept o de Cl ase
Una cl ase es una agr upaci n de dat os (var i abl es o campos) y de f unci ones (mt odos) que oper an sobr e
esos dat os. A est os dat os y f unci ones per t eneci ent es a una cl ase se l es denomi na var i abl es y mt odos o
f unci ones mi embr o. La pr ogr amaci n or i ent ada a obj et os se basa en l a pr ogr amaci n de cl ases. Un
pr ogr ama se const r uye a par t i r de un conj unt o de cl ases.
Una vez def i ni da e i mpl ement ada una cl ase, es posi bl e decl ar ar el ement os de est a cl ase de modo
si mi l ar a como se decl ar an l as var i abl es del l enguaj e ( de l os t i pos pr i mi t i vos i nt , doubl e, St r i ng, ) . Los
el ement os decl ar ados de una cl ase se denomi nan obj et os de l a cl ase. De una ni ca cl ase se pueden
decl ar ar o cr ear numer osos obj et os. La cl ase es l o genr i co: es el pat r n o model o par a cr ear obj et os.
Cada obj et o t i ene sus pr opi as copi as de l as var i abl es mi embr o, con sus pr opi os val or es, en gener al
di st i nt os de l os dems obj et os de l a cl ase. Las cl ases pueden t ener var i abl es st at i c, que son pr opi as de l a
cl ase y no de cada obj et o.
60 Informtica III

Mt odos de cl ase (static) son f unci ones que no act an sobr e obj et os concr et os de l a cl ase. Son
ej empl os de mt odos static l os mt odos mat emt i cos de l a cl ase java.lang.Math. Mt odos de
obj et o son f unci ones def i ni das dent r o de una cl ase que se apl i can si empr e a un obj et o de l a cl ase.
6.5.2. Her enci a
La her enci a per mi t e que se puedan def i ni r nuevas cl ases basadas en cl ases exi st ent es, l o cual f aci l i t a
r e- ut i l i zar cdi go pr evi ament e desar r ol l ado. Si una cl ase der i va de ot r a (ext ends) her eda t odas sus
var i abl es y mt odos. La cl ase der i vada puede aadi r nuevas var i abl es y mt odos y/ o r edef i ni r l as
var i abl es y mt odos her edados.
En Java, a di f er enci a de ot r os l enguaj es or i ent ados a obj et os, una cl ase sl o puede der i var de una
ni ca cl ase, con l o cual no es posi bl e r eal i zar her enci a ml t i pl e en base a cl ases. Si n embar go es posi bl e
si mul ar l a her enci a ml t i pl e en base a l as i nt er f aces.
6.5.3. Concept o de Int er f ace
Una i nt er f ace es un conj unt o de decl ar aci ones de f unci ones. Si una cl ase i mpl ement a (i mpl ement s)
una i nt er f ace, debe def i ni r t odas l as f unci ones especi f i cadas por l a i nt er f ace. Una cl ase puede
i mpl ement ar ms de una i nt er f ace, r epr esent ando una f or ma al t er nat i va de l a her enci a ml t i pl e.
A su vez, una i nt er f ace puede der i var de ot r a o i ncl uso de var i as i nt er f aces, en cuyo caso i ncor por a
t odos l os mt odos de l as i nt er f aces de l as que der i va.
6.5.4. Concept o de Package
Un package es una agr upaci n de cl ases. Exi st en una ser i e de packages i ncl ui dos en el l enguaj e (ver
j er ar qua de cl ases que apar ece en el API de Java).
Adems el usuar i o puede cr ear sus pr opi os packages. Lo habi t ual es j unt ar en packages l as cl ases que
est n r el aci onadas. Todas l as cl ases que f or men par t e de un package deben est ar en el mi smo di r ect or i o.
6.5.5. La j er ar qua de cl ases de Java (API)
Dur ant e l a gener aci n de cdi go en Java, es r ecomendabl e y casi necesar i o t ener si empr e a l a vi st a l a
document aci n on-l i ne del API de Java 1.1 Java 1.2. En di cha document aci n es posi bl e ver t ant o l a
j er ar qua de cl ases, es deci r , l a r el aci n de her enci a ent r e cl ases, como l a i nf or maci n de l os di st i nt os
packages que componen l as l i br er as base de Java.
Es i mpor t ant e di st i ngui r ent r e l o que si gni f i ca her enci a y package. Un package es una agr upaci n
ar bi t r ar i a de cl ases, una f or ma de or gani zar l as cl ases. La her enci a si n embar go consi st e en cr ear nuevas
cl ases en base a ot r as ya exi st ent es. Las cl ases i ncl ui das en un package no der i van por l o gener al de una
ni ca cl ase.
En l a document aci n on-l i ne se pr esent an ambas vi si ones: Package Index y Cl ass Hi er ar chy ,
t ant o en Java 1.1 como en Java 1.2, con pequeas var i ant es. La pr i mer a pr esent a l a est r uct ur a del API
de Java agr upada por packages, mi ent r as que en l a segunda apar ece l a j er ar qua de cl ases. Hay que
r esal t ar el hecho de que t odas l as cl ases en Java son der i vadas de l a cl ase j ava. l ang. Obj ect , por l o que
her edan t odos l os mt odos y var i abl es de st a.
Si se sel ecci ona una cl ase en par t i cul ar , l a document aci n muest r a una descr i pci n det al l ada de t odos
l os mt odos y var i abl es de l a cl ase. A su vez muest r a su her enci a compl et a (par t i endo de l a cl ase
j ava. l ang.Obj ect ) .


CAPTULO 7
7. GUI y ot ros el ement os de Java
7. 1. Graphi c User Int erf aces (GUI)
Las i nt er f aces gr f i cas de usuar i o (GUI) se componen de un conj unt o de par t es cada vez ms usadas,
como l os bot ones par a r espuest as del usuar i o, r egi ones par a despl i egue y escr i t ur a de t ext o, mens
descendent es y as sucesi vament e. Est as par t es se denomi nan wi dget s.
La si mpl e adi ci n de wi dget s a un pr ogr ama per mi t e t ener escaso cont r ol del aspect o de l a i nt er f az, l o
que se ve bi en en un ambi ent e podr a ser del t odo i nacept abl e en ot r o. Se hace necesar i o un anl i si s del
di seo vi sual . Ver emos dos car act er st i cas que hacen posi bl e l ogr ar el aspect o que se pr et ende de l a GUI
si n i mpor t ar el si st ema en que se ej ecut e el pr ogr ama: l os Container y l os LayoutManager.
Adems de un di seo vi sual cor r ect o, l as apl i caci ones deben ser capaces de pr est ar at enci n a l a
act i vi dad del t ecl ado, l os movi mi ent os y cl i cs del r at n, et c. , en def i ni t i va, ser capaces de i nt er act uar con
el usuar i o. Est e t i po de apl i caci ones se di ce que est n cont r ol adas por event os. Java i ncl uye un ampl i o
conj unt o de f unci ones par a vi gi l ar y not i f i car event os.
7.1.1. Component es gr f i cos: Abst r act Wi ndow Tool ki t (AWT)
El paquet e java.awt const i t uye un conj unt o de cl ases con i ndependenci a de pl at af or ma que per mi t e
usar component es gr f i cos muy di ver sos. Al ut i l i zar l as cl ases de AWT, es posi bl e di sear un pr ogr ama t i l
y vi sual ment e ef i caz si n pr eocupar se por det al l es de baj o ni vel r el aci onados con l os obj et os gr f i cos.
7. 1. 1. 1. Wi dget s o component es el ement al es
En l a j er ga comput aci onal se conoce como wi dget s a l os component es el ement al es que f or man l as
i nt er f aces gr f i cas de usuar i o (GUI). La cl ase Component es, si n duda, l a ms i mpor t ant e del paquet e
java.awt (Fi gur a 7. 1) y es l a super cl ase de t odas l as cl ases de wi dget , sal vo l os menus, adems de ser vi r
como depsi t o de t odos l os mt odos comunes a wi dget .
Tenemos component es de t ext o como l a cl ase Label, y l as cl ases TextField y TextArea y por ot r o
l ado component es act i vos como l as cl ases Button, CheckBox, CheckboxGroup, Choice y List.
7. 1. 1. 2. Mt odos de or gani zaci n: Cont enedor es
Las subcl ases de Container posi bi l i t an pensar en el di seo vi sual con base en una or gani zaci n
j er r qui ca, mi ent r as que l as cl ases de di seo per mi t en especi f i car el aspect o que l a j er ar qua de l os
Container y sus Component t i enen par a el usuar i o.
7. 1. 1. 3. Di seo Vi sual : Layout s
Cada Container t i ene su pr opi o di seo vi sual o LayoutManager, i nt er f az que se encar ga de
col ocar l os component es en un obj et o Container. Par a acceder al di seo y modi f i car l o se di spone de l os
si gui ent es mt odos:

LayoutManager getLayout()
Devuel ve el LayoutManager act i vo de est e
Cont ai ner .
void setLayout(LayoutManager layout) Est e mt odo per mi t e cambi ar el
LayoutManager de est e Cont ai ner .

Se di spone de t r es cl ases de di seo o LayoutManager que se anal i zan en est e apar t ado y sl o
di f i er en en l a f or ma de posi ci onar l os component es. Est as con l as cl ases FlowLayout, BorderLayout y
GridLayout.
62 Informtica III


Fi gura 7. 1. Una porci n de l a j erarqua de cl ases de
Component
Fi gura 7. 2. Una porci n de l a j erarqua de cl ases de
Container

Label TextField


TextArea Button


CheckBox CheckboxGroup

Choice List


Fi gura 7. 3. Aspect o de l os component es el ement al es


Captulo 7. GUI y otros elementos de Java 63


import java.awt.*;
java.applet.*;
public class FlowLayoutTest extends Applet {
public void init() {
setLayout(new FlowLayout());
add(new Button("One"));
add(new Button("Two"));
add(new Button("Three"));
add(new Button("Four"));
add(new Button("Five"));
add(new Button("Six"));
}
}

import java.awt.*;
import java.applet.*;
public class BorderLayoutTest extends Applet {
public void init() {
setLayout(new BorderLayout());
add(BorderLayout.NORTH, new Button("One"));
add(BorderLayout.EAST, new Button("Two"));
add(BorderLayout.SOUTH, new Button("Three"));
add(BorderLayout.WEST, new Button("Four"));
add(BorderLayout.CENTER, new Button("Five"));
}
}

import java.awt.*;
import java.applet.*;
public class GridLayoutTest extends Applet {
public void init() {
setLayout(new GridLayout(3,2));
add(new Button("One"));
add(new Button("Two"));
add(new Button("Three"));
add(new Button("Four"));
add(new Button("Five"));
add(new Button("Six"));
}
}
Fi gura 7. 4. Aspect o de l os di f erent es LayoutManager.
7.1.2. Event os
Casi t odos l os l enguaj es de pr ogr amaci n evol uci onan con el paso del t i empo, y Java no es l a
excepci n. En l a pr i mer a r evi si n i mpor t ant e de Java, l a ver si n 1. 1, se i ncl uy un gr upo de nuevos
mt odos par a l as cl ases de l a AWT. Tambi n se aadi er on al gunos nuevos paquet es y cl ases; per o gr an
par t e de l os cambi os f ue ms o menos super f i ci al , except o l o r el at i vo al manej o de event os. Es en est os
donde se advi er t en l as di f er enci as ms si gni f i cat i vas ent r e l as ver si ones 1. 0 y subsi gui ent es de Java (Java
1. 1 y sus modi f i caci ones y Java 1. 2, ahor a l l amada Java 2). Por f or t una (al menos, par a l os aut or es de
l i br os) , ya no se t i ene sopor t e par a el model o de event os de l a ver si n 1. 0, por l o que l os aut or es pueden
dedi car el t i empo a escr i bi r acer ca de una sol a f or ma de manej ar l os event os, con l a conf i anza de que
est e model o ser vl i do al menos dur ant e l a vi da t i l de su obr a, si n i mpor t ar que se use el ambi ent e Java
2 cual qui er a de l as ver si ones 1. 1. x.
Un pr ogr ama escr i t o en Java manej a l os event os medi ant e l o que se conoce como model o de
del egaci n. En st e, exi st en dos act or es, el obj et o Component (un bot n, por ej empl o) que gener a l os
event os y ot r o obj et o, que podr ser un subpr ogr ama o una i nst anci a de ot r a cl ase, el cual cont i ene el
cdi go par a el manej o de l os event os. Las pr i nci pal es car act er st i cas de est e model o son:
Todo component e puede ser l a f uent e de un event o.
Toda cl ase puede ser un escucha (l i st ener ) de un event o, par a l o cual bast a l a i nst r ument aci n de
l a i nt er f ace de escucha apr opi ada.
64 Informtica III

El event o que gener a un Component se enva sl o a l os escuchas r egi st r ados con el obj et o f uent e.
Par a poder t r abaj ar con event os se hace necesar i o i mpor t ar un nuevo paquet e, java.awt.event. Los
di ver sos t i pos de event os en Java est n or gani zados en una j er ar qua de cl ases que se i l ust r a en l a Fi gur a
7. 7.
Vamos a desar r ol l ar un ej empl o que muest r a l a senci l l ez de est e model o. La apl i caci n cont i ene dos
bot ones, en l os que se puede hacer cl i c par a mover el punt o r oj o haci a l a i zqui er da o l a der echa. En l a
Fi gur a 7. 5 se i l ust r a el aspect o que t i ene l a apl i caci n en pant al l a.

Fi gura 7. 5. Apl i caci n Event os. cl ass
A cont i nuaci n se muest r a el cdi go en Java de l a apl i caci n. Se han r esal t ado en negr i t a l as par t es
del cdi go que se aaden par a poder manej ar l os event os. Est as sent enci as y mt odos r eal i zan di f er ent es
t ar eas: i ncl ui r el paquet e de cl ases de event os, est abl ecer vncul os ent r e f uent es y escuchas e
i nst r ument ar el i nt er f az del escucha par a manej ar el event o.
/* Programa que muestra el funcionamiento de Eventos en Java */
import java.awt.*;
import java.awt.event.*; //Paquete para las clases de eventos
public class Eventos extends Frame{
private Button left,right;
private Display myDisplay;
//Constructor
public Eventos(){
super("Aplicacin Ejemplo de Eventos");
setSize(400,200);
setLayout(new BorderLayout());
myDisplay = new Display();
add(BorderLayout.CENTER, myDisplay);
Panel p = new Panel();
left = new Button("Izquierda");
p.add(left);
right = new Button("Derecha");
p.add(right);
add(BorderLayout.SOUTH, p);
//Registrar myDisplay con cada botn
left.addActionListener(myDisplay);
right.addActionListener(myDisplay);
}
public static void main(String args[]){
Eventos a = new Eventos();
a.show();
}
}
Captulo 7. GUI y otros elementos de Java 65

class Display extends Canvas implements ActionListener{
private Point center;
//Constructor
public Display(){
center = new Point(50,50);
setBackground(Color.white);
}
//Mtodo que se llama cuando se produce un evento
public void actionPerformed(ActionEvent e){
//Obtener el rtulo del botn que gener el evento
String rotulo = e.getActionCommand();
//Movemos el punto segn qu botn haya generado el evento
if(rotulo.equals("Izquierda")){
center.x -= 12;
}else if (rotulo.equals("Derecha")){
center.x += 12;
}
//Se fuerza una llamada a paint()
repaint();
}
//Dibujar el punto rojo
public void paint(Graphics g){
g.setColor(Color.red);
g.fillOval(center.x -5, center.y -5, 10, 10);
}
}

El manej o de event os gener ados por un component e f uent e en un pr ogr ama r equi er e:
Una decl ar aci n de l a f or ma: import java.awt.event.*;
Un obj et o escucha que i nst r ument e t odos l os mt odos de una i nt er f ace escucha apr opi ada.
Un vncul o ent r e l os obj et os f uent e y escucha, que se est abl ece medi ant e una l l amada a un
mt odo de Component , con l a f or ma: fuente.addXXXListener(escucha); , donde XXX i ndi ca
el t i po de event o que se manej ar .
Cdi go en el mt odo escucha apr opi ado par a manej ar el event o.

Fi gura 7. 6. Fuent es y escuchas de Event os en el ej empl o.

Los event os ms comunes que se manej an en apl i caci ones Java son l os si gui ent es:
Fuent es de Event os
Izqui erda Derecha
Inst r ument a el
i nt er f ace
Act i onLi st ener
Gener a
Act i onEvent
Gener a
Act i onEvent
Escucha (Li st ener )
regi st rado con l as Fuent es
66 Informtica III

Event os de acci n (cl ase ActionEvent): Un ActionEvent se gener a cuando el usuar i o hace cl i c
en un bot n, hace dobl e cl i c en un el ement o de una l i st a, sel ecci ona un MenuItem o pr esi ona
<Intro> en un TextField.
Event os de el ement os (cl ase ItemEvent): Se gener a una i nst anci a de It emEvent cuando el
usuar i o hace cl i c en un CheckBox, CheckBoxMenuItem o Choice.
Event os del t ecl ado (cl ase KeyEvent): Los event os del t ecl ado se gener an cuando el usuar i o
pul sa o suel t a una t ecl a. En r eal i dad exi st en t r es t i pos de KeyEvent: pul sar una t ecl a, sol t ar una
t ecl a y escr i bi r con una t ecl a, que es una secuenci a de l as dos pr i mer as.
Event os del r at n (cl ase MouseEvent): Cuando se hace cl i c con el r at n, se l e mueve o se r eal i za
cual qui er ot r a acci n con l , el Component donde est el punt er o en el moment o de l a acci n
gener a un MouseEvent.
Event os de t ext o (cl ase TextEvent): Los TextEvent se gener an cuando el usuar i o modi f i ca el
cont eni do de un obj et o TextArea o TextField, o si cambi a su cont eni do con un mt odo como
setText().
Event os de vent ana: Son l as di ver sas acci ones que un usuar i o o pr ogr ama pueden empr ender con
una vent ana. Una vent ana puede vol ver se act i va o i nact i va, al col ocar se del ant e o det r s de ot r a.
En muchos si st emas, es posi bl e i coni f i car vent anas, al mi ni mi zar l as hast a una pequea
r epr esent aci n en un i cono, o desi coni f i car l as , medi ant e su expansi n desde su est ado de i cono.
Se gener an event os a su vez cuando se abr e o se ci er r a l a vent ana.
Fi gura 7. 7. Jerarqua de cl ases de AWTEvent

En el model o de event os de Java, l os Component gener an event os cuyo manej o cor r esponde a
cual qui er obj et o escucha r egi st r ado con l a f uent e del event o. Un escucha es t oda cl ase que i nst r ument a l a
i nt er f az apr opi ada par a el event o. Luego, a f i n de di sear un manej ador de event os, se const r uye una
cl ase (o se ut i l i za una ya def i ni da que cuent e con t oda l a i nf or maci n necesar i a par a r esponder al event o
concr et o) que i nst r ument e el escucha apr opi ado del event o y se r eal i za una sobr ecar ga de t odos l os
mt odos de l a i nt er f az. Por el l o, es necesar i o conocer l as i nt er f aces escucha y sus mt odos. Exi st en 11
i nt er f aces escucha, que se l i st an a cont i nuaci n:
Event Obj ec
AWTEvent
Act i onEvent
KeyEvent
Component Event
Cont ainerEvent
FocusEvent
Adj ust ment Event
It emEvent
Text Event
Input Event
MouseEven
Pai nt Event
Wi ndowEvent
Captulo 7. GUI y otros elementos de Java 67

ActionListener
/ / par a ActionEvent
AdjustmentListener
/ / par a Scrollbar
ComponentListener
/ / par a ComponentEvent
ContainerListener
/ / par a ContainerComponent
FocusListener / / par a r ast r ear event os de enf oque
ItemListener
/ / par a ItemEvent
KeyListener
/ / par a KeyEvent
MouseListener / / par a t odos l os event os del r at n except o
MouseMotionListener
/ / MOUSE_DRAG y MOUSE_MOVE
TextListener
/ / par a TextEvent
WindowListener
/ / par a WindowEvent
7.1.3. Appl et s
Como se puede obser var en l a Fi gur a 7. 2 l os applets son cont enedor es, her eder os de l a cl ase Panel .
Per mi t en r eal i zar apl i caci ones a l as que se accede medi ant e un vi sual i zador de pgi nas web (o
navegador ) , pues se t r ansmi t en a t r avs de l a r ed y l os ej ecut a l a mqui na vi r t ual del vi sual i zador . En
cast el l ano se denomi nan subprogramas.
Los appl et s no t i enen mt odo main() y su ci cl o de vi da se basa en l a ej ecuci n de l os si gui ent es
mt odos:
void init(): es ej ecut ado por el navegador l a pr i mer a vez que se car ga el appl et . Se suel e col ocar
en est e mt odo el cdi go que se pondr a en el const r uct or si se t r at ase de una apl i caci n
i ndependi ent e, es deci r , t odo l o necesar i o par a su i ni ci al i zaci n.
void start(): se ej ecut a cada vez que se car ga el appl et .
void stop(): se ej ecut a cuando se abandona el document o que cont i ene el appl et .
Ot r os mt odos i mpor t ant es son:
void paint(Graphics g): di buj a el appl et ; g i ndi ca l a zona que se va a di buj ar .
1

void update(Graphics g): act ual i za el appl et , r el l enndol o pr i mer o con el col or de g e
i nvocando despus al mt odo paint.
void repaint(): est e mt odo l l ama al mt odo update(). st e es el mt odo que debe i nvocar el
pr ogr amador si qui er e r epi nt ar el appl et .
void resize(int ancho, int alto): cambi a el t amao al i ndi cado por ancho y al t o.
Veamos a cont i nuaci n un ej empl o senci l l o de un appl et que muest r a un mensaj e:
/* Applet que muestra un mensaje */
import java.applet.Applet;
import java.awt.Graphics;
public class MiApplet extends Applet{
public void paint (Graphics g){
g.drawString (Mi primer Applet, 10, 30);
}
}
Guar damos el cdi go en un f i cher o con nombr e Mi Appl et .j ava y l o compi l amos de l a mi sma f or ma que
vi mos par a apl i caci ones i ndependi ent es. Si n embar go, par a vi sual i zar el appl et en un navegador (puest o
que no es una apl i caci n i ndependi ent e) es necesar i o di sponer de una pgi na HTML que l o despl i egue. El
cont eni do mni mo de est a pgi na ser :
<HTML>
<BODY>
<APPLET code=MiApplet.class width=60 height=60></APPLET>
</BODY>
</HTML>

1
La cl ase Graphics mant i ene un cont ext o gr f i co: i ndi ca l a zona en que se va a di buj ar , col or de di buj o
del backgr ound y del f or egr ound, f ont , et c. . .
68 Informtica III

Guar damos el cdi go HTML en un f i cher o con ext ensi n *.ht ml , por ej empl o Mi Appl et .hmt l . Ahor a se
ut i l i za cual qui er navegador par a abr i r l a pgi na ht ml . El f i cher o *.cl ass del appl et debe est ar en el mi smo
di r ect or i o que el *.ht ml . La Fi gur a 7. 8 muest r a el pr oceso compl et o de despl i egue de un appl et en una
pgi na Web.
Fi gura 7. 8. Despl i egue de Appl et s.
El JDK pone a di sposi ci n una her r ami ent a par a vi sual i zar appl et s si n necesi dad de un navegador
comer ci al . Est a her r ami ent a es el appl et vi ewer .exe y se ut i l i za con l a si gui ent e sent enci a desde una
consol a de MS-DOS y desde el di r ect or i o donde se encuent r e el *.ht ml y el *.cl ass:
Appletviewer MiApplet.html
La sal i da gr f i ca ser l a si gui ent e:

Fi gura 7. 9. Mi Appl et . cl ass en el Appl et Vi ewer.
7. 2. Ot ros el ement os de Java
7.2.1. Manej o de Excepci ones y Er r or es
Java i ncor por a en el pr opi o l enguaj e l a gest i n de er r or es. El mej or moment o par a det ect ar l os er r or es
es dur ant e l a compi l aci n. Si n embar go pr ct i cament e sl o l os er r or es de si nt axi s son det ect ados dur ant e
est e per i odo. El r est o de pr obl emas sur gen dur ant e l a ej ecuci n de l os pr ogr amas.
En el l enguaj e Java, una Except i on es un ci er t o t i po de er r or o una condi ci n anor mal que se ha
pr oduci do dur ant e l a ej ecuci n de un pr ogr ama. Al gunas excepci ones son f at al es y pr ovocan que se deba
f i nal i zar l a ej ecuci n del pr ogr ama. En est e caso convi ene t er mi nar or denadament e y dar un mensaj e
expl i cando el t i po de er r or que se ha pr oduci do. Ot r as, como por ej empl o no encont r ar un f i cher o en el
que hay que l eer o escr i bi r al go, pueden ser r ecuper abl es. En est e caso el pr ogr ama debe dar al usuar i o l a
opor t uni dad de cor r egi r el er r or (i ndi cando una nueva l ocal i zaci n del f i cher o no encont r ado).
Un buen pr ogr ama debe gest i onar cor r ect ament e t odas o l a mayor par t e de l os er r or es que se pueden
pr oduci r . Hay dos est i l os de hacer est o:
1. A l a ant i gua usanza : l os mt odos devuel ven un cdi go de er r or . Est e cdi go se chequea en el
ent or no que ha l l amado al mt odo con una ser i e de i f el sei f , gest i onando de f or ma di f er ent e el
Despl i egue del Appl et
en una pgi na Web
Navegador
Hol a. cl ass
Hol a. j ava
Hol a. ht ml
Compi l ador
Captulo 7. GUI y otros elementos de Java 69

r esul t ado cor r ect o o cada uno de l os posi bl es er r or es. Est e si st ema r esul t a muy compl i cado cuando
hay var i os ni vel es de l l amadas a l os mt odos.
2. Con sopor t e en el pr opi o l enguaj e: En est e caso el pr opi o l enguaj e pr opor ci ona const r ucci ones
especi al es par a gest i onar l os er r or es o Except i ons. Suel e ser l o habi t ual en l enguaj es moder nos,
como C++, Vi sual Basi c y Java.
Los er r or es se r epr esent an medi ant e dos t i pos de cl ases der i vadas de l a cl ase Thr owabl e: Er r or y
Fi gura 7. 10. Una part e de l a j erarqua de cl ases de Throwable.
La cl ase Er r or est r el aci onada con er r or es de compi l aci n, del si st ema o de l a JVM. De or di nar i o est os
er r or es son i r r ecuper abl es y no dependen del pr ogr amador ni debe pr eocupar se de capt ur ar l os y
t r at ar l os. La cl ase Except i on t i ene ms i nt er s. Dent r o de el l a se puede di st i ngui r :
1. Runt i meExcept i on: Son excepci ones muy f r ecuent es, de or di nar i o r el aci onadas con er r or es de
pr ogr amaci n. Se pueden l l amar excepci ones i mpl ci t as.
2. Las dems cl ases der i vadas de Except i on son excepci ones expl ci t as. Java obl i ga a t ener l as en
cuent a y chequear si se pr oducen.
Las cl ases der i vadas de Except i on pueden per t enecer a di st i nt os packages de Java. Al gunas per enecen
a java.lang (Throwable, Exception, RuntimeException, ); ot r as a java.io (EOFException,
FileNotFoundException, . . . ) o a ot r os packages.
7.2.2. Ent r ada/ Sal i da de Dat os
Todos l os l enguaj es de pr ogr amaci n moder nos poseen l a car act er st i ca de per mi t i r que se guar de l a
sal i da de un pr ogr ama en un ar chi vo ext er no, que puede r esi di r , por ej empl o, en un di sco dur o. Una vez
que se guar da en el di sco dur o (o cual qui er ot r o medi o de al macenami ent o) , se puede l eer post er i or ment e
y usar como ent r ada par a un pr ogr ama, ya sea el mi smo que gener el ar chi vo, u ot r o pr ogr ama
t ot al ment e di st i nt o.
La ent r ada y sal i da de dat os en Java se l ogr an medi ant e l as cl ases de f l uj o de dat os InputStream y
OutputStream, as como sus subcl ases, al gunas de l as cual es se i l ust r an en l a Fi gur a 5. 11, j unt o con l a
cl ase File, que per mi t e obt ener i nf or maci n acer ca de un ar chi vo. Todas est as cl ases son par t e del
paquet e java.io.
En Java, un f l uj o de dat os es una secuenci a or denada de obj et os y un conj unt o de mt odos que
per mi t en ext r aer un obj et o (l eer l o del f l uj o) y aadi r un nuevo obj et o al f l uj o ( escr i bi r l o en el f l uj o).
Obj ect
Throwable
Error
Except i on
Il legal AccessExcept i on
Runt imeExcept ion
IOExcept i on
Li nkageEr r or
.. .
.. .
70 Informtica III


Fi gura 7. 11. Una part e de l a j erarqua de cl ases de f l uj o de dat os.
7.2.3. Subpr ocesos
Gener al ment e se pi ensa en l a ej ecuci n de un pr ogr ama como un pr oceso secuenci al , de i nst r ucci n en
i nst r ucci n, qui z r eal i zando bucl es o sal t ando a ot r a par t e del cdi go en r espuest a a una l l amada a un
mt odo. Si n embar go, es posi bl e t ener var i os pr ocesos secuenci al es a l a vez. En l a pr ct i ca, l os pr ocesos
secuenci al es nunca se ej ecut an si mul t neament e, si no que uno ej ecut a var i as i nst r ucci ones y l uego
descansa, mi ent r as ot r o ej ecut a su cdi go. Per o est a al t er naci n ocur r e t an r pi dament e que puede
pensar se que t r abaj an al mi smo t i empo.
As pues, un subpr oceso r epr esent a una secuenci a de acci n i ndependi ent e en un pr ogr ama. Java
pr opor ci ona l a cl ase Thread, par t e del paquet e java.lang, par a el manej o de subpr ocesos.

Obj ect
Fi l e
Input St ream
Out put St ream
Fi l eOut put St ream
Fi l t erOut put St ream
Fi l t erInput St ream
Fi l eInput St ream
Dat aInput St ream
Dat aOut put St ream







SECCIN 3
Java Avanzado



CAPTULO 8
8. JDBC: acceso a bases de dat os
8. 1. Int roducci n
8.1.1. Qu es ODBC?
Open Dat abase Connect i vi t y (ODBC) es una i nt er f ace de apl i caci ones (API) par a acceder a dat os en
si st emas gest or es de bases de dat os t ant o r el aci onal es como no r el aci onal es, ut i l i zando par a el l o SQL
(Lenguaj e de Consul t a Est r uct ur ado) .
Todas l as apl i caci ones que sopor t en ODBC r econocer n una i nst r ucci n comn de Lenguaj e de Consul t a
Est r uct ur ado (SQL) .
Las apl i caci ones ODBC o apl i caci ones cl i ent e envan pet i ci ones a un ser vi dor de bases de dat os. El
gest or del dr i ver ODBC det er mi na qu f uent e de dat os usar y qu dr i ver ODBC puede comuni car con esa
f uent e de dat os en par t i cul ar . La pet i ci n se enva l uego a t r avs del dr i ver al ser vi dor nor mal ment e una
apl i caci n de base de dat os. Est a base de dat os puede ser l ocal , o en el mi smo or denador , o r emot a. Los
dat os sol i ci t ados se devuel ven a t r avs del gest or del dr i ver ODBC, ent onces a l a apl i caci n del cl i ent e. El
l enguaj e ODBC es una combi naci n de l l amadas de f unci n ODBC API y l enguaj e SQL.
Ant es de cont i nuar , es t i l conocer l os si gui ent es t r mi nos:
Si st ema de Gest i n de Bases de Dat os (DBMS): Apl i caci n que per mi t e a l os usuar i os al macenar ,
pr ocesar , y r ecuper ar i nf or maci n en una base de dat os
Fuent e de Dat os (DSN): Los dat os a l os cual es qui er e acceder (como a DBMS) e i nf or maci n par a
l ocal i zar dat os (como l a r ut a o di r ecci n IP)
Lenguaj e de Consul t a Est ruct ur ado (SQL): Un l enguaj e de pr ogr amaci n est ndar que cont r ol a e
i nt er act a con una DBMS
Apl i caci n Cl i ent e: La apl i caci n que sol i ci t a dat os (medi ant e SQL) de una f uent e de dat os usando
ODBC
Query: Recuper aci n, mani pul aci n, o modi f i caci n de dat os desde una f uent e de dat os envi ando
i nst r ucci ones SQL
Tabl a: Recol ecci n de dat os cuya est r uct ur a l gi ca es en f or ma de campos (at r i but os) y r egi st r os es
deci r , col umnas y f i l as.
Dri ver o cont rol ador ODBC: Un f i cher o DLL, f i cher o conect ado di nmi cament e (Wi ndows) que enva
una consul t a SQL par a acceder a dat os al macenados en una base de dat os y ent r egar dat os a l a
apl i caci n cl i ent e
8.1.2. Qu es y que hace JDBC?
JDBC es una API de Java par a ej ecut ar sent enci as SQL. (Como punt o de i nt er s, JDBC es nombr e de una
mar ca r egi st r ada y no es un acr ni mo, a pesar de t odo, JDBC es a menudo i nt er pr et ado como Java
Dat aBase Connect i vi t y ). Const a de un conj unt o de cl ases e i nt er f aces escr i t o en l enguaj e de
pr ogr amaci n Java.
Usando JDBC es f ci l envi ar sent enci as SQL a vi r t ual ment e cual qui er base de dat os r el aci onal . En ot r as
pal abr as, con l a API JDBC no es necesar i o escr i bi r un pr ogr ama par a acceder a una base de dat os t i po
Access, ot r o pr ogr ama par a acceder a una base de dat os t i po Or acl e y as par a cada t i po de base de dat os.
Uno puede escr i bi r un sol o pr ogr ama usando l a API JDBC y el pr ogr ama ser capaz de envi ar sent enci as
SQL a l a base de dat os apr opi ada. Y, con una apl i caci n escr i t a en Java, uno no t i ene por qu pr eocupar se
por escr i bi r di f er ent es pr ogr amas par a di f er ent es pl at af or mas. La combi naci n de JDBC per mi t e al
pr ogr amador escr i bi r una vez y ej ecut ar en cual qui er si t i o.
74 Informtica III

Java, si endo r obust o, segur o, f ci l de usar , f ci l de ent ender , y aut omt i cament e descar gabl e en una
r ed, es un excel ent e l enguaj e base par a apl i caci ones con bases de dat os. Lo que es necesar i o es una f or ma
par a que l as apl i caci ones Java puedan ent ender se con bases de dat os de di f er ent es t i pos. JDBC es el
mecani smo par a hacer est o.
JDBC ext i ende l o que puede hacer se con Java. Por ej empl o, con Java y l a API de JDBC, es posi bl e
publ i car una pgi na web que usa i nf or maci n obt eni da de una base de dat os r emot a. O una compaa
puede usar JDBC par a conect ar t odos sus empl eados (i ncl uso si est os est n usando un congl omer ado de
mqui nas Wi ndows, Maci nt osh y UNS) a una o ms bases de dat os i nt er nas va una i nt r anet .
De una f or ma si mpl e, JDBC posi bi l i t a hacer t r es cosas:
Est abl ecer una conexi n con una base de dat os
Envi ar sent enci as SQL
Pr ocesar l os r esul t ados
8.1.3. JDBC ver sus ODBC y ot r as APIs
La API ODBC de Mi cr osof t es pr obabl ement e l a i nt er f ace de pr ogr amaci n par a acceder a bases de
dat os r el aci onal es ms ext ensament e usada. Of r ece l a posi bi l i dad de conect ar a casi l a t ot al i dad de bases
de dat os. Ent onces, por qu no usar si mpl ement e ODBC desde Java?
La r espuest a es que se puede usar ODBC desde Java, per o est o se hace mej or con l a ayuda de JDBC en
l a f or ma de un Puent e JDBC-ODBC, el cual t r at ar emos en br eve. La pr egunt a es ahor a Por qu se necesi t a
JDBC? Hay var i as r espuest as par a est a pr egunt a:
ODBC no es apr opi ado par a su uso di r ect o desde Java por que usa una i nt er f ace en C. Las l l amadas
desde Java a cdi go C nat i vo t i enen un nmer o de i nconveni ent es en l a segur i dad, i mpl ement aci n,
r obust ez y por t abi l i dad de l as apl i caci ones.
Una t r aducci n l i t er al de l a OBDC API en C a una API en Java no ser a deseabl e. Por ej empl o, Java no
t i ene punt er os y ODBC hace un copi oso uso de el l os. Se puede pensar en JDBC como ODBC t r aduci do a
un i nt er f ace or i ent ado a obj et os que es nat ur al par a pr ogr amador es en Java.
ODBC es dur o de apr ender . Mezcl a car act er st i cas el ement al es con ot r as ms avanzadas y t i ene
compl ej as opci ones i ncl uso par a l as consul t as ms si mpl es. JDBC, por ot r o l ado, f ue di seado par a
mant ener si mpl es l as cosas si mpl es mi ent r as per mi t e posi bi l i dades ms avanzadas cuando se
r equi er en.
Una API en Java como JDBC es necesar i a par a consegui r una sol uci n pur ament e Java . Cuando se
usa ODBC, el gest or de cont r ol ador es (dr i ver manager ) y l os cont r ol ador es ( dr i ver s) ODBC deben ser
manual ment e i nst al ados en cada mqui na cl i ent e. Si n embar go, cuando el dr i ver JDBC est escr i t o
t ot al ment e en Java, el cdi go JDBC es aut omt i cament e i nst al abl e, por t abl e y segur o en t odas l as
pl at af or mas Java desde comput ador as en r ed hast a mai nf r ames.
En def i ni t i va, l a JDBC API es una i nt er f ace nat ur al de Java par a l as abst r acci ones y concept os bsi cos
de SQL. Est f undament ada en ODBC por l o que l os pr ogr amador es f ami l i ar i zados con ODBC encont r ar n
f ci l de apr ender JDBC. JDBC mant i ene l as car act er st i cas de di seo bsi cas de ODBC. La gr an di f er enci a
es que JDBC est basada y r ef uer za el est i l o y vi r t udes de Java y, por supuest o, es f ci l de usar .
8.1.4. Cont r ol ador es JDBC
8. 1. 4. 1. Ti pos de cont r ol ador es (Dr i ver s) de JDBC
Java puede acceder a l a base de dat os medi ant e un dr i ver o cont r ol ador JDBC apr opi ado que pueda
ut i l i zar l as cl ases que per mi t en el acceso a l a base de dat os. Exi st en di ver sos t i pos de dr i ver s, que ut i l i zan
di st i nt os pr ot ocol os. En par t i cul ar , en est a asi gnat ur a se ut i l i zar el l l amado Puent e JDBC-ODBC, que se
expl i car ms adel ant e.
8. 1. 4. 2. Cmo obt ener l os Dr i ver s de JDBC
Par a consegui r l a i nf or maci n act ual i zada sobr e dr i ver s, acceder a l a pgi na web sobr e dr i ver s par a
JDBC de Sun, donde se mant i ene un r egi st r o act ual i zado de vendedor es de dr i ver s:
http://industry.java.sun.com/products/jdbc/drivers
Captulo 8. JDBC: acceso a bases de datos 75

8.1.5. JDBC-ODBC Br i dge
El Puent e JDBC-ODBC es un cont r ol ador JDBC que i mpl ement a oper aci ones JDBC t r aduci ndol as en
oper aci ones ODBC. Par a ODBC apar ece como una apl i caci n nor mal . El Puent e i mpl ement a JDBC par a
cual qui er base de dat os par a l a cual haya di sponi bl e un dr i ver ODBC.
El Puent e est i mpl ement ado en Java y usa mt odos nat i vos de Java par a l l amar a ODBC. Se i nst al a
aut omt i cament e con el Java Devel opment Ki t como el paquet e sun.jdbc.odbc.
Si es posi bl e, usar un dr i ver JDBC 100% Java en l ugar de un Puent e y un dr i ver ODBC. Est o el i mi na
compl et ament e l a conf i gur aci n en el cl i ent e r equer i da por ODBC.

Fi gura 8. 1. JDBC de f orma esquemt i ca
8. 2. JDBC 3. 0 API
La JDBC 3. 0 API compr ende dos paquet es:
El paquet e java.sql
El paquet e javax.sql, que aade capaci dades de l a par t e ser vi dor .
Los dos paquet es se consi guen aut omt i cament e cuando se baj a l a Java 2 Pl at f orm, St andard Edi t i on,
Versi on 1.4 (J2SE) de l a web de Sun.
8.2.1. Paquet e java.sql
Pr ovee l a API par a acceso y pr ocesami ent o de dat os guar dados en una f uent e de dat os (usual ment e
una base de dat os r el aci onal ) usando el l enguaj e de pr ogr amaci n Java. Est a API i ncl uye un mbi t o donde
di f er ent es dr i ver s pueden ser i nst al ados di nmi cament e par a acceder a di f er ent es f uent es de dat os.
Aunque l a JDBC API est pr epar ada pr i nci pal ment e par a pasar sent enci as SQL a una base de dat os,
per mi t e l eer y escr i bi r dat os desde cual qui er f uent e de dat os con un f or mat o t abul ar .
El paquet e java.sql cont i ene el i nt er f ace de pr ogr amaci n par a l o si gui ent e (l a i nf or maci n que se
muest r a a cont i nuaci n est obt eni da di r ect ament e de l a document aci n de l a API) :
Maki ng a connect i on wi t h a dat abase vi a t he 'ULYHU0DQDJHU 'ULYHU0DQDJHU 'ULYHU0DQDJHU 'ULYHU0DQDJHU f aci l i t y
DriverManager cl ass - - makes a connect i on wi t h a dr i ver
Driver i nt er f ace - - pr ovi des t he API f or r egi st er i ng and connect i ng dr i ver s based on JDBC
t echnol ogy ( "JDBC dr i ver s") ; gener al l y used onl y by t he DriverManager cl ass
DriverPropertyInfo cl ass -- pr ovi des pr oper t i es f or a JDBC dr i ver ; not used by t he gener al
user
76 Informtica III

Sendi ng SQL st at ement s t o a dat abase
Statement -- used t o send basi c SQL st at ement s
PreparedStatement -- used t o send pr epar ed st at ement s or basi c SQL st at ement s ( der i ved f r om
Statement)
CallableStatement - - used t o cal l dat abase st or ed pr ocedur es (der i ved f r om
PreparedStatement)
Connection i nt er f ace - - pr ovi des met hods f or cr eat i ng st at ement s and managi ng connect i ons and
t hei r pr oper t i es
Ret ri evi ng and updat i ng t he resul t s of a query
ResultSet i nt er f ace
St andard mappi ngs f or SQL t ypes t o cl asses and i nt erf aces i n Java progr ammi ng l anguage
Date cl ass - - mappi ng f or SQL DATE
Time cl ass - - mappi ng f or SQL TIME
Timestamp cl ass - - mappi ng f or SQL TIMESTAMP
Types cl ass - - pr ovi des const ant s f or SQL t ypes
Met adat a
DatabaseMetaData i nt er f ace - - pr ovi des i nf or mat i on about t he dat abase
ResultSetMetaData i nt er f ace -- pr ovi des i nf or mat i on about t he col umns of a ResultSet
obj ect
Except i ons
SQLException -- t hr own by most met hods when t her e i s a pr obl em accessi ng dat a and by some
met hods f or ot her r easons
SQLWarning -- t hr own t o i ndi cat e a war ni ng
DataTruncation -- t hr own t o i ndi cat e t hat dat a may have been t r uncat ed


Cal l abl eSt at ement
Connect i on
Dat abaseMet aDat a
Dr i ver
Pr epar edSt at ement
Resul t Set
Resul t Set Met aDat a
St at ement
Dat e
Dr i ver Manager
Dr i ver Pr oper t yInf o
Ti me
Ti mest amp
Types
Dat aTr uncat i on
SQLExcept i on
SQLWar ni ng
Tabl a 8. 1. JDBC API
8.2.2. Dr i ver Manager
La cl ase DriverManager es l a capa gest or a de JDBC, t r abaj ando ent r e el usuar i o y el cont r ol ador
(dr i ver ) . Se encar ga de segui r el r ast r o de l os cont r ol ador es que est n di sponi bl es y est abl ecer l a conexi n
ent r e l a base de dat os y el cont r ol ador apr opi ado.
La cl ase DriverManager mant i ene una l i st a de cl ases Driver que se han r egi st r ado l l amando al
mt odo DriverManager.registerDriver. Un usuar i o nor mal ment e no l l amar al mt odo
DriverManager.registerDriver di r ect ament e, si no que ser l l amado aut omt i cament e por el
cont r ol ador (dr i ver ) cuando est e se car ga. El usuar i o l o que hace es f or zar que se car gue el dr i ver , l o cual
puede hacer se de dos f or mas, aunque l a r ecomendada es l l amando al mt odo Class.forName(). Est o
car ga l a cl ase dr i ver expl ci t ament e. La si gui ent e sent enci a car ga l a cl ase
sun.jdbc.odbc.JdbcOdbcDriver, que per mi t e usar el Puent e JDBC- ODBC:
Captulo 8. JDBC: acceso a bases de datos 77

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
La cl ase sun.jdbc.odbc.JdbcOdbcDriver ha si do escr i t a de f or ma que al car gar l a cr ea una
i nst anci a de el l a y l l ama a DriverManager.registerDriver con esa i nst anci a como par met r o y
ent onces es aadi da a l a l i st a de dr i ver s de DriverManager y est di sponi bl e par a cr ear una conexi n a
una base de dat os.
Fi gura 8. 2. Rel aci n ent re l as pri nci pal es cl ases e i nt erf ace en el paquet e java.sql
8.2.3. Connect i on
Un obj et o Connection r epr esent a una conexi n a una base de dat os. Una sesi n con una conexi n
i ncl uye l as sent enci as SQL que son ej ecut adas y l os r esul t ados que son devuel t os a t r avs de di cha
conexi n. Una mi sma apl i caci n puede t ener una o ms conexi ones con una sol a base de dat os o puede
t ener conexi ones con var i as bases de dat os di f er ent es.
La f or ma est ndar de est abl ecer una conexi n con una base de dat os es l l amando al mt odo
DriverManager.getConnection. Est e mt odo t oma como par met r o una cadena de car act er es que
cont i ene una URL. La cl ase DriverManage t r at a de l ocal i zar el dr i ver que pueda conect ar con l a base de
dat os r epr esent ada por esa URL.
El si gui ent e cdi go ej empl i f i ca cmo abr i r una conexi n a una base de dat os l ocal i zada en l a URL
jdbc:odbc:wombat :
String url = jdbc:odbc:wombat;
Connection con = DriverManager.getConnection(url);
Una URL de JDBC f aci l i t a una f or ma de i dent i f i car una base de dat os de f or ma que el dr i ver apr opi ado
l a r econozca y est abl ezca una conexi n con el l a. La si nt axi s est ndar par a URLs de JDBC es l a si gui ent e:
jdbc:<subprotocolo>:<subnombre>
Una URL de JDBC t i ene t r es par t es separ adas por dos punt os:
jdbc es el pr ot ocol o. El pr ot ocol o en una URL JDBC es si empr e jdbc.
subcl asses
subcl asses
Connect i on
Cal l abl eSt at ement PreparedSt at ement St at ement
Resul t Set
Dat a Types
cr eat eSt at ement
pr epar eSt at ement pr epar eCal l
execut eQuer y
execut eQuer y
execut eQuer y
get XXX
get Mor eResul t s
get Resul t Set
78 Informtica III

<subprotocolo> es usual ment e el dr i ver o el mecani smo de conect i vi dad de l a base de dat os, el cual debe
ser sopor t ado por uno o ms dr i ver s. Un ej empl o de un subpr ot ocol o es odbc, que ha si do r eser vado par a
URLs que especi f i can f uent es de dat os de ODBC. Por ej empl o, par a acceder a una base de dat os a t r avs
del Puent e JDBC-ODBC se usar una URL como l a si gui ent e:
jdbc:odbc:fred
donde el subpr ot ocol o es odbc y el subnombr e es fred, una f uent e de dat os ODBC.
<subnombre> es una f or ma de i dent i f i car l a base de dat os. Puede var i ar dependi endo del subpr ot ocol o y
puede t ener un subsubnombr e con cual qui er si nt axi s i nt er na que el pr ogr amador del dr i ver haya el egi do.
La f unci n del <subnombre> es dar l a suf i ci ent e i nf or maci n par a l ocal i zar l a base de dat os.
8.2.4. St at ement
Un obj et o Statement se usa par a envi ar sent enci as SQL a una base de dat os. Una vez que se ha
est abl eci do una conexi n con una base de dat os par t i cul ar , esa conexi n puede ser usada par a envi ar
sent enci as SQL. Un obj et o Statement se cr ea con el mt odo creatStatement de Connection como
en el si gui ent e f r agment o de cdi go:
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
La sent enci a SQL que ser envi ada a l a base de dat os es pr opor ci onada como ar gument o a uno de l os
mt odos par a ej ecut ar un obj et o Statement:
ResultSet rs = stmt.executeQuery(SELECT a, b, c FROM Table2);
8.2.5. Resul t Set
Un ResultSet cont i ene t odos l os r egi st r os (f i l as) que sat i sf acen l as condi ci ones i mpuest as en una
sent enci a SQL y pr opor ci ona acceso a l os dat os en di chos r egi st r os a t r avs de un conj unt o de mt odos
get que per mi t en acceder a l os di f er ent es campos o at r i but os (col umnas) del r egi st r o act ual . Un
ResultSet mant i ene un cur sor que apunt a al r egi st r o act ual . El mt odo ResultSet.next() se usa par a
mover se al si gui ent e r egi st r o del ResultSet, haci endo el si gui ent e r egi st r o el r egi st r o act ual .
Los mt odos get XXX pr opor ci onan l os medi os par a obt ener l os val or es de l os campos, at r i but os o
col umnas del r egi st r o act ual . Par a cada r egi st r o, l os val or es de l as col umnas pueden ser obt eni dos en
cual qui er or den, per o par a l a mayor por t abi l i dad, se debe hacer de i zqui er da a der echa y l eer el val or de
l a col umna sl o una vez. Tant o el nombr e de l a col umna como el nmer o de est a puede ser usado par a
desi gnar l a col umna de l a cual se qui er e obt ener el val or . Si en el ej empl o ant er i or l a col umna a es de
t i po ent er o, l a b del t i po cadena de car act er es y l a c de t i po coma f l ot ant e, l a si gui ent e por ci n de
cdi go i mpr i mi r a l os val or es de t odos l os r egi st r os:
while(rs.next()){
int i = rs.getInt(a);
String s = rs.getString(b);
Float f = rs.getFloat(c);
System.out.println(ROW= + i + + s + + f);
}
8. 3. Empezando con JDBC
Medi ant e unos ej empl os vamos a i nt r oduci r nos en l a ut i l i zaci n de l a API de JDBC. Par a acceder a l a
base de dat os vamos a ut i l i zar el Puent e JDBC- ODBC sumi ni st r ado j unt o al Java Sof t war e Devel opment Ki t .
Pr i mer ament e, vamos a cr ear una base de dat os t i po Access a l a cual acceder emos y un DSN (Dat a
Sour ce Name) en ODBC de conexi n a di cha base de dat os. El DSN ser necesar i o par a que el dr i ver
l ocal i ce l a base de dat os.
8.3.1. Base de dat os en f or mat o Access
Supongamos que hemos cr eado una base de dat os en Access con el nombr e Li bros.mdb (l as bases de
dat os en f or mat o Access t i enen ext ensi n *. mdb) que cont i ene una t abl a denomi nada Dat os que t i ene
como campos: Codi go, Ti t ul o y Aut or, t odos el l os de t i po t ext o. Adems hemos r el l enado l a t abl a con
dat os de l i br os.
Captulo 8. JDBC: acceso a bases de datos 79


Fi gura 8. 3. Forma de present ar l as t abl as de Mi crosof t Access
8.3.2. Cr eaci n de un Dat a Sour ce Name (DSN)
Un Dat a Sour ce Name (DSN) en ODBC es una Fuent e de Dat os de ODBC, que nos i ndi ca el t i po y l a
l ocal i zaci n de l a base de dat os par a que ms t ar de podamos acceder a el l a medi ant e el Puent e JDBC-
ODBC desde nuest r o pr ogr ama en Java, l o cual si mpl i f i ca enor mement e l a conexi n, que queda en manos
del dr i ver .
La cr eaci n de un DSN var a segn l os si st emas. Nosot r os vamos a ver cmo se cr ea en un si st ema
Wi ndows. Los pasos a segui r son l os si gui ent es:
Abr i r el admi ni st r ador de ODBC desde el Cont r ol Panel (St ar t / Set t i ngs) o medi ant e St ar t / Run. . . y
ej ecut ando odbcad32 . En Wi ndows 2000 se encuent r a en Cont r ol Panel / Admi ni st r at i ve Tool s/ Dat a
Sour ces (DSN) . En l as sal as de or denador es habr que buscar el ej ecut abl e con el expl or ador
(C: \ Wi nNT\ Syst em32\ Odbcad32. exe) y ej ecut ar l o haci endo dobl e cl i c sobr e l .
Aadi r un nuevo Dat a Sour ce Name (DSN) medi ant e el bot n Add y sel ecci onar el dr i ver de Mi cr osof t
Access en l a si gui ent e vent ana.
Dar un nombr e al DSN (en est e caso pr uebaODBC) y pul sando el bot n Sel ect asi gnar l e l a base de dat os
que se ha cr eado ant er i or ment e ( Li br os.mdb) .
El pr oceso compl et o de cr eaci n de un DSN se puede ver en l a f i gur a 6. 4.
8.3.3. Ej empl o de una apl i caci n JDBC si mpl e
Est e pr i mer ej empl o t i ene como obj et i vo most r ar l a ut i l i zaci n del paquet e java.sql y r eal i za un
pr oceso compl et o de r egi st r ar el Puent e JDBC-ODBC, cr ear una conexi n a una base de dat os t i po Access a
t r avs de di cho dr i ver , envi ar una sent enci a SQL a l a base de dat os a t r avs de di cha conexi n y por
l t i mo l eer y most r ar l os r esul t ados de l a consul t a SQL.
El pr ogr ama r eci be como pr i mer ar gument o el Dat a Sour ce Name ( DSN) de ODBC que hemos cr eado
ant es, l a sent enci a SQL ent r e comi l l as que quer emos envi ar a l a base de dat os como segundo ar gument o y
despus como ar gument os t er cer o, cuar t o, et c. , l os nombr e de l os campos que quer emos que nos muest r e
al i mpr i mi r l os r egi st r os obt eni dos de l a base de dat os.
Una vez escr i t o el pr ogr ama en un edi t or de t ext o y despus de haber l o guar dado con el nombr e
f i r st JDBC. j ava, debemos compi l ar l o con l a i nst r ucci n ya f ami l i ar :
javac firstJDBC.java
Par a ej ecut ar l o, l a i nst r ucci n que debemos usar t i ene l a si gui ent e f or ma:
java firstJDBC DataSourceName "Sentencia SQL" [Campo1 Campo2 ...]

80 Informtica III




Fi gura 8. 4. Proceso de creaci n de un DSN
Los cor chet es i ndi can que se t r at a de ar gument os opci onal es. Pr obemos a pasar l e como par met r os
di st i nt as sent enci as SQL par a i r nos f ami l i ar i zando con el uso del SQL:
java firstJDBC pruebaODBC SELECT * FROM Datos ORDER BY Codigo Codigo Titulo Autor
La sal i da ser l a si gui ent e:
C001|La estructura de las revoluciones cientficas|Thomas S. Kuhn
C002|Sobre la teora de la relatividad especial y general|Albert Einstein
C003|Historia del tiempo|Stephen W. Hawking
C004|La nueva mente del Emperador|Roger Penrose
C005|Killing Time|Paul Feyerabend
N001|El perfume|Patrick Sskind
N002|Orgullo y prejuicio|Jane Austen
N003|El pndulo de Foucault|Umberto Eco
N004|El Proceso|Franz Kafka
N005|Baudolino|Umberto Eco
...
Una sent enci a SQL un poco ms compl ej a i nvol ucr a sel ecci n de r egi st r os que cumpl an condi ci ones en
al guno de sus campos, como es el caso si gui ent e, que sel ecci ona t odos l os r egi st r os cuyo cdi go empi ece
por l a l et r a C :
java firstJDBC pruebaODBC SELECT * FROM Datos WHERE Codigo Like C% ORDER
BY Autor Codigo Tirulo Autor
La sal i da ser l a si gui ent e:
C002|Sobre la teora de la relatividad especial y general|Albert Einstein
C005|Killing Time|Paul Feyerabend
C004|La nueva mente del Emperador|Roger Penrose
C003|Historia del tiempo|Stephen W. Hawking
C001|La estructura de las revoluciones cientficas|Thomas S. Kuhn

Captulo 8. JDBC: acceso a bases de datos 81

Ej empl o 1:
import java.sql.*;
class firstJDBC {
public static void main(String args[]) throws ClassNotFoundException,
SQLException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url="jdbc:odbc:" + args[0];
Connection connection=DriverManager.getConnection(url);
Statement statement=connection.createStatement();
String sql = args[1];
ResultSet result=statement.executeQuery(sql);
while(result.next()) {
for(int i=2;i<args.length;++i) {
if(i<args.length-1)
System.out.print (result.getString(args[i])+"|");
else
System.out.println (result.getString(args[i]));
}
}
connection.close();
}
}
8.3.4. Ej empl o de una apl i caci n JDBC con excepci ones y Met aDat a
El si gui ent e ej empl o i nt r oduce ms f unci onal i dades al ej empl o ant er i or . Una de el l as es que se pueden
conocer l as car act er st i cas de l os campos que l a base de dat os devuel ve a par t i r de una sent enci a SQL en
un obj et o ResultSet. La ot r a car act er st i ca aadi da es el manej o de excepci ones.
Par a ej ecut ar est e segundo ej empl o ms el abor ado, l a i nst r ucci n que debemos usar t i ene l a si gui ent e
f or ma:
java Resul t AppSQL DataSourceName "Sentencia SQL"
Como se puede ver ya no es necesar i o pasar como ar gument os l os campos que quer emos que se
muest r en. Di chos campos ya vi enen expl ci t ament e en l a sent enci a SQL que l e pasamos a l a base de dat os
y, a di f er enci a del ej empl o 1, hemos dot ado al pr ogr ama de l a capaci dad par a r econocer di chos campos y
most r ar l os con su nombr e. Todo est o es posi bl e gr aci as a l a i nt er f ace ResultSetMetaData, de l a API de
JDBC.
Pr obemos est e nuevo pr ogr ama, pues, con l a si gui ent e sent enci a y t r at emos de ent ender l o que est
haci endo el pr ogr ama (es muy r ecomendabl e t ener pr esent e l a ayuda de l a API de Java donde t ambi n
encont r ar emos l as cl ases cor r espondi ent es a JDBC) :
java ResultAppSQL pruebaODBC SELECT * FROM Datos WHERE Codigo Like C%
ORDER BY Autor
La sal i da en est e caso ser l a si gui ent e:
Codigo|Titulo|Autor
C002|Sobre la teora de la relatividad especial y general|Albert Einstein
C005|Killing Time|Paul Feyerabend
C004|La nueva mente del Emperador|Roger Penrose
C003|Historia del tiempo|Stephen W. Hawking
C001|La estructura de las revoluciones cientficas|Thomas S. Kuhn
Adems, hemos dot ado al pr ogr ama de l a capaci dad par a manej ar excepci ones l anzadas por l as cl asses
de l a API de JDBC, de t al f or ma que cuando se pr oduzca una excepci n, el pr ogr ama most r ar un mensaj e
como el si gui ent e:
Er ror de SQLExcept i on: Text o expl i cat i vo de l a excepci n (l anzado por Java)
82 Informtica III


Ej empl o 2:
import java.sql.*;
class ResultAppSQL {
public static void main(String args[]) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ex) {
System.out.println("Error de ClassNotFoundException" + ex);
System.exit(0);
}
String url="jdbc:odbc:" + args[0];
try {
Connection connection=DriverManager.getConnection(url);
Statement statement=connection.createStatement();
String sql = args[1];
ResultSet result=statement.executeQuery(sql);
ResultSetMetaData rmeta=result.getMetaData();
int numColumns=rmeta.getColumnCount();
for(int i=1;i<=numColumns;++i) {
if(i<numColumns)
System.out.print(rmeta.getColumnName(i)+"|");
else
System.out.println(rmeta.getColumnName(i));
}
while(result.next()) {
for(int i=1;i<=numColumns;++i) {
if(i<numColumns)
System.out.print
(result.getString(rmeta.getColumnName(i))+"|");
else
System.out.println
(result.getString(rmeta.getColumnName(i)));
}
}
connection.close();
}
catch(SQLException ex) {
System.out.println("Error de SQLException:" + ex);
System.exit(0);
}
}
}
De est a f or ma, cuando se i nt r oduce una sent enci a SQL er r nea, el pr ogr ama most r ar un avi so que nos
di r qu es l o que est pasando. Bi en, pr obemos l as si gui ent es sent enci a:
java ResultAppSQL pruebaODBC " "
La r espuest a del pr ogr ama ser l a si gui ent e:
Error de SQLException:java.sql.SQLException: [Microsoft][ODBC Microsoft
Access Driver] Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE',
'SELECT', or 'UPDATE'.
Captulo 8. JDBC: acceso a bases de datos 83

Int r oduzcamos un er r or en l a pr opi a sent enci a SQL, una t abl a que no exi st e:
C:\tmp\JDBC>java ResultAppSQL pruebaODBC "SELECT * FROM OtraTabla"
La r espuest a del pr ogr ama en est e caso ser :
Error de SQLException:java.sql.SQLException: [Microsoft][ODBC Microsoft
Access Driver] The Microsoft Jet database engine cannot find the input table or
query 'OtraTabla'. Make sure it exists and that its name is spelled correctly.
Int r oduzcamos ot r o er r or en l a pr opi a sent enci a SQL, concer ni ent e a un campo i nexi st ent e:
C:\tmp\JDBC>java ResultAppSQL pruebaODBC "SELECT Precio FROM Datos"
La r espuest a del pr ogr ama en est e caso ser :
Error de SQLException:java.sql.SQLException: [Microsoft][ODBC Microsoft
Access Driver] Too few parameters. Expected 1.


CAPTULO 9
9. Servl et s
9. 1. Cl i ent es y Ser vi dores
9.1.1. Cl i ent es (cl i ent s)
Por su ver sat i l i dad y pot enci al i dad, en l a act ual i dad l a mayor a de l os usuar i os de Int er net ut i l i zan en
sus comuni caci ones con l os ser vi dor es de dat os, l os br owser s o navegador es. Est o no si gni f i ca que no
puedan empl ear se ot r o t i po de pr ogr amas como cl i ent es e-mai l , news, et c. par a apl i caci ones ms
especf i cas. De hecho, l os br owser s ms ut i l i zados i ncor por an l ect or es de mai l y de news.
En l a act ual i dad l os br owser s ms ext endi dos son Net scape Communi cat or y Mi cr osof t Int er net
Expl or er . Ambos acapar an una cuot a de mer cado que cubr e pr ct i cament e a t odos l os usuar i os.
A pesar de que ambos cumpl en con l a mayor a de l os est ndar es acept ados en l a Int er net , cada uno de
el l os pr opor ci ona sol uci ones adi ci onal es a pr obl emas ms especf i cos. Por est e mot i vo, muchas veces ser
necesar i o t ener en cuent a qu t i po de br owser se va a comuni car con un ser vi dor , pues el r esul t ado puede
ser di st i nt o dependi endo del br owser empl eado, l o cual puede dar l ugar a er r or es.
Ambos br owser s sopor t an Java, l o cual i mpl i ca que di sponen de una Java Vi r t ual Machi ne en l a que
se ej ecut an l os f i cher os *.cl ass de l as Appl et s que t r aen a t r avs de Int er net . Net scape es ms f i el al
est ndar de Java t al y como l o def i ne Sun, per o ambos t i enen l a posi bi l i dad de sust i t ui r l a Java Vi r t ual
Machi ne por medi o de un mecani smo def i ni do por Sun, que se l l ama Java Pl ug-i n (l os pl ug-i ns son
apl i caci ones que se ej ecut an cont r ol adas por l os br owser s y que per mi t en ext ender sus capaci dades, por
ej empl o par a sopor t ar nuevos f or mat os de audi o o vi deo) .
9.1.2. Ser vi dor es (ser ver s)
Los ser vi dor es son pr ogr amas que se encuent r an per manent ement e esper ando a que al gn ot r o
or denador r eal i ce una sol i ci t ud de conexi n. En un mi smo or denador es posi bl e t ener si mul t neament e
ser vi dor es de l os di st i nt os ser vi ci os ant er i or ment e menci onados (HTTP, FTP, TELNET, et c. ) . Cuando a
di cho or denador l l ega un r equer i mi ent o de ser vi ci o envi ado por ot r o or denador de l a r ed, se i nt er pr et a el
t i po de l l amada, y se pasa el cont r ol de l a conexi n al ser vi dor cor r espondi ent e a di cho r equer i mi ent o. En
caso de no t ener el ser vi dor adecuado par a r esponder a l a comuni caci n, est ser r echazada.
Como ya se ha apunt ado, no t odos l os ser vi ci os act an de i gual maner a. Al gunos, como TELNET y FTP,
una vez est abl eci da l a conexi n, l a mant i enen hast a que el cl i ent e o el ser vi dor expl ci t ament e l a cor t an.
Por ej empl o, cuando se est abl ece una conexi n con un ser vi dor de FTP, l os dos or denador es se mant i enen
en cont act o hast a que el cl i ent e ci er r e l a conexi n medi ant e el comando cor r espondi ent e ( qui t , exi t , )
o pase un t i empo est abl eci do en l a conf i gur aci n del ser vi dor FTP o del pr opi o cl i ent e, si n ni nguna
act i vi dad ent r e ambos.
La comuni caci n a t r avs del pr ot ocol o HTTP es di f er ent e, ya que es necesar i o est abl ecer una
comuni caci n o conexi n di st i nt a par a cada el ement o que se desea l eer . Est o si gni f i ca que en un
document o HTML con 10 i mgenes son necesar i as 11 conexi ones di st i nt as con el ser vi dor HTTP, est o es,
una par a el t ext o del document o HTML con l as t ags y l as ot r as 10 par a t r aer l as i mgenes r ef er enci adas en
el document o HTML.
La mayor a de l os usuar i os de Int er net son cl i ent es que acceden medi ant e un br owser a l os di st i nt os
ser vi dor es WWW pr esent es en l a r ed. El ser vi dor no per mi t e acceder i ndi scr i mi nadament e a t odos sus
f i cher os, si no ni cament e a det er mi nados di r ect or i os y document os pr evi ament e est abl eci dos por el
admi ni st r ador de di cho ser vi dor .
86 Informtica III

9. 2. Tendenci as Act ual es para l as apl i caci ones en Int ernet
En l a act ual i dad, l a mayor a de apl i caci ones que se ut i l i zan en ent or nos empr esar i al es est n
const r ui dos en t or no a una ar qui t ect ur a cl i ent e-ser vi dor , en l a cual uno o var i os comput ador es
(gener al ment e de una pot enci a consi der abl e) son l os ser vi dor es, que pr opor ci onan ser vi ci os a un nmer o
mucho ms gr ande de cl i ent es conect ados a t r avs de l a r ed. Los cl i ent es suel en ser PCs de pr opsi t o
gener al , de or di nar i o menos pot ent es y ms or i ent ados al usuar i o f i nal . A veces l os ser vi dor es son
i nt er medi ar i os ent r e l os cl i ent es y ot r os ser vi dor es ms especi al i zados (por ej empl o l os gr andes ser vi dor es
de bases de dat os cor por at i vos basados en mai nf r ames y/ o si st emas Uni x. En est a caso se habl a se
apl i caci ones de var i as capas).
Con el auge de Int er net , l a ar qui t ect ur a cl i ent e-ser vi dor ha adqui r i do una mayor r el evanci a, ya que l a
mi sma es el pr i nci pi o bsi co de f unci onami ent o de l a Wor l d Wi de Web: un usuar i o que medi ant e un
br owser (cl i ent e) sol i ci t a un ser vi ci o ( pgi nas HTML, et c. ) a un comput ador que hace l as veces de
ser vi dor . En su concepci n ms t r adi ci onal , l os ser vi dor es HTTP se l i mi t aban a envi ar una pgi na HTML
cuando el usuar i o l a r equer a di r ect ament e o cl i caba sobr e un enl ace. La i nt er act i vi dad de est e pr oceso
er a mni ma, ya que el usuar i o poda pedi r f i cher os, per o no envi ar sus dat os per sonal es de modo que
f uer an al macenados en el ser vi dor u obt uvi er a una r espuest a per sonal i zada. La Fi gur a 9. 1 r epr esent a
gr f i cament e est e concept o.
Desde esa pr i mer a concepci n del ser vi dor HTTP como mer o ser vi dor de f i cher os HTML el concept o ha
i do evol uci onando en dos di r ecci ones compl ement ar i as:
1. Aadi r ms i nt el i genci a en el ser vi dor , y
2. Aadi r ms i nt el i genci a en el cl i ent e.
Las f or mas ms ext endi das de aadi r i nt el i genci a a l os cl i ent es (a l as pgi nas HTML) han si do
Javascr i pt y l as appl et s de Java. Javascr i pt es un l enguaj e r el at i vament e senci l l o, i nt er pr et ado, cuyo
cdi go f uent e se i nt r oduce en l a pgi na HTML por medi o de l os t ags <SCRIPT> </ SCRIPT>. Las appl et s
de Java t i enen mucha ms capaci dad de aadi r i nt el i genci a a l as pgi nas HTML que se vi sual i zan en el
br owser , ya que son ver dader as cl ases de Java (f i cher os *.cl ass) que se car gan y se ej ecut an en el
cl i ent e.
De car a a est os apunt es t i enen mucho ms i nt er s l os cami nos segui dos par a aadi r ms i nt el i genci a en
el ser vi dor HTTP. La pr i mer a y ms empl eada t ecnol oga ha si do l a de l os pr ogr amas CGI (Common
Gat eway Int er f ace) , uni da a l os f or mul ar i os HTML.
Los f or mul ar i os HTML per mi t en de al guna maner a i nver t i r el sent i do del f l uj o de l a i nf or maci n.
Cumpl i ment ando al gunos campos con caj as de t ext o, bot ones de opci n y de sel ecci n, el usuar i o puede
def i ni r sus pr ef er enci as o envi ar sus dat os al ser vi dor . Cuando en un f or mul ar i o HTML se pul sa en el bot n
Envi ar (o nombr e equi val ent e, como Submi t ) l os dat os t ecl eados por el cl i ent e se envan al ser vi dor par a
su pr ocesami ent o.
Cmo r eci be el ser vi dor l os dat os de un f or mul ar i o y qu hace con el l os? st e es el pr obl ema que
t r adi ci onal ment e han r esuel t o l os pr ogr amas CGI. Cada f or mul ar i o l l eva i ncl ui do un campo l l amado
Act i on con el que se asoci a el nombr e de pr ogr ama en el ser vi dor . El ser vi dor ar r anca di cho pr ogr ama y l e
pasa l os dat os que han l l egado con el f or mul ar i o. Exi st en dos f or mas pr i nci pal es de pasar l os dat os del
f or mul ar i o al pr ogr ama CGI:
Cl i ent e Ser vi dor
Solicit a fichero HTML
Proporciona fichero HTML

Fi gur a 9. 1. Ar qui t ect ur a cl i ent e-ser vi dor t r adi ci onal .
Captulo 9. Servlets 87

1. Por medi o de una var i abl e de ent or no del si st ema oper at i vo del ser vi dor , de t i po St r i ng ( mt odo
GET)
2. Por medi o de un f l uj o de car act er es que l l ega a t r avs de l a ent r ada est ndar ( st di n o Syst em. i n) ,
que de or di nar i o est asoci ada al t ecl ado (mt odo POST).
En ambos casos, l a i nf or maci n i nt r oduci da por el usuar i o en el f or mul ar i o l l ega en l a f or ma de una
ni ca cadena de car act er es en l a que el nombr e de cada campo del f or mul ar i o se asoci a con el val or
asi gnado por el usuar i o, y en l a que l os bl ancos y ci er t os car act er es especi al es se han sust i t ui do por
secuenci as de car act er es de acuer do con una det er mi nada codi f i caci n. Ms adel ant e se ver n con ms
det eni mi ent o l as r egl as que gobi er nan est a t r ansmi si n de i nf or maci n. En cual qui er caso, l o pr i mer o que
t i ene que hacer el pr ogr ama CGI es decodi f i car est a i nf or maci n y separ ar l os val or es de l os di st i nt os
campos. Despus ya puede r eal i zar su t ar ea especf i ca: escr i bi r en un f i cher o o en una base de dat os,
r eal i zar una bsqueda de l a i nf or maci n sol i ci t ada, r eal i zar compr obaci ones, et c. De or di nar i o, el
pr ogr ama CGI t er mi na envi ando al cl i ent e (el navegador desde el que se envi el f or mul ar i o) una pgi na
HTML en l a que l e i nf or ma de l as t ar eas r eal i zadas, l e avi sa de si se ha pr oduci do al guna di f i cul t ad, l e
r ecl ama al gn dat o pendi ent e o mal cumpl i ment ado, et c. La f or ma de envi ar est a pgi na HTML al cl i ent e
es a t r avs de l a sal i da est ndar ( st duot o Syst em. out ) , que de or di nar i o suel e est ar asoci ada a l a
pant al l a. La pgi na HTML t i ene que ser const r ui da el ement o a el ement o, de acuer do con l as r egl as de
est e l enguaj e. No bast a envi ar el cont eni do: hay que envi ar t ambi n t odas y cada una de l as t ags. En un
pr xi mo apar t ado se ver un ej empl o compl et o.
En pr i nci pi o, l os pr ogr amas CGI pueden est ar escr i t os en cual qui er l enguaj e de pr ogr amaci n, aunque
en l a pr ct i ca se han ut i l i zado pr i nci pal ment e l os l enguaj es Per l
2
y C/ C++. Un cl ar o ej empl o de un
pr ogr ama CGI ser a el de un f or mul ar i o en el que el usuar i o i nt r oduj er a sus dat os per sonal es par a
r egi st r ar se en un si t i o web. El pr ogr ama CGI r eci bi r a l os dat os del usuar i o, i nt r oduci ndol os en l a base de
dat os cor r espondi ent e y devol vi endo al usuar i o una pgi na HTML donde se l e i nf or mar a de que sus dat os
haban si do r egi st r ados. La Fi gur a 9. 2 muest r a el esquema bsi co de f unci onami ent o de l os pr ogr amas
CGI.
Es i mpor t ant e r esal t ar que est os pr ocesos t i enen l ugar en el ser vi dor . Est o a su vez puede r esul t ar un
pr obl ema, ya que al t ener ml t i pl es cl i ent es conect ados al ser vi dor , el pr ogr ama CGI puede est ar si endo
l l amado si mul t neament e por var i os cl i ent es, con el r i esgo de que el ser vi dor se l l egue a sat ur ar . Tngase
en cuent a que cada vez que se r eci be un r equer i mi ent o se ar r anca una nueva copi a del pr ogr ama CGI.
Exi st en ot r os r i esgos adi ci onal es que se est udi ar n ms adel ant e.
El obj et i vo de est e capt ul o es el est udi o de l a al t er nat i va que Java of r ece a l os pr ogr amas CGI: l os
ser vl et s, que son a l os ser vi dor es l o que l os appl et s a l os br owser s. Se podr a def i ni r un ser vl et como un
pr ogr ama escr i t o en Java que se ej ecut a en el mar co de un ser vi ci o de r ed, (un ser vi dor HTTP, por
ej empl o), y que r eci be y r esponde a l as pet i ci ones de uno o ms cl i ent es.

2
PERL es un l enguaj e i nt er pr et ado pr ocedent e del ent or no Uni x (aunque t ambi n exi st e en Wi ndows
NT) , con gr andes capaci dades par a manej ar t ext o y cadenas de car act er es.
Soli cit a ser vi cio ( con un
for mulario, et c. )
Propor ciona r esult ado
como fl uj o con format o
HTML
Fluj o de
ent rada
Fluj o de
salida
Cl i ent e Ser v i dor
Pr oceso
i nt er no en
el ser v i dor
( ser v l et ,
CGI , et c)

Fi gur a 9. 2. Ar qui t ect ur a cl i ent e-ser vi dor i nt er act i va par a l a WEB.
88 Informtica III

9. 3. Di f er enci as ent r e l as t ecnol ogas CGI y Servl et
La t ecnol oga Ser vl et pr opor ci ona l as mi smas vent aj as del l enguaj e Java en cuant o a por t abi l i dad
( wr i t e once, r un anywher e ) y segur i dad, ya que un ser vl et es una cl ase de Java i gual que cual qui er
ot r a, y por t ant o t i ene en ese sent i do t odas l as car act er st i cas del l enguaj e. Est o es al go de l o que car ecen
l os pr ogr amas CGI, ya que hay que compi l ar l os par a el si st ema oper at i vo del ser vi dor y no di sponen en
muchos casos de t cni cas de compr obaci n di nmi ca de er r or es en t i empo de ej ecuci n.
Ot r a de l as pr i nci pal es vent aj as de l os ser vl et s con r espect o a l os pr ogr amas CGI, es l a del
r endi mi ent o, y est o a pesar de que Java no es un l enguaj e par t i cul ar ment e r pi do. Mi ent r as que l os es
necesar i o car gar l os pr ogr amas CGI t ant as veces como pet i ci ones de ser vi ci o exi st an por par t e de l os
cl i ent es, l os ser vl et s, una vez que son l l amados por pr i mer a vez, quedan act i vos en l a memor i a del
ser vi dor hast a que el pr ogr ama que cont r ol a el ser vi dor l os desact i va. De est a maner a se mi ni mi za en
gr an medi da el t i empo de r espuest a.
Adems, l os ser vl et s se benef i ci an de l a gr an capaci dad de Java par a ej ecut ar mt odos en
or denador es r emot os, par a conect ar con bases de dat os, par a l a segur i dad en l a i nf or maci n, et c. Se
podr a deci r que l as cl ases est ndar de Java of r ecen r esuel t os mucho pr obl emas que con ot r os l enguaj es
t i ene que r esol ver el pr ogr amador .
9. 4. Caract erst i cas de l os ser vl et s
Adems de l as car act er st i cas i ndi cadas en el apar t ado ant er i or , l os ser vl et s t i enen l as si gui ent es
car act er st i cas:
1. Son i ndependi ent es del ser vi dor ut i l i zado y de su si st ema oper at i vo, l o que qui er e deci r que a pesar
de est ar escr i t os en Java, el ser vi dor puede est ar escr i t o en cual qui er l enguaj e de pr ogr amaci n,
obt eni ndose exact ament e el mi smo r esul t ado que si l o est uvi er a en Java.
2. Los ser vl et s pueden l l amar a ot r os ser vl et s, e i ncl uso a mt odos concr et os de ot r os ser vl et s. De
est a f or ma se puede di st r i bui r de f or ma ms ef i ci ent e el t r abaj o a r eal i zar . Por ej empl o, se podr a
t ener un ser vl et encar gado de l a i nt er acci n con l os cl i ent es y que l l amar a a ot r o ser vl et par a que
a su vez se encar gar a de l a comuni caci n con una base de dat os. De i gual f or ma, l os ser vl et s
per mi t en r edi r ecci onar pet i ci ones de ser vi ci os a ot r os ser vl et s (en l a mi sma mqui na o en una
mqui na r emot a) .
3. Los ser vl et s pueden obt ener f ci l ment e i nf or maci n acer ca del cl i ent e ( l a per mi t i da por el
pr ot ocol o HTTP), t al como su di r ecci n IP, el puer t o que se ut i l i za en l a l l amada, el mt odo
ut i l i zado (GET, POST, . . . ), et c.
4. Per mi t en adems l a ut i l i zaci n de cooki es y sesi ones, de f or ma que se puede guar dar i nf or maci n
especf i ca acer ca de un usuar i o det er mi nado, per sonal i zando de est a f or ma l a i nt er acci n cl i ent e-
ser vi dor . Una cl ar a apl i caci n es mant ener l a sesi n con un cl i ent e.
5. Los ser vl et s pueden act uar como enl ace ent r e el cl i ent e y una o var i as bases de dat os en
ar qui t ect ur as cl i ent e-ser vi dor de 3 capas (si l a base de dat os est en un ser vi dor di st i nt o).
6. Asi mi smo, pueden r eal i zar t ar eas de pr oxy par a un appl et . Debi do a l as r est r i cci ones de
segur i dad, un appl et no puede acceder di r ect ament e por ej empl o a un ser vi dor de dat os l ocal i zado
en cual qui er mqui na r emot a, per o el ser vl et s puede hacer l o de su par t e.
7. Al i gual que l os pr ogr amas CGI, l os ser vl et s per mi t en l a gener aci n di nmi ca de cdi go HTML
dent r o de una pr opi a pgi na HTML. As, pueden empl ear se ser vl et s par a l a cr eaci n de
cont ador es, banner s, et c.
9. 5. JSDK 2. 0
El JSDK (Java Ser vl et Devel oper Ki t ), di st r i bui do gr at ui t ament e por Sun, pr opor ci ona el conj unt o de
her r ami ent as necesar i as par a el desar r ol l o de ser vl et s. Su i nst al aci n se r eal i za a t r avs de un f i cher o de
950 Kbyt es, l l amado j sdk20-Wi n32.exe, que est di sponi bl e en l a zona de r ecur sos de l a web l a
asi gnat ur a. El JSDK const a bsi cament e de 3 par t es:
1. El API del JSDK, que se encuent r a di seada como una ext ensi n del JDK pr opi ament e di cho.
Const a de dos packages cuyo f unci onami ent o ser est udi ado en det al l e en apar t ados post er i or es, y
que se encuent r an cont eni dos en j avax. ser vl et y j avax.ser vl et .ht t p. Est e l t i mo es una
par t i cul ar i zaci n del pr i mer o par a el caso del pr ot ocol o HTTP, que es el que ser ut i l i zado en est e
manual , al ser el ms ext endi do en l a act ual i dad. Medi ant e est e di seo l o que se consi gue es que
Captulo 9. Servlets 89

se mant enga una puer t a abi er t a a l a ut i l i zaci n de ot r os pr ot ocol os que exi st en en l a act ual i dad
(FTP, POP, SMTP, et c. ), o vayan si endo ut i l i zados en el f ut ur o. Est os packages est n al macenados
en un f i cher o JAR (\ l i b\ j sdk. j ar ).
2. La document aci n pr opi ament e di cha del API y el cdi go f uent e de l as cl ases (si mi l ar a l a de l os
JDK 1.1 y 1.2) .
3. La apl i caci n ser vl et r unner , que es una si mpl e ut i l i dad que per mi t e pr obar l os ser vl et s cr eados
si n necesi dad de hacer compl ej as i nst al aci ones de ser vi dor es HTTP. . Es si mi l ar en concepci n al
appl et vi ewer del JDK. Su ut i l i zaci n ser descr i t a en un apar t ado post er i or .
9.5.1. Vi si n gener al del API de JSDK 2.0
Es i mpor t ant e adqui r i r cuant o ant es una vi si n gener al del API (Appl i cat i on Pr ogr ammi ng Int er f ace) del
Java Ser vl et Devel opment Ki t 2.0, de qu cl ases e i nt er f aces l a const i t uyen y de cul es l a r el aci n
ent r e el l as.
El JSDK 2.0 cont i ene dos paquet es: j avax. ser vl et y j avax.ser vl et .ht t p. Todas l as cl ases e i nt er f aces
que hay que ut i l i zar en l a pr ogr amaci n de ser vl et s est n en est os dos paquet es.
La r el aci n ent r e l as cl ases e i nt er f aces de Java, muy det er mi nada por el concept o de her enci a, se
ent i ende mucho mej or medi ant e una r epr esent aci n gr f i ca t al como l a que puede ver se en l a Fi gur a 9. 3.
En di cha f i gur a se r epr esent an l as cl ases con l et r a nor mal y l as i nt er f aces con cur si va.
La cl ase Gener i cSer vl et es una cl ase abst r act puest o que su mt odo ser vi ce() es abst r act . Est a cl ase
i mpl ement a dos i nt er f aces, de l as cual es l a ms i mpor t ant e es l a i nt er f ace Ser vl et .
La i nt er f ace Ser vl et decl ar a l os mt odos ms i mpor t ant es de car a a l a vi da de un ser vl et : i ni t () que se
ej ecut a sl o al ar r ancar el ser vl et ; dest r oy() que se ej ecut a cuando va a ser dest r ui do y ser vi ce() que se
ej ecut ar cada vez que el ser vl et deba at ender una sol i ci t ud de ser vi ci o.
Cual qui er cl ase que der i ve de Gener i cSer vl et deber def i ni r el mt odo ser vi ce(). Es muy i nt er esant e
obser var l os dos ar gument os que r eci be est e mt odo, cor r espondi ent es a l as i nt er f aces Ser vl et Request y
Ser vl et Response. La pr i mer a de el l as r ef er enci a a un obj et o que descr i be por compl et o l a sol i ci t ud de
ser vi ci o que se l e enva al ser vl et . Si l a sol i ci t ud de ser vi ci o vi ene de un f or mul ar i o HTML, por medi o de
ese obj et o se puede acceder a l os nombr es de l os campos y a l os val or es i nt r oduci dos por el usuar i o;
puede t ambi n obt ener se ci er t a i nf or maci n sobr e el cl i ent e (or denador y br owser ) . El segundo
ar gument o es un obj et o con una r ef er enci a de l a i nt er f ace Ser vl et Response, que const i t uye el cami no
medi ant e el cual el mt odo ser vi ce() se conect a de nuevo con el cl i ent e y l e comuni ca el r esul t ado de su
sol i ci t ud. Adems, di cho mt odo deber r eal i zar cuant as oper aci ones sean necesar i as par a desempear su
comet i do: escr i bi r y/ o l eer dat os de un f i cher o, comuni car se con una base de dat os, et c. El mt odo
ser vi ce() es r eal ment e el cor azn del ser vl et .
En l a pr ct i ca, sal vo par a desar r ol l os muy especi al i zados, t odos l os ser vl et s deber n const r ui r se a par t i r
de l a cl ase Ht t pSer vl et , sub-cl ase de Gener i cSer vl et .
La cl ase Ht t pSer vl et ya no es abst r act y di spone de una i mpl ement aci n o def i ni ci n del mt odo
ser vi ce(). Di cha i mpl ement aci n det ect a el t i po de ser vi ci o o mt odo HTTP que l e ha si do sol i ci t ado
desde el br owser y l l ama al mt odo adecuado de esa mi sma cl ase ( doPost (), doGet (), et c. ) . Cuando el
pr ogr amador cr ea una sub-cl ase de Ht t pSer vl et , por l o gener al no t i ene que r edef i ni r el mt odo
ser vi ce(), si no uno de l os mt odos ms especi al i zados (nor mal ment e doPost ()), que t i enen l os mi smos
Servlet
init(), destroy()
abstract service(ServletRequest rq, ServletResponse rp)
ServletConfig getServletConfig(), String getServletInfo()
ServletConfig
ServletContext getServletContext()
String getInitParameter(String)
Enumeration getInitParameterNames()
HttpServlet
HttpServlet()
service(HttpServletRequest hrq, HttpServletResponse hrp)
doPost(), doGet(), doPut(), doDelete(), doOptions(), doTrace()
GenericServlet
GenericServlet()
init(), destroy(), service(ServletRequest rq, ServletResponse rp)
ServletConfig getServletConfig(), ServletContext getServletContext()
Object

Fi gur a 9. 3. Jer ar qua y mt odos de l as pr i nci pal es cl ases par a cr ear ser vl et s.
90 Informtica III

ar gument os que ser vi ce(): dos obj et os r ef er enci ados por l as i nt er f aces Ser vl et Request y
Ser vl et Response.
En l a Fi gur a 9. 3 apar ecen t ambi n al gunas ot r as i nt er f aces, cuyo papel se r esume a cont i nuaci n.
1. La i nt er f ace Ser vl et Cont ext per mi t e a l os ser vl et s acceder a i nf or maci n sobr e el ent or no en que
se est n ej ecut ando.
2. La i nt er f ace Ser vl et Conf i g def i ne mt odos que per mi t en pasar al ser vl et i nf or maci n sobr e sus
par met r os de i ni ci al i zaci n.
3. La i nt er f ace Ser vl et Request per mi t e al mt odo ser vi ce() de Gener i cSer vl et obt ener i nf or maci n
sobr e una pet i ci n de ser vi ci o r eci bi da de un cl i ent e. Al gunos de l os dat os pr opor ci onados por
Gener i cSer vl et son l os nombr es y val or es de l os par met r os envi ados por el f or mul ar i o HTML y una
i nput st r eam.
4. La i nt er f ace Ser vl et Response per mi t e al mt odo ser vi ce() de Gener i cSer vl et envi ar su r espuest a
al cl i ent e que ha sol i ci t ado el ser vi ci o. Est a i nt er f ace di spone de mt odos par a obt ener un out put
st r eam o un wr i t er con l os que envi ar al cl i ent e dat os bi nar i os o car act er es, r espect i vament e.
5. La i nt er f ace Ht t pSer vl et Request der i va de Ser vl et Request . Est a i nt er f ace per mi t e a l os mt odos
ser vi ce(), doPost (), doGet (), et c. de l a cl ase Ht t pSer vl et r eci bi r una pet i ci n de ser vi ci o HTTP.
Est a i nt er f ace per mi t e obt ener i nf or maci n del header de l a pet i ci n de ser vi ci o HTTP.
6. La i nt er f ace Ht t pSer vl et Response ext i ende Ser vl et Response. A t r avs de est a i nt er f ace l os
mt odos de Ht t pSer vl et envan i nf or maci n a l os cl i ent es que l es han pedi do al gn ser vi ci o.
El API del JSDK 2.0 di spone de cl ases e i nt er f aces adi ci onal es, no ci t adas en est e apar t ado. Al gunas de
est as cl ases e i nt er f aces ser n consi der adas en apar t ados post er i or es.
9.5.2. La apl i caci n ser vl et r unner
Ser vl et r unner es l a ut i l i dad que pr opor ci ona Sun conj unt ament e con el JSDK. Es a l os ser vl et s l o que
el appl et vi ewer a l os appl et s. Si n embar go, es mucho ms t i l que appl et vi ewer , por que mi ent r as es
muy f ci l di sponer de un br owser en el que compr obar l as appl et s, no es t an senci l l o i nst al ar y di sponer
de un ser vi dor HTTP en el que compr obar l os ser vl et s. Por est a r azn l a apl i caci n ser vl et r unner , a
pesar de ser bast ant e bsi ca y poco conf i gur abl e, es una her r ami ent a muy t i l par a el desar r ol l o de
ser vl et s, pues se ej ecut a desde l a l nea de comandos del MS-DOS. Como es nat ur al , una vez que se haya
pr obado debi dament e el f unci onami ent o de l os ser vl et s, par a una apl i caci n en una empr esa r eal ser a
pr eci so empl ear ser vi dor es HTTP pr of esi onal es.
Adems, ser vl et r unner es mul t i t hr ead, l o que l e per mi t e gest i onar ml t i pl es pet i ci ones a l a vez.
Gr aci as a el l o es posi bl e ej ecut ar di st i nt os ser vl et s si mul t neament e o pr obar ser vl et s que l l aman a su
vez a ot r os ser vl et s.
Una adver t enci a: ser vl et r unner no car ga de nuevo de modo aut omt i co l os ser vl et s que hayan si do
act ual i zados ext er nament e; es deci r , si se cambi a al go en el cdi go de un ser vl et y se vuel ve a compi l ar ,
al hacer una nueva l l amada al mi smo ser vl et r unner ut i l i za l a copi a de l a ant er i or ver si n del ser vl et que
t i ene car gada. Par a que car gue l a nueva es necesar i o cer r ar el ser vl et r unner (Ct r l +C) y r ei ni ci ar l o ot r a
vez. Est a oper aci n habr que r eal i zar l a cada vez que se modi f i que el ser vl et .
Par a asegur ar se de que ser vl et r unner t i ene acceso a l os packages del Ser vl et API, ser necesar i o
compr obar que l a var i abl e de ent or no CLASSPATH cont i ene l a r ut a de acceso del f i cher o j sdk. j ar en el
di r ect or i o \ l i b. En l a pl at af or ma Java 2 es ms senci l l o si mpl ement e copi ar el JAR al di r ect or i o ext que
se encuent r a en \ j r e\ l i b. Est o hace que l os packages sean t r at ados como ext ensi ones est ndar de Java.
Tambi n es necesar i o cambi ar l a var i abl e PATH par a que se encuent r e l a apl i caci n ser vl et r unner .exe.
Ot r a posi bi l i dad es copi ar est a apl i caci n al di r ect or i o donde est n l os dems ej ecut abl es de Java ( por
ej empl o c:\ j dk117\ bi n) .
9.5.3. Fi cher os de pr opi edades
Ser vl et r unner per mi t e l a ut i l i zaci n de f i cher os que cont i enen l as pr opi edades ( pr oper t i es) ut i l i zadas
en l a conf i gur aci n, cr eaci n e i ni ci al i zaci n de l os ser vl et s. Las pr opi edades son par es del t i po
cl ave/ val or . Por ej empl o, servlet.catalogo.codigo=ServletCatalogo es una pr opi edad cuya
cl ave es servlet.catalogo.codigo y cuyo val or es ServletCatalogo.
Exi st en dos pr opi edades muy i mpor t ant es par a l os ser vl et s:
servlet.nombre.code
servlet.nombre.initargs
Captulo 9. Servlets 91

La pr opi edad ser vl et . nombr e. code debe cont ener el nombr e compl et o de l a cl ase del ser vl et ,
i ncl uyendo su package. Por ej empl o, l a pr opi edad,
servlet.libros.code=basededatos.ServletLibros
asoci a el nombr e l i br os con l a cl ase basededat os. Ser vl et Li br os.
La pr opi edad i ni t ar gs cont i ene l os par met r os de i ni ci al i zaci n del ser vl et . El val or de un ni co
par met r o se est abl ece en l a f or ma nombreDeParametro=valorDeParametro. Es posi bl e est abl ecer el
val or de var i os par met r os a l a vez, per o el conj unt o de l a pr opi edad debe ser una ni ca l nea l gi ca. Por
t ant o, par a una mayor l egi bi l i dad ser pr eci so empl ear el car ct er bar r a i nver t i da (\) par a empl ear var i as
l neas del f i cher o. As, por ej empl o:
servlet.librodb.initArgs=\
fichero=servlets/Datos,\
usuario=administrador,\
...
Obsr vese que l os di st i nt os par met r os se encuent r an separ ados por comas (, ). El l t i mo de l os
par met r os no necesi t ar ni nguna coma al f i nal .
Todas est as pr opi edades est ar n al macenadas en un f i cher o que por def ect o t i ene el nombr e
ser vl et .pr oper t i es (se puede especi f i car ot r o nombr e en l a l nea de comandos de ser vl et r unner t al y
como se ver ms adel ant e) . Se pueden i ncl ui r l neas de coment ar i o, que deber n comenzar por el
car ct er (#) . Por def ect o, est e f i cher o debe est ar en el mi smo di r ect or i o que el ser vl et , per o al ej ecut ar
ser vl et r unner puede especi f i car se un nombr e de f i cher o de pr opi edades con un pat h di f er ent e.
9.5.4. Ej ecuci n de l a apl i caci n ser vl et r unner
La apl i caci n ser vl et r unner se ej ecut a desde l a l nea de comandos de MS-DOSy admi t e l os si gui ent es
par met r os (apar ecen t ecl eando en l a consol a ser vl et r unner ? ):
-p puerto al que escuchar
-m nmero mximo de conexiones
-t tiempo de desconexin en milisegundos
-d directorio en el que estn los servlets
-s nombre del fichero de propiedades
As por ej empl o, si se t uvi er a un ser vl et en el di r ect or i o c:\ pr ogr amas, el f i cher o de pr opi edades se
l l amar a Ser vl et Ej empl o.pr op y se qui si er a que el ser vl et r unner est uvi er a escuchando el puer t o 8000,
habr a que escr i bi r l o si gui ent e en l a l nea de comandos:
C:\servletrunner -p 8000 -d c:\programas -s ServletEjemplo.prop
9. 6. Ej empl o Int roduct ori o
Par a poder hacer se una i dea del f unci onami ent o de un ser vl et y del aspect o que t i enen l os mi smos, l o
mej or es est udi ar un ej empl o senci l l o. Imagnese que en una pgi na web se desea r ecabar l a opi ni n de un
vi si t ant e as como al gunos de sus dat os per sonal es, con el f i n de r eal i zar un est udi o est adst i co. Di cha
i nf or maci n podr a ser al macenada en una base de dat os par a su post er i or est udi o.
La pr i mer a t ar ea ser a di sear un f or mul ar i o en el que el vi si t ant e pudi er a i nt r oduci r l os dat os. Est e
paso es i dnt i co a l o que se har a al escr i bi r un pr ogr ama CGI, ya que bast ar con ut i l i zar l os t ags que
pr opor ci ona el l enguaj e HTML (<FORM>, <ACTION>, <TYPE>, et c. ).
9.6.1. Inst al aci n del Java Ser vl et Devel opment Ki t (JSDK 2.0)
Par a poder ej ecut ar est e ej empl o es necesar i o que el JSDK 2.0 est cor r ect ament e i nst al ado, bi en en
el pr opi o or denador , bi en en uno de l os or denador es de l as Sal as de PCs de l a ESI. Par a r eal i zar est a
i nst al aci n en un or denador pr opi o se pueden segui r l os si gui ent es pasos:
En pr i mer l ugar se debe consegui r el f i cher o de i nst al aci n, l l amado j sdk20-wi n32.exe. Est e f i cher o se
puede obt ener de l a zona de r ecur sos de l a pgi na web de l a asi gnat ur a. Se t r at a de un f i cher o de 950
Kbyt es, que puede ser t r anspor t ado en un di squet e si n di f i cul t ad.
Se copi a el f i cher o ci t ado al di r ect or i o C:\ Temp del pr opi o or denador . Se cl i ca dos veces sobr e di cho
f i cher o y comi enza el pr oceso de i nst al aci n.
Se det er mi na el di r ect or i o en el que se r eal i zar l a i nst al aci n. El pr ogr ama de i nst al aci n pr opone el
di r ect or i o C:\ Jsdk2.0, que es per f ect ament e adecuado.
92 Informtica III

En el di r ect or i o C:\ Jsdk2. 0\ bi n apar ece l a apl i caci n ser vl et r unner . exe, que es muy i mpor t ant e como
se ha vi st o ant er i or ment e. Par a que est a apl i caci n sea encont r ada al t ecl ear su nombr e en l a vent ana de
MS-DOS es necesar i o que el nombr e de di cho di r ect or i o apar ezca en l a var i abl e de ent or no PATH. Una
posi bi l i dad es modi f i car de modo acor de di cha var i abl e y ot r a copi ar el f i cher o ser vl et r unner . exe al
di r ect or i o donde est n l os dems ej ecut abl es de Java (por ej empl o C:\ Jdk1.1.7\ bi n) ; como ese di r ect or i o
ya est en el PATH, l a apl i caci n ser vl et r unner . exe ser encont r ada si n di f i cul t ad. st a es l a sol uci n
ms senci l l a.
Adems de encont r ar ser vl et r unner . exe, t ant o par a compi l ar l os ser vl et s como par a ej ecut ar l os con
ser vl et r unner es necesar i o encont r ar l as cl ases e i nt er f aces del API de JSDK 2.0. Est as cl ases pueden
est ar por ej empl o en el ar chi vo C:\ Jsdk2.0\ l i b\ j sdk.j ar . Par a que est e ar chi vo pueda ser l ocal i zado, es
necesar i o modi f i car l a var i abl e de ent or no CLASSPATH. Est o se puede hacer en l a f or ma:
set CLASSPATH=C:\Jsdk2.0\lib\jsdk.jar;%CLASSPATH%
9.6.2. For mul ar i o
El f or mul ar i o cont endr dos campos de t i po TEXT donde el vi si t ant e i nt r oduci r su nombr e y apel l i dos.
A cont i nuaci n, deber i ndi car l a opi ni n que l e mer ece l a pgi na vi si t ada el i gi endo una ent r e t r es
posi bl es (Buena, Regul ar o Mal a). Por l t i mo, se of r ece al usuar i o l a posi bi l i dad de escr i bi r un
coment ar i o si as l o consi der a opor t uno. En l a Fi gur a 9. 4 puede obser var se el di seo del f or mul ar i o
cr eado. El cdi go cor r espondi ent e a l a pgi na HTML que cont i ene est e f or mul ar i o es el si gui ent e (f i cher o
Mi Ser vl et .ht m):
<HTML>
<HEAD>
<TITLE>Enve su opinin</TITLE>
</HEAD>
<BODY>
<H2>Por favor, envenos su opinin acerca de este sitio web</H2>
<FORM ACTION="http://miServidor:8080/servlet/ServletOpinion" METHOD="POST">
Nombre: <INPUT TYPE="TEXT" NAME="nombre" SIZE=15><BR>
Apellidos: <INPUT TYPE="TEXT" NAME="apellidos" SIZE=30><P>
Opinin que le ha merecido este sitio web<BR>
<INPUT TYPE="RADIO" CHECKED NAME="opinion" VALUE="Buena">Buena<BR>
<INPUT TYPE="RADIO" NAME="opinion" VALUE="Regular">Regular<BR>
<INPUT TYPE="RADIO" NAME="opinion" VALUE="Mala">Mala<P>
Comentarios <BR>
<TEXTAREA NAME="comentarios" ROWS=6 COLS=40> </TEXTAREA><P>
<INPUT TYPE="SUBMIT" NAME="botonEnviar" VALUE="Enviar">
<INPUT TYPE="RESET" NAME="botonLimpiar" VALUE="Limpiar">
</FORM>
</BODY>
</HTML>

En el cdi go ant er i or , hay al gunas cosas que mer ecen ser coment adas. En pr i mer l ugar , es necesar i o
asi gnar un i dent i f i cador ni co (es deci r , un val or de l a pr opi edad NAME) a cada uno de l os campos del
f or mul ar i o, ya que l a i nf or maci n que r eci ba el ser vl et est ar or gani zada en f or ma de par es de val or es,
donde uno de l os el ement os de di cho par ser un St r i ng que cont endr el nombr e del campo. As, por
ej empl o, si se i nt r oduj er a como nombr e del vi si t ant e Mi kel , el ser vl et r eci bi r a del br owser el par
nombr e=Mi kel , que per mi t i r acceder de una f or ma senci l l a al nombr e i nt r oduci do medi ant e el mt odo
get Par amet er (), t al y como se expl i car post er i or ment e al anal i zar el ser vl et del ej empl o i nt r oduct or i o.
Por est e mot i vo es i mpor t ant e no ut i l i zar nombr es dupl i cados en l os el ement os de l os f or mul ar i os.
Por ot r a par t e puede obser var se que en el t ag <FORM> se han ut i l i zado dos pr opi edades, ACTION y
METHOD. El mt odo (METHOD) ut i l i zado par a l a t r ansmi si n de dat os es el mt odo HTTP POST. Tambi n
se podr a haber ut i l i zado el mt odo HTTP GET, per o est e mt odo t i ene al gunas l i mi t aci ones en cuant o al
vol umen de dat os t r ansmi si bl e, por l o que es r ecomendabl e ut i l i zar el mt odo POST. Medi ant e l a
pr opi edad ACTION deber especi f i car se el URL del ser vl et que debe pr ocesar l os dat os. Est e URL
cont i ene, en el ej empl o pr esent ado, l as si gui ent es car act er st i cas:

Captulo 9. Servlets 93

El ser vl et se encuent r a si t uado en un ser vi dor cuyo nombr e es mi Ser vi dor (un ej empl o ms r eal
podr a ser www.t ecnun.es). Est e nombr e depender del or denador que pr opor ci one l os ser vi ci os de
r ed. En cual qui er caso, par a poder hacer pr uebas, se puede ut i l i zar como nombr e de ser vi dor el host
l ocal o l ocal host , o su nmer o IP si se conoce. Por ej empl o, se podr a escr i bi r :
<FORM ACTION="http://localhost:8080/servlet/ServletOpinion" METHOD="POST">
o de ot r a f or ma,
<FORM ACTION="http://Numero_IP:8080/servlet/ServletOpinion" METHOD="POST">
El ser vi dor HTTP est escuchando por el puer t o el puer t o 8080. Todas l as l l amadas ut i l i zando
di cho puer t o ser n pr ocesadas por el mdul o del ser vi dor encar gado de l a gest i n de l os ser vl et s. En
pr i nci pi o es f act i bl e l a ut i l i zaci n de cual qui er puer t o l i br e del si st ema, si empr e que se i ndi que al
ser vi dor HTTP cul va a ser el puer t o ut i l i zado par a di chas l l amadas. Por di ver sos mot i vos, est o
l t i mo debe ser conf i gur ado por el admi ni st r ador del si st ema.
El ser vl et se encuent r a si t uado en un subdi r ect or i o (vi r t ual ) del ser vi dor l l amado ser vl et . Est e
nombr e es en pr i nci pi o opci onal , aunque l a mayor a de l os ser vi dor es l o ut i l i zan por def ect o. En caso
de quer er ut i l i zar ot r o di r ect or i o, el ser vi dor debe ser conf i gur ado por el admi ni st r ador a t al f i n. En
concr et o, l a apl i caci n ser vl et r unner de Sun no per mi t e di cha modi f i caci n, por l o que l a URL
ut i l i zada debe cont ener di cho nombr e de di r ect or i o.
El nombr e del ser vl et empl eado es Ser vl et Opi ni on, y es st e el que r eci bi r l a i nf or maci n envi ada
por el cl i ent e al ser vi dor ( el f or mul ar i o en est e caso), y qui en se encar gar de di sear l a r espuest a,
que pasar al ser vi dor par a que est e a su vez l a enve de vuel t a al cl i ent e. Al f i nal se ej ecut ar una
cl ase l l amada Ser vl et Opi ni on.cl ass.
9.6.3. Cdi go del Ser vl et
Tal y como se ha menci onado con ant er i or i dad, el ser vl et que gest i onar t oda l a i nf or maci n del
f or mul ar i o se l l amar Ser vl et Opi ni on. Como un ser vl et es una cl ase de Java, deber por t ant o
encont r ar se al macenado en un f i cher o con el nombr e Ser vl et Opi ni on. j ava. En cual qui er caso, por hacer
l o ms si mpl e posi bl e est e ej empl o i nt r oduct or i o, est e ser vl et se l i mi t ar a r esponder al usuar i o con una
pgi na HTML con l a i nf or maci n i nt r oduci da en el f or mul ar i o, dej ando par a un post er i or apar t ado el
est udi o de cmo se al macenar an di chos dat os. El cdi go f uent e de l a cl ase Ser vl et Opi ni on es el
si gui ent e:

Fi gur a 9. 4. Di seo del f or mul ar i o de adqui si ci n de dat os.
94 Informtica III

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletOpinion extends HttpServlet {
// Declaracin de variables miembro correspondientes a
// los campos del formulario
private String nombre=null;
private String apellidos=null;
private String opinion=null;
private String comentarios=null;
// Este mtodo se ejecuta una nica vez (al ser inicializado el servlet)
// Se suelen inicializar variables y realizar operaciones costosas en
// tiempo de ejecucin (abrir ficheros, bases de datos, etc)
public void init(ServletConfig config) throws ServletException {
// Llamada al mtodo init() de la superclase (GenericServlet)
// As se asegura una correcta inicializacin del servlet
super.init(config);
System.out.println("Iniciando ServletOpinion...");
} // fin del mtodo init()
// Este mtodo es llamado por el servidor web al "apagarse" (al hacer
// shutdown). Sirve para proporcionar una correcta desconexin de una
// base de datos, cerrar ficheros abiertos, etc.
public void destroy() {
System.out.println("No hay nada que hacer...");
} // fin del mtodo destroy()
// Mtodo llamado mediante un HTTP POST. Este mtodo se llama
// automticamente al ejecutar un formulario HTML
public void doPost (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// Adquisicin de los valores del formulario a travs del objeto req
nombre=req.getParameter("nombre");
apellidos=req.getParameter("apellidos");
opinion=req.getParameter("opinion");
comentarios=req.getParameter("comentarios");
// Devolver al usuario una pgina HTML con los valores adquiridos
devolverPaginaHTML(resp);
} // fin del mtodo doPost()
public void devolverPaginaHTML(HttpServletResponse resp) {
// Se establece el tipo de contenido MIME de la respuesta
resp.setContentType("text/html");
// Se obtiene un PrintWriter donde escribir (slo para mandar texto)
PrintWriter out = null;
try {
out=resp.getWriter();
} catch (IOException io) {
System.out.println("Se ha producido una excepcion");
}
// Se genera el contenido de la pgina HTML
out.println("<html>");
out.println("<head>");
out.println("<title>Valores recogidos en el formulario</title>");
out.println("</head>");
Captulo 9. Servlets 95

out.println("<body>");
out.println("<b><font size=+2>Valores recogidos del ");
out.println("formulario: </font></b>");
out.println("<p><font size=+1><b>Nombre: </b>"+nombre+"</font>");
out.println("<br><fontsize=+1><b>Apellido: </b>"
+apellidos+"</font><b><font size=+1></font></b>");
out.println("<p><font size=+1> <b>Opini&oacute;n: </b><i>" + opinion +
"</i></font>");
out.println("<br><font size=+1><b>Comentarios: </b>" + comentarios
+"</font>");
out.println("</body>");
out.println("</html>");
// Se fuerza la descarga del buffer y se cierra el PrintWriter,
// liberando recursos de esta forma. IMPORTANTE
out.flush();
out.close();
} // fin de devolverPaginaHTML()
// Funcin que permite al servidor web obtener una descripcin del servlet
// Qu cometido tiene, nombre del autor, comentarios adicionales, etc.
public String getServletInfo() {
return "Este servlet lee los datos de un formulario" +
" y los muestra en pantalla";
} // fin del mtodo getServletInfo()
}

El r esul t ado obt eni do en el br owser t r as l a ej ecuci n del ser vl et puede apr eci ar se en l a Fi gur a 9. 5. En
ar as de una mayor si mpl i ci dad en est a pr i mer a apr oxi maci n a l os ser vl et s, se ha evi t ado t r at ar de
consegui r un cdi go ms sl i do, que deber a r eal i zar l as compr obaci ones per t i nent es (ver i f i car que l os
St r i ng no son nul l despus de l eer el par met r o, excepci ones que se pudi er an dar , et c. ) e i nf or mar al
usuar i o acer ca de posi bl es er r or es en caso de que f uer a necesar i o.
En cual qui er caso, puede obser var se que el aspect o del cdi go del ser vl et es muy si mi l ar al de
cual qui er ot r a cl ase de Java. Si n embar go, cabe dest acar al gunos aspect os par t i cul ar es:
La cl ase Ser vl et Opi ni on her eda de l a cl ase Ht t pSer vl et , que a su vez her eda de Gener i cSer vl et . La
f or ma ms senci l l a (y por t ant o l a que deber a ser si empr e empl eada) de cr ear un ser vl et , es her edar
de l a cl ase Ht t pSer vl et . De est a f or ma se est i dent i f i cando l a cl ase como un ser vl et que se
conect ar con un ser vi dor HTTP. Ms adel ant e se est udi ar est o con ms det al l e.
El mt odo i ni t () es el pr i mer o en ser ej ecut ado. Sl o es ej ecut ado l a pr i mer a vez que el ser vl et es
l l amado. Se l l ama al mt odo i ni t () de l a super - cl ase Gener i cSer vl et a f i n de que l a i ni ci al i zaci n sea
compl et a y cor r ect a. La i nt er f ace Ser vl et Conf i g pr opor ci ona l a i nf or maci n que necesi t a el ser vl et
par a i ni ci al i zar se ( par met r os de i ni ci al i zaci n, et c. ) .

Fi gur a 9. 5. Pgi na HTML devuel t a por el ser vl et .
96 Informtica III

El mt odo dest r oy() no t i ene ni nguna f unci n en est e ser vl et , ya que no se ha ut i l i zado ni ngn
r ecur so adi ci onal que necesi t e ser cer r ado, per o t i ene mucha i mpor t anci a si l o que se busca es
pr opor ci onar una descar ga cor r ect a del ser vl et de l a memor i a, de f or ma que no queden r ecur sos
ocupados i ndebi dament e, o haya conf l i ct os ent r e r ecur sos en uso. Tar eas pr opi as de est e mt odo son,
por ej empl o, el ci er r e de l as conexi ones con ot r os or denador es o con bases de dat os.
Como el f or mul ar i o HTML ut i l i za el mt odo HTTP POST par a l a t r ansmi si n de sus dat os, habr que
r edef i ni r el mt odo doPost (), que se encar ga de pr ocesar l a r espuest a y que t i ene como ar gument os
el obj et o que cont i ene l a pet i ci n y el que cont i ene l a r espuest a (per t eneci ent es a l as cl ases
Ht t pSer vl et Request y Ht t pSer vl et Response, r espect i vament e) . Est e mt odo ser l l amado t r as l a
i ni ci al i zaci n del ser vl et (en caso de que no haya si do pr evi ament e i ni ci al i zado) , y cont endr el
ncl eo del cdi go del ser vl et ( l l amadas a ot r os ser vl et s, l l amadas a ot r os mt odos, et c. ) .
El mt odo get Ser vl et Inf o() pr opor ci ona dat os acer ca del ser vl et (aut or , f echa de cr eaci n,
f unci onami ent o, et c. ) al ser vi dor web. No es en ni ngn caso obl i gat or i a su ut i l i zaci n aunque puede
ser i nt er esant e cuando se t i enen muchos ser vl et s f unci onando en un mi smo ser vi dor y puede r esul t ar
compl ej a l a i dent i f i caci n de l os mi smos.
Por l t i mo, el mt odo devol ver Pagi naHTML() es el encar gado de mandar l os val or es r ecogi dos del
cl i ent e. En pr i mer l ugar es necesar i o t ener un st r eam haci a el cl i ent e ( Pr i nt Wr i t er cuando haya que
mandar t ext o, Ser vl et Out put St r eam par a dat os bi nar i os). Post er i or ment e debe i ndi car se el t i po de
cont eni do MIME de aquel l o que va di r i gi do al cl i ent e ( t ext / ht ml en el caso pr esent ado) . Est os dos
pasos son necesar i os par a poder envi ar cor r ect ament e l os dat os al cl i ent e. Fi nal ment e, medi ant e el
mt odo pr i nt l n() se va gener ando l a pgi na HTML pr opi ament e di cha ( en f or ma de St r i ng).
Puede sor pr ender l a f or ma en que ha si do envi ada l a pgi na HTML como St r i ng. Podr a par ecer ms
l gi co gener ar un St r i ng en l a f or ma (concat enaci n de St r i ngs) ,
String texto=<html><head> +...+"<b>Nombre:</b>" + nombre + "</font>...
y despus escr i bi r l o en el st r eam o f l uj o de sal i da. Si n embar go, uno de l os par met r os a t ener en
cuent a en l os ser vl et s es el t i empo de r espuest a, que t i ene que ser el mni mo posi bl e. En est e sent i do,
l a cr eaci n de un St r i ng medi ant e concat enaci n es bast ant e cost osa, pues cada vez que se
concat enan dos St r i ngs medi ant e el si gno + se est n convi r t i endo a St r i ngBuf f er s y a su vez cr eando
un nuevo St r i ng, l o que ut i l i zado pr of usament e r equi er e ms r ecur sos que l o que se ha hecho en el
ej empl o, donde se han escr i t o di r ect ament e medi ant e el mt odo pr i nt l n().
El esquema menci onado en est e ej empl o se r epi t e en l a mayor a de l os ser vl et s y es el f undament o de
est a t ecnol oga. En post er i or es apar t ados se ef ect uar un est udi o ms det al l ado de l as cl ases y mt odos
empl eados en est e pequeo ej empl o.
9. 7. El Servl et API 2. 0
El Java Ser vl et API 2.0 es una ext ensi n al API de Java 1.1.x, y t ambi n de Java 2. Cont i ene l os
paquet es j avax.ser vl et y j avax. ser vl et .ht t p. El API pr opor ci ona sopor t e en cuat r o r eas:
1. Cont r ol del ci cl o de vi da de un ser vl et : cl ase Gener i cSer vl et
2. Acceso al cont ext o del ser vl et (ser vl et cont ext )
3. Cl ases de ut i l i dades
4. Cl ases de sopor t e especf i cas par a HTTP: cl ase Ht t pSer vl et
9.7.1. El ci cl o de vi da de un ser vl et : cl ase Gener i cSer vl et
La cl ase Gener i cSer vl et es una cl ase abst r act por que decl ar a el mt odo ser vi ce() como abst r act .
Aunque l os ser vl et s desar r ol l ados en conexi n con pgi nas web suel en der i var de l a cl ase Ht t pSer vl et ,
puede ser t i l est udi ar el ci cl o de vi da de un ser vl et en r el aci n con l os mt odos de l a cl ase
Gener i cSer vl et . Est o es l o que se har en l os apar t ados si gui ent es. Adems, l a cl ase Ht t pSer vl et her eda
l os mt odos de Gener i cSer vl et y def i ne el mt odo ser vi ce().
Los ser vl et s se ej ecut an en el ser vi dor HTTP como par t e i nt egr ant e del pr opi o pr oceso del ser vi dor .
Por est e mot i vo, el ser vi dor HTTP es el r esponsabl e de l a i ni ci al i zaci n, l l amada y dest r ucci n de cada
obj et o de un ser vl et , t al y como puede obser var se en l a Fi gur a 9. 6.
Un ser vi dor web se comuni ca con un ser vl et medi ant e l a l os mt odos de l a i nt er f ace
j avax.ser vl et .Ser vl et . Est a i nt er f ace est const i t ui da bsi cament e por t r es mt odos pr i nci pal es, al guno
de l os cual es ya se ha ut i l i zado en el ej empl o i nt r oduct or i o:
Captulo 9. Servlets 97

i ni t (), dest r oy() y ser vi ce()
y por dos mt odos al go menos i mpor t ant es:
get Ser vl et Conf i g(), get Ser vl et Inf o()
9. 7. 1. 1. El mt odo i ni t () en l a cl ase Gener i cSer vl et
Cuando un ser vl et es car gado por pr i mer a vez, el mt odo i ni t () es l l amado por el ser vi dor HTTP. Est e
mt odo no ser l l amado nunca ms mi ent r as el ser vl et se est ej ecut ando. Est o per mi t e al ser vl et
ef ect uar cual qui er oper aci n de i ni ci al i zaci n pot enci al ment e cost osa en t r mi nos de CPU, ya que st a
sl o se ej ecut ar l a pr i mer a vez. Est o es una vent aj a i mpor t ant e f r ent e a l os pr ogr amas CGI, que son
car gados en memor i a cada vez que hay una pet i ci n por par t e del cl i ent e. Por ej empl o, si en un da hay
500 consul t as a una base de dat os, medi ant e un CGI habr a que abr i r una conexi n con l a base de dat os
500 veces, f r ent e a una ni ca aper t ur a que ser a necesar i a con un ser vl et , pues di cha conexi n podr a
quedar abi er t a a l a esper a de r eci bi r nuevas pet i ci ones.
Si el ser vi dor per mi t e pr e- car gar l os ser vl et s, el mt odo i ni t () ser l l amado al i ni ci ar se el ser vi dor . Si
el ser vi dor no t i ene esa posi bi l i dad, ser l l amado l a pr i mer a vez que haya una pet i ci n por par t e de un
cl i ent e.
El mt odo i ni t () t i ene un ni co ar gument o, que es una r ef er enci a a un obj et o de l a i nt er f ace
Ser vl et Conf i g, que pr opor ci ona l os ar gument os de i ni ci al i zaci n del ser vl et . Est e obj et o di spone del
mt odo get Ser vl et Cont ext () que devuel ve una r ef er enci a de l a i nt er f ace Ser vl et Cont ext , que a su vez
cont i ene i nf or maci n acer ca del ent or no en el que se est ej ecut ando el ser vl et .
Si empr e que se r edef i na el mt odo i ni t () de l a cl ase base Gener i cSer vl et (o de Ht t pSer vl et , que l o
her eda de Gener i cSer vl et ) , ser pr eci so l l amar al mt odo i ni t () de l a super - cl ase, a f i n de gar ant i zar que
l a i ni ci al i zaci n se ef ect e cor r ect ament e. Por ej empl o:
public void init (ServletConfig config) throws ServletException {
// Llamada al mtodo init de la superclase
super.init(config);
System.out.println("Iniciando...");
// Definicin de variables
...
// Apertura de conexiones, ficheros, etc.
...
}
El ser vi dor gar ant i za que el mt odo i ni t () t er mi na su ej ecuci n ant es de que sea l l amado cual qui er
ot r o mt odo del ser vl et .
Respuest a
Respuest a
Pet i ci n
Pet i ci n
Servidor
Servl et
Servidor
Servidor
Servlet
Servlet
Car ga
Descar ga
Cl i ent e
Cl i ent e

Fi gur a 9. 6. Ci cl o de vi da de un ser vl et .
98 Informtica III

9. 7. 1. 2. El mt odo ser vi ce( ) en l a cl ase Gener i cSer vl et
Est e mt odo es el ncl eo f undament al del ser vl et . Recur dese que es abst r act en Gener i cSer vl et , por
l o que si el ser vl et der i va de est a cl ase deber ser def i ni do por el pr ogr amador . Cada pet i ci n por par t e
del cl i ent e se t r aduce en una l l amada al mt odo ser vi ce() del ser vl et . El mt odo ser vi ce() l ee l a pet i ci n
y debe pr oduci r una r espuest a en base a l os dos ar gument os que r eci be:
Un obj et o de l a i nt er f ace Ser vl et Request con dat os envi ados por el cl i ent e. Est os i ncl uyen par ej as de
par met r os cl ave/ val or y un Input St r eam. Hay di ver sos mt odos que pr opor ci onan i nf or maci n acer ca
del cl i ent e y de l a pet i ci n ef ect uado por el mi smo, ent r e ot r os l os most r ados en l a Tabl a 9. 1.
Un obj et o de l a i nt er f ace Ser vl et Response, que encapsul a l a r espuest a del ser vl et al cl i ent e. En el
pr oceso de pr epar aci n de l a r espuest a, es necesar i o l l amar al mt odo set Cont ent Type(), a f i n de
est abl ecer el t i po de cont eni do MIME de l a r espuest a. La Tabl a 9. 2 i ndi ca l os mt odos de l a i nt er f ace
Ser vl et Response.
Puede obser var se en l a Tabl a 9. 1 que hay dos f or mas de r eci bi r l a i nf or maci n de un f or mul ar i o HTML
en un ser vl et . La pr i mer a de el l as consi st e en obt ener l os val or es de l os par met r os (mt odos
get Par amet er Names() y get Par amet er Val ues()) y l a segunda en r eci bi r l a i nf or maci n medi ant e un
Input St r eam o un Reader y hacer por uno mi smo su par t i ci n decodi f i caci n.
El comet i do del mt odo ser vi ce() es concept ual ment e bast ant e si mpl e: gener a una r espuest a por cada
pet i ci n r eci bi da de un cl i ent e. Es i mpor t ant e t ener en cuent a que puede haber ml t i pl es r espuest as que
est n si endo pr ocesadas al mi smo t i empo, pues l os ser vl et s son mul t i t hr ead. Est o hace que haya que ser
especi al ment e cui dadoso con l os t hr eads, par a evi t ar por ej empl o que haya dos obj et os de un ser vl et
escr i bi endo si mul t neament e en un mi smo campo de una base de dat os.
A pesar de l a i mpor t anci a del mt odo ser vi ce(), en gener al es no es aconsej abl e su def i ni ci n ( no
queda ms r emedi o que hacer l o si l a cl ase del ser vl et der i va de Gener i cSer vl et , per o l o l gi co es que el
pr ogr amador der i ve l as cl ases de sus ser vl et s de Ht t pSer vl et ). El mot i vo es si mpl e: l a cl ase Ht t pSer vl et
def i ne ser vi ce() de una f or ma ms que adecuada, l l amando a ot r os mt odos ( doPost (), doGet (), et c. ) que
son l os que t i ene que r edef i ni r el pr ogr amador . La f or ma de est a r edef i ni ci n ser est udi ada en apar t ados
post er i or es.

9. 7. 1. 3. El mt odo dest r oy( ) en l a cl ase Gener i cSer vl et :
Una buena i mpl ement aci n de est e mt odo debe per mi t i r que el ser vl et concl uya sus t ar eas de f or ma
or denada. De est a f or ma, es posi bl e l i ber ar r ecur sos (f i cher os abi er t os, conexi ones con bases de dat os,
et c. ) de una f or ma l i mpi a y segur a. Cuando est o no es necesar i o o i mpor t ant e, no har f al t a r edef i ni r el
mt odo dest r oy().
Puede suceder que al l l amar al mt odo dest r oy() haya pet i ci ones de ser vi ci o que est n t odava si endo
ej ecut adas por el mt odo ser vi ce(), l o que podr a pr ovocar un f al l o gener al del si st ema. Por est e mot i vo,
es conveni ent e escr i bi r el mt odo dest r oy() de f or ma que se r et r ase l a l i ber aci n de r ecur sos hast a que
no hayan concl ui do t odas l as l l amadas al mt odo ser vi ce(). A cont i nuaci n se pr esent a una f or ma de
l ogr ar una cor r ect a descar ga del ser vl et :
En pr i mer l ugar , es pr eci so saber si exi st e al guna l l amada al mt odo ser vi ce() pendi ent e de ej ecuci n,
par a l o cual se debe l l evar un cont ador con l as l l amadas act i vas a di cho mt odo.
Aunque en gener al es poco r ecomendabl e r edef i ni r ser vi ce() ( en caso de t r at ar se de un ser vl et que
der i ve de Ht t pSer vl et ). Si n embar go, en est e caso s r esul t a conveni ent e su r edef i ni ci n, par a poder saber
cundo ha si do l l amado. El mt odo r edef i ni do deber l l amar al mt odo ser vi ce() de su super -cl ase par a
mant ener nt egr a l a f unci onal i dad del ser vl et .
Los mt odos de act ual i zaci n del cont ador deben est ar si ncr oni zados, par a evi t ar que di cho val or sea
accedi do si mul t neament e por dos o ms t hr eads, l o que podr a hacer que su val or f uer a er r neo.
Adems, no bast a con que el ser vl et esper e a que t odos l os mt odos ser vi ce() hayan acabado. Es
pr eci so i ndi car l e a di cho mt odo que el ser vi dor se di spone a apagar se. De ot r a f or ma, el ser vl et podr a
quedar esper ando i ndef i ni dament e a que l os mt odos ser vi ce() acabar an. Est o se consi gue ut i l i zando una
var i abl e bool ean que est abl ezca est a condi ci n.

Captulo 9. Servlets 99

Todas l as consi der aci ones ant er i or es se han i nt r oduci do en el si gui ent e cdi go:
Mt odos de Servl et Request Coment ari os
Publ i c abst r act i nt get Cont ent Lengt h() Devuel ve el t amao de l a pet i ci n del cl i ent e o -1 si es
desconoci do.
Publ i c abst r act St r i ng get Cont ent Type() Devuel ve el t i po de cont eni do MIME de l a pet i ci n o nul l
si st e es desconoci do.
Publ i c abst r act St r i ng get Prot ocol () Devuel ve el pr ot ocol o y l a ver si n de l a pet i ci n como un
St r i ng en l a f or ma <pr ot ocol o>/ <ver si n mayor >. <ver si n
menor >
publ i c abst r act St r i ng get Scheme() Devuel ve el t i po de esquema de l a URL de l a pet i ci n:
ht t p, ht t ps, f t p. . .
publ i c abst r act St r i ng get ServerName() Devuel ve el nombr e del host del ser vi dor que r eci bi l a
pet i ci n. .
publ i c abst r act i nt get ServerPort () Devuel ve el nmer o del puer t o en el que f ue r eci bi da l a
pet i ci n.
publ i c abst r act St r i ng get Remot eAddr() Devuel ve l a di r ecci n IP del or denador que r eal i z l a
pet i ci n.
publ i c abst r act St r i ng get Remot eHost () Devuel ve el nombr e compl et o del or denador que r eal i z
l a pet i ci n.
publ i c abst r act Ser vl et Input St r eam
get Input St ream() t hr ows IOExcept i on
Devuel ve un Input St r eam par a l eer l os dat os bi nar i os que
vi enen dent r o del cuer po de l a pet i ci n.
publ i c abst r act St r i ng get Paramet er(St ri ng) Devuel ve un St r i ng que cont i ene el val or del par met r o
especi f i cado, o nul l si di cho par met r o no exi st e. Sl o
debe empl ear se cuando se est segur o de que el
par met r o t i ene un ni co val or .
publ i c abst r act St r i ng[ ]
get Paramet erVal ues(St ri ng)
Devuel ve l os val or es del par met r o especi f i cado en f or ma
de un ar r ay de St r i ngs, o nul l si el par met r o no exi st e.
t i l cuando un par met r o puede t ener ms de un val or .
publ i c abst r act Enumer at i on
get Paramet erNames()
Devuel ve una enumer aci n en f or ma de St r i ng de l os
par met r os encapsul ados en l a pet i ci n. No devuel ve
nada si el Input St r eam est vaco.
publ i c abst r act Buf f er edReader get Reader()
t hr ows IOExcept i on
Devuel ve un Buf f er edReader que per mi t e l eer el t ext o
cont eni do en el cuer po de l a pet i ci n.
publ i c abst r act St r i ng
get Char act erEncodi ng()
Devuel ve el t i po de codi f i caci n de l os car act er es
empl eados en l a pet i ci n.
Tabl a 9. 1. Mt odos de l a i nt er f ace Ser vl et Request .
Mt odos de Servl et Response Coment ari os
Ser vl et Out put St r eam
get Out put St r eam()
Per mi t e obt ener un Ser vl et Out put St r eam par a envi ar dat os
bi nar i os
Pr i nt Wr i t er get Wr i t er ( ) Per mi t e obt ener un Pr i nt Wr i t er par a envi ar car act er es
set Cont ent Type(St r i ng) Est abl ece el t i po MIME de l a sal i da
set Cont ent Lengt h(i nt ) Est abl ece el t amao de l a r espuest a
Tabl a 9. 2. Mt odos de l a i nt er f ace Ser vl et Response.
100 Informtica III

public class ServletSeguro extends HttpServlet {
...
private int contador=0;
private boolean apagandose=false;
...
protected synchronized void entrandoEnService() {
contador++;
}
protected synchronized void saliendoDeService() {
contador--;
}
protected synchronized void numeroDeServicios() {
return contador;
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
entrandoEnService();
try {
super.service(req, resp);
} finally {
saliendoDeService();
}
} // fin del mtodo service()
protected void setApagandose(boolean flag){
apagandose=flag;
}
protected boolean estaApagandose() {
return apagandose;
}
...
public void destroy() {
// Comprobar que hay servicios en ejecucin y en caso afirmativo
// ordernarles que paren la ejecucin
if(numeroDeServicios()>0)
setApagandose(true);
// Mientras haya servicios en ejecucin, esperar
while(numServices()>0) {
try {
Thread.sleep(intervalo);
} catch(InterruptedException e) {
} // fin del catch
} // fin del while
} // fin de destroy()
...
// Servicio
public void doPost(...) {
...
// Comprobacin de que el servidor no se est apagando
for (i=0; ((i<numeroDeCosasAHacer)&& !estaApagandose()); i++) {
try {
...
// Aqu viene el cdigo
} catch(Exception e)
} // fin del for
} // fin de doPost()
} // fin de la clase ServletEjemplo
Captulo 9. Servlets 101

9.7.2. El cont ext o del ser vl et (ser vl et cont ext )
Un ser vl et vi ve y muer e dent r o de l os l mi t es del pr oceso del ser vi dor . Por est e mot i vo, puede ser
i nt er esant e en un det er mi nado moment o obt ener i nf or maci n acer ca del ent or no en el que se est
ej ecut ando el ser vl et . Est a i nf or maci n i ncl uye l a di sponi bl e en el moment o de i ni ci al i zaci n del ser vl et ,
l a r ef er ent e al pr opi o ser vi dor o l a i nf or maci n cont ext ual especf i ca que puede cont ener cada pet i ci n de
ser vi ci o.
9. 7. 2. 1. Inf or maci n dur ant e l a i ni ci al i zaci n del ser vl et
Est a i nf or maci n es sumi ni st r ada al ser vl et medi ant e el ar gument o Ser vl et Conf i g del mt odo i ni t ().
Cada ser vi dor HTTP t i ene su pr opi a f or ma de pasar i nf or maci n al ser vl et . En cual qui er caso, par a
acceder a di cha i nf or maci n habr a que empl ear un cdi go si mi l ar al si gui ent e:
String valorParametro;
public void init(ServletConfig config) {
valorParametro = config.getInitParameter(nombreParametro);
}
Como puede obser var se, se ha empl eado el mt odo get Ini t Par amet er () de l a i nt er f ace Ser vl et Conf i g
(i mpl ement ada por Gener i cSer vl et ) par a obt ener el val or del par met r o. Asi mi smo, puede obt ener se una
enumer aci n de t odos l os nombr es de par met r os medi ant e el mt odo get Ini t Par amet er Names() de l a
mi sma i nt er f ace.
9. 7. 2. 2. Inf or maci n cont ext ual acer ca del ser vi dor
La i nf or maci n acer ca del ser vi dor est di sponi bl e en t odo moment o a t r avs de un obj et o de l a
i nt er f ace Ser vl et Cont ext . Un ser vl et puede obt ener di cho obj et o medi ant e el mt odo
get Ser vl et Cont ext () apl i cabl e a un obj et o Ser vl et Conf i g.
La i nt er f ace Ser vl et Cont ext def i ne l os mt odos descr i t os en l a Tabl a 9. 3.
9.7.3. Cl ases de ut i l i dades (Ut i l i t y Cl asses)
El Ser vl et API pr opor ci ona una ser i e de ut i l i dades que se descr i ben a cont i nuaci n.
La pr i mer a de el l as es l a i nt er f ace j avax.ser vl et .Si ngl eThr eadModel que puede hacer ms senci l l o el
desar r ol l o de ser vl et s. Si un ser vl et i mpl ement a di cha i nt er f ace, el ser vi dor sabe que nunca debe
l l amar al mt odo ser vi ce() mi ent r as est pr ocesando una pet i ci n ant er i or . Es deci r , el ser vi dor
pr ocesa t odas l as pet i ci ones de ser vi ci o dent r o de un mi smo t hr ead. Si n embar go, a pesar de que est o
Mt odos de Servl et Cont ext Coment ari os
publ i c abst r act Obj ect get At t ri but e(St ri ng) Devuel ve i nf or maci n acer ca de det er mi nados
at r i but os del t i po cl ave/ val or del ser vi dor . Es pr opi o
de cada ser vi dor .
publ i c abst r act Enumer at i on
get At t ri but eNames()
Devuel ve una enumer aci n con l os nombr e de
at r i but os di sponi bl es en el ser vi dor .
publ i c abst r act St r i ng get Mi meType(St ri ng) Devuel ve el t i po MIME de un det er mi nado f i cher o.
publ i c abst r act St r i ng get Real Pat h(St ri ng) Tr aduce una r ut a de acceso vi r t ual a l a r ut a r el at i va al
l ugar donde se encuent r a el di r ect or i o r az de pgi nas
HTML
publ i c abst r act St r i ng get ServerInf o() Devuel ve el nombr e y l a ver si n del ser vi ci o de r ed en
el que est si endo ej ecut ado el ser vl et .
publ i c abst r act Ser vl et get Servl et (St ri ng)
t hr ows Ser vl et Except i on
Devuel ve un obj et o ser vl et con el nombr e dado.
publ i c abst r act Enumer at i on get Servl et Names() Devuel ve un enumer aci n con l os ser vl et s di sponi bl es
en el ser vi dor .
publ i c abst r act voi d l og(St r i ng) Escr i be i nf or maci n en un f i cher o de l og. El nombr e
del mi smo y su f or mat o son pr opi os de cada ser vi dor .
Tabl a 9. 3. Mt odos de l a i nt er f ace Ser vl et Cont ext .
102 Informtica III

puede f aci l i t ar el desar r ol l o de ser vl et s, puede ser un gr an obst cul o en cuant o al r endi mi ent o del
ser vl et . Por el l o, a veces es pr eci so expl or ar ot r as opci ones. Por ej empl o, si un ser vl et accede a una
base de dat os par a su modi f i caci n, exi st en dos al t er nat i vas par a evi t ar conf l i ct os por accesos
si mul t neos:
1. Si ncr oni zar l os mt odos que acceden a l os r ecur sos, con l a consi gui ent e compl ej i dad en el cdi go
del ser vl et .
2. Impl ement ar l a ya ci t ada i nt er f ace Si ngl eThr eadModel , sol uci n ms senci l l a per o que t r ae
consi go un aument o en el t i empo de r espuest a. En est e caso, no es necesar i o escr i bi r ni ngn
cdi go adi ci onal , bast a con i mpl ement ar l a i nt er f ace. Es una f or ma de mar car aquel l os ser vl et s
que deben t ener ese compor t ami ent o, de f or ma que el ser vi dor pueda i dent i f i car l os.
El Ser vl et API i ncl uye dos cl ases de excepci ones:
1. La excepci n j avax.ser vl et . Ser vl et Except i on puede ser empl eada cuando ocur r e un f al l o gener al
en el ser vl et . Est o hace saber al ser vi dor que hay un pr obl ema.
2. La excepci n j avax.ser vl et . Unavai l abl eExcept i on i ndi ca que un ser vl et no se encuent r a
di sponi bl e. Los ser vl et s pueden not i f i car est a excepci n en cual qui er moment o. Exi st en dos t i pos
de i ndi sponi bi l i dades:
a) Per manent e: El ser vl et no podr segui r f unci onando hast a que el admi ni st r ador del ser vi dor
haga al go. En est e est ado, el ser vl et deber a escr i bi r en el f i cher o de l og una descr i pci n del
pr obl ema, y posi bl es sol uci ones.
b) Tempor al : El ser vl et se ha encont r ado con un pr obl ema que es pot enci al ment e t empor al ,
como pueda ser un di sco l l eno, un ser vi dor que ha f al l ado, et c. El pr obl ema puede ar r egl ar se
con el t i empo o puede r equer i r l a i nt er venci n del admi ni st r ador .
9.7.4. Cl ase Ht t pSer vl et : sopor t e especf i co par a el pr ot ocol o HTTP
Los ser vl et s que ut i l i zan el pr ot ocol o HTTP son l os ms comunes. Por est e mot i vo, Sun ha i ncl ui do un
package especf i co par a est os ser vl et s en su JSDK: j avax. ser vl et .ht t p. Ant es de est udi ar di cho package
en pr of undi dad, se va a hacer una pequea r ef er enci a al pr ot ocol o HTTP.
HTTP son l as si gl as de Hyper Text Tr ansf er Pr ot ocol , que es un pr ot ocol o medi ant e el cual l os
br owser y l os ser vi dor es puedan comuni car se ent r e s, medi ant e l a ut i l i zaci n de una ser i e de mt odos:
GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT y OPTIONS. Par a l a mayor a de l as apl i caci ones,
bast ar con conocer l os t r es pr i mer os.
9. 7. 4. 1. Mt odo GET: codi f i caci n de URLs
El mt odo HTTP GET sol i ci t a i nf or maci n a un ser vi dor web. Est a i nf or maci n puede ser un f i cher o,
el r esul t ado de un pr ogr ama ej ecut ado en el ser vi dor (como un ser vl et , un pr ogr ama CGI, . . . ) , et c.
En l a mayor a de l os ser vi dor es web l os ser vl et s son accedi dos medi ant e un URL que comi enza por
/ ser vl et / . El si gui ent e mt odo HTTP GET sol i ci t a el ser vi ci o del ser vl et Mi Ser vl et al ser vi dor
mi Ser vi dor . com, con l o cual pet i ci n GET t i ene l a si gui ent e f or ma ( en negri t a el cont eni do de l a
pet i ci n):
GET /servlet/MiServlet?nombre=Antonio&Apellido=Lopez%20de%20Romera HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/4.5 (
compatible;
MSIE 4.01;
Windows NT)
Host: miServidor.com
Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg
El URL de est a pet i ci n GET l l ama a un ser vl et l l amado Mi Ser vl et y cont i ene dos par met r os, nombr e
y apel l i do. Cada par met r o es un par que si gue el f or mat o cl ave=val or . Los par met r os se especi f i can
poni endo un si gno de i nt er r ogaci n (?) t r as el nombr e del ser vl et . Adems, l os di st i nt os par met r os
est n separ ados ent r e s por el smbol o amper sand (&).
Obsr vese que l a secuenci a de car act er es %20 apar ece dos veces en el apel l i do. Es una f or ma de deci r
que hay un espaci o ent r e Lopez y de , y ot r o ent r e de y Romer a . Est o ocur r e por l a f or ma en que
se codi f i can l os URL en el pr ot ocol o HTTP. Sucede l o mi smo con ot r os smbol os como l as t i l des u ot r os
car act er es especi al es. Est a codi f i caci n si gue el esquema:
%+<val or hexadeci mal del cdi go ASCII correspondi ent e al carct er>
Captulo 9. Servlets 103


Por ej empl o, el car ct er se escr i bi r a como %E1 (cdi go ASCII 225). Tambi n se puede cambi ar l a
secuenci a %20 por el si gno +, obt eni endo el mi smo ef ect o.
En cual qui er caso, l os pr ogr amador es de ser vl et s no deben pr eocupar se en pr i nci pi o por est e
pr obl ema, ya que l a cl ase Ht t pSer vl et Request se encar ga de l a decodi f i caci n, de f or ma que l os val or es
de l os par met r os sean accesi bl es medi ant e el mt odo get Par amet er (St r i ng par amet r o) de di cha cl ase.
Si n embar go, hay que t ener cui dado con al gunos car act er es a l a hor a de i ncl ui r l os en un URL, en concr et o
con aquel l os car act er es no per t eneci ent es al cdi go ASCII y con aquel l os que t i enen un si gni f i cado
concr et o par a el pr ot ocol o HTTP. Ms en concr et o, se pueden ci t ar l os si gui ent es car act er es especi al es y
su secuenci a o cdi go equi val ent e:
" (%22), # (%23), % (%25), & (%26), + (%2B), , (%2C), / (%2F),
: (%3A), < (%3C), = (%3D), > (%3E), ? (%3F) y @ (%40).
Adi ci onal ment e, Java pr opor ci ona l a posi bi l i dad de codi f i car un URL de f or ma que cumpl a con l as
ant er i or es r est r i cci ones. Par a el l o, se puede ut i l i zar l a cl ase URLEncoder , que se encuent r a i ncl ui da en el
package j ava. net , que es un package est ndar de Java. Di cha cl ase t i ene un ni co mt odo, St r i ng
encode(St r i ng), que se encar ga de codi f i car el St r i ng que r eci be como ar gument o, devol vi endo ot r o
St r i ng con el URL debi dament e codi f i cado. As, consi dr ese el si gui ent e ej empl o:
import java.net.*;
public class Codificar {
public static void main(String argv[]) {
String URLcodificada = URLEncoder.encode
("/servlet/MiServlet?nombre=Antonio"+"&Apellido=Lpez de Romera");
System.out.println(URLcodificada);
}
}
que cuando es ej ecut ado t i ene como r esul t ado l a si gui ent e secuenci a de car act er es:
%2Fservlet%2FMiServlet%3Fnombre%3DAntonio%26Apellido%3DL%A2pez+de+Romera
Obsr vese adems que, cuando sea necesar i o escr i bi r una comi l l a dent r o del St r i ng de
out .pr i nt l n(St r i ng), hay que pr eceder l a por el car ct er escape (\ ). As, l a sent enci a:
out.println("<A HREF="http://www.yahoo.com">Yahoo</A>"); // INCORRECTA
es i ncor r ect a y pr oduce er r or es de compi l aci n. Deber ser sust i t ui da por :
out.println("<A HREF=\http://www.yahoo.com\>Yahoo</A>");
Las pet i ci ones HTTP GET t i enen una l i mi t aci n i mpor t ant e (r ecur dese que t r ansmi t en l a i nf or maci n
a t r avs de l as var i abl es de ent or no del si st ema oper at i vo) y es un l mi t e en l a cant i dad de car act er es que
pueden acept ar en el URL. Si se envan l os dat os de un f or mul ar i o muy ext enso medi ant e HTTP GET
pueden pr oduci r se er r or es por est e mot i vo, por l o que habr a que ut i l i zar el mt odo HTTP POST.
Se suel e deci r que el mt odo GET es segur o e i dempot ent e:
Segur o, por que no t i ene ni ngn ef ect o secundar i o del cual pueda consi der ar se al usuar i o r esponsabl e
del mi smo. Es deci r , por ej empl o, una l l amada del mt odo GET no debe ser capaz en t eor a de al t er ar
una base de dat os. GET deber a ser vi r ni cament e par a obt ener i nf or maci n.
Idempot ent e, por que puede ser l l amado t ant as veces como se qui er a de una f or ma segur a.
Es como si GET f uer a al go as como ver per o no t ocar .
9. 7. 4. 2. Mt odo HEAD: i nf or maci n de f i cher os
Est e mt odo es si mi l ar al ant er i or . La pet i ci n del cl i ent e t i ene l a mi sma f or ma que en el mt odo GET,
con l a sal vedad de que en l ugar de GET se ut i l i za HEAD. En est e caso el ser vi dor r esponde a di cha pet i ci n
envi ando ni cament e i nf or maci n acer ca del f i cher o, y no el f i cher o en s. El mt odo HEAD se suel e
ut i l i zar f r ecuent ement e par a compr obar l o si gui ent e:
La f echa de modi f i caci n de un document o pr esent e en el ser vi dor .
104 Informtica III

El t amao del document o ant es de su descar ga, de f or ma que el br owser pueda pr esent ar
i nf or maci n acer ca del pr ogr eso de descar ga.
El t i po de ser vi dor .
El t i po de document o sol i ci t ado, de f or ma que el cl i ent e pueda saber si es capaz de sopor t ar l o.
El mt odo HEAD, al i gual que GET, es segur o e i dempot ent e.
9. 7. 4. 3. Mt odo POST: el ms ut i l i zado
El mt odo HTTP POST per mi t e al cl i ent e envi ar i nf or maci n al ser vi dor . Se debe ut i l i zar en l ugar de
GET en aquel l os casos que r equi er an t r ansf er i r una cant i dad i mpor t ant e de dat os (f or mul ar i os).
El mt odo POST no t i ene l a l i mi t aci n de GET en cuant o a vol umen de i nf or maci n t r ansf er i da, pues
st a no va i ncl ui da en el URL de l a pet i ci n, si no que vi aj a encapsul ada en un i nput st r eam que l l ega al
ser vl et a t r avs de l a ent r ada est ndar .
El encabezami ent o y el cont eni do ( en negri t a) de una pet i ci n POST t i ene l a si gui ent e f or ma:
POST /servlet/MiServlet HTTP/1.1
User-Agent: Mozilla/4.5 (
compatible;
MSIE 4.01;
Windows NT)
Host: www.MiServidor.com
Accept: image/gif, image/x-bitmap, image/jpeg, image/jpeg, */
Content-type: application/x-www-form-urlencoded
Content-length: 39
nombre=Antonio&Apellido=Lopez%20de%20Romera
Nt ese l a exi st enci a de una l nea en bl anco ent r e el encabezami ent o (header ) y el comi enzo de l a
i nf or maci n ext endi da. Est a l nea en bl anco i ndi ca el f i nal del header .
A di f er enci a de l os ant er i or es mt odos, POST no es ni segur o ni i dempot ent e, y por t ant o es
conveni ent e su ut i l i zaci n en aquel l as apl i caci ones que r equi er an oper aci ones ms compl ej as que l as de
sl o-l ect ur a, como por ej empl o modi f i car bases de dat os, et c.
9. 7. 4. 4. Cl ases de sopor t e HTTP
Una vez que se han pr esent ado unas ci er t as noci ones sobr e el pr ot ocol o HTTP, r esul t a ms senci l l o
ent ender l as f unci ones del package j avax.ser vl et . ht t p, que f aci l i t an de sobr emaner a l a cr eaci n de
ser vl et s que empl een di cho pr ot ocol o.
La cl ase abst r act a j avax. ser vl et . ht t p. Ht t pSer vl et i ncl uye un numer o de i mpor t ant e de f unci ones
adi ci onal es e i mpl ement a l a i nt er f ace j avax.ser vl et . Ser vl et . La f or ma ms senci l l a de escr i bi r un ser vl et
HTTP es her edando de Ht t pSer vl et como puede obser var se en l a Fi gur a 9. 7.
La cl ase Ht t pSer vl et es t ambi n una cl ase abst r act , de modo que es necesar i o def i ni r una cl ase que
der i ve de el l a y r edef i ni r en l a cl ase der i vada al menos uno de sus mt odos, t al es como doGet (),
doPost (), et c.
Como ya se ha coment ado, l a cl ase Ht t pSer vl et pr opor ci ona una i mpl ement aci n del mt odo ser vi ce()
en l a que di st i ngue qu mt odo se ha ut i l i zado en l a pet i ci n ( GET, POST, et c. ) , l l amando segui dament e
al mt odo adecuado (doGet (), doHead(), doDel et e(), doOpt i ons(), doPost () y doTr ace()) . Est os mt odos
e cor r esponden con l os mt odos HTTP ant er i or ment e ci t ados.
As pues, l a cl ase Ht t pSer vl et no def i ne el mt odo ser vi ce() como abst r act , si no como pr ot ect ed, al
i gual que l os mt odos i ni t (), dest r oy(), doGet (), doPost (), et c. , de f or ma que ya no es necesar i o escr i bi r
una i mpl ement aci n de ser vi ce() en un ser vl et que her ede de di cha cl ase. Si por al gn mot i vo es
necesar i o r edef i ni r el mt odo ser vi ce(), es muy conveni ent e l l amar desde l al mt odo ser vi ce() de l a
super -cl ase (Ht t pSer vl et ).
La cl ase Ht t pSer vl et es bast ant e i nt el i gent e , ya que es t ambi n capaz de saber qu mt odos han
si do r edef i ni dos en una sub-cl ase, de f or ma que puede comuni car al cl i ent e qu t i pos de mt odos sopor t a
el ser vl et en cuest i n. As, si en l a cl ase Mi Ser vl et sl o se ha r edef i ni do el mt odo doPost (), si el cl i ent e
r eal i za una pet i ci n de t i po HTTP GET el ser vi dor l anzar aut omt i cament e un mensaj e de er r or si mi l ar
al si gui ent e:
Captulo 9. Servlets 105

501 Method GET Not Supported
donde el nmer o que apar ece ant es del mensaj e es un cdi go empl eado por l os ser vi dor es HTTP par a
i ndi car su est ado act ual . En est e caso el cdi go es el 501.

No si empr e es necesar i o r edef i ni r t odos l os mt odos de l a cl ase Ht t pSer vl et . Por ej empl o, bast a
def i ni r el mt odo doGet () par a que el ser vl et r esponda por s mi smo a pet i ci ones del t i po HTTP HEAD o
HTTP OPTIONS.
9. 7. 4. 5. Modo de empl eo de l a cl ase Ht t pSer vl et
Todos l os mt odos de cl ase Ht t pSer vl et que debe o puede r edef i ni r el pr ogr amador (doGet (),
doPost (), doPut (), doOpt i ons(), et c. ) r eci ben como ar gument os un obj et o Ht t pSer vl et Request y ot r o
Ht t pSer vl et Response.
La i nt er f ace Ht t pSer vl et Request pr opor ci ona numer osos mt odos par a obt ener i nf or maci n acer ca de
l a pet i ci n del cl i ent e (as como de l a i dent i dad del mi smo). Consul t ar l a document aci n del API par a
mayor i nf or maci n. Por ot r a par t e, el obj et o de l a i nt er f ace Ht t pSer vl et Response per mi t e envi ar desde
el ser vl et al cl i ent e i nf or maci n acer ca del est ado del ser vi dor (mt odos sendEr r or () y set St at us()) , as
como est abl ecer l os val or es del header del mensaj e sal i ent e (mt odos set Header (), set Dat eHeader (),
et c. ) .
Recur dese que t ant o Ht t pSer vl et Request como Ht t pSer vl et Response son i nt er f aces que der i van de
l as i nt er f aces Ser vl et Request y Ser vl et Response r espect i vament e, por l o que se pueden t ambi n ut i l i zar
t odos l os mt odos decl ar ados en est as l t i mas.
Recur dese a modo de r ecapi t ul aci n que el mt odo doGet () deber a:
1. Leer l os dat os de l a sol i ci t ud, t al es como l os nombr es de l os par met r os y sus val or es
2. Est abl ecer el header de l a r espuest a ( l ongi t ud, t i po y codi f i caci n)
3. Escr i bi r l a r espuest a en f or mat o HTML par a envi ar l a al cl i ent e.
Recur dese que l a i mpl ement aci n de est e mt odo debe ser segur a e i dempot ent e.
El mt odo doPost () por su par t e, deber a r eal i zar l as si gui ent es f unci ones:
1. Obt ener i nput st r eam del cl i ent e y l eer l os par met r os de l a sol i ci t ud.
2. Real i zar aquel l o par a l o que est di seado (act ual i zaci n de bases de dat os, et c. ).
3. Inf or mar al cl i ent e de l a f i nal i zaci n de di cha t ar ea o de posi bl es i mpr evi st os. Par a el l o hay que
est abl ecer pr i mer o el t i po de l a r espuest a, obt ener l uego un Pr i nt Wr i t er y envi ar a t r avs suyo el
mensaj e HTML.

Servlet
init(), destroy()
abstract service(ServletRequest rq, ServletResponse rp)
ServletConfig getServletConfig(), String getServletInfo()
ServletConfig
ServletContext getServletContext()
String getInitParameter(String)
Enumeration getInitParameterNames()
Miservlet
HttpServlet
HttpServlet()
service(HttpServletRequest hrq, HttpServletResponse hrp)
doPost(), doGet(), doPut(), doDelete(), doOptions(), doTrace()
GenericServlet
GenericServlet()
init(), destroy(), service(ServletRequest rq, ServletResponse rp)
ServletConfig getServletConfig(), ServletContext getServletContext()
Object

Fi gur a 9. 7. Jer ar qua de cl ases en ser vl et s.


CAPTULO 10
10. Servl et s con acceso a bases de dat os
10. 1. Acceso a bases de dat os medi ant e ser vl et s y JDBC
Una de l as t ar eas ms i mpor t ant es y ms f r ecuent ement e r eal i zadas por l os ser vl et s es l a conexi n a
bases de dat os medi ant e JDBC. Est o es debi do a que l os ser vl et s son un component e i deal par a hacer l as
f unci ones de capa medi a en un si st ema con una ar qui t ect ur a de t r es capas como l a most r ada en l a Fi gur a
10. 1.
Est e model o pr esent a l a vent aj a de que el ni vel i nt er medi o mant i ene en t odo moment o el cont r ol del
t i po de oper aci ones que se r eal i zan cont r a l a base de dat os, y adems, est l a vent aj a adi ci onal de que l os
dr i ver s JDBC no t i enen que r esi di r en l a mqui na cl i ent e, l o cual l i ber a al usuar i o de l a i nst al aci n de
cual qui er t i po de dr i ver . En cual qui er caso, t ant o el Ser vi dor HTTP como el Ser vi dor de Base de Dat os
pueden est ar en l a mi sma mqui na, aunque en si st emas empr esar i al es de ci er t a i mpor t anci a est o no suel e
ocur r i r con f r ecuenci a.
Los ej empl os que se pr esent an en est e capt ul o hacen uso de JDBC y SQL de una f or ma muy si mpl e,
per o per f ect ament e vl i da par a l o que se pr et ende de l os ser vl et s en est e document o.
La ar qui t ect ur a de l os ser vl et s hace que l a escr i t ur a de apl i caci ones que se ej ecut en en el ser vi dor sea
r el at i vament e senci l l a y que sean apl i caci ones muy r obust as. La pr i nci pal vent aj a de ut i l i zar ser vl et s es
que se puede pr ogr amar si n di f i cul t ad l a i nf or maci n que va a pr opor ci onar ent r e pet i ci ones del cl i ent e.
Es deci r , se puede t ener const anci a de l o que el usuar i o ha hecho en pet i ci ones ant er i or es. Adems, cada
obj et o del ser vl et se ej ecut a dent r o de un t hr ead de Java, por l o que se pueden cont r ol ar l as
i nt er acci ones ent r e ml t i pl es obj et os; y al ut i l i zar el i dent i f i cador de si ncr oni zaci n, se puede asegur ar
que l os ser vl et s del mi smo t i po esper an a que se pr oduzca l a mi sma t r ansacci n, ant es de pr ocesar l a
pet i ci n; est o puede ser especi al ment e t i l cuando mucha gent e i nt ent a act ual i zar al mi smo t i empo l a
base de dat os, o si hay mucha gent e pendi ent e de consul t as a l a base de dat os cuando st a est en pl eno
pr oceso de act ual i zaci n.
En ef ect o, l as car act er st i cas mul t i t hr ead de l os ser vl et s hacen que se adecuen per f ect ament e a est e
t i po de t ar eas. Si el ser vi dor de base de dat os i ncl uye sopor t e par a ml t i pl es conexi ones si mul t neas,

Fi gur a 10. 1. Ar qui t ect ur a cl i ent e-ser vi dor de 3 capas.
108 Informtica III

i ncl uso es posi bl e est abl ecer st as una ni ca vez e i r admi ni st r ando l as conexi ones ent r e l as sucesi vas
pet i ci ones de ser vi ci o.
10. 2. Ej empl o 1: Escri bi r en una base de dat os t i po Access
El si gui ent e ej empl o muest r a cmo compar t i r una ni ca conexi n ent r e t odas l as pet i ci ones de
ser vi ci o. Par a el l o, se r et oma el ej empl o i nt r oduct or i o del capt ul o ant er i or , per o en l ugar de most r ar en
pant al l a l a i nf or maci n r ecogi da en el f or mul ar i o, se i nt r oduci r en una base de dat os.
Par a poder ej ecut ar est e ej empl o en l os PCs de l as Sal as de Tecnun (o en el pr opi o domi ci l i o) se deben
segui r l os si gui ent es pasos:
1. Se deber di sponer de Mi cr osof t Access. Con di cho pr ogr ama se debe cr ear una nueva base de dat os,
l l amada por ej empl o Ser vl et Opi ni on2.mdb. En di cho f i cher o habr que cr ear una t abl a vaca l l amada
Opi ni ones_Recogi das cuyos campos se l l amen nombr e, apel l i dos, opi ni on y coment ar i os, que sean
r espect i vament e de t i po t ext , t ext , t ext y memo.
2. A cont i nuaci n se debe cr ear un Dat a Sour ce Name (DSN) con el nombr e opi ni on medi ant e el
admi ni st r ador de ODBC y asi gnar l e l a base de dat os ant er i or .
3. Abr i r una consol a de MS-DOS y ar r ancar ser vl et r unner . exe. Se supone que l a var i abl e CLASSPATH
t i ene ya un val or cor r ect o.
4. El si gui ent e f i cher o cont i ene l a cl ase Ser vl et Opi ni on2 que se conect ar con l a base de dat os
menci onada escr i bi endo en el l a l as opi ni ones de l os usuar i os. Di chas opi ni ones pueden ser r ecogi das
con el f i cher o Mi Ser vl et 2. ht ml que se i ncl uye a cont i nuaci n de Ser vl et Opi ni on2.j ava. Es i mpor t ant e
pr est ar at enci n a l as l neas en negr i t a, en l as que se concent r an l os concept os f undament al es de
est e ej empl o.
// fichero ServletOpinion2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class ServletOpinion2 extends HttpServlet {
// Declaracin de variables miembro
private String nombre = null;
private String apellidos = null;
private String opinion = null;
private String comentarios = null;
// Referencia a un objeto de la interface java.sql.Connection
Connection conn = null;
// Este mtodo se ejecuta una nica vez (al ser inicializado el servlet
// por primera vez)
// Se suelen inicializar variables y ejecutar operaciones costosas en tiempo
// de ejecucin (abrir ficheros, conectar con bases de datos, etc)
public void init (ServletConfig config) throws ServletException {
// Llamada al mtodo init() de la superclase (GenericServlet)
// As se asegura una correcta inicializacin del servlet
super.init(config);
// dsn (Data Source Name) de la base de datos
String dsn = new String("jdbc:odbc:opinion");
// Carga del Driver del puente JDBC-ODBC
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch(ClassNotFoundException ex) {
System.out.println("Error al cargar el driver");
System.out.println(ex.getMessage());
}
Captulo 10. Servlets con acceso a bases de datos 109

// Establecimiento de la conexin con la base de datos
try {
conn = DriverManager.getConnection(dsn, "", "");
} catch (SQLException sqlEx) {
System.out.println("Se ha producido un error al" +
" establecer la conexin con: " + dsn);
System.out.println(sqlEx.getMessage());
}
System.out.println("Iniciando ServletOpinion (version BD)...");
} // fin del mtodo init()
// Este mtodo es llamado por el servidor web al "apagarse" (shut down).
// Sirve para proporcionar una correcta desconexin de una base de datos,
// cerrar ficheros abiertos, etc.
public void destroy () {
super.destroy();
System.out.println("Cerrando conexion...");
try {
conn.close();
} catch(SQLException ex){
System.out.println("No se pudo cerrar la conexion");
System.out.println(ex.getMessage());
}
} // fin del mtodo destroy()
// Mtodo de llamada mediante un HTTP POST
public void doPost (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
boolean hayError = false;
// adquisicin de los valores del formulario
if(req.getParameter("nombre")!=null)
nombre = req.getParameter("nombre");
else
hayError=true;
if(req.getParameter("apellidos")!=null)
apellidos = req.getParameter("apellidos");
else
hayError = true;
if(req.getParameter("opinion")!=null)
opinion = req.getParameter("opinion");
else
hayError = true;
if(req.getParameter("comentarios")!=null)
comentarios = req.getParameter("comentarios");
else
hayError = true;
// Mandar al usuario los valores adquiridos (Si no se ha producido error)
if(!hayError) {
if (actualizarBaseDeDatos() == 0)
devolverPaginaHTML(resp);
else
resp.sendError(500, "Se ha producido un error"+
" al actualizar la base de datos");
} else
resp.sendError(500, "Se ha producido un error"+
" en la adquisicin de parmetros");
} // fin doPost()
110 Informtica III

public int actualizarBaseDeDatos() {
// crear un statement de SQL
Statement stmt=null;
int numeroFilasActualizadas=0;
// Ejecucin del query de actualizacin de la base de datos
try {
stmt = conn.createStatement();
numeroFilasActualizadas = stmt.executeUpdate("INSERT INTO"+
" Opiniones_Recogidas VALUES"+
"('"+nombre+"','"+apellidos+"','"+opinion+
"','"+comentarios+"')");
if(numeroFilasActualizadas!=1) return -1;
} catch (SQLException sql) {
System.out.println("Se produjo un error creando Statement");
System.out.println(sql.getMessage());
return -2;
} finally {
// Se cierra el Statement
if(stmt!=null) {
try {
stmt.close();
} catch(SQLException e){
System.out.println("Error cerrando Statement");
System.out.println(e.getMessage());
return -3;
}
}
return 0;
} // fin finally
} // fin mtodo actualizarBaseDeDatos()
public void devolverPaginaHTML(HttpServletResponse resp) {
// Se obtiene un PrintWriter donde escribir (slo para mandar texto)
PrintWriter out=null;
try {
out=resp.getWriter();
} catch (IOException io) {
System.out.println("Se ha producido una excepcion");
}
// Se establece el tipo de contenido MIME de la respuesta
resp.setContentType("text/html");
// Se mandan los valores
out.println("<html>");
out.println("<head>");
out.println("<title>Valores recogidos en el formulario</title>");
out.println("</head>");
out.println("<body>");
out.println("<b><font size=+2>Valores recogidos del");
out.println("formulario: </font></b>");
out.println("<p><font size=+1><b>Nombre: </b>"+nombre+"</font>");
out.println("<br><fontsize=+1><b>Apellido : </b>"
+apellidos+"</font><b><font size=+1></font></b>");
out.println("<p><font size=+1><b>Opini&oacute;n: "+
"</b><i>"+opinion+"</i></font>");
out.println("<br><font size=+1><b>Comentarios: </b>"
+comentarios+"</font>");
out.println("<P><HR><CENTER><H2>Valores actualizados "+
"con xito</CENTER>");
out.println("</body>");
out.println("</html>");
Captulo 10. Servlets con acceso a bases de datos 111

// Se fuerza la descarga del buffer y se cierra el PrintWriter
out.flush();
out.close();
} // fin de devolverPaginaHTML()
// Funcin que permite al servidor web obtener una pequea descripcin del
// servlet, qu cometido tiene, nombre del autor, comentarios adicionales...
public String getServletInfo() {
return "Este servlet lee los datos de un formulario "+
"y los introduce en una base da datos";
} // fin de getServletInfo()
} // fin de la clase servletOpinion2
<!-- Fichero MiServlet2.htm -->
<HTML>
<HEAD><TITLE>Enve su opinin</TITLE></HEAD>
<BODY>
<H2>Por favor, envenos su opinin acerca de este sitio web</H2>
<FORM ACTION="http://localhost:8080/servlet/ServletOpinion2" METHOD="POST">
Nombre: <INPUT TYPE="TEXT" NAME="nombre" SIZE=15><BR>
Apellidos: <INPUT TYPE="TEXT" NAME="apellidos" SIZE=30><P>
Opinin que le ha merecido este sitio web<BR>
<INPUT TYPE="RADIO" CHECKED NAME="opinion" VALUE="Buena">Buena<BR>
<INPUT TYPE="RADIO" NAME="opinion" VALUE="Regular">Regular<BR>
<INPUT TYPE="RADIO" NAME="opinion" VALUE="Mala">Mala<P>
Comentarios <BR>
<TEXTAREA NAME="comentarios" ROWS=6 COLS=40>
</TEXTAREA><P>
<INPUT TYPE="SUBMIT" NAME="botonEnviar" VALUE="Enviar">
<INPUT TYPE="RESET" NAME="botonLimpiar" VALUE="Limpiar">
</FORM>
</BODY>
</HTML>
Not a i mpor t ant e: En est e f i cher o el val or del par met r o ACTION depende del or denador con el que se
est t r abaj ando como ser vi dor de ser vl et s. En el ej empl o se ha supuest o que el pr opi o or denador l ocal es
el ser vi dor de ser vl et s. Si se t r at a de ot r o or denador se puede poner su nombr e o su nmer o de IP
(suponi endo que l o t enga).
Est e ser vl et t i ene como r esul t ado el cambi o en l a base de dat os r ef l ej ado en l a Fi gur a 10. 2 y una
pant al l a si mi l ar a l a del ej empl o i nt r oduct or i o en el br owser . Cada vez que se ej ecut a el f or mul ar i o de
aade una nueva l nea a l a t abl a Opi ni ones_Recogi das.


Fi gur a 10. 2. Resul t ado obt eni do en l a base de dat os.
112 Informtica III

En est e ej empl o cabe r esal t ar l o si gui ent e:
La conexi n con l a base de dat os se hace por medi o de un dr i ver que convi er t e de JDBC a ODBC. La
car ga de di cho dr i ver JDBC-ODBC t i ene l ugar dur ant e l a i ni ci al i zaci n del ser vl et , al i gual que l a
conexi n con l a base de dat os. Bast a pues con una ni ca conexi n a l a base de dat os par a sat i sf acer
t odas l as pet i ci ones de l os cl i ent es (a pr i or i , ya que puede ser necesar i o t ener ms conexi ones
abi er t as si se esper a un t r f i co i nt enso) .
A su vez, en el mt odo dest r oy() se ha i mpl ement ado l a desconexi n de l a base de dat os, de f or ma
que no quede r ecur so al guno ocupado una vez que el ser vl et haya si do descar gado.
En el mt odo doPost () se ha compr obado que l a adqui si ci n de l os par met r os del f or mul ar i o er a
cor r ect a, envi ando un er r or al cl i ent e en caso cont r ar i o. Tambi n podr a haber se compr obado que
ni ngn campo est uvi er a vaco.
El mt odo act ual i zar BaseDeDat os() es el que se encar ga de l a i nt r oducci n de l os val or es en l a base
de dat os, mi ent r as que el mt odo devol ver Pagi naHTML() se encar ga de l a pr esent aci n en pant al l a
de l os val or es l edos. En l a ej ecuci n del quer y en act ual i zar BaseDeDat os() se t i enen muy en cuent a
posi bl es excepci ones que pudi er an sur gi r y se devuel ve como val or de r et or no un cdi go de er r or
di st i nt o de cer o par a esos casos.
Asi mi smo, medi ant e el bl oque f i nal l y se consi gue cer r ar si empr e el St at ement t ant o si se pr oduce el
er r or como si no, l i ber ando r ecur sos del si st ema de esa maner a.
Tngase especi al cui dado con l a si nt axi s del quer y, y en especi al con l as comi l l as si mpl es en que debe
i r envuel t o cada St r i ng.
Tr as most r ar en pant al l a l os dat os r ecogi dos, se compr ueba si se ha pr oduci do al guna act ual i zaci n. Si
est e es el caso, se i nf or ma al cl i ent e de est a ci r cunst anci a, most r ando un mensaj e de er r or en caso
cont r ar i o.
10. 3. Ej empl o 2: Consul t ar una base de dat os Ti po Access
Est e segundo ej empl o pr et ende most r ar l a f or ma en que se accede a dat os cont eni dos en bases de
dat os. Par a el l o, se ha escr i t o un pr ogr ama empl eando un ser vl et que r eci be como par met r o el nombr e
de un gr upo de pr ct i cas ( par met r o GRUPO) , y muest r a l a l i st a de l os al umnos que est n en ese gr upo,
as como al gunos de sus dat os per sonal es ( nmer o de car net , nombr e, apel l i dos, cur so) .
El usuar i o sel ecci ona el gr upo que qui er e ver en el f or mul ar i o most r ado en l a Fi gur a 10. 3:

El cdi go HTML cor r espondi ent e a l a pgi na most r ada en l a Fi gur a 10. 3 es el si gui ent e:

Fi gur a 10. 3. For mul ar i o del Ej empl o 2.
Captulo 10. Servlets con acceso a bases de datos 113

<!-- fichero Formulario2.htm -->
<html>
<head>
<title>Grupos de prcticas</title>
</head>
<body>
<h2 align="center">Escoja el grupo de prcticas cuya lista desea ver</h2>
<form method="GET" action="http://localhost:8080/servlet/ListaAlumnos"
name="Formulario">
<div align="center"><center><p>
<input type="radio" value=1 checked name="GRUPO">Grupo1&nbsp;
<input type="radio" name="GRUPO" value=2>Grupo2&nbsp;
<input type="radio" name="GRUPO" value=3>Grupo3
</p></center></div>
<div align="center"><center><p>
<input type="submit" value="Enviar" name="BotonEnviar">
<input type="reset" value="Borrar" name="BotonBorrar">
</p></center></div>
</form>
</body>
</html>
El f or mul ar i o se compone de t r es r adi o but t ons con l os nombr es de l os gr upos di sponi bl es, y de l os
bot ones Envi ar y Bor r ar . Por ot r a par t e, el mt odo HTTP empl eado en est e ej empl o ha si do HTTP GET.
Por est o, cl i cando en Envi ar , el URL sol i ci t ado al ser vi dor t i ene l a si gui ent e f or ma:
http://localhost:8080/servlet/ListaAlumnos?GRUPO=1&BotonEnviar=Enviar
Sel ecci onando el Gr upo1 y cl i cando en Envi ar , se obt i ene el r esul t ado most r ado en l a Fi gur a 10. 4.
El ser vl et empl eado par a obt ener es bast ant e si mpl e. He aqu el cdi go del ser vl et :

Fi gur a 10. 4. Li st a de al umnos del Gr upo 1
114 Informtica III

// fichero ListaAlumnos.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.*;
public class ListaAlumnos extends HttpServlet {
Connection conn = null;
// Vector que contendr los objetos Alumno
Vector vectorAlumnos=null;
//Este mtodo se ejecuta una nica vez, al ser inicializado por primera vez
//el servlet.Se suelen inicializar variables y ejecutar operaciones costosas
//en tiempo de ejecucin (abrir ficheros, conectar con bases de datos, etc)
public void init (ServletConfig config) throws ServletException {
// Llamada al mtodo init() de la superclase (GenericServlet)
// As se asegura una correcta inicializacin del servlet
super.init(config);
// url de la base de datos
String url=new String("jdbc:odbc:alumnos");
// Carga del Driver
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch(ClassNotFoundException ex) {
System.out.println("Error al cargar el driver");
System.out.println(ex.getMessage());
}
// Establecimiento de la conexin
try {
conn=DriverManager.getConnection(url,"","");
} catch (SQLException sqlEx) {
System.out.println("Se ha producido un error al establecer "+
"la conexin con: "+url);
System.out.println(sqlEx.getMessage());
}
System.out.println("Iniciando ListaAlumnos");
} // fin del mtodo init()
// Este mtodo es llamado por el servidor web al "apagarse"
// (al hacer shut down). Sirve para proporcionar una correcta
// desconexin de una base de datos, cerrar ficheros abiertos, etc.
public void destroy () {
super.destroy();
System.out.println("Cerrando conexion...");
try {
conn.close();
} catch(SQLException ex){
System.out.println("No se pudo cerrar la conexion");
System.out.println(ex.getMessage());
}
} // fin de destroy()
// Mtodo llamada mediante un HTTP GET
public void doGet (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// Obtencin del grupo de prcticas
String grupo = null;
Captulo 10. Servlets con acceso a bases de datos 115

grupo = req.getParameter("GRUPO");
if(grupo==null) {
resp.sendError(500, "Se ha producido un error en la lectura " +
"de la solicitud");
return;
}
//Consulta a la base de datos para obtener la lista de alumnos de un grupo
if(obtenerLista(grupo)==0) {
// Mostrar la lista de alumnos mediante una pgina HTML
mostrarListaAlumnos(resp, grupo);
}
else if(obtenerLista(grupo)==-3) {
resp.sendError(500, "No se ha encontrado el grupo: " +grupo);
}
else
resp.sendError(500, "Se ha producido un error en el acceso " +
"a la base de datos");
} // fin del mtodo doGet()
public int obtenerLista(String grupo) {
Statement stmt = null;
ResultSet rs = null;
// Ejecucin del query
try {
stmt=conn.createStatement();
rs = stmt.executeQuery("SELECT DISTINCT Nombre, Apellidos, Curso, " +
"Carnet, GrupoPractica FROM TablaAlumnos " +
"WHERE GrupoPractica=" + grupo + " ORDER BY Carnet");
vectorAlumnos=new Vector();
// Lectura del ResultSet, en Java 2
while (rs.next()) {
Alumno temp=new Alumno();
temp.setNombre(rs.getString("Nombre"));
temp.setApellidos(rs.getString("Apellidos"));
temp.setCarnet(rs.getLong("Carnet"));
temp.setCurso(rs.getInt("Curso"));
vectorAlumnos.addElement(temp);
}
// En el JDK 1.1.x hay un bug que hace que no se lean bien los valores
// que no son Strings. Sera de la siguiente forma:
/* while (rs.next()) {
Alumno temp=new Alumno();
temp.setNombre(rs.getString("Nombre"));
temp.setApellidos(rs.getString("Apellidos"));
temp.setCarnet(java.lang.Long.parseLong(rs.getString("Carnet")));
temp.setCurso(java.lang.Integer.parseInt(rs.getString("Curso")));
vectorAlumnos.addElement(temp);
}*/
if(vectorAlumnos.size()==0) return -3;
return 0;
} catch (SQLException sql) {
System.out.println("Se produjo un error al crear el Statement");
System.out.println(sql.getMessage());
return -1;
} finally {
116 Informtica III

// se cierra el Statment
if(stmt!=null) {
try {
stmt.close();
} catch(SQLException e) {
System.out.println("Error al cerrar el Statement");
System.out.println(e.getMessage());
return -2;
}
}
} // fin del finally
} // fin del mtodo obtenerLista()
public void mostrarListaAlumnos(HttpServletResponse resp, String grupo) {
// se establece el tipo de contenido MIME de la respuesta
resp.setContentType("text/html");
// se obtiene un PrintWriter donde escribir (slo para mandar texto)
PrintWriter out=null;
try {
out=resp.getWriter();
} catch (IOException io) {
System.out.println("Se ha producido una excepcion");
}
// se manda la lista
out.println("<html>");
out.println("");
out.println("<head>");
out.println("<title>Lista de alumnos del grupo "+grupo+"</title>");
out.println("<meta name=\"GENERATOR\" " +
"content=\"Microsoft FrontPage 3.0\">");
out.println("</head>");
out.println("");
out.println("<body>");
out.println("");
out.println("<H2 align=\"center\">Lista de alumnos del grupo " +
grupo + "</H2>");
out.println("<div align=\"center\"><center>");
out.println("");
out.println("<table border=\"1\" width=\"70%\">");
out.println("<tr>");
out.println("<td width=\"25%\" bgcolor=\"#808080\">"+
"<font color=\"#FFFFFF\">Carnet</font></td>");
out.println("<td width=\"25%\" bgcolor=\"#808080\">"+
"<font color=\"#FFFFFF\">Nombre</font></td>");
out.println("<td width=\"25%\" bgcolor=\"#808080\">"+
"<font color=\"#FFFFFF\">Apellidos</font></td>");
out.println("<td width=\"25%\" bgcolor=\"#808080\">"+
"<font color=\"#FFFFFF\">Curso</font></td>");
out.println("</tr>");
// Datos del Alumno por filas
Alumno alum=null;
for (int i=0; i<vectorAlumnos.size();i++) {
alum=(Alumno)vectorAlumnos.elementAt(i);
out.println("<tr>");
out.println("<td width=\"25%\">"+alum.getCarnet()+"</td>");
out.println("<td width=\"25%\">"+alum.getNombre()+"</td>");
out.println("<td width=\"25%\">"+alum.getApellidos()+"</td>");
out.println("<td width=\"25%\">"+alum.getCurso()+"</td>");
out.println("</tr>");
}
Captulo 10. Servlets con acceso a bases de datos 117

out.println("</table>");
out.println("</center></div>");
out.println("</body>");
out.println("</html>");
// se fuerza la descarga del buffer y se cierra el PrintWriter
out.flush();
out.close();
} // fin del mtodo mostrarListaAlumnos()
// Funcin que permite al servidor web obtener una pequea descripcin del
// servlet, qu cometido tiene, nombre del autor, comentarios adicionales...
public String getServletInfo() {
return "Servlet que muestra en pantalla la lista de un grupo de prcticas";
}
} // fin de la clase ListaAlumnos
Puede obser var se que est e ser vl et es bast ant e par eci do al del ej empl o pr evi o, en cuant o a su f or ma
gener al . Ti ene como el ant er i or un mt odo i ni t () donde ef ect a l a conexi n con l a base de dat os cuyo DSN
es al umnos, y compr ueba que l a conexi n se ha r eal i zado con xi t o. Asi mi smo, t i ene un mt odo dest r oy()
donde se ci er r a di cha conexi n y se avi sa de posi bl es event ual i dades.
Si n embar go, a di f er enci a del ser vl et del ej empl o ant er i or , l a pet i ci n del cl i ent e es de t i po HTTP
GET, por l o que se ha r edef i ni do el mt odo doGet () y no el doPost () como en el caso ant er i or . En est e
mt odo, l o pr i mer o que se hace es l eer el par met r o GRUPO dent r o del mt odo doGet (). En caso de que
haya al gn pr obl ema en l a l ect ur a de di cho par met r o, l anza un mensaj e de er r or .
Una vez que se sabe cul es el gr upo cuya l i st a qui er e vi sual i zar el cl i ent e, se l l ama al mt odo
obt ener Li st a(St r i ng), que t i ene como par met r o pr eci sament e el nombr e del gr upo a most r ar . En est e
mt odo se r eal i za l a consul t a con l a base de dat os, medi ant e el mt odo execut eQuer y() de l a i nt er f ace
St at ement .
La ej ecuci n de di cho mt odo t i ene como r esul t ado un obj et o Resul t Set , que es como una especi e de
t abl a cuyas f i l as son cada uno de l os al umnos, y cuyas col umnas son l os dat os sol i ci t ados de ese al umno
(car net , nombr e, apel l i dos, cur so, . . . ) . Par a obt ener di chos dat os se empl ea el mt odo next () del obj et o
Resul t Set en conj unci n con l os mt odos get XXX() de di cho obj et o. En el JDK 1.1.x exi st a un bug por el
cual Java f al l aba en det er mi nadas ci r cunst anci as al i nt ent ar l eer val or es de campos con mt odos di st i nt os
del get St r i ng() ( por ej empl o: get Long(), get Int (), et c. ) . Est o puede ser sol vent ado empl eando el mt odo
get St r i ng() y despus convi r t i endo el St r i ng r esul t ant e a l os di st i nt os t i pos pr i mi t i vos deseados (i nt , l ong,
et c. ) . En Java 2 di cho bug ha si do cor r egi do, y pueden empl ear se di r ect ament e l os mt odos adecuados
si n ni ngn pr obl ema.
En est e ej empl o, adems, al l eer l os val or es de l a base de dat os, est os han si do al macenados en un
Vect or de obj et os de l a cl ase Al umno, que ha si do cr eada par a est e ej empl o. Est a cl ase l o ni co que hace
es def i ni r l as var i abl es que van a cont ener l os dat os de cada al umno, y est abl ecer l os mt odos de
i nt r oducci n y r ecuper aci n de di chos dat os.
public class Alumno {
// Definicin de variables miembro
private String nombre;
private String apellidos;
private long carnet;
private int curso;
private String grupoPractica;
// Mtodos para establecer los datos
public void setNombre(String nom) { nombre=nom; }
public void setApellidos(String apel) { apellidos=apel; }
public void setCarnet(long carn) { carnet=carn; }
public void setCurso(int cur) { curso=cur; }
public void setGrupoPractica(String grupo) { grupoPractica=grupo; }
// Mtodos de recuperacin de datos
public String getNombre() { return nombre; }
public String getApellidos() { return apellidos; }
118 Informtica III

public long getCarnet() { return carnet; }
public int getCurso() { return curso; }
public String getGrupoPractica() { return grupoPractica; }
} // fin de la clase Alumno
Si gui endo con el mt odo obt ener Li st a(St r i ng), su f unci n es compr obar que se ha obt eni do al menos
una f i l a como r esul t ado de l a consul t a y capt ur ar posi bl es excepci ones, r et or nando l os cor r espondi ent es
cdi gos de er r or si f uer a necesar i o.
Por l t i mo, vol vi endo al mt odo doGet () que se est aba descr i bi endo, sl o queda l l amar al mt odo
most r ar Li st aAl umnos(Ht t pSer vl et Response r esp, St r i ng gr upo), en caso de que no se haya pr oduci do
ni ngn er r or . Est e mt odo es anl ogo al mt odo devol ver Pagi naHTML() del ej empl o ant er i or . En est e
caso, muest r a una t abl a HTML que va const r uyendo di nmi cament e, aadi endo t ant as f i l as a l a mi sma
como al umnos est n cont eni dos en el vect or de al umnos.



CAPTULO 11
11. Sesi n en Servl et s
11. 1. Formas de segui r l a t rayect ori a de l os usuari os
Los ser vl et s per mi t en segui r l a t r ayect or i a de un cl i ent e, es deci r , obt ener y mant ener una
det er mi nada i nf or maci n acer ca del cl i ent e. De est a f or ma se puede t ener i dent i f i cado a un cl i ent e
(usuar i o que est ut i l i zando un br owser ) dur ant e un det er mi nado t i empo. Est o es muy i mpor t ant e si se
qui er e di sponer de apl i caci ones que i mpl i quen l a ej ecuci n de var i os ser vl et s o l a ej ecuci n r epet i da de
un mi smo ser vl et . Un cl ar o ej empl o de apl i caci n de est a t cni ca es el de l os comer ci os va Int er net que
per mi t en l l evar un car r i t o de l a compr a en el que se van guar dando aquel l os pr oduct os sol i ci t ados por el
cl i ent e. El cl i ent e puede i r navegando por l as di st i nt as secci ones del comer ci o vi r t ual , es deci r r eal i zando
di st i nt as conexi ones HTTP y ej ecut ando di ver sos ser vl et s, y a pesar de el l o no se pi er de l a i nf or maci n
cont eni da en el car r i t o de l a compr a y se sabe en t odo moment o que es un mi smo cl i ent e qui en est
haci endo esas conexi ones di f er ent es.
El mant ener i nf or maci n sobr e un cl i ent e a l o l ar go de un pr oceso que i mpl i ca ml t i pl es conexi ones se
puede r eal i zar de t r es f or mas di st i nt as:
Medi ant e cooki es
Medi ant e segui mi ent o de sesi ones (Sessi on Tr acki ng)
Medi ant e l a r eescr i t ur a de URLs
11. 2. Cooki es
Est r i ct ament e habl ando cooki e si gni f i ca gal l et a. Par ece ser que di cha pal abr a t i ene ot r o si gni f i cado:
se ut i l i zar a t ambi n par a l a f i cha que l e dan a un cl i ent e en un guar dar r opa al dej ar el abr i go y que t i ene
que ent r egar par a que l e r econozcan y l e devuel van di cha pr enda. st e ser a el sent i do de l a pal abr a
cooki e en el cont ext o de l os ser vl et s: al go que se ut i l i za par a que un ser vi dor HTTP r econozca a un
cl i ent e como al gui en que ya se haba conect ado ant er i or ment e. Como er a de esper ar , l os cooki es en Java
son obj et os de l a cl ase Cooki e, en el package j avax.ser vl et .ht t p.
El empl eo de cooki es en el segui mi ent o de un cl i ent e r equi er e que di cho cl i ent e sea capaz de
sopor t ar l as. Si n embar go, puede ocur r i r que a pesar de est ar di sponi bl e, di cha opci n est desact i vada
por el usuar i o, por l o que puede ser necesar i o empl ear ot r as al t er nat i vas de segui mi ent o de cl i ent es como
l a r eescr i t ur a de URLs. Est o es debi do a que l os ser vl et s envan cooki es a l os cl i ent es j unt o con l a
r espuest a, y l os cl i ent es l as devuel ven j unt o con una pet i ci n. As, si un cl i ent e t i ene act i vada l a opci n
No cooki es o si mi l ar en su navegador , no l e l l egar l a cooki e envi ada por el ser vl et , por l o que el
segui mi ent o ser i mposi bl e.
Cada cooki e t i ene un nombr e que puede ser el mi smo par a var i as cooki es, y se al macenan en un
di r ect or i o o f i cher o pr edet er mi nado en el di sco dur o del cl i ent e. De est a f or ma, puede mant ener se
i nf or maci n acer ca del cl i ent e dur ant e das, ya que esa i nf or maci n queda al macenada en el or denador
del cl i ent e (aunque no i ndef i ni dament e, pues l as cooki es t i enen una f echa de caduci dad) .
La f or ma en que se envan cooki es es bast ant e senci l l a en concept o. Aadi endo una cl ave y un val or al
header del mensaj e es posi bl e envi ar cooki es al cl i ent e, y desde st e al ser vi dor . Adi ci onal ment e, es
posi bl e i ncl ui r ot r os par met r os adi ci onal es, t al es como coment ar i os. Si n embar go, est os no suel en ser
t r at ados cor r ect ament e por l os br owser s act ual es, por l o que su empl eo es desaconsej abl e. Un ser vi dor
puede envi ar ms de una cooki e al cl i ent e (hast a vei nt e cooki es) .
120 Informtica III

Las cooki es al macenadas en el cl i ent e son envi adas en pr i nci pi o sl o al ser vi dor que l as or i gi n. Por
est e mot i vo (por que l as cooki es son envi adas al ser vi dor HTTP y no al ser vl et ), l os ser vl et s que se
ej ecut an en un mi smo ser vi dor compar t en l as mi smas cooki es.
La f or ma de i mpl ement ar t odo est o es r el at i vament e si mpl e gr aci as a l a cl ase Cooki e i ncl ui da en el
Ser vl et API. Par a envi ar una cooki e es pr eci so:
Cr ear un obj et o Cooki e
Est abl ecer sus at r i but os
Envi ar l a cooki e
Por ot r a par t e, par a obt ener i nf or maci n de una cooki e, es necesar i o:
Recoger t odas l as cooki es de l a pet i ci n del cl i ent e
Encont r ar l a cooki e pr eci sa
Obt ener el val or r ecogi do en l a mi sma
11.2.1. Cr ear un obj et o Cooki e
La cl ase j avax. ser vl et .ht t p.Cooki e t i ene un const r uct or que pr esent a como ar gument os un St r i ng con
el nombr e de l a cooki e y ot r o St r i ng con su val or . Es i mpor t ant e hacer not ar que t oda l a i nf or maci n
al macenada en cooki es l o es en f or ma de St r i ng, por l o que ser pr eci so conver t i r cual qui er val or a St r i ng
ant es de aadi r l o a una cooki e.
Hay que ser cui dadoso con l os nombr es empl eados, ya que aquel l os que cont engan car act er es
especi al es pueden no ser vl i dos. Adi ci onal ment e, aquel l os que comi enzan por el smbol o de dl ar ( $) no
pueden empl ear se, por est ar r eser vados.
Con r espect o al val or de l a cooki e, en pr i nci pi o puede t ener cual qui er f or ma, aunque hay que t ener
caut el a con el val or nul l , que puede ser i ncor r ect ament e manej ado por l os br owser s, as como espaci os en
bl anco o l os si gui ent es car act er es:
[ ] ( ) = , / ? @:;
Por l t i mo, es i mpor t ant e saber que es necesar i o cr ear l a cooki e ant es de acceder al Wr i t er del obj et o
Ht t pSer vl et Response, pues como l as cooki es son envi adas al cl i ent e en el header del mensaj e, y st as
deben ser escr i t as ant es de cr ear el Wr i t er .
Por ej empl o, el si gui ent e cdi go cr ea una cooki e con el nombr e Compr a y el val or de
IdObj et oACompr ar , que es una var i abl e que cont i ene l a i dent i f i caci n de un obj et o a compr ar (301):
...
String IdObjetoAComprar = new String("301");
if(IdObjetoAComprar!=null)
Cookie miCookie=new Cookie("Compra", IdObjetoAComprar);
11.2.2. Est abl ecer l os at r i but os de l a cooki e
La cl ase Cooki e pr opor ci ona var i os mt odos par a est abl ecer l os val or es de una cooki e y sus at r i but os.
Ent r e ot r os, l os most r ados en l a Tabl a 11. 1.
Todos est os mt odos t i enen sus mt odos get XXX() cor r espondi ent es i ncl ui dos en l a mi sma cl ase.
Por ej empl o, se puede cambi ar el val or de una cooki e de l a si gui ent e f or ma:
...
Cookie miCookie=new Cookie("Nombre", "ValorInicial");
miCookie.setValue("ValorFinal");
o hacer que sea el i mi nada al cer r ar el br owser :
miCookie.setMaxAge(-1);
...

Captulo 11. Sesin en Servlets 121

11.2.3. Envi ar l a cooki e
Las cooki es son envi adas como par t e del header de l a r espuest a al cl i ent e. Por el l o, t i enen que ser
aadi das a un obj et o Ht t pSer vl et Response medi ant e el mt odo addCooki e(Cooki e). Tal y como se ha
expl i cado con ant er i or i dad, est o debe r eal i zar se ant es de l l amar al mt odo get Wr i t er () de ese mi smo
obj et o. Si r va como ej empl o el si gui ent e cdi go:
...
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
...
Cookie miCookie=new Cookie("Nombre","Valor");
miCookie.setMaxAge(-1);
miCookie.setComment("Esto es un comentario");
resp.addCookie(miCookie);
PrintWriter out=resp.getWriter();
...
}
11.2.4. Recoger l as cooki es
Los cl i ent es devuel ven l as cooki es como par t e i nt egr ant e del header de l a pet i ci n al ser vi dor . Por
est e mot i vo, l as cooki es envi adas deber n r ecoger se del obj et o Ht t pSer vl et Request medi ant e el mt odo
get Cooki es(), que devuel ve un ar r ay de obj et os Cooki e. Vase el si gui ent e ej empl o:
...
Cookie miCookie = null;
Cookie[] arrayCookies = req.getCookies();
miCookie = arrayCookies[0];
...
El ant er i or ej empl o r ecoge l a pr i mer a cooki e del ar r ay de cooki es.
Por ot r a par t e, habr que t ener cui dado, pues t al y como se ha menci onado con ant er i or i dad, puede
haber ms de una cooki e con el mi smo nombr e, por l o que habr que det ect ar de al guna maner a cul es
l a cooki e que se necesi t a.
11.2.5. Obt ener el val or de l a cooki e
Par a obt ener el val or de una cooki e se ut i l i za el mt odo get Val ue() de l a cl ase Cooki e. Obsr vese el
si gui ent e ej empl o. Supngase que se t i ene una t i enda vi r t ual de l i br os y que un usuar i o ha deci di do
Mt odos de l a cl ase Cooki e Coment ari os
publ i c voi d
set Comment (St ri ng)
Si un br owser pr esent a est a cooki e al usuar i o, el comet i do de l a cooki e
ser descr i t o medi ant e est e coment ar i o.
publ i c voi d set Domai n(St ri ng) Est abl ece el pat r n de domi ni o a qui en per mi t i r el acceso a l a
i nf or maci n cont eni da en l a cooki e. Por ej empl o . yahoo. com per mi t e el
acceso a l a cooki e al ser vi dor www. yahoo. com per o no a a. b. yahoo. com
publ i c voi d set MaxAge(i nt ) Est abl ece el t i empo de caduci dad de l a cooki e en segundos. Un val or -1
i ndi ca al br owser que bor r e l a cooki e cuando se apague. Un val or 0 bor r a
l a cooki e de i nmedi at o.
publ i c voi d set Pat h(St ri ng) Est abl ece l a r ut a de acceso del di r ect or i o de l os ser vl et s que t i enen
acceso a l a cooki e. Por def ect o es aquel que or i gi n l a cooki e.
Publ i c voi d
set Secure(bool ean)
Indi ca al br owser que l a cooki e sl o debe ser envi ada ut i l i zando un
pr ot ocol o segur o (ht t ps). Sl o debe ut i l i zar se en caso de que el ser vi dor
que haya cr eado l a cooki e l o haya hecho de f or ma segur a.
publ i c voi d set Val ue(St ri ng) Est abl ece el val or de l a cooki e
publ i c voi d set Versi on(i nt ) Est abl ece l a ver si n del pr ot ocol o de l a cooki e.
Tabl a 11. 1. Mt odos de l a cl ase Cooki e.
122 Informtica III

el i mi nar un l i br o del car r o de l a compr a. Se t i enen dos cooki es con el mi smo nombr e (compr a) , per o con
dos val or es (l i br o1, l i br o2). Si se qui er e el i mi nar el val or l i br o1:
...
String libroABorrar=req.getParameter("Borrar");
...
if(libroABorrar!=null) {
Cookie[] arrayCookies=req.getCookies();
for(i=0;i<arrayCookies.length;i++) {
Cookie miCookie=arrayCookies[i];
if(miCookie.getName().equals("compra")
&&miCookie.getValue.equals("libro1") {
miCookie.setMaxAge(0); // Elimina la cookie
} // fin del if
} // fin del for
} // fin del if
...
Tal y como se ha di cho con ant er i or i dad, una cooki e cont i ene como val or un St r i ng. Est e St r i ng debe
ser t al que si gni f i que al go par a el ser vl et . Con est o se qui er e deci r que es r esponsabi l i dad excl usi va del
pr ogr amador est abl ecer que f or mat o o codi f i caci n va a t ener ese St r i ng que al macena l a cooki e. Por
ej empl o, si se t i ene una t i enda on- l i ne, pueden est abl ecer se t r es posi bl es t i pos de st at us de un pr oduct o
(con r ef er enci a al i nt er s de un cl i ent e det er mi nado por di cho pr oduct o) : el cl i ent e se ha sol i ci t ado
i nf or maci n sobr e el pr oduct o (A) , el cl i ent e l o t i ene cont eni do en el car r i t o de l a compr a ( B) o el cl i ent e
ya ha compr ado uno ant er i or ment e ( C) . As, si por ej empl o el cdi go del pr oduct o f uer a el 301 y est uvi er a
cont eni do en el car r i t o de l a compr a, podr a envi ar se una cooki e con el si gui ent e val or :
Cookie miCookie = new Cookie("NombreDeCookie", "301_B");
El pr ogr amador deber est abl ecer una codi f i caci n pr opi a y ser capaz de descodi f i car l o
post er i or ment e.
11. 3. Sesi ones (Sessi on Tracki ng)
Una sesi n es una conexi n cont i nuada de un mi smo br owser a un ser vi dor dur ant e un t i empo pr ef i j ado
de t i empo. Est e t i empo depende habi t ual ment e del ser vi dor , aunque a par t i r de l a ver si n 2.1 del Ser vl et
API puede est abl ecer se medi ant e el mt odo set MaxInact i veInt er val (i nt ) de l a i nt er f ace Ht t pSessi on.
Est a i nt er f ace es l a que pr opor ci ona l os mt odos necesar i os par a mant ener sesi ones.
Al i gual que l as cooki es, l as sesi ones son compar t i das por t odos l os ser vl et s de un mi smo ser vi dor . De
hecho, por def ect o se ut i l i zan cooki es de una f or ma i mpl ci t a en el mant eni mi ent o de sesi ones. Por el l o,
si el br owser no acept a cooki es, habr que empl ear se l as sesi ones en conj unci n con l a r eescr i t ur a de
URLs (Ver apar t ado 11. 4).
La f or ma de obt ener una sesi n es medi ant e el mt odo get Sessi on(bool ean) de un obj et o
Ht t pSer vl et Request . Si est e bool ean es t r ue, se cr ea una sesi n nueva si es necesar i o mi ent r as que si es
f al se, el mt odo devol ver l a sesi n act ual . Por ej empl o:
...
HttpSession miSesion = req.getSession(true);
...
cr ea una nueva sesi n con el nombr e mi Sesi on.
Una vez que se t i ene un obj et o Ht t pSessi on, es posi bl e mant ener una col ecci n de par es nombr e de
dat o/ val or de dat o, de f or ma que pueda al macenar se t odo t i po de i nf or maci n sobr e l a sesi n. Est e
val or puede ser cual qui er obj et o de l a cl ase Obj ect que se desee. La f or ma de aadi r val or es a l a sesi n
es medi ant e el mt odo put Val ue(St r i ng , Obj ect ) de l a cl ase Ht t pSessi on y l a de obt ener l os es medi ant e
el mt odo get Val ue(St r i ng , Obj ect ) del mi smo obj et o. Est o puede ver se en el si gui ent e ej empl o:
Captulo 11. Sesin en Servlets 123

...
HttpSession miSesion=req.getSesion(true);
CarritoCompras compra = (CarritoCompras) miSesion.getValue(miSesion.getId());
if(compra==null) {
compra = new CarritoCompras();
miSesion.putValue(miSesion.getId(), compra);
}
...
En est e ej empl o, se supone l a exi st enci a de una cl ase l l amada Car r i t oCompr as. En pr i mer l ugar se
obt i ene una nueva sesi n ( en caso de que f uer a necesar i o, si no se mant endr una cr eada pr evi ament e) , y
se t r at a de obt ener el obj et o Car r i t oCompr as aadi do a l a sesi n. Obsr vese que par a el l o se hace una
l l amada al mt odo get Id() del obj et o mi Sesi on. Cada sesi n se encuent r a i dent i f i cada por un
i dent i f i cador ni co que l a di f er enci a de l as dems. Est e mt odo devuel ve di cho i dent i f i cador . Est a es una
buena f or ma de evi t ar conf usi ones con el nombr e de l as sesi ones y el de sus val or es. En cual qui er caso, al
obj et o Car r i t oCompr as se l e poda haber asoci ado cual qui er ot r a cl ave. Si no se hubi er a aadi do
pr evi ament e el obj et o Car r i t oCompr as a l a sesi n, l a l l amada al mt odo get Val ue() t endr a como
r esul t ado nul l . Obsr vese adems, que es pr eci so hacer un cast par a pasar el obj et o Obj ect a obj et o
Car r i t oCompr as.
En caso de que compr a sea nul l , es deci r , que no exi st i er a un obj et o aadi do pr evi ament e, se cr ea un
nuevo obj et o Car r i t oCompr as y se aade a l a sesi n mi Sesi on medi ant e el mt odo put Val ue(), ut i l i zando
de nuevo el i dent i f i cador de l a sesi n como nombr e.
Adems de est os mt odos menci onados, l a i nt er f ace Ht t pSessi on def i ne l os si gui ent es mt odos:
get Cr eat i onTi me(): devuel ve el moment o en que f ue cr eado l a sesi n ( en mi l i segundos).
get Last AccessedTi me(): devuel ve el l t i mo moment o en que el cl i ent e r eal i z una pet i ci n con el
i dent i f i cador asi gnado a una det er mi nada sesi n (en mi l i segundos)
get Val ueNames(): devuel ve un ar r ay con t odos l os nombr es de l os obj et os asoci ados con l a sesi n.
i nval i dat e(): i nval i da l a sesi n en cur so.
i sNew(): devuel ve un bool ean i ndi cando si l a sesi n es nueva .
r emoveVal ue(St r i ng): el i mi na el obj et o asoci ado con una det er mi nada cl ave.
De t odos l os ant er i or es mt odos convi ene coment ar dos en especi al : i nval i dat e() y i sNew().
El mt odo i nval i dat e() i nval i da l a sesi n en cur so. Tal y como se ha menci onado con ant er i or i dad, una
sesi n puede ser i nval i dada por el pr opi o ser vi dor si en el t r anscur so de un i nt er val o pr ef i j ado de t i empo
no ha r eci bi do pet i ci ones de un cl i ent e. Inval i dar qui er e deci r el i mi nar el obj et o Ht t pSessi on y l os val or es
asoci ados con l del si st ema.
El mt odo i sNew() si r ve par a conocer si una sesi n es nueva . El ser vi dor consi der a que una sesi n es
nueva hast a que el cl i ent e se una a l a sesi n. Hast a ese moment o i sNew() devuel ve t r ue. Un val or de
r et or no t r ue puede dar se en l as si gui ent es ci r cunst anci as:
El cl i ent e t odava no sabe nada acer ca de l a sesi n
La sesi n t odava no ha comenzado.
El cl i ent e no qui er e uni r se a l a sesi n. Ocur r e cuando el br owser t i ene l a acept aci n de cooki es
desact i vada.
11. 4. Reescri t ura de URLs
A pesar de que l a mayor a de l os br owser ms ext endi dos sopor t an l as cooki es en l a act ual i dad, par a
poder empl ear sesi ones con cl i ent es que o bi en no sopor t an cooki es o bi en l as r echazan, debe ut i l i zar se
l a r eescr i t ur a de URLs. No t odos l os ser vi dor es sopor t an l a r eescr i t ur a de URLs ( por ej empl o el
ser vl et r unner que acompaa el JSDK) .
Par a empl ear est t cni ca l o que se hace es i ncl ui r el cdi go i dent i f i cat i vo de l a sesi n (sessi onId) en
el URL de l a pet i ci n. Los mt odos que se encar gan de r eescr i bi r el URL si f uer a necesar i o son
Ht t pSer vl et Response.encodeUr l () y Ht t pSer vl et Response.encodeRedi r ect Ur l () (sust i t ui das en el API 2.1
por encodeURL() y encodeRedi r ect URL() r espect i vament e). El pr i mer o de el l os l ee un St r i ng que
124 Informtica III

r epr esent a un URL y si f uer a necesar i o l a r eescr i be aadi endo el i dent i f i cat i vo de l a sesi n, dej ndol o
i nal t er ado en caso cont r ar i o. El segundo r eal i za l o mi smo sl o que con URLs de r edi r ecci n, es deci r ,
per mi t e r eenvi ar l a pet i ci n del cl i ent e a ot r o URL .
Vase el si gui ent e ej empl o:
...
HttpSession miSesion=req.getSesion(true);
CarritoCompras compra = (CarritoCompras)miSesion.getValue(miSesion.getId());
if(compra==null) {
compra = new CarritoCompras();
miSesion.putValue(miSesion.getId(), compra);
}
...
PrintWriter out = resp.getWriter();
resp.setContentType("text/html");
...
out.println("Esto es un enlace reescrito");
out.println("<a href\""+
resp.encodeUrl("/servlet/buscador?nombre=Pedro")+"\"</a>");
...
En est e caso, como hay una sesi n, l a l l amada al mt odo encodeUr l () t endr a como consecuenci a l a
r eescr i t ur a del enl ace i ncl uyendo el i dent i f i cat i vo de l a sesi n en l .








SECCIN 4
Comuni caci ones en red



CAPTULO 12
12. XML (eXt ensi bl e Markup Language)
12. 1. INTRODUCCIN
XML es una Recomendaci n del W3C (Consor ci o Wor l d Wi de Web) puede consul t ar se en
ht t p: / / www. w3. or g/ TR/ REC-xml . Como est a especi f i caci n es de di f ci l l ect ur a hay di sponi bl e una
excel ent e ver si n con anot aci ones de l a especi f i caci n en ht t p: / / www. xml . com.
XML (Lenguaj e de Mar cado Ext ensi bl e) es un met al enguaj e ut i l i zado par a def i ni r ot r os l enguaj es de
mar cado adecuados a usos det er mi nados. XML no especi f i ca ni l as et i quet as ni l a gr amt i ca del l enguaj e.
HTML, en cambi o, def i ne l as et i quet as per mi t i das y l a gr amt i ca. Es deci r , se puede ut i l i zar l a et i quet a
<TABLE> por que est def i ni da per o no, por ej empl o, l a et i quet a <SILLA>. La gr amt i ca def i ne l a cor r ect a
ut i l i zaci n de l as et i quet as. Por ej empl o en HTML pueden i ncl ui r se en l a et i quet a <TABLE> un conj unt o
det er mi nado de at r i but os ( BORDER, CELLSPACING, CELLPADDING,...). Con XML se pueden i nvent ar l as
et i quet as y l a gr amt i ca.
Los document os XML se or gani zan como una j er ar qua de el ement os. A cont i nuaci n se muest r a l a
est r uct ur a de un f i cher o XML:
<?xml version=1.0?>
<libro>
<autor>Antonio Muoz Molina</autor>
<titulo>El Jinete Polaco</titulo>
<precio moneda=EURO>20</precio>
</libro>
XML per mi t e def i ni r l a i nf or maci n o el cont eni do de l os dat os de l a f or ma que se desee, mi ent r as sea
conf or me a l a est r uct ur a gener al que XML r equi er e:
<gato>
<nombre>Micif</nombre>
<raza>Persa</raza>
</gato>
<gato raza=Persa>Micif</gato>
<gato raza=Persa nombre=Micif/>
Si n embar go, XML no def i ne l a pr esent aci n de l os dat os.
12.1.1. CONCEPTOS BSICOS DE XML

En pr i mer l ugar , cual qui er document o XML debe est ar bi en f or mado par a poder se anal i zar
cor r ect ament e. Un document o bi en f or mado:
128 Informtica III

Ti ene cer r ada cada et i quet a que se haya abi er t o.
No t i ene et i quet as ani dadas f uer a de l ugar .
Es si nt ct i cament e cor r ect o de acuer do a l a especi f i caci n.
Las r egl as si nt ct i cas de XML son ut i l i zadas despus por l as apl i caci ones y l os anal i zador es compat i bl es
con XML par a que el document o t enga sent i do y pueda l l evar se a cabo al guna acci n con l os dat os, como
por ej empl o encont r ar el pr eci o de un l i br o o cr ear un f i cher o PDF con l os dat os.
En segundo l ugar , l os document os XML pueden ser ( aunque no es obl i gat or i o) vl i dos. Un document o
vl i do es aquel que si gue l as r egl as de ci er t o DTD (def i ni ci n de t i po de document o) .
12.1.2. DTD
Un DTD def i ne est abl ece un conj unt o de r est r i cci ones (et i quet as per mi t i das, r egl as gr amat i cal es) par a
un document o XML. Est as r est r i cci ones:
Pueden r esi di r en un f i cher o ext er no y ser compar t i das por var i os document os XML.
Bi en pueden est ar cont eni das en el pr opi o document o XML.
La suma de est os conj unt os de r est r i cci ones es l a def i ni ci n de t i po de document o (DTD).
Por ej empl o se podr a def i ni r que el at r i but o moneda t uvi er a como ni cos val or es per mi t i dos: eur o y
dl ar .
El DTD es el que da port abi l i dad a l os dat os XML, es necesar i o par a t r ansf er i r dat os ent r e di f er ent es
apl i caci ones de maner a que st as puedan ent ender se.
Los DTD se expl i can con det al l e en un apar t ado post er i or .
12. 2. DOCUMENTOS XML
Un document o XML puede di vi di r se en dos par t es bsi cas: l a cabecer a ( que da i nf or maci n sobr e cmo
manej ar el document o a l os anal i zador es XML y a l as apl i caci ones XML) y el cont eni do (que son l os dat os).
12.2.1. CABECERA
12. 2. 1. 1. Inst r ucci ones de pr oceso (PI)
Ti enen l a f or ma <?instruccin?> y r epr esent an comandos par a el anal i zador XML o par a un pr ogr ama
que ut i l i zar el document o XML. Por ej empl o, l a si gui ent e i nst r ucci n i ndi ca al anal i zador qu ver si n de
XML se est ut i l i zando.
<?xml version=1.0?>
12. 2. 1. 2. Decl ar aci n de t i po de document o
Se ut i l i za par a especi f i car un DTD en el document o XML. y t i ene l a si nt axi s <!DOCTYPE parmetros>.
El pr i mer par met r o es el el ement o r az del document o, que i dent i f i ca al document o xml act ual (se
expl i ca en un apar t ado post er i or ) .
El segundo ar gument o puede ser SYSTEM o PUBLIC.
Si se especi f i ca SYSTEM el si gui ent e par met r o debe i ndi car al anal i zador desde dnde se puede
car gar el f i cher o DTD (medi ant e un URI-o una URL) .
<!DOCTYPE lista SYSTEM Lista.dtd>
<!DOCTYPE book SYSTEM http://www.oreilly.com/catalog/JavaXML.dtd>
Si se especi f i ca PUBLIC qui er e deci r que el DTD se ha hecho pbl i co y est di sponi bl e par a
ut i l i zar se por cual qui er a. En est e caso, ant es de especi f i car un URI se debe i ndi car un nombr e
pbl i co y el anal i zador i nt ent ar pr i mer o ut i l i zar el nombr e pbl i co par a l ocal i zar el DTD y
sol ament e si f al l a ut i l i zar el URI.
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
Captulo 12. XML (eXtensible Markup Language) 129

12.2.2. CONTENIDO
12. 2. 2. 1. El ement o r az
Sl o puede haber un el ement o r az, que es el de ms al t o ni vel en un document o XML. Debe ser l a
pr i mer a et i quet a que se abr a y l a l t i ma que se ci er r e y ent r e est as et i quet as se i ncl uye el r est o de
el ement os del document o, f or mando una est r uct ur a j er r qui ca de el ement os, ani dados unos en ot r os.
12. 2. 2. 2. El ement os de dat os
Son et i quet as con nombr es ar bi t r ar i os. Regl as par a nombr ar el ement os:
Su nombr e debe empezar con una l et r a o un subr ayado.
A cont i nuaci n puede cont ener cual qui er nmer o de l et r as, nmer os, subr ayados, gui ones o
punt os.
No puede cont ener espaci os.
Es sensi bl e a mayscul as y mi nscul as.
Cada el ement o que se abr a, se debe cer r ar . Ent r e l as et i quet as de aper t ur a y ci er r e puede haber dat os
de t i po t ext o o cual qui er nmer o de el ement os ani dados.
<gato>
<nombre>Micif</nombre>
<raza>Persa</raza>
</gato>
Los el ement os deben est ar cor r ect ament e ani dados: el pr i mer el ement o que se abr a debe ser si empr e
el l t i mo que se ci er r e.
Tambi n puede haber el ement os vacos, es deci r , no cont i enen dat os de t i po t ext o ni ot r os el ement os
ani dados. En ese caso se consol i dan l as et i quet as de aper t ur a y ci er r e en una ni ca et i quet a.
<img src=xml.gif/>
12. 2. 2. 3. At r i but os de el ement o
Los el ement os pueden cont ener at r i but os con sus r espect i vos val or es i ncl ui dos dent r o de l a et i quet a de
aper t ur a.
<precio moneda=EURO>20</precio>
En est e caso moneda es el nombr e del at r i but o. Las r egl as que si guen l os nombr es de at r i but os son l as
mi smas que l as de l os nombr es de el ement os. Los val or es de l os at r i but os deben encer r ar se ent r e comi l l as
dobl es ( el est ndar ) o si mpl es.
Tambi n pueden i ncl ui r se at r i but os en l os el ement os vacos:
<gato raza=Persa nombre=Micif/>
12. 2. 2. 4. Ref er enci as a ent i dad
Si se desea i nt r oduci r como cont eni do en un document o XML al gn car ct er r eser vado par a el mar cado,
deben ut i l i zar se ent i dades. Las ent i dades se empl ean par a r epr esent ar est os car act er es especi al es y, ms
en gener al , par a r epr esent ar a ot r os dat os de sust i t uci n. Las r ef er enci as a ent i dad en un document o XML
se hacen pr ecedi endo el nombr e de l a ent i dad por & y t er mi nando con ; . Cuando un anal i zador XML
se encuent r a una r ef er enci a a ent i dad, el val or de sust i t uci n especi f i cado se i nser t a y no se pr ocesa.
En XML 1. 0 se def i nen ci nco ent i dades par a r epr esent ar car act er es especi al es y que no se i nt er pr et an
como mar cado por el anal i zador XML
Referencia a Entidad Carcter
&amp; &
&lt; <
&gt; >
&apos;
&quot;

El usuar i o puede def i ni r ent i dades pr opi as en un DTD, como se ver ms adel ant e, de maner a que l a
r ef er enci a a cada ent i dad sea sust i t ui da por el cont eni do especf i co i ndi cado por el usuar i o.
130 Informtica III

12. 2. 2. 5. Dat os no anal i zados
Cuando hay una cant i dad si gni f i cat i va de dat os que se t i enen que pasar a l a apl i caci n l l amant e si n
hacer ni ngn anl i si s XML se ut i l i zan secci ones CDATA. Una secci n CDATA comi enza con <![CDATA[ y
termina con ]]> y toda la informacin contenida entre el comienzo y el final de la seccin se pasa
directamente sin interpretar a la aplicacin. Por lo tanto, los elementos, las referencias a entidad, las
instrucciones de proceso y los comentarios no son reconocidos.
<![CDATA[
*p = &q;
b = (i <= 3);
]]>
12. 3. RESTRINGIR XML CON DTD
Un DTD document a l as combi naci ones vl i das de el ement os y at r i but os en l os document os XML que
r ef er enci an a di cho DTD. Adems pr opor ci ona por t abi l i dad, per mi t i endo que di f er ent es apl i caci ones
ent i endan l os dat os XML y se comuni quen ent r e s.
En un DTD deben def i ni r se cada uno de l os el ement os que se per mi t en en un document o XML, as como
l os at r i but os, posi bl ement e l os val or es acept abl es par a l os at r i but os de cada el ement o, el ani dami ent o y
l as ent i dades ext er nas, ent r e ot r as cosas.
La r ef er enci a a un DTD en un document o XML se hace del si gui ent e modo:
<?xml versin=1.0?>
<!DOCTYPE libro SYSTEM Nombre.dtd>
<libro>
<autor>Antonio Muoz Molina</autor>
<titulo>El Jinete Polaco</titulo>
<precio moneda=EURO>20</precio>
</libro>
Tambi n pueden i ncl ui r se l as r est r i cci ones, que a cont i nuaci n se expl i can, en el pr opi o document o
XML:
<?xml version="1.0"?>
<!DOCTYPE ToDoList [
<!ELEMENT ToDoList (task)*>
<!ELEMENT task (#PCDATA)>
<!ATTLIST task status (important|normal) #REQUIRED>
]>
<ToDoList>
<task status="important">This is an important
task that must be completed</task>
<task status="normal">This task can wait</task>
</ToDoList>
12.3.1. ESPECIFICAR ELEMENTOS
Cada el ement o se especi f i ca medi ant e el nombr e del el ement o y una def i ni ci n de su cont eni do, como
se i r expl i cando en l os subapar t ados post er i or es:
<!ELEMENT [Element Name] [Element Definition/Type]>
12. 3. 1. 1. Pal abr a r eser vada ANY
Si se ut i l i za l a pal abr a r eser vada ANY i ndi ca que el el ement o puede cont ener dat os de t i po t ext o o
el ement os ani dados. Por ej empl o, si se def i ni er an l os el ement os Book, Chapter, Topic y Copyright como
t i po ANY:
<!ELEMENT Book ANY>
<!ELEMENT Chapter ANY>
<!ELEMENT Topic ANY>
<!ELEMENT Copyright ANY>
ser a vl i do el si gui ent e document o si n sent i do:
<Topic>
Captulo 12. XML (eXtensible Markup Language) 131

<Book>My book</Book>
<Copyright>
<Chapter>Chapter 1</Chapter>
</Copyright>
</Topic>
12. 3. 1. 2. El ement os ani dados
Par a def i ni r l a j er ar qua de el ement os se ut i l i za como t i po de el ement o una l i st a de el ement os ent r a
par nt esi s y separ ados por comas. El or den de l os el ement os en l a l i st a debe cumpl i r se en el document o
XML par a que sea vl i do.
<!ELEMENT Book (Contents, Copyright)>
<!ELEMENT Contents (Chapter)>
<!ELEMENT Chapter (Topic)>
<!ELEMENT Topic ANY>
<!ELEMENT Copyright ANY>
El si gui ent e document o ser a vl i do:
<Book>
<Contents>
<Chapter>
<Topic> Qu es XML?</Topic>
</Chapter>
</Contents>
<Copyright>&OreillyCopyright;</Copyright>
</Book>
12. 3. 1. 3. Pal abr a r eser vada #PCDATA
Par a l os dat os de t i po t ext o se ut i l i za como t i po de el ement o l a pal abr a r eser vada #PCDATA (Par sed
Char act er Dat a) escr i t a ent r e par nt esi s. En est e caso se l i mi t a al el ement o a ut i l i zar ni cament e dat os de
t i po t ext o y no se per mi t en l os el ement os ani dados.
<!ELEMENT Topic (#PCDATA)>
12. 3. 1. 4. El ement os vacos
Par a exi gi r que un el ement o est si empr e vaco se ut i l i za l a pal abr a r eser vada EMPTY. No se necesi t a
que apar ezca ent r e par nt esi s ya que no se puede agr upar con ot r os el ement os, que es l o que per mi t en
l os par nt esi s, como se ver ms adel ant e.
<!ELEMENT SectionBreak EMPTY> dara lugar en el documento a: <SectionBreak/>
12. 3. 1. 5. Indi cador es de r epet i ci n
Por def ect o un el ement o puede apar ecer exact ament e una vez cuando se especi f i ca en el DTD si n
ni ngn modi f i cador .
<!ELEMENT Book (Contents, Copyright)>
En est e ej empl o Contents debe apar ecer exact ament e una vez y si empr e debe i r segui do por
exact ament e un el ement o Copyright par a que el document o sea vl i do.
Par a cambi ar est e compor t ami ent o puede aadi r se al f i nal del nombr e de un el ement o un i ndi cador de
r epet i ci n:
Indicador Frecuencia
? Opcional (0 1 vez)
* Opcional y repetible (0 ms veces)
+ Necesario y repetible (1 ms veces)

Si por ej empl o se qui er e per mi t i r que el encabezami ent o ( el ement o Heading) de un capt ul o apar ezca
una vez o que opci onal ment e se omi t a, y que puedan apar ecer uno o ms el ement os Topic, hay que hacer
l a si gui ent e decl ar aci n:
<!ELEMENT Chapter (Heading?,Topic+)>
Un document o XML vl i do ser a:
132 Informtica III

<Chapter>
<Topic> Qu es XML?</Topic>
<Topic> Cmo se utiliza XML?</Topic>
</Chapter>
12. 3. 1. 6. Gr upos de el ement os
En el cont eni do de un l i br o podr an apar ecer un capt ul o o un conj unt o de capt ul os, despus un sal t o
de secci n y a cont i nuaci n ms capt ul os y opci onal ment e ot r o sal t o de secci n. La est r uct ur a capt ul os y
sal t o opci onal de secci n podr a r epet i r se apl i cando un i ndi cador de r epet i ci n al f i nal de di cho gr upo de
el ement os (un gr upo se i ndi ca encer r ando un conj unt o de el ement os ent r e par nt esi s):
<!ELEMENT Contents (Chapter+,SectionBreak?)+ >
Un ej empl o de document o XML vl i do ser a:
<Book>
<Contents>
<Chapter>
<Heading> Introduccin </Heading>
<Topic> Qu es XML? </Topic>
<Topic> Cmo se utiliza XML? </Topic>
</Chapter>
<Chapter> </Chapter>
<SectionBreak/>
<Chapter> </Chapter>
<Chapter> </Chapter>
<SectionBreak/>
<Chapter> </Chapter>
</Contents>
<Copyright>&OreillyCopyright;</Copyright>
</Book>
12. 3. 1. 7. Oper ador de opci n |
Per mi t e que ocur r a una de l as opci ones separ adas por el oper ador | . El nmer o de opci ones no est
l i mi t ado y se pueden agr upar usando par nt esi s.
<!ELEMENT aviso (parrafo | grafico)>
En el ej empl o ant er i or el el ement o avi so debe cont ener o un pr r af o o un gr f i co.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
En est e ej empl o el el ement o avi so debe cont ener un t t ul o y adems un pr r af o o un gr f i co.
12.3.2. DEFINIR ATRIBUTOS
La def i ni ci n de at r i but os suel e i ncl ui r se despus de l a especi f i caci n del el ement o y t i ene l a si gui ent e
f or ma:
<!ATTLIST [Enclosing Element] [Attribute Name] [type] [modifier] >
El pr i mer par met r o cor r esponde al nombr e del el ement o. A cont i nuaci n pueden def i ni r se ml t i pl es
at r i but os par a cual qui er el ement o.
12. 3. 2. 1. Modi f i cador es
Par a especi f i car el gr ado de necesi dad de una at r i but o se ut i l i za una de l as si gui ent es pal abr as
r eser vadas: #IMPLIED ( no se r equi er e par a que el document o sea vl i do), #REQUIRED ( es necesar i o
i ncl ui r l o) , #FIXED (el usuar i o nunca puede cambi ar el val or del at r i but o; es poco f r ecuent e en
apl i caci ones). El f or mat o de est e l t i mo es:
<!ATTLIST [Enclosing Element] [Attribute Name] #FIXED [Fixed Value]>
12. 3. 2. 2. Ti pos de at r i but o
Par a i ndi car que el val or del at r i but o puede ser cual qui er dat o de t i po t ext o se ut i l i za l a pal abr a
r eser vada CDATA.
<!ATTLIST texto idioma CDATA #REQUIRED>
<!ATTLIST img url CDATA #REQUIRED alt CDATA #IMPLIED>
Captulo 12. XML (eXtensible Markup Language) 133

<!ATTLIST sender company CDATA #FIXED "Microsoft">
Si qui er e dar se un val or por def ect o, en vez de ut i l i zar un modi f i cador , debe escr i bi r se el val or por
def ect o ent r e comi l l as.
<!ATTLIST texto idioma CDATA "ingls">
Si se desea enumer ar un conj unt o de val or es per mi t i dos se escr i ben ent r e par nt esi s y separ ados por el
oper ador | . En est e caso, t ambi n puede i ndi car se por def ect o uno de l os val or es de l a l i st a, en vez de
ut i l i zar un modi f i cador .
<!ATTLIST Chapter focus (XML|Java) Java>
<!ATTLIST task status (important|normal) #REQUIRED>
El t i po ID per mi t e que un at r i but o det er mi nado t enga un nombr e ni co que podr ser r ef er enci ado por
un at r i but o de ot r o el ement o que sea de t i po IDREF. Per mi t e i mpl ement ar un si st ema de hi per vncul os en
un document o XML.
<!ELEMENT enlace EMPTY>
<!ATTLIST enlace destino IDREF #REQUIRED>
<!ELEMENT capitulo (parrafo)*>
<!ATTLIST capitulo referencia ID #IMPLIED>
12.3.3. REFERENCIAS A ENTIDAD
Cuando el anal i zador se encuent r a con una r ef er enci a a ent i dad i nt ent a r esol ver l a ut i l i zando el DTD.
Las decl ar aci ones de ent i dades en un DTD t i enen l a si gui ent e not aci n:
Si se especi f i ca un conj unt o de car act er es de r eempl azo:
<!ENTITY ovni Objeto Volador No Identificado>
que se ut i l i zar a en el document o XML:
<texto>
<titulo> Durmiendo en clase, lvaro so con un &ovni; </titulo>
</texto>
Si se desea acceder a un r ecur so l ocal o a un r ecur so a t r avs de l a r ed:
<!ENTITY OReillyCopyright SYSTEM copyright.txt>
<!ENTITY OReillyCopyright SYSTEM http://www.oreilly.com/catalog/copyright.xml>




CAPITULO 13
13. SAX y DOM: Java APIs f or XML Parsi ng
13. 1. JAVA Y XML
Java es cdi go por t abl e y XML son dat os por t abl es. Escr i bi r cdi go en Java asegur a que cual qui er
si st ema oper at i vo y har dwar e con una mqui na vi r t ual Java (JVM) puede ej ecut ar su cdi go compi l ado. Si
a est o se aade l a habi l i dad de r epr esent ar l a ent r ada y sal i da de l a apl i caci n con una capa de dat os
basada en el est ndar XML l a apl i caci n ser compl et ament e por t abl e y podr comuni car se con cual qui er
ot r a apl i caci n ut i l i zando l os mi smos est ndar es.
13. 1. 1. SAX
SAX (API si mpl e par a XML) es una API de Java que per mi t e ut i l i zar XML en apl i caci ones Java.
Pr opor ci ona un mar co basado en event os par a anal i zar dat os XML. SAX no es un anal i zador de XML. La API
SAX pr opor ci ona un mar co par a anal i zar un document o y def i ne event os par a moni t or i zar el pr oceso de
anl i si s. Por ej empl o, SAX def i ne l a i nt er f az org.xml.sax.ContentHandler con mt odos como
startDocument() y endElement(), que per mi t e un cont r ol compl et o sobr e el pr oceso de anl i si s de un
document o XML. Tambi n def i ne ot r a i nt er f az par a el manej o de er r or es dur ant e el anl i si s XML, como por
ej empl o que un document o no sea vl i do.
A SAX se l e debe sumi ni st r ar un anal i zador par a r eal i zar el anl i si s de dat os XML. Hay di sponi bl es
muchos anal i zador es par a Java, que pueden conect ar se con l a API SAX, como:
Pr oj ect X de Sun
Xer ces de Apache Sof t war e Foundat i on
XML Par ser de Or acl e
XML4J de IBM
SAX sl o pr opor ci ona acceso a l os dat os de un document o XML.
13.1.2. DOM
DOM es un est ndar que t i ene su or i gen en el Consor ci o Wor l d Wi de Web ( W3C). No est di seado
especf i cament e par a Java, si no que es una especi f i caci n i ndependi ent e de l enguaj e.
DOM ( Model o de Obj et os de Document o) est di seado par a acceder y adems mani pul ar dat os XML.
Pr opor ci ona una r epr esent aci n de un document o medi ant e una est r uct ur a de t i po r bol (que son muy
senci l l as de r ecor r er y mani pul ar con l enguaj es de pr ogr amaci n) . DOM car ga un document o XML ent er o
en memor i a, al macenando t odos l os dat os como nodos.
La desvent aj a de DOM es que al car gar el document o ent er o en memor i a consume ms r ecur sos del
si st ema y es ms l ent o.
13. 2. ANALIZAR XML
En pr i mer l ugar hay que sel ecci onar un anal i zador : Se va a empl ear el anal i zador en cdi go abi er t o
Apache Xer ces, di sponi bl e en ht t p: / / xml . apache. or g. Xer ces i mpl ement a l os est ndar es XML y DOM de
W3C, as como el est ndar SAX. Las cl ases del anal i zador deben est ar en l a r ut a de cl ases del ent or no Java
(ya sea un IDE o un ent or no de l nea de comandos) .
Gener al ment e l as cl ases SAX est n i ncl ui das en el anal i zador , como en el caso de Xer ces. En ese caso,
no deber an descar gar se expl ci t ament e l as cl ases SAX, ya que es pr obabl e que el anal i zador se haya
empaquet ado con l a l t i ma ver si n de SAX sopor t ada por el anal i zador .
136 Informtica III

A cont i nuaci n se escr i bi r un pr ogr ama Java que coge un f i cher o XML de l a l nea de comandos y l o
anal i za.
13.2.1. INSTANCIAR UN LECTOR
SAX pr opor ci ona l a i nt er f az org.xml.sax.XMLReader que deber ser i mpl ement ada por el anal i zador . La
cl ase org.apache.xerces.parsers.SAXParser del anal i zador Xer ces i mpl ement a di cha i nt er f az y debe
i nst anci ar se par a poder anal i zar XML. :
XMLReader parser= new SAXParser();
A cont i nuaci n se muest r a el esquema del pr ogr ama, que i nst anci a el anal i zador , per o an no anal i za
ni ngn document o.
import org.xml.sax.XMLReader;
import org.apache.xerces.parsers.SAXParser;
public class SAXParserDemo{
public static void main(String[] args){
String uri=args[0];
SAXPArserDemo parserDemo=new SAXParserDemo();
parserDemo.performDemo(uri);
}
public void performDemo(String uri){
XMLReader parser= new SAXParser();
}
}
13. 2. 2. ANALIZAR EL DOCUMENTO
Una vez i nst anci ado el anal i zador , se l e dan i nst r ucci ones par a que anal i ce el document o. Debe
aadi r se al pr ogr ama el mt odo parse() de org.xml.sax.XMLReader, as como dos manej ador es de
excepci ones: java.io.IOException y org.xml.sax.SAXException.
import java.io.IOException;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.apache.xerces.parsers.SAXParser;
public class SAXParserDemo{
public static void main(String[] args){
String uri=args[0];
SAXPArserDemo parserDemo=new SAXParserDemo();
ParserDemo.performDemo(uri);
}
public void performDemo(String uri){
try{
XMLReader parser= new SAXParser();
parser.parse(uri);
}catch (IOException e){
System.out.println(Error reading URI:+e.getMessage));
}catch (SAXException e){
System.out.println(Error in parsing:+e.getMessage));
}
}
}
Una vez compi l ado est e pr ogr ama, par a ej ecut ar l o, se debe especi f i car l a r ut a compl et a de un f i cher o
XML en l a l nea de comandos, por ej empl o el f i cher o cont ent s. xml :
java SAXParserDemo G:\contents.xml
Captulo 13. SAX y DOM: Java APIs for XML Parsing 137

Hast a ahor a no se ha est abl eci do ni nguna l l amada de r et or no que di ga qu acci n t omar dur ant e el
pr oceso de anl i si s. Si n est as l l amadas de r et or no, el document o se anal i za si n i nt er venci n de l a
apl i caci n. Las l l amadas de r et or no del anal i zador per mi t en i nser t ar acci ones en el pr ogr ama
r eacci onando ant e l os dat os, l os el ement os, l os at r i but os y l a est r uct ur a del document o que se est
anal i zando.
13.2.3. MANEJADORES DE CONTENIDO
Par a que l a apl i caci n r eal i ce al go t i l con l os dat os XML segn se van anal i zando, hay que decl ar ar
manej ador es con el anal i zador SAX. Un manej ador es un conj unt o de l l amadas de r et or no que SAX def i ne
par a agr egar el cdi go de l a apl i caci n en event os i mpor t ant es dur ant e el anl i si s. Est os event os se
pr oducen mi ent r as el document o se anal i za, no despus de que el anl i si s haya t er mi nado. SAX per mi t e,
por t ant o, manej ar un document o secuenci al ment e si n t ener que car gar pr i mer o el document o ent er o en
memor i a.
SAX 2. 0 def i ne cuat r o i nt er f aces de manej ador es pr i nci pal es:
org.xml.sax.ContentHandler
org.xml.sax.ErroHandler
org.xml.sax.DTDHandler
org.xml.sax.EntityResolver
Sol o se expl i car l a i nt er f az ContentHandler, que per mi t e manej ar event os est ndar r el aci onados con
l os dat os del document o XML, y se menci onar n l os mt odos de l a i nt er f az ErrorHandler, que r eci be
not i f i caci ones del anal i zador cuando se encuent r an er r or es en l os dat os XML.
Est as i nt er f aces deben ser i mpl ement adas por cl ases par a r eal i zar acci ones especf i cas en el pr oceso de
anl i si s; y est as cl ases deben decl ar ar se en el anal i zador con l os mt odos:
setContentHandler()
setErrorHandler()
setDTDHandler()
setEntityResolver()
Despus el anal i zador i nvoca l os mt odos de l l amada de r et or no en l os manej ador es apr opi ados
dur ant e el anl i si s.
13. 2. 3. 1. Int er f az Cont ent Handl er
Est a i nt er f az decl ar a var i os mt odos i mpor t ant es en el ci cl o de vi da del anl i si s a l os que l a apl i caci n
Java puede r eacci onar . Se def i ni r una nueva cl ase (MyContentHandler) par a i mpl ement ar l a i nt er f az
ContentHandler, que puede ser aadi da al f i nal del f i cher o SAXPar ser Demo. j ava. De moment o se han
dado i mpl ement aci ones vacas par a t odos l os mt odos de l a i nt er f az ContentHandler, que per mi t en
compi l ar el f i cher o per o que no pr opor ci onan ni nguna i nf or maci n.
Por ot r o l ado, hay que decl ar ar el manej ador en el XMLReader que se ha i nst anci ado. Est o se hace con
setContentHandler().
import org.xml.sax.ContentHandler;
import org.xml.sax.Attributes;
import org.xml.sax.Locator;
import java.io.IOException;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.apache.xerces.parsers.SAXParser;
public class SAXParserDemo{
public static void main(String[] args){
...
}
public void performDemo(String uri){
ContentHandler contentHandler=new MyContentHandler();
try{
XMLReader parser= new SAXParser();
parser.setContentHandler(contentHandler);
parser.parse(uri);
138 Informtica III

}catch (IOException e){
System.out.println(Error reading URI:+e.getMessage));
}catch (SAXException e){
System.out.println(Error in parsing:+e.getMessage));
}
}
}
class MyContentHandler implements ContentHandler{
public void startDocument() throws SAXException{ }
public void endDocument() throws SAXException{ }
public void startElement(String namespaceURI, String localName,
String rawName, Attributes atts) throws SAXException{ }
public void endElement(String namespaceURI, String localName,
String rawName) throws SAXException{ }
public void characters(char[] ch, int start, int end)
throws SAXException{ }
public void setDocumentLocator(Locator locator){ }
public void processingInstruction(String target, String data)
throws SAXException{ }
public void startPrefixMapping(String prefix, String uri){}
public void endPrefixMapping(String prefix){}
public void ignorableWhitespace(char[] ch, int start, int end)
throws SAXException{ }
public void skippedEntity(String name) throws SAXException{ }
//solo lo usan muy pocos analizadores, los menos establecidos.
}
Los mt odos startDocument() y endDocument() i ndi can a l a apl i caci n cundo empi eza y cundo
acaba el anl i si s del document o XML. Incl uso cuando ocur r e un er r or i r r ecuper abl e, el l t i mo mt odo que
se l l ama es endDocument() compl et ando el i nt ent o de anl i si s, t r as haber i nvocado al mt odo necesar i o
de ErrorHandler().
Los mt odos en l os que se cent r ar est e gui n son startElement(), characters() y endElement(),
que i ndi can cundo se anal i za un el ement o, l os dat os de ese el ement o y cundo se al canza l a et i quet a de
ci er r e par a ese el ement o.
El mt odo starElement() da a l a apl i caci n i nf or maci n sobr e un el ement o XML y l os at r i but os que
pueda t ener . Los ar gument os par a est e mt odo son el nombr e del el ement o (en var i as f or mas) y una
i nst anci a de org.xml.sax.Attributes, que t i ene r ef er enci as a t odos l os at r i but os del el ement o ( per mi t e
una i t er aci n senci l l a por l os at r i but os del el ement o de f or ma si mi l ar a un vect or ) . Puede hacer se
r ef er enci a a un at r i but o por su ndi ce (se usa cuando se i t er a ent r e t odos l os at r i but os) o por su nombr e.
A cont i nuaci n se muest r a el cdi go par a i mpr i mi r en pant al l a el nombr e y l os at r i but os de un
el ement o que se abr e.
public void startElement(String namespaceURI, String localName,
String rawName, Attributes atts) throws SAXException{
System.out.print(startElement:+localName);
for(int i=0;i<atts.getLength();i++){
System.out.print(Attribute:+atts.getLocalName(i)+=+atts.getValue(i));
}
}
Es i mpor t ant e t ener en cuent a que l os at r i but os no est ar n di sponi bl es necesar i ament e en el or den en
que se anal i zar on, que es el or den en el que se escr i bi er on. Aunque hay al gunos anal i zador es que
i mpl ant an l a or denaci n, a menudo no est i ncl ui do en el conj unt o de car act er st i cas de un anal i zador .
El pr opsi t o pr i nci pal de l a l l amada de r et or no endElement() es i ndi car el ci er r e de un el ement o
haci endo saber a l a apl i caci n que el r est o de car act er es no son par t e del el ement o en cur so que se est
cer r ando.
En l os el ement os puede haber cont eni dos ot r os el ement os ani dados o dat os de t i po t ext o. Cuando
apar ecen el ement os ani dados en ot r os el ement os se i ni ci an l l amadas de r et or no ani dadas en l l amadas
de r et or no. En al gn moment o se encont r ar n dat os de t i po t ext o, que se mandan a l a apl i caci n
Captulo 13. SAX y DOM: Java APIs for XML Parsing 139

medi ant e l a l l amada de r et or no characters(). Est e mt odo pr opor ci ona un ar r ay o vect or de car act er es,
as como el ndi ce de comi enzo y de f i nal , con l os que se l eer n l os dat os de t i po t ext o per t i nent es:
public void characters(char[] ch, int start, int end) throws SAXException{
String s=new String(ch,start,end);
System.out.println(characters:+s);
}
Acl araci n: ser a un er r or ut i l i zar el si gui ent e cdi go par a l eer el ar r ay de car act er es, por que no debe
l eer se el ar r ay de car act er es desde el pr i nci pi o hast a el f i nal si no ut i l i zando l os l mi t es i ni ci al y f i nal que
pasa el anal i zador .
public void characters(char[] ch, int start, int end) throws SAXException{
for (int i=0; i<ch.length; i++) //error
System.out.print(i);
}
SAX anal i za secuenci al ment e: el anal i zador avanza manej ando el ement os, at r i but os y dat os segn se
encuent r a con el l os. Por ej empl o en el si gui ent e f r agment o de XML,
<gato>
<nombre>Micif</nombre>
</gato>
l as l l amadas de r et or no dan como r esul t ado l a si gui ent e cadena de event os:
startElement: gato
startElement: nombre
characters: Micif
endElement: nombre
endElement: gato
13. 2. 3. 2. Int er f az Er r or Handl er
Se ut i l i za par a manej ar e i nf or mar de di ver sas condi ci ones de er r or que pueden sur gi r dur ant e el
anl i si s. Def i ne t r es mt odos de l l amadas de r et or no: warning(), error(), fatalError(), que r eci ben
como ar gument o una excepci n SAXParserException, con i nf or maci n sobr e el er r or o adver t enci a y su
l ocal i zaci n.
13.2.4. PORTABILIDAD AL CARGAR EL ANALIZADOR
Si se ut i l i za el cdi go expl i cado hast a el moment o:
import org.apache.xerces.parsers.SAXParser;
XMLReader parser=new SAXPArser();
se est vi ol ando el pr i nci pi o de por t abi l i dad de Java y el cdi go no puede compi l ar se y ej ecut ar se en
una pl at af or ma que no ut i l i ce el anal i zador Apache Xer ces. Se est i mpor t ando expl ci t ament e l a
i mpl ement aci n de XMLReader de un f abr i cant e concr et o y post er i or ment e se est i nst anci ando
di r ect ament e esa i mpl ement aci n.
Es pr ef er i bl e ut i l i zar el mt odo createXMLReader() que pr opor ci ona l a cl ase
org.XML.SAX.helpers.XMLReaderFactory. Est e mt odo devuel ve una i nst anci a de XMLReader y hay que
pasar l e como ar gument o el nombr e de l a cl ase del anal i zador a car gar . Par a t ener por t abi l i dad se
al macena el nombr e de l a cl ase del anal i zador en un f i cher o de pr opi edades y se l ee de di cho f i cher o en
t i empo de ej ecuci n, per mi t i endo as modi f i car el anal i zador si n t ener que cambi ar el cdi go Java.
Aunque el cdi go par a l eer un f i cher o de pr opi edades no se pr opor ci ona en est e gui n, a cont i nuaci n
puede ver se cmo se ut i l i zar a:
import org.xml.sax.helpers.XMLReaderFactory;
try{
XMLReader parser= XMLReaderFactory.createXMLReader(
PropertiesReader().getInstance().getProperty( parserClass));
parser.setContentHandler(contentHandler);
parser.parse(uri);
}catch (IOException e){
System.out.println(Error reading URI:+e.getMessage());
}catch(SAXException e){
140 Informtica III

System.out.println(Eroor in parsing:+e.getMessage());
}
La cl ase PropertiesReader per mi t i r a l eer el f i cher o de pr opi edades y devol ver a el val or de l a
pr opi edad parserClass cont eni endo el nombr e de l a cl ase del anal i zador . , por ej empl o
org.apache.xerces.parsers.SAXParser.
13.2.5. VALIDAR XML
La val i daci n asegur a que l as r est r i cci ones i mpuest as a un document o XML se cumpl an. El mt odo
setFeature() de l a i nt er f az XMLReader per mi t e act i var l a val i daci n en el anal i zador usando el URI:
http://xml.org/sax/features/validation.
try{
XMLReader parser=
XMLReaderFactory.createXMLReader(org.apache.xerces.parsers.SAXParser);
parser.setContentHandler(contentHandler);
parser.setFeature(http://xml.org/sax/features/validation, true);
parser.parse(uri);
}catch (IOException e){
System.out.println(Error reading URI:+e.getMessage));
}catch (SAXException e){
System.out.println(Error in parsing:+e.getMessage));
}
Par a ej ecut ar l a val i daci n es necesar i o est ar conect ado a Int er net si se i nt ent an r esol ver r ef er enci as a
ent i dades no l ocal es, como en el ej empl o:
<!ENTITY OReillyCopyright SYSTEM http://www.oreilly.com/catalog/copyright.xml>
Acl araci n: No se necesi t a i mpl ement ar l a i nt er f az DTDHandler par a val i dar XML.
13. 3. RECORRER XML: ANALIZAR CON DOM
Una al t er nat i va a l a ut i l i zaci n de SAX par a l l egar a l os dat os XML es el Model o de Obj et os de
Document o (DOM) . El model o secuenci al que pr opor ci ona SAX no per mi t e un acceso al eat or i o a un
document o XML. Un anal i zador DOM, si n embar go, const r uye una r epr esent aci n en memor i a del
document o XML. , por l o que per mi t e acceder al document o en cual qui er or den.
Ut i l i zar DOM par a un l enguaj e de pr ogr amaci n especf i co r equi er e un conj unt o de i nt er f aces y cl ases.
En el caso de Java l as cl ases necesar i as est n en el paquet e org.w3c.dom y al i gual que el paquet e SAX, el
paquet e DOM a menudo se i ncl uye en el anal i zador XML, como en el caso del anal i zador Xer ces de Apache.
Se va a cr ear un senci l l o pr ogr ama par a t r abaj ar con DOM, si mi l ar al expl i cado con SAX, que l ee un
document o XML y l o anal i za.
13.3.1. INSTANCIAR UN ANALIZADOR DOM Y ANALIZAR EL DOCUMENTO
En pr i mer l ugar hay que i mpor t ar e i nst anci ar l a cl ase del anal i zador DOM que se va a ut i l i zar :
import org.apache.xerces.parsers.DOMParser;
public class DOMPArserDemo{
public static void main(String[] args){
String uri=args(0);
DOMParserDemo parserDemo=new DOMParserDemo();
parserDemo.performDemo(uri);
}
public void performDemo(String uri){
DOMParser parser=new DOMPArser();
try{
parser.parse(uri);
}catch(Exception e){
System.out.println(Error in parsing: + e.getMessage());
}
}
Captulo 13. SAX y DOM: Java APIs for XML Parsing 141

}
13.3.2. OBTENER EL RBOL DOM (OBJETO DOCUMENT)
En DOM l a sal i da del pr oceso de anl i si s es un obj et o org.w3c.dom.Document, que j er r qui cament e
const i t uye un ni vel por enci ma del el ement o raz del document o XML. Hay var i os mecani smos par a
obt ener el obj et o Document despus del anl i si s. En l a mayor a de l os anal i zador es, ent r e el l os el Xer ces
de Apache, el mt odo parse() devuel ve void y hay un mt odo adi ci onal par a obt ener el obj et o Document
como r esul t ado del anl i si s XML. En Xer ces est e mt odo se l l ama getDocument(). Las l neas de cdi go que
habr a que aadi r al ej empl o par a obt ener el r bol DOM son:
import org.w3c.dom.Document;
import org.apache.xerces.parsers.DOMParser;
public class DOMPArserDemo{
public static void main(String[] args){}
public void performDemo(String uri){
DOMParser parser=new DOMPArser();
try{
parser.parse(uri);
Document doc = parser.getDocument();
}catch(Exception e){
System.out.println(Error in parsing: + e.getMessage());
}
}
}
13.3.3. ACCEDER A LOS NODOS DEL RBOL DOM
Par a mani pul ar l os dat os del r bol se ut i l i zan l as i nt er f aces:
















Node es l a i nt er f az base de l as dems i nt er f aces ( ent r e el l as Document). Par a det er mi nar el t i po de
nodo se empl ea el mt odo getNodeType() de l a i nt er f az Node, que devuel ve un val or ent er o. Est e val or se
puede compar ar con un conj unt o de const ant es def i ni das en l a i nt er f az Node par a i dent i f i car el t i po de
nodo. Los t i pos de nodos ms comunes son DOCUMENT_NODE, ELEMENT_NODE y TEXT_NODE. Como Node es
l a i nt er f az base de t odas l as dems, si se desea i mpr i mi r el r bol DOM, puede def i ni r se un ni co mt odo
que r eci ba como ar gument o un obj et o Node, det er mi ne qu t i po de nodo es y, en f unci n de el l o, ut i l i ce
el cdi go adecuado par a i mpr i mi r l o. La est r uct ur a de est e mt odo ser a:
Node
Document
Document Fr agment
Document Type
Ent i t yRef er ence
Ent i t y
Not at i on
Pr ocessi ngInst r uct i on
Char act er Dat a
El ement
At t r
Comment
Text CDATASect i on
142 Informtica III

public static void printNode(Node node){
switch (node.getNodeType)){
case Node.DOCUMENT_NODE:
//imprimir el contenido del objeto Document
break;
case Node.ELEMENT_NODE:
//imprimir el nodo
//iterar en sus hijos invocando recursivamente a printNode
break;
case Node.TEXT_NODE:
//imprimir los datos
break;
}
}
13. 3. 3. 1. El nodo Document o (case Node. DOCUMENT_NODE)
Pr i mer o se i nvoca el mt odo sobr e el obj et o i ni ci al Document y post er i or ment e, l a r ecur si n cont i nuar
l a i mpr esi n hast a compl et ar el r bol
public void performDemo(String uri){
DOMParser parser = new DOMPArser();
try{
parser.parse(uri);
Document doc = parser.getDocument();
printNode(doc);
}catch(Exception e){
System.out.println(Error in parsing: + e.getMessage());
}
}
Al i nvocar el mt odo printNode() pasndol e como ar gument o el obj et o Document se t i ene el caso
Node.DOCUMENT_NODE. El obj et o Document cont i ene al el ement o r az y par a obt ener l o se ut i l i za el mt odo
getDocumentElement(). El el ement o r az se pasa como ar gument o al mt odo de printNode() par a segui r
i mpr i mi endo el r bol .
switch (node.getNodeType)){
case Node.DOCUMENT_NODE:
Document doc=(Document)node;
printNode(doc.getDocumentElement());
break;
case ...
}
13. 3. 3. 2. El ement os (case Node. ELEMENT_NODE)
Cuando el ar gument o de printNode() es un el ement o, en pr i mer l ugar hay que consegui r el nombr e
del el ement o XML medi ant e el mt odo getNodeName() de l a i nt er f az Node, e i mpr i mi r l o.
Despus hay que obt ener sus at r i but os ut i l i zando el mt odo getAttributes() de l a i nt er f az Node, que
devuel ve un obj et o NameNodeMap con l a l i st a de at r i but os del el ement o. Se i t er a est a l i st a i mpr i mi endo el
nombr e y el val or de cada at r i but o con l os mt odos getNodeName() y getNodeValue().
Adems se necesi t a acceder a l os el ement os hi j os par a cont i nuar i mpr i mi endo el r bol ; par a el l o se
ut i l i za el mt odo getChilNodes() que devuel ve un obj et o NodeList.
Las sent enci as import que se necesi t an son:
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.NameNodeMap;
El cdi go par a i mpr i mi r l os el ement os y sus at r i but os es:
case Node.ELEMENT_NODE:
String name=node.getNodeName();
System.out.print(<+name);
Captulo 13. SAX y DOM: Java APIs for XML Parsing 143

NameNodeMap attributes = node.getAttributes();
for(int i=0; i<attributes.getLength();i++){
Node current=attributes.item(i);
System.out.print(< + current.getNodeName() +
=\ + current.getNodeValue()+\);
}
System.out.println(>);
NodeList children=node.getChilNodes();
if(children!=null){
for(int i=0; i<children.getLength();i++){
printNode(children.item(i));
}
}
System.out.println(</+name+>);
break;
13. 3. 3. 3. Nodo de t i po t ext o
Par a obt ener l os dat os de t i po t ext o se empl ea el mt odo getNodeValue() de l a i nt er f az Node.
case Node.TEXT_NODE:
System.out.print(node.getNodeValue());
break;
13.3.4. MUTABILIDAD DE UN RBOL DOM
Una de l as car act er st i cas ms ut i l i zadas de DOM, aunque no se expl i car en est e manual , es l a
posi bi l i dad de modi f i car un r bol DOM. Por ej empl o, una apl i caci n que r eci be un document o XML de
ent r ada puede gener ar como sal i da ot r o r bol copi ando, modi f i cando, aadi endo o el i mi nando nodos del
r bol de ent r ada.
13. 4. PROCESADORES
Despus de anal i zar un document o XML, casi si empr e se t r ansf or ma ut i l i zando l as especi f i caci ones XSL
(Lenguaj e de Hoj as de Est i l o Ext ensi bl e) y XSLT (Tr ansf or maci n del Lenguaj e de Hoj as de Est i l o
Ext ensi bl e) . Los pr ocesador es apl i can a un document o XML una hoj a de est i l o XSL t r ansf or mando as el
document o en ot r o f or mat o como por ej empl o HTML, PDF o Post Scr i pt . .
Un ej empl o de pr ocesador es Apache Xal an: ht t p: / / xml . apache. or g.



CAPITULO 14
14. Servi ci os Web XML
14. 1. Int roducci n
Un ser vi ci o Web XML es una uni dad pr ogr amabl e a l a que si st emas muy di spar es pueden t ener acceso a
t r avs de Int er net . Est os ser vi ci os dependen f undament al ment e de l a acept aci n gener al i zada de XML,
HTTP y ot r os est ndar es de Int er net que admi t en l a i nt er oper abi l i dad.
Un ser vi ci o Web XML se puede ut i l i zar i nt er nament e por una sol a apl i caci n, o bi en exponer se de f or ma
ext er na en Int er net par a que puedan usar l o var i as apl i caci ones. Est os ser vi ci os son accesi bl es a t r avs de
una i nt er f az est ndar , l o que per mi t e que si st emas het er ogneos puedan t r abaj ar en comn como una
sol a r ed de i nf or mt i ca.
En l ugar de buscar l as capaci dades genr i cas de por t abi l i dad del cdi go, l os ser vi ci os Web XML of r ecen
una sol uci n vi abl e que per mi t e l a i nt er oper abi l i dad de si st emas y dat os. Est os ser vi ci os ut i l i zan l a
mensaj er a basada en XML par a el i nt er cambi o de dat os ent r e l os si st emas que ut i l i zan l enguaj es de
pr ogr amaci n, si st emas oper at i vos y model os de component es i ncoher ent es. Los desar r ol l ador es pueden
cr ear apl i caci ones que r el aci onen ent r e s ser vi ci os Web XML de di ver sos or genes de f or ma muy si mi l ar a
como se ut i l i zan nor mal ment e l os component es en una apl i caci n di st r i bui da.
Una de l as car act er st i cas f undament al es de un ser vi ci o Web XML es el al t o gr ado de abst r acci n que
exi st e ent r e l a i mpl ement aci n y el uso del ser vi ci o. Al ut i l i zar l a mensaj er a basada en XML como
mecani smo par a cr ear y t ener acceso al ser vi ci o, el cl i ent e y el pr oveedor del ser vi ci o Web XML sl o
necesi t an l a i nf or maci n r el at i va a l as ent r adas, l as sal i das y l a ubi caci n.
Los ser vi ci os Web XML est n abr i endo una nueva er a de desar r ol l o de apl i caci ones di st r i bui das. Los
si st emas bi en acopl ados que ut i l i zan i nf r aest r uct ur as de pr opi et ar i o sacr i f i can l a i nt er oper abi l i dad ent r e
l as apl i caci ones. Si n embar go, l os ser vi ci os Web XML of r ecen i nt er oper abi l i dad en un ni vel t ot al ment e
nuevo. Como pr xi mo avance r evol uci onar i o en l a er a de Int er net , l os ser vi ci os Web XML se conver t i r n en
l a est r uct ur a f undament al que vi ncul ar a t odos l os di sposi t i vos i nf or mt i cos.
14. 2. Escenari os
Par a ent ender mej or l a val i osa cont r i buci n de l os Ser vi ci os Web XML, es t i l exami nar ci er t os
escenar i os en l os cual es pueden j ugar un papel vent aj oso.
14.2.1. Ser vi ci os si mpl es
El escenar i o ms bsi co que se puede sol uci onar medi ant e Ser vi ci os Web XML es aquel que pr ovee a l os
cl i ent es de al guna par t e f undament al de f unci onal i dad par a su uso. Por ej empl o, un r et o al que se
enf r ent an l as apl i caci ones de comer ci o el ect r ni co es l a necesi dad de cal cul ar l os cost es de envo par a
una sel ecci n concr et a de opci ones de envo. Di chas apl i caci ones pueden r equer i r l as t abl as de cost es de
envo act ual i zadas de cada compaa de t r anspor t e par a usar l as en l os cl cul os.
Al t er nat i vament e, una apl i caci n puede envi ar un mensaj e si mpl e basado en XML a t r avs de Int er net ,
usando un pr ot ocol o de t r anspor t e est ndar como ht t p, al Ser vi ci o Web XML de cl cul o de cost e del
t r anspor t i st a. El mensaj e puede cont ener el peso y di mensi ones del paquet e, l ugar de or i gen y l ugar de
dest i no, y ot r os par met r os como l a cl ase de ser vi ci o. El Ser vi ci o Web XML del t r anspor t i st a cal cul ar a l os
cost es del envo usando l as t abl as de cost e act ual es y devol ver esa cant i dad, en un mensaj e si mpl e basado
en XML, a l a apl i caci n que ef ect u l a pet i ci n que usar est a cant i dad en el cl cul o del cost e t ot al del
pedi do par a el cl i ent e en par t i cul ar .
146 Informtica III

14.2.2. Int egr aci n de Apl i caci ones
Los Ser vi ci os Web XML pueden ser usados a modo de congl omer ado par a i nt egr ar un conj unt o
apar ent ement e di spar de apl i caci ones exi st ent es. La ext endi da adopci n de sof t war e hecho a medi da por
par t e de vi r t ual ment e l a t ot al i dad de depar t ament os de l a mayor a de l as empr esas ha r esul t ado en un
vast o sur t i do de apl i caci ones t i l es per o que cr ean i sl as de i nf or maci n dent r o de l as pr opi as empr esas.
Debi do a l a var i edad de ci r cunst anci as baj o l as cual es cada apl i caci n f ue desar r ol l ada y a l a nat ur al eza
evol ut i va de l a t ecnol oga, cr ear un ensambl aj e f unci onal ent r e est as apl i caci ones es una t ar ea cuando
menos i nt i mi dant e.
Con l os Ser vi ci os Web XML es posi bl e exponer l a f unci onal i dad y l os dat os de cada una de l as
apl i caci ones exi st ent es como un Ser vi ci o Web par a l as dems apl i caci ones. Se puede cr ear una apl i caci n
compuest a que use est a col ecci n de Ser vi ci os Web XML par a per mi t i r l a i nt er oper abi l i dad ent r e l as
apl i caci ones que const i t uyen di cho congl omer ado.
14.2.3. Sol uci ones par a l a Gest i n de Pr ocesos de Negoci o
Los Ser vi ci os Web XML posi bi l i t an un pot ent e mecani smo medi ant e el cual se pueden cr ear apl i caci ones
que const i t uyan una sol uci n par a l a gest i n de pr ocesos de negoci o de pr i nci pi o a f i n. Di chas sol uci ones
son apr opi adas par a escenar i os como t r ansacci ones B2B (Busi ness-t o-Busi ness) .
Est os ser vi ci os pr oveen l a i nf r aest r uct ur a y her r ami ent as par a el enr ut ado, t r ansf or maci n y
segui mi ent o, basados en r egl as, de document os de negoci o. La i nf r aest r uct ur a per mi t e a l as compaas
i nt egr ar , manej ar y aut omat i zar pr ocesos de negoci o medi ant e el i nt er cambi o de document os de negoci o
(por ej empl o, pedi dos de compr a y f act ur as) ent r e apl i caci ones dent r o o a t r avs de l os l mi t es f si cos de
l a or gani zaci n.
14. 3. Inf raest ruct ura de l os Ser vi ci os Web XML
Los ser vi ci os Web XML deben ser i ndependi ent es de l a el ecci n de si st ema oper at i vo, model o de
obj et os y l enguaj e de pr ogr amaci n par a t ener xi t o dent r o de l a het er ogenei dad de l a Web. Par a que l os
ser vi ci os Web XML l ogr en l a mi sma expansi n que han consegui do ot r as t ecnol ogas basadas en l a Web,
deben ser :
Dbi l ment e ar t i cul ado ( Loosel y coupl ed) : Dos si st emas se consi der an dbi l ment e ar t i cul ados si sl o l o
ni co que se i mpone en ambos si st emas es el ent endi mi ent o de mensaj es de t ext o que se descr i ben a
si mi smos. Por ot r o l ado, si st emas f uer t ement e ar t i cul ados (t i ght l y coupl ed) r equi er en un mayor
ent endi mi ent o ent r e el l os par a poder comuni car se.
Comuni caci n ubi cua: Es i mpr obabl e que nadi e desar r ol l e un si st ema oper at i vo ahor a o en el f ut ur o
que no i ncl uya l a posi bi l i dad de conexi n a Int er net , y por l o t ant o que pr ovea un canal de
comuni caci n ubi cua. Por s mi smo, l a habi l i dad de conect ar casi cual qui er si st ema o apar at o a
Int er net asegur ar que esos si st emas o apar at os est di sponi bl es uni ver sal ment e par a ot r os si st emas o
apar at os a su vez conect ados a Int er net .
For mat o de Dat os Uni ver sal : Adopt ando mt odos de comuni caci n est ndar abi er t os cual qui er si st ema
que sopor t e l os mi smos est ndar abi er t os es capaz de ent ender ser vi ci os Web XML. Ut i l i zando
mensaj es de t ext o que se descr i ben a si mi smos y que l os ser vi ci os Web XML y sus cl i ent es pueden
compar t i r si n l a necesi dad de saber l o que const i t uye cada uno de l os si st emas subyacent es, se l ogr a
una comuni caci n ent r e si st emas aut nomos y di spar es. Los ser vi ci o Web XML l ogr an est a capaci dad
usando XML.
Los ser vi ci os Web empl ean una i nf r aest r uct ur a que pr ovee l o si gui ent e: un mecani smo de
descubr i mi ent o par a l ocal i zar ser vi ci os Web XML, un ser vi ci o de descr i pci n par a def i ni r cmo se usan esos
ser vi ci os y un f or mat o est ndar de pr ot ocol os con l os cual es comuni car se. La Fi gur a 14. 1 muest r a un
ej empl o de est a i nf r aest r uct ur a.
A cont i nuaci n se enumer an l as di f er ent es par t es de est a i nf r aest r uct ur a y su papel .
14.3.1. XML Web Ser vi ces Di r ect or i es
XML Web Ser vi ces Di r ect or i es ponen a di sposi ci n una l ocal i zaci n cent r al par a l a bsqueda de
ser vi ci os Web XML of er t ados por ot r as or gani zaci ones. Los di r ect or i os de ser vi ci os Web XML como el
r egi st r o UDDI (Uni ver sal Descr i pt i on, Di scover y and Int egr at i on) cumpl en est e papel . Los cl i ent es de
ser vi ci os Web XML pueden necesi t ar o no est os di r ect or i os.
14.3.2. XML Web Ser vi ce Di scover y
XML Web ser vi ce di scover y es el pr oceso de l ocal i zar , o descubr i r , uno o ms document os
r el aci onados que descr i ban un ser vi ci o Web XML par t i cul ar usando WSDL ( Web Ser vi ces Descr i pt i on
Captulo 14. Servicios Web 147

Language). Si un cl i ent e de un ser vi ci o Web XML conoce l a l ocal i zaci ` on de l a descr i pci n del ser vi ci o,
puede sal t ar se est e pr oceso.
14.3.3. XML Web Ser vi ce Descr i pt i on
Par a ent ender cmo i nt er act uar con un ser vi ci o Web XML en par t i cul ar es necesar i o di sponer de un
ser vi ci o de descr i pci n que def i na qu i nt er acci ones sopor t a el ser vi ci o Web XML. Los cl i ent es de un
ser vi ci o Web XML deben saber cmo i nt er act uar con un ser vi ci o Web XML ant es de poder usar l o.
14.3.4. XML Web Ser vi ce Wi r e For mat s
Par a posi bi l i t ar una comuni caci n uni ver sal , l os ser vi ci os Web XML usan est ndar es abi er t os, que son
pr ot ocol os que son ent endi bl es desde cual qui er si st ema capaz de sopor t ar l os est ndar es Web ms
comunes. SOAP es el pr ot ocol o cl ave par a l as comuni caci ones de ser vi ci os Web XML.

Fi gura 14. 1. Inf raest ruct ura de l os Servi ci os WEB XML
14. 4. Prot ocol o SOAP
SOAP es un pr ot ocol o basado en XML, si mpl e y l i ger o, par a el i nt er cambi o de i nf or maci n est r uct ur ada
en l a Web. El obj et i vo gl obal de di seo de SOAP es mant ener l o t an si mpl e como sea posi bl e y poner a
di sposi ci n un mni mo de f unci onal i dad. El pr ot ocol o def i ne un mar co par a el i nt er cambi o de mensaj es. Se
t r at a de un pr ot ocol o modul ar y muy ext ensi bl e.
Vi aj ando a t r avs de pr ot ocol os est ndar es de t r anspor t e, SOAP es capaz de apal ancar l as ar qui t ect ur as
abi er t as exi st ent es en Int er net y ganar f ci l ment e l a acept aci n de cual qui er si st ema ar bi t r ar i o capaz de
sopor t ar l os est ndar es ms bsi cos de Int er net . Se podr a ver l a i nf r aest r uct ur a r equer i da par a sopor t ar
ser vi ci os Web XML baj o SOAP como al go si mpl i st as, aunque pot ent es, ya que SOAP aade r el at i vament e
poco a l a i nf r aest r uct ur a exi st ent e en Int er net y an y t odo f aci l i t a acceso uni ver sal a l os ser vi ci os
const r ui dos baj o SOAP.
La especi f i caci n del pr ot ocol o SOAP consi st e en cuat r o par t es pr i nci pal es. La pr i mer a de el l as def i ne
una par t e ext ensi bl e obl i gat or i a que encapsul a l os dat os. Def i ne un mensaj e SOAP y es l a uni dad bsi ca de
i nt er cambi o ent r e pr ocesador es de mensaj es SOAP. Es l a ni ca par t e obl i gat or i a de l a especi f i caci n.
La segunda par t e de l a especi f i caci n de SOAP def i ne r egl as opci onal es de codi f i caci n de dat os par a
r epr esent ar l os t i pos de dat os y gr af os def i ni dos por l as apl i caci ones y un model o uni f or me par a ser i al i zar
model os no si nt ct i cos de dat os.
148 Informtica III

La t er cer a par t e def i ne un pat r n de i nt er cambi o de mensaj es. Cada mensaj e SOAP es un t r ansmi si n
en un sol o sent i do. La cuar t a par t e de l a especi f i caci n def i ne una uni n ent r e SOAP y ht t p. Si n embar go
est a opci n es t ambi n opci onal . Se puede usar SOAP en combi naci n con cual qui er pr ot ocol o o
mecani smo de t r anspor t e.
Par a obt ener l a especi f i caci n de SOAP, vi si t ar l a Web de W3C: ht t p: / / www. w3. or g/ TR/ soap.
14. 5. Proceso de uso de un Servi ci o Web XML
El pr oceso que t i ene l ugar cuando se r eal i za una l l amada a un ser vi ci o Web XML es si mi l ar al pr oceso
que ocur r e cuando se hace una l l amada r egul ar a un mt odo. La pr i nci pal di f er enci a es que en vez de
l l amar a un mt odo que est en l a apl i caci n cl i ent e, se gener a un mensaj e de pet i ci n a t r avs del
t r anspor t e especf i co, como HTTP. Ya que el mt odo del ser vi ci o Web XML puede est ar l ocal i zado en ot r o
comput ador , l a i nf or maci n que el ser vi ci o Web XML necesi t a par a pr ocesar l a pet i ci n debe ser pasada a
t r avs de l a r ed al ser vi dor que t i ene el ser vi ci o Web XML. El ser vi ci o Web XML pr ocesa l a i nf or maci n y
enva el r esul t ado de vuel t a, a t r avs de l a r ed, a l a apl i caci n cl i ent e.
La Fi gur a 14. 2 muest r a el pr oceso de comuni caci n ent r e un cl i ent e y un ser vi ci o Web XML.


14. 2. Proceso de uso de un Servi ci o WEB XML
A cont i nuaci n se descr i be l a secuenci a de event os que t i enen l ugar cuando se l l ama a un ser vi ci o Web
XML:
1. El cl i ent e cr ea una nueva i nst anci a de una pr oxy cl ass del ser vi ci o Web XML. Est e obj et o r esi de en el
mi smo comput ador que el cl i ent e.
2. El cl i ent e i nvoca un mt odo de l a pr oxy cl ass .
3. La i nf r aest r uct ur a en el comput ador del cl i ent e ser i al i za l os ar gument os del mt odo del ser vi ci o Web
XML en un mensaj e SOAP y l o enva a t r avs de l a r ed al ser vi ci o Web XML.
4. La i nf r aest r uct ur a r eci be el mensaj e SOAP y deser i al i za el XML. Cr ea una i nst anci a de l a cl ase que
i mpl ement a el ser vi ci o Web XML e i nvoca el mt odo del ser vi ci o Web XML, pasndol e el XML
deser i al i zado como ar gument os.
5. El mt odo del ser vi ci o Web XML ej ecut a su cdi go, f i j ando l os val or es que debe r et or nar y cual qui er
par met r o de sal i da.
6. La i nf r aest r uct ur a en el ser vi dor Web ser i al i za l os val or es de r et or no y l os par met r os de sal i da en un
mensaj e SOAP y l o enva a t r avs de l a r ed de vuel t a al cl i ent e.
7. La i nf r aest r uct ur a del ser vi ci o Web XML en el comput ador del cl i ent e r eci ve el mensaj e SOAP,
deser i al i za el XML en l os val or es de r et or no y cual qui er par met r o de sal i da, y l os pasa a l a i nst anci a
de l a pr oxy cl ass .
8. El cl i ent e r eci be l os val or es de r et or no y cual qui er par met r o de sal i da.
Captulo 14. Servicios Web 149

14. 6. Cmo se desarr ol l a un Servi ci o Web XML
La cr eaci n de un Ser vi ci o Web XML es si mi l ar a l a cr eaci n de cual qui er component e que ponga a
di sposi ci n acceso a su l gi ca i nt er na de apl i caci n. Par a cr ear un ser vi ci o Web XML es necesar i a al guna
f unci onal i dad que const i t uya el ser vi ci o que se qui er e poner a di sposi ci n, l a descr i pci n de di cho ser vi ci o
que def i ne cmo se usa y una i nf r aest r uct ur a que sopor t a l a r ecepci n y pr ocesami ent o de pet i ci ones y el
envo de r espuest as. Af or t unadament e, l a mayor a de l a i nf r aest r uct ur a r equer i da vi ene dada.
El pr oceso de desar r ol l o depende de l a pl at af or ma de desar r ol l o sobr e l a que se deci da t r abaj ar .
14. 7. Cmo se desarr ol l a un cl i ent e de Servi ci o Web XML
Usar un ser vi ci o Web XML compr ende l a comuni caci n de mt odos del ser vi ci o Web XML a t r avs de l a
r ed usando pr ot ocol os est ndar . Si n embar go, ant es de que una apl i caci n pueda empezar a comuni car se
con un ser vi ci o Web XML, hay cuat r o pasos que debe segui r :
1. Det er mi nar si exi st e un ser vi ci o Web XML. Se puede buscar en un di r ect or i o, como
ht t p: / / uddi . mi cr osof t . com, vendedor es que pr ovean ser vi ci os Web XML con f unci onal i dades
especf i cas. El di r ect or i o t endr una URL al Web del vendedor .
2. Descubr i r un ser vi ci o Web XML. Dada l a URL de un vendedor , se i nvoca al di scover y del ser vi ci o Web
XML par a obt ener det al l es especf i cos acer ca de cada ser vi ci o Web XML di sponi bl e en di cha URL. La
i nf or maci n sobr e cada ser vi ci o Web XML se devuel ve al cl i ent e en f or ma de descr i pci n del ser vi ci o,
que es un document o XML que descr i be con det al l e el ser vi ci o Web XML en Web Ser vi ce Descr i pt i on
Language (WSDL). Concr et ament e el document o det al l a cmo comuni car se con un ser vi ci o Web XML.
3. Dada l a descr i pci n de un ser vi ci o, hay que gener ar una pr oxy cl ass que puede comuni car con l os
mt odos del ser vi ci o Web XML.
4. Cr ear una apl i caci n cl i ent e que i nvoque l os mt odos de l a pr oxy cl ass Est os mt odos pueden
comuni car con l os mt odos del ser vi ci o Web XML a t r avs de Int er net , usando pr ot ocol os est ndar .
Los Ser vi ci os Web XML pueden ser usados por una gr an var i edad de apl i caci ones cl i ent e. Se puede
comuni car con un Ser vi ci o Web XML desde cual qui er apl i caci n Web, i ncl uyendo ot r o ser vi ci o Web XML. El
cl i ent e de un ser vi ci o Web XML no es necesar i ament e una apl i caci n basadas en un cl i ent e; en r eal i dad l a
mayor a de l os cl i ent es son apl i caci ones basadas en un ser vi dor , t al es como For mul ar i os Web u ot r os
Ser vi ci os Web XML.

Fi gura 14. 3. Dos cl i ent es de Servi ci os WEB XML
Como se muest r a en l a Fi gur a 14. 3, hay dos ser vi ci os Web XML cl i ent es; un For mul ar i o Web y un
ser vi ci o Web XML. El For mul ar i o Web, que es el que el usuar i o ve, comuni ca con el ser vi ci o Web XML
l l amado GetCurrentPrices. El ser vi ci o Web XML GetCurrentPrices ent onces act a como un cl i ent e
de ot r o ser vi ci o Web XML comuni cando con el ser vi ci o Web XML l l amado StockServices par a obt ener l a
cot i zaci n de l as acci ones. La cot i zaci n de l as acci ones se devuel ve ent onces al ser vi ci o Web XML
GetCurrentPrices, el cual l o devuel ve a su vez al For mul ar i o Web.
14. 8. Herrami ent as Java para el di seo de Ser vi ci os Web XML
Se di spone de l as si gui ent es APIs (Appl i cat i on Pr ogr ammi ng Int er f aces) par a el di seo de Ser vi ci os Web
XML y cl i ent es de ser vi ci os Web XML:
JAXR: Acceso a di r ect or i os de ser vi ci os.
JAXM: Envo de mensaj es XML.
JAX-RPC: Uso de XML-RPC (mecani smo par a i nvocaci n r emot a de pr ocedi mi ent os (mt odos)
ut i l i zando XML como f or ma de comuni caci n) desde Java.
150 Informtica III

14.8.1. JAXR
Es una API par a Java que per mi t e t r abaj ar con l os regi st ros de ser vi ci os web si n pr eocupar nos de l os
det al l es de l os document os XML que i nt er vi enen en l as oper aci ones. Un r egi st r o es una i nf r aest r uct ur a que
f aci l i t a el descubr i mi ent o de ser vi ci os web. Est e t i po de r egi st r os se encuent r a di sponi bl es par a cual qui er
or gani zaci n, nor mal ment e como un ser vi ci o web ms. Exi st en var i as especi f i caci ones par a est os r egi st r os,
l a ms i mpor t ant es es UDDI, desar r ol l ada por una ser i e de empr esas.
Es i ndependi ent e del t i po de r egi st r o concr et o al que accedemos, pues se ut i l i za un model o de
cont eni do uni f i cado.
Per mi t e r eal i zar l as si gui ent es oper aci ones bsi cas: buscar ser vi ci os web di sponi bl es, publ i car ser vi ci os
web, modi f i car l os dat os de un ser vi ci o, el i mi nar un ser vi ci o.
14.8.2. JAXM
Es una API par a Java que per mi t e t r abaj ar con mensaj es SOAP si n pr eocupar nos de l os det al l es de l os
document os XML que i nt er vi enen en l as oper aci ones.
Per mi t e envi ar mensaj es de dos f ormas:
Medi ant e una conexi n punt o a punt o: el pr ogr ama enva el mensaj e di r ect ament e al dest i nat ar i o,
quedando bl oqueado a l a esper a de una r espuest a.
Medi ant e un pr oveedor de mensaj es: se enva el mensaj e a un pr oveedor que ser el encar gado de
hacer l o l l egar al dest i nat ar i o, si n pr oduci r se ni ngn bl oqueo en esper a de una r espuest a.
14.8.3. JAX-RPC
Es una API par a Java que per mi t e const rui r servi ci os web y cl i ent es par a l os ser vi ci os si n
pr eocupar nos de l os det al l es de l os document os XML que i nt er vi enen en l as oper aci ones.
Las l l amadas a l os mt odos y l as r espuest as se i mpl ement an medi ant e mensaj es SOAP.
En un servi ci o web, l os mt odos que l o const i t uyen se def i nen en un i nt er f az y se i mpl ement an en una
cl ase apar t e.
En un cl i ent e, l as l l amadas a l os mt odos se r eal i zan medi ant e obj et os l ocal es que r epr esent an el
mt odo r emot o (st ubs) .
Un cl i ent e escr i t o con JAX- RPC puede i nt eract uar con un ser vi ci o escr i t o en ot ro l enguaj e, y
vi cever sa, pues est a t ecnol oga se basa en una ser i e de est ndar es como HTTP, SOAP y WSDL.




Bi bl i ograf a

Ri ck Decker , St uar t Hi r shf i el d. Progr amaci n con Java. Segunda edi ci n. Thomson. (2001) .

Jos M Pr ez Menor , Jess Car r et er o Pr ez, Fl i x Gar ca Car bal l ei r a, Jos Manuel Pr ez Lobat o.
Probl emas Resuel t os de Progr amaci n en l enguaj e Java. THOMSON. (2002).

Jasn Hunt er , Wi l l i am Cr awf or d. Java Servl et Programmi ng, Second Edi t i on. O Rei l l y & Associ at es,
Inc. (2001).

JDBC
TM
Gui de: Get t i ng St art ed. Sun Mi cr osyst ems, Inc. (1997).

Cay S. Hor st mann & Gar y Cor nel l . Java 2. Vol umen 1. Fundament os. Pr ent i ce Hal l (2003).

Cay S. Hor st mann & Gar y Cor nel l . Java 2. Vol umen 2. Car act erst i cas avanzadas. Pr ent i ce Hal l
(2003).








ANEXOS



ANEXO 1
A1. Int roducci n a SQL
A1. 1. Int roducci n
SQL (St r uct ur ed Quer y Language o Lenguaj e Est r uct ur ado de Consul t as) es un l enguaj e empl eado
par a cr ear , mani pul ar , exami nar y manej ar bases de dat os r el aci onal es. Pr opor ci ona una ser i e de
sent enci as est ndar que per mi t en r eal i zar l as t ar eas ant es descr i t as. SQL f ue est andar i zado segn l as
nor mas ANSI (Amer i can Nat i onal St andar ds Inst i t ut e) en 1992, pal i ando de al guna f or ma l a
i ncompat i bi l i dad de l os pr oduct os de l os di st i nt os f abr i cant es de bases de dat os ( Or acl e, Sybase,
Mi cr osof t , Inf or mi x, et c. ). Est o qui er e deci r que una mi sma sent enci a per mi t e a pr i or i mani pul ar l os
dat os r ecogi dos en cual qui er base de dat os que sopor t e el est ndar ANSI, con i ndependenci a del t i po de
base de dat os.
La mayor a de l os pr ogr amas de base de dat os ms popul ar es sopor t an el est ndar SQL-92, y
adi ci onal ment e pr opor ci onan ext ensi ones al mi smo, aunque st as ya no est n est andar i zadas y son
pr opi as de cada f abr i cant e. JDBC sopor t a el est ndar ANSI SQL-92 y exi ge que cual qui er dr i ver JDBC sea
compat i bl e con di cho est ndar .
Par a poder envi ar sent enci as SQL a una base de dat os, es pr eci so que un pr ogr ama escr i t o en Java
est pr evi ament e conect ado a di cha base de dat os, y que haya un obj et o St at ement di sponi bl e.
A1. 2. Regl as si nt ct i cas
SQL t i ene su pr opi a si nt axi s que hay que t ener en cuent a, pues a veces puede ocur r i r que si n
pr oduci r se ni ngn pr obl ema en l a compi l aci n, al t r at ar de ej ecut ar una sent enci a se pr oduzca al gn er r or
debi do a una i ncor r ect a si nt axi s en l a sent enci a. Por t ant o, ser necesar i o segui r l as si gui ent es nor mas:
SQL no es sensi bl e a l os espaci os en bl anco. Los r et or nos de car r o, t abul ador es y espaci os en
bl anco no t i enen ni ngn si gni f i cado especi al . Las pal abr as cl ave y comandos est n del i mi t ados por
comas ( , ) , y cuando sea necesar i o, debe empl ear se el par nt esi s par a agr upar l os.
Si se van a r eal i zar ml t i pl es consul t as a un mi smo t i empo, se debe ut i l i zar el punt o y coma (; )
par a separ ar cada una de l as consul t as. Adems, t odas l as sent enci as SQL deben f i nal i zar con el
car ct er punt o y coma (; ).
Las consul t as son i nsensi bl es a mayscul as y mi nscul as. Si n embar go, l os val or es al macenados
en l as bases de dat os s que son sensi bl es a l as mi smas, por l o que habr que t ener cui dado al
i nt r oduci r val or es, ef ect uar compar aci ones, et c.
Par a car act er es r eser vados como % o _ pueden y deben empl ear se l os car act er es escape. As
por ej empl o en l ugar de % habr de empl ear se \ %.
A l a hor a de i nt r oduci r un St r i ng, st e deber i r encer r ado ent r e comi l l as si mpl es, ya que de l o
cont r ar i o se pr oduci r n er r or es en l a ej ecuci n.
A1. 3. Ej ecuci n de sent enci as SQL
La i nt er f ace St at ement pr opor ci ona dos mt odos di st i nt os de ej ecuci n de sent enci as SQL en f unci n
del t i po de sent enci a que se vaya a ej ecut ar :
execut eQuer y(St r i ng): Si r ve par a r ecuper ar i nf or maci n cont eni da en una base de dat os. Ej ecut a
l a consul t a (quer y) pasada como par met r o y devuel ve un obj et o Resul t set como r esul t ado de l a
consul t a.
156 Informtica III

execut eUpdat e(St r i ng): Anl ogo al ant er i or , con l a di f er enci a de que est e mt odo no si r ve par a
r eal i zar una consul t a, si no par a modi f i car o i nt r oduci r dat os en l a base de dat os. Ti ene como
val or de r et or no un i nt , que i ndi ca el nmer o de f i l as act ual i zadas.
A1. 3. 1. Ti pos de dat os SQL y equi val enci a
SQL empl ea unos t i pos (St r i ng, i nt , et c) di st i nt os a l os de Java. La Tabl a 1 muest r a l os t i pos ms
empl eados y su equi val enci a:
A1. 3. 2. Cr eaci n de t abl as
Par a l a cr eaci n de t abl as se empl ea l a sent enci a CREATE TABLE. El f or mat o de l a sent enci a es:
CREATE TABLE <nombre de tabla> (<elemento columna> [<elemento columna>]...)
donde el el ement o col umna se decl ar a en l a f or ma:
<nombre columna> <tipo de dato> [DEFAULT <expresin>]
Todo aquel l o encer r ado ent r e cor chet es r epr esent a el ement os opci onal es, no necesar i os. As, par a
cr ear un t abl a de nombr e ALUMNOS que cont uvi er a el nombr e y apel l i dos del al umno como St r i ngs y el
nmer o de car net como un l ong, se t endr a que ej ecut ar l a si gui ent e sent enci a:
CREATE TABLE ALUMNOS (Nombre CHAR(15), Apellidos VARCHAR (30), Carnet INTEGER);
Est a sent enci a cr ea una t abl a de nombr e ALUMNOScon t r es campos:
Nombr e, que es de t i po CHAR y admi t e hast a 15 car act er es
Apel l i dos, que es de t i po VARCHAR y admi t e hast a 30 car act er es
Car net , que es de t i po INTEGER (i nt )
La di f er enci a ent r e CHAR y VARCHAR es que si el val or i nt r oduci do en un campo es i nf er i or al t amao
asi gnado al mi smo (15 y 30 en est e caso), en el pr i mer caso r el l ena el espaci o con espaci os, y en el
segundo l o dej a t al y como est .
Obsr vese por ot r a par t e que t al y como se ha menci onado ant es, l as mayscul as/ mi nscul as no
i nf l uyen en el r esul t ado f i nal . En ef ect o:
CREATE TABLE ALUMNOS (Nombre CHAR(15), Apellidos VARCHAR (30), Carnet INTEGER);
t i ene el mi smo r esul t ado que l a pr i mer a sent enci a. En l a Fi gur a 1 puede obser var se el r esul t ado de l a
ej ecuci n de l a sent enci a CREATE TABLE:
Ti po de dat o Java Ti po de dat o SQL
Int INTEGER
Long BIG INT
Fl oat REAL
Doubl e FLOAT
Bi gDeci mal DECIMAL
Bol ean BIT
St r i ng VARCHAR
St r i ng CHAR
Dat e DATE
Ti me TIME
Tabl a 1. Rel aci n ent r e l os t i pos de dat os de Java y SQL.

Fi gur a 1. Resul t ado de ej ecut ar l a sent enci a CREATE TABLE.
Anexo 1. Introduccin a SQL 157

A1. 3. 3. Recuper aci n de i nf or maci n
La sent enci a SELECT es l a que se ut i l i za cuando se qui er en r ecuper ar dat os de l a i nf or maci n
al macenada en un conj unt o de col umnas. Las col umnas pueden per t enecer a una o var i as t abl as y se
puede i ndi car el cr i t er i o que deben segui r l as f i l as de i nf or maci n que se ext r ai gan. Muchas de l as
cl usul as que per mi t e est a sent enci a son si mpl es, aunque se pueden consegui r capaci dades muy compl ej as
a base de una gr amt i ca ms compl i cada.
La si nt axi s de l a sent enci a es:
SELECT [ALL | DISTINCT] <seleccion>
FROM <tablas>
WHERE <condiciones de seleccion>
[ORDER BY <columna> [ASC | DESC]
[,<columna> [ASC | DESC]]...]
La sel ecci n cont i ene nor mal ment e una l i st a de col umnas separ adas por comas (, ) , o un ast er i sco ( *)
par a sel ecci onar l as t odas. Un ej empl o ej ecut ado cont r a una de l as t abl as cr eadas ant er i or ment e podr a
ser :
SELECT * FROM ALUMNOS;
que devol ver a el cont eni do compl et o de l a t abl a ALUMNOS. Si sol ament e se qui er e conocer l os dat os
del al umno cuyo nmer o de car net es 12345, l a consul t a ser a:
SELECT * FROM ALUMNOS WHERE Carnet = 12345;
Se qui er e ahor a saber cunt os al umnos hay de nombr e Mi kel . Par a or denar l a l i st a r esul t ant e por
apel l i dos, por ej empl o, se usar a l a di r ect i va ORDER BY:
SELECT * FROM ALUMNOS
WHERE Nombre = Mikel
ORDER BY Apellidos;
Puede especi f i car se que est a or denaci n es r eal i zada de f or ma ascendent e (cl usul a ASC) o
descendent e (cl usul a DESC). As, si se qui er e or denar de f or ma ascendent e:
SELECT * FROM ALUMNOS
WHERE Nombre = Mikel
ORDER BY Apellidos ASC;
Si l o que se qui er e, adems de que l a l i st a est or denada por apel l i dos, es ver sol ament e el nmer o de
car net , se consul t ar a de l a f or ma:
SELECT Carnet FROM ALUMNOS
WHERE Nombre = Mikel
ORDER BY Apellidos;
Si se qui er en r esul t ados de dos t abl as a l a vez, t ampoco hay pr obl ema en el l o, t al como se muest r a en
l a si gui ent e sent enci a:
SELECT ALUMNOS.*, PROFESORES.* FROM ALUMNOS, PROFESORES;
Obsr vese que se especi f i ca el nombr e de l a t abl a ( ALUMNOS o PROFESORES) a l a hor a de acceder a
l os campos de una t abl a. As:
SELECT ALUMNOS.CampoDeAlumnos,PROFESORES.CampoDeProfesores FROM ALUMNOS,
PROFESORES;
Por ot r a par t e, puede ut i l i zar se el car ct er %como comodn par a especi f i car t r mi nos de consul t a que
empi ecen por un det er mi nado val or . As, par a r ecuper ar t odos l os dat os de l os al umnos cuyo nombr e
comi enza por M :
158 Informtica III

SELECT * FROM ALUMNOS WHERE Nombre LIKE 'M%';
Obsr vese que M% est encer r ado ent r e comi l l as si mpl es ('). Puede asi mi smo empl ear se l a cl usul a
NOT LIKE, par a i ndi car por ej empl o que se qui er en r ecuper ar t odos l os dat os de l os al umnos cuyo nombr e
no empi ece por B :
SELECT * FROM ALUMNOS WHERE Nombre NOT LIKE 'B%';
Adi ci onal ment e pueden empl ear se l os oper ador es r el aci onal es r ecogi dos en l a Tabl a 2:
As, par a obt ener l os nombr es de aquel l os al umnos cuyo nmer o de car net sea mayor que 70000, se
empl ear a l a si gui ent e sent enci a:
SELECT Nombres FROM ALUMNOS WHERE Carnet>70000;
Por ot r a par t e, pueden empl ear se l as cl usul as l gi cas AND, OR y/ o NOT. As, si se qui si er a obt ener
t odos l os dat os de l os al umnos cuyo nmer o de car net es super i or a 70000 y cuyo nombr e es Mi kel , se
deber a empl ear :
SELECT * FROM ALUMNOS WHERE Carnet>70000 AND Nombre='Mikel';
El or den de l os oper ador es l gi cos es el si gui ent e:
NOT
AND
OR
Por l t i mo, i ndi car que el empl eo de l a cl usul a DISTINCT el i mi na cual qui er f i l a dupl i cada que pueda
obt ener se como r esul t ado de una consul t a a var i as t abl as r el aci onadas ent r e s.
A1. 3. 4. Al macenar i nf or maci n
La sent enci a INSERT se ut i l i za cuando se qui er en i nser t ar f i l as de i nf or maci n en una t abl a. Aqu
t ambi n se pueden pr esent ar di f er ent es capaci dades, dependi endo del ni vel de compl ej i dad sopor t ado. La
si nt axi s de l a sent enci a es:
INSERT INTO <nombre tabla>
[(<nombre columna> [,<nombre columna>]...)]
VALUES (<expresion> [,<expresion>]...)
Por ej empl o, en l a t abl a de l os ALUMNOSse podr a i ngr esar uno nuevo con l a si gui ent e i nf or maci n:
INSERT INTO ALUMNOS VALUES ( Juan, Prez Etxeberria, 23456);
A1. 3. 5. El i mi naci n de dat os
La sent enci a DELETE es l a que se empl ea cuando se qui er en el i mi nar f i l as de l as col umnas, y su
gr amt i ca t ambi n es muy si mpl e:
DELETE FROM <nombre tabla> WHERE <condicion busqueda>
Si no se especi f i ca l a cl usul a WHERE, se el i mi nar el cont eni do de l a t abl a compl et ament e, si n
el i mi nar l a t abl a, por ej empl o:
Operador rel aci onal Si gni f i cado
= Igual
<> o ! = Di st i nt o
< Menor
> Mayor
<= Menor o i gual
>= Mayor o i gual
Tabl a 2. Oper ador es r el aci onal es.
Anexo 1. Introduccin a SQL 159

DELETE FROM ALUMNOS;
vaci ar compl et ament e l a t abl a, dej ndol a si n ni ngn dat o en l as col umnas, es deci r , esenci al ment e l o
que hace es bor r ar t odas l as col umnas de l a t abl a. Especi f i cando l a cl usul a WHERE, se puede i nt r oduci r
un cr i t er i o de sel ecci n par a el bor r ado, por ej empl o:
DELETE FROM ALUMNOS WHERE Carnet=12345;
A1. 3. 6. Act ual i zaci n de dat os
Par a act ual i zar f i l as ya exi st ent es en l as col umnas, se ut i l i za l a sent enci a UPDATE, cuya gr amt i ca es
l a si gui ent e:
UPDATE <nombre tabla> SET <nombre columna> = ( <expresion> | NULL )
[, <nombre columna> = ( <expresion> | NULL )]... WHERE <condicion busqueda>
Est e comando per mi t e cambi ar uno o ms campos exi st ent es en una f i l a. Por ej empl o, par a cambi ar
el nombr e de un al umno en l a t abl a de ALUMNOS, se har a:
UPDATE ALUMNOS SET Nombre = 'Amaia' WHERE Carnet=12345;

También podría gustarte