100% (1) 100% encontró este documento útil (1 voto) 1K vistas 195 páginas Desarrollo Web Con Java Desde Cero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí .
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
Ir a elementos anteriores Ir a siguientes elementos
Guardar Desarrollo Web Con Java Desde Cero para más tarde
binonep es)
~+-Il~¥ MADISON)
~— | i » Om ] ppCeruy a
GRATIS
Desarrollo
web con Java
desde cero
Programacion web+ Uso de Servlets + JavaServer
Pages + Utilizacion de Struts y ActionForms
Programacion de vistas+ Validacion de una webDESARROLLO
WEB CON JAVA
DESDE CERO
RedUSERSTITULO: Desarrollo web con Java desde cero
COLECCION: Desde Cero
FORMATO: 19x 1S5em
PAGINAS: 192
Copyright © MMEXIV. Es wun publicacn de Fox Andina en coediciia coa DALAGA S.A. Hecho el epésito que
‘mara a ley 11723. Todos fos derechos reservados. Esta publicacia no puede ser serodocda ni en todo
-nien parte, por ningin medio aca o futuro sin el pesmiso previo y por eserito de Fox Andina S.A. Sa ufiae-
cin esté pennda por las leyes 11723 y 25446. La editorial no sume responsabilidad alguna por cualquier
consectoneia derivadn do a fabricaeién,fcionamiento y/o utitzncié do los serviviosy productos quo se
dosonben yo nalizen. Todas Ins marcas mencionadas en este iro son propiedad exclusiva de sus respec-
tivos duis. Impreso en Argentina, Libro de edicién argentina. Primera imprestonrealizada en Sevagraf,
Costa Rica 5226, Grand Bourg, Malvinas Argentines, Pia. de Buenos Aires en IX, MMXIV.
ISBN 978-987-1949-74-8
‘Martinez Quijano, Andrés
Desarrollo web con Tava deste cero / Andrés Martinez Quijano ; coordinado por Gustavo Carballsio.
[Link].- Cindad Autonoma de Buenos Aires : Fox Andina; Buenos Aires: Dalaga, 2014.
192 p.: 19x15 em, « Desde cero: 39)
ISBN 978-987-1949-74-8
1 Informética. 2. Disefio de Aplicaciones. I. Carballeiro, Gustavo, coord. Il Titulo
DD 005.3
>> [Link] users comDESARROLLO WEB CON JAVA DESDE CERO [sexs]
RR
Prologo al contenido
A fines de 1994, la web dio un gran salto de la mano de
Netscape 0.8: con este browser se podia acceder a fascinantes
sitios con fondo gris y algunas imagenes.
Recien a mediados del ailo siguiente aparecia la aplicacion
web interactiva TeleGarden, que estaba armada con una ci-
mara de video y un brazo robot que podia ser controlado
desde la Web para hacer tareas baisicas de jardineria. Nada
nds impresionante que eso.
Intemet ya no genera tanta sorpresa, si se tienen en cuen-
ta las experiencias con CGI, las soluciones mids elegantes de
ASP. PHP 0 JSP.
Hoy en dia, parece natural asumir —erroneamente~ que
cualquier persona que posea cierto conocimiento de algin
Jengnaje puede constmir algo que funcione en la Web.
(El resultado?
Aplicaciones que agonizan cuando ingresan mas de dos
usuarios, reportes que tardan en aparecer y mega-objetos
serializados que se transmiten en cada request.
La connnidad de desarrolladores contintia en expansion.
Las nuevas caras que hoy empiezan a deseubrir Java necesitan
de un buen punto de partida para entender el paradigma web.
Este libro se propone ejercer un rol de maestre al evitar es-
pecificaciones rigidas, estableciendo una linea muy clara con
ejemplos sencillos y concretos.
Explota el potencial de Java sin dejar de lado las buenas
pricticas, incluso para quienes ya vienen programando,
Que lo disfiuten mucho.
wunired users com <«€4 oa
E] libro de un vistazo
PRELIMINARES
Alo largo del presente libro veremos todas las herramientas necesarias para
convertinnos en verdaderos expertos en el desarrollo de aplicaciones web con
Java. En cada capitulo, veremos un ejemplo integrador. real y conereto. desarro-
lado con las herramientas open source
we’
En este capitulo, que tiene un cardcter
introductorio, veremos qué ¢s la
programacién web y algunas de sus
> wuwred users .com
Eclipse y Tomeat.
a a4
Si utilizamos solo servlets ISP
tendremos complicaciones
cn los desarrollos complejos.
Por eso, en este capitulo haremos
‘una introduccién a Struts, una potente
herramienta de desarrollo web
* ved
En este capitulo conoceremos
los ActionForms: qué son. c6mo
programarlos y cual es su importancia
en el desarsollo de aplicaciones
‘Luego del enfoque tradicional,
contemplaremos otras alternati
* “vee
En este capitulo veremos los
Action en Struts: para qué sirven,DESARROLLO WEB CON JAVA DESDE CERO 5
‘s6mo programarlos, sus diversas el envio duplicado. Ademas, como
altemativas y c6mo inferactian con la enviar mensajes y errores desde la
‘vista usando tags propios de Struts ‘accion para validaciones complejas.
* “ve
Es momento de programar la vista.
Es por eso que, en este capitulo. ‘Conoceremos cdmo erear una pagina
‘eremos como generar piginas JSP de ingreso de usuarios y eusles son las
‘con tags de Struts y sus utilidades. combinaciones de datos a ingresar,
* ovuy vue * ovwy YL
‘Veremos uun componente que valida
En esta secci6n online, complementaria ‘utomaticamente nuestros formularios.
al capitulo 6, aprenderemos a ‘Conoceremos sus validaciones basieas
prevenir un problema recurrente: Yy erearemos nuevas.
Z) INFORMACION COMPLEMENTARIA
A lo largo de este manual, podré encontrar una scric de recuadros que Ie brindaran informacién
complementaria: curiosidades, trucos, ideas y consejos sobre los temas tratndos. Para que pueda
distinguislos en forma mas sencilla, cada recuadto esta identificado con diferentes iconos:
CURIOSIDADES ATENCION DATOS UTILES sitios
E IDEAS ‘YY NOVEDADES, WEB
users com «€
www,6 PRELIMINARES,
Contenido del libro
Prologo al contenido. HttpServletResponse..
EI libro de un vistazo. aed
Informacion complementaria...
Tatroduccion
ee
La programacion web JavaServer Pages
Intemet,
Sitios web con paginas dinamicas,
Programacién web vs. tradicional.
Resumen,
Actividades
Un ejemplo integrador. 6s
a Vs Variables implieitas 6
Servlets Directivas de pagina. os
Qué son los servlets’
Un cjemplo: Hola mundo...
HittpServletRequest...
Apache Tomcat 6.12
>> wwuired users com
ISP y JavaBeans.
Inclusin de paginas.DESARROLLO WEB CON JAVA DESDE CERO
Struts
Introduccion a Struts.
Elmodele..
Lavista
El controlador
Struts
Hola Struts 91
Desarrollando aplicaciones ean Stouts... 103
‘Model 2X
Resumen 105
106
Actividades
abesitter >
ActionForms
Interaetuando con el usuario. 108
‘ActionFoms.
Configurar un ActionForm
Alternativas, 126
DynaActionForm: D6
LazyValidatosForm. 128
Resamea 133
Actividades 134
Capit. 2 = ©
Nombre:
Apellido
Edad: (28
Lenguaje preferido:
Me gusta el:
ODiseto
© Programacion
OModelado
OGerencia de proyectos
Enviar
a
Actions en Struts
Programas el controlador. 136
Configurar un Action. 137
ActionForward 40
Actions para tod 11
Resumen .. 151
Actividades ... sw 182PRELIMINARES
Vista
“Hasta la vista, baby. 154
154
15s
167
171
191
192
Envios duplicados
Envios duplicade
Cancelaciéa de Ia acciéa,
Enrores y mensaje
Actividades
>> [Link] users com
jemplo integrador del capitulo 7
Un ejemplo integrador .
Resumen,
Actividades
Struts Validator
‘Validar los formularios
Definir un validador. 5
‘Validaciones esténdar. 7
‘Validacion en el cliente
Un validador propio,
Validaciones multi-pégina .
Mostrar errores con estilo 3
El ejemplo completo, 3s
Resumen 4
Actividades
(0) hetpfflocahost:en80)Strutsiente,.do
Nomb:
Eat
Envier | [ Cancelar
rere ean enone edENNUESTROSITIO PODRA ACCEDER A UNA PREVIEWDIGITAL DE CADA LIBRO ¥ T:
OBTENER. DEMANERA GRATUITA. UNCAPITULO ENVERSIONPDF. EL SUMARIO COMPLE]
E IMAGENES AMPLIADASDE TAPA Y CONTRATAPA.
RedUSERS @[Link]
NESTS SCE tS yest FO Mote etree Ce ehMac
Pern M ccna nt cae onccent herr ecnnn
Prveinctiratroncre)
SOLO VALIDO EN LA REPUBLICA ARGENTINA If ** VALIDO EN
®
[Link] ters .com10 ESS PRELIMINARES
Introduccion
El primer contacto con la programacién web puede ser a ve~
ces dificil de implementar, si no es el Ambito habitual de nues-
tos desarrollos. Con el tiempo, practicando e investigando,
haciendo algunos proyectos de sitios web dinémicos y. sobre
todo, equivocdndonos en el proceso -1o que conduce al aprendi-
zaje-. podemos comenzar a entender de qué trata el desarrollo
web. Con el recuerdo de cnales son las complicaciones que nos
podemos encontrar y las dudas que se nos pueden presentar en
los primeros pasos del desarrollo, este libro esta planteado en
un orden cuasi-cronolégico que sigue, de alguna forma, la evo-
lucion que suftie el desarrollo web con Java. Empezaremos con
simples servlets ~esa promesa salvadora que inteuto pero no
pudo ser ISP y con [a inclusion del paradigma MVC en la Web.
Pensado para el programador que no tiene experiencia en de-
sarrollo de aplicaciones web, este libro lo introducira en un
mundo donde es necesario un cambio en Ia forma de pensar las
aplicaciones. Un mundo en donde la interaccién con el usta-
rio se asemeja bastante a dar indicaciones a un albaail acerca
de como queremos una pared, mediante cartas que él se digna-
ré a responder cuando quiera (si es que quiere). El libro inten=
ta recapitular las dificultades que existen en cada paso, a fin de
evitar que el lector tenga que tropezar varias veces con la mis-
ma piedra
Al final de cada capitulo se presentaran interrogantes y pro-
blemas a resolver relacionados con Ia temética vista. Habra pre~
‘guntas que no son de facil respuesta: debemos advertir que es
muy probable uo encontrarla al releer el capitulo. Tendremos
«que pensar, buscar informacion, hacer programas y probar para
haallar la respuesta. Esa es la idea del libro,La programacion web
La programacién de aplicaciones web impone una mieva forma
de pensar y programar aplicaciones. En este capitulo veremos qué
es la programacién web y algunas de sus caracteristicas clave.
vintroduecién al mundo web... Resumen...
Intemet
Sitios web Actividades...
con paginas dindmicas....
Programacién web
vs. tradicional...
aaa2 ce 1. LA PROGRAMACION WEB
Introduccion al mundo web
En Jos tiltimos aitos, internet _dej6 de ser un mero divertimento para
pasar a ser tn medio fundamental de desarrollo de negocios. Hoy en dia,
mediante intemet podemos hacer mucho amas que visitar paginas web
y chatear; estamos acostumbrados a realizar muchas de muestras tareas
cotidianas: pagar las cuentas, alquilar una pelicula en el videoclub, revisar
nuestros e-tnails, reservar uu hotel y pasajes para nuestras proximas va-
caciones, y muchas cosas mas. Todo esto, independientemente del lugar
donde estemos y del horario. En este contexto, estar en intemet es condi-
cién indispensable para cualquier empresa.
En un principio, pareceria suficiente con tener una mera pégina con in-
formacion de contacto en Ja que se muestren productos y servicios, pero
ceuseguida se vuelve imprescindible proveer nuevos servicios a los poten-
ciales clientes a través de la red de redes, para no perder competitividad en
el mercado. Un banco ya no puede dejar de oftecer home banking una linea
aérea que no tenga pagina en internet donde se puedan consultar los vuelos
actualizados y reservar 0 comprar pasajes pierde gran parte de su mercado.
‘Y asi con cualquier érea de negocio en que pensemos. Programar este tipo de
servicios puede parecer muy complicado y. si bien hay algunas aplicaciones
ctiticas, como, por ejemplo, las bancarias -en donde la transferencia de efec~
tivo no puede dar lugar a errores de sistemas y se requiere mucha inversion
al once otnent
Para obtener material adicional gratuito, ingrese ala seccién __—_-Publicaciones/Libros
dentro de _bttpy/[Link] Alli podra ver todos mestros titulos y
acceder a contenido extra de cada uno, como los ejemplos utilizados por el autor,
apéndives y archivos editables o de cédigo fuente. Todo esto ayudard a comprender
mejor los conceptos desarrollados en la obra.
>> wonwred users .comDESARROLLO WEB CON JAVA DESDE CERO aS 13
en materia de seguridad, veremos que normalmente desarrollar una aplica-
cién web segura no es més complicado que progtamar cualquier aplicacion
stand-alone. De hecho, dados los reducidos requerimientos y limitaciones
de este tipo de desarrollos y la gran cantidad de software open souree que hay
disponible para ser usado gratuitamente, en muchos casos suele ser mis sim
ple hacer una aplicacion web que una de escritorio.
Internet
Para poder metemos de Ileno en la programacién web, es fundamental
entender cémo funciona, a grandes rasgos, internet.
Cuando abrimos un navegadlor y lo apuntamos hacia una pagina web,
porejemplo, [Link] —_,en el fondo se est generando una comu-
nicacién entre dos programas: un cliente yun servidor
Pedide )
Tespuesta
Figura |, Al navegar por intemet, basicamente estamos realizando
una comunicacién entre dos programas.
El cliente es nuestro navegador (Internet Explorer, Firefox, eteétera),
que se comunica con el servidor. En este caso, el servidor es un progra-
sma que esta coustantemente escuchando peticiones de clientes y que
devuelve, para cada pedido, una respuesta —_acorde.
La respuesta es tomada por nuestro navegador y se muestra en pan-
talla, y de esta forma navegamos, de pedido en pedido, respuesta tras
respuesta, continuamente.u ass 1. LA PROGRAMACION WEB
Sobre HTML
En este libro asumiremos que las paginas que devuelve el servidor son
siempre paginas HTML. Si bien esto ocurre en la mayoria de los casos en
os sitios de internet, también hay muchos sitios que trabajan con otras
tecnologias, entre las cuales la més comin es Flash.
HTML significa Hypertext Markup Language . Silo traducimos al cas-
tellano: Lenguaje de Marcado de Hipertexto Nos alcanza con saber
que HTML es un lenguaje que le especitica ciertos atribmtos a su conte-
nido, y los navegadores web saben nmy bien cémo mostrar este conte-
nido formateado segiin esos atributos.
Por ejemplo, tm documento HTML (0 pagina HTML) puede especificar
que en cierto lugar del documento haya que insertar una imagen, © que
cierto texto dentro de su contenido vaya en negrita o con determinada
tipografia. © sea, no difiere mncho de lo que podemos hacer con un
documento Word; de hecho, cualquier procesador de texto permite
exportar documentos como archivos de tipo HTML.
La diferencia entre ambos documentos radica en el contexto en que
van a utilizarse, y en que HTML es un documento escrito enteramente
en texto plano. Esto significa que podemos erear documentos HTML en
cualquier editor de texto sencillo.
Ahora que sabemos qué es HTML, vamos a desglosar su significado:
wee
Existe bastante controversia sobre las cookies. Hay gente que las defiende y gente
‘que dice que son una invasién a Ia privacidad, dado que el servidor esta enardando
informacién en nuestra PC y la puede usar para recabar informacién sin nuestro
consentimiento. Por eso, la mayoria de los navegadores permite definir si queremos
aceptar cookies 0 no y configurar varias opeiones mas sobre ellas.
> wowDESARROLLO WEB CON JAVA DESDE CERO [Users] 1s
© Hypertext: se dice que un documento HTML contiene hipertexto en
l sentido de que este documento puede referenciar a otro documento
HTML. Cada vez que un documento HTML referencia a otro, se dice
que esti conectado a ese otro documento mediante un enlace (0 link ).
© Markup — : un documento HTML define sus secciones mediante
mareas _(etiquetas o tags) en su contenido.
© Language: HTML es un lenguaje! Los navegadores saben hablar este
Ienguaje: cuando un servidor les provee una HTML, saben
como mostrarla en pantalla.
Paginas estaticas
En muchos casos, el servidor es un programa que simplemente toma
un pedido y devuelve una pagina (compuesta por uno 0 mas archivos
HTML, imagenes, eteétera) que esta guarcada en algiin hgar del disco.
En estos casos, decimos que son paginas cstaticas A no ser que el
administrador del sitio actualice su contenido. al ingresar en la pagina
web siempre obtendremos el mismno resultado, no importa cuando
ingresemos ni desde donde. Para la gran mayoria de sistemas de nego-
cios, este tipo de servicio no es muy itil, ya que se suele necesitar que
se devuelva una pagina con contenido dinamico —. que cambie segtin
quién pidié la pagina, seatin la fecha, etcétera
Pedido
imagen gif
Figura 2. El servidor de paginas estéticas siempre devuelve
el mismo recurso para el mismo pedido.
wwwiredusers com €€16 os 1. LAPROGRAMACION WEB
Sitios web con paginas dindmicas
Pensemos, por ejemplo. en el sistema de un banco. Si ingreso en el
sitio del banco y quiero consultar mi saldo, deberia devolverme mi sal-
do actual al momento exacto de peditlo. Si el sitio web solo provee con-
tenido estatico, entonces deberian tener una pagina guardada en el dis-
co para cada saldo posible, Esto, obviamente, es impracticable. Y tam-
poco es viable que haya una persona que esté actualizando las piginas
de saldos de todos los usuarios a medida que van realizando operacio-
nes sobre sus cuentas. En esos casos, el servidor efectita operaciones
(ir a busear datos a una base de datos, consultar con otro servidor 0
acceder a otro tipo de servicios de negocios) y devnelve una pagina
dindmica — ; esto es, una péigina que no esta guardada
en ningun lugar dentro del servidor. sino que fire ereada en el momento
para quien la pidié. El servidor accede a los datos variables (en este caso,
el saldo del usuario), luego construye, en su memoria, la pagina con este
dato y se la devuelve al cliente, qne la mnestra en pantalla.
Pedido
Figura 3. El servidor web dinamico construye
una respuesta distinta para cada pedido.
La programacién web, entonces, consiste en escribir programas que,
dada una peticién web realizada por un cliente (un navegador), procesen
el pedido y generen y devuelvan un resultado.
Como en todo proceso de desarrollo de software, hay mucho de reu-
tilizacin. Podremos ver que, por ejemplo, la parte de recibir el pedido y
>> wow red users .comDESARROLLO WEB CON JAVA DESDE CERO wea 7
enviar la respuesta por lo general no cambia, solamente cambia la logica
de negocios de cada pedido y el contenido de la respuesta generada. En
este libro utilizaremos heramientas ya desarrolladas y de eédigo abierto
“open souree— que nos ayudaran en la ereacion de aplicaciones web.
Programacion web
vs. tradicional
La programacién web es considerada un nuevo paradigma, dado que
impone ciertas restrieciones que pueden resultar confisas en un princi«
pio, Estas restricciones se basan en que intemet ~al menos hasta ahore—
ttabaja sobre el protocolo HTTP (HyperText Transfer Protocol)
Cada vez que escribimos en un navegador http: //direccion web.
com. , estamos indicandole explicitamente que se conecte usando dicho
protocolo. Si no lo eseribimos, por lo general el navegador se encarga de
rellenarlo automeéticamente, aunque los navegadores a menndo también
implementan otros tipos de comunicaciones entre ellos y un servidor.
Por ejemplo, Internet Explorer y Firefox soportan comunicaciones de
tipo FTP (File Transfer Protocol), que es un protocolo para la transferen~
cia de archivos, Para acceder a un determinado recurso mediante ese
otro protocolo, basta con escribir la direccién en el navegador (por ejem-
plo, fip/fipubaar _Ly este sabra, autométicamente, que debe estable-
‘cer una conexién con el servidor mediante el protocolo FTP.
6) eat
El primer sistema de paginas dinimicas fie desarrollado en 1993 y se llamé CGI(Common
wwe
Gateway Interface), Estaba muy ligado al servidor de paginas web y se encontraba escrito
en lenguaje C Si bien se trataba de un sistema muy complejo, este tipo de programacién
fee incluso todavia es —usado por muchos programadores por su rapidez y seguridad.18 ce 1. LA PROGRAMACION WEB
HTTP
Elprotocolo HTTP , como su nombre lo indica, fite diseitado para
transferir documentos de hipertexto (documentos HTML). En sus origenes,
cuando intemet era. ARPANET _y era muchisimo mas pequefla de lo que es
ahora, y cuando la velocidad de conexién era enomemente inferior, texto
plano era lo tinico que se transferia por ella. A nadie se le ocurria siquiera
publicar un documento con imagenes o sonidos. A medida que avanz6
el tiempo y la red se volvié mas veloz, estas necesidades se hicieron
evidentes y el protocolo fie mejorado para poder transferir cualquier
tipo de datos, incluyendo voz, imagenes, video, etcétera.
HTTP tiene varias caracteristicas, pero la que mas nos va a interesar
es que es un protocolo que no guarda el estado ( stateless), Esto significa
que no se inantiene coustantemente una conexion entre el cliente y el ser-
vidor. sino que el cliente manda el pedido y corta la conexién, sin guardar
informacién sobre pedidos anteriores. De esta forma, el servidor trata cada
pedido en forma independiente del anterior, simplemente porque no puede
saber si el pedido proviene del mismo cliente, aunque hayan ocusrido muy
cerca en el tiempo. Esto puede sonar muy confiso. Una analogia que aclara
bastante las cosas es la siguiente: el servidor es na persona sentada detras
de una puerta, Esta persona recibe papelitos con preguntas por debajo de la
pnerta, los mira, eseribe en ellos una respuesta y los envia de vuelta, y esa
¢s toda la comunicacion que tiene con el mundo exterior. Esta persona no
“ue
La actual version del protocolo HTTP es la 1.1. En [Link]/Protosols!
#f:2616/s#2616htm! se encuentra la especificacién completa. El World Wide Web
Consortium considera que la versién 1.1 supera todas las deficiencias de la version.
1.0. por lo tanto, no esta trabajando en futuras versiones. Si estin trabajando en
‘un protocolo relacionado que busca integrar HTTP con otro lamado «XML Protocol.DESARROLLO WEB CON JAVA DESDE CERO [users] 19
sabe quién manda cada papelito, solo los EL PROTOCOLO
recibe y responce, Quiza del otro lado de .
la puerta hay una sola persona que es la HTTP FUE DISENADO
misma siempre y manda diferentes preguntas, PARA TRANSFERIR
co hay cientos de personas, cada una con sus
inquietudes que esperan ser respondidas; DOCUMENTOS DE
peto este humilde servidor no lo sabe. ni pue- HIPERTEXTO
de saberlo. Esto hace complicado mantener
un hilo de conversacién entre los clientes
(quienes mandan los papelitos) y el servidor
(quien los recibe y responde). Por ejemplo,
si una persona hace una pregunta y, al obtener la respuesta, quiere hacer
otra pregunta relacionada, tiene que fornmlar la pregunta sabiendo que
quien sesponde la tomara como si fuera una pregunta totalmente neva.
Esta problemética tambien hace imposible saber si alguien que acaba
de mandar un papelito sigue estando tras la puerta o se fue hace rato
Un sitio web que se comunique con el cliente tinicamente mediante
documentos HTML a través del protocolo HTTP no tiene forma de saber
(sin acudir a otras técnicas de programacién, como applets, Flash, com-
ponentes ActiveX, etcétera) si el usuario sigue navegando en su sitio 0
si se fue a otra pagina o cer el navegador.
Sesiones
Esta restriceién del protocolo HTTP es un impedimento muy grande.
Précticamente toda aplicacion necesita superar este inconveniente y po-
der mantener un registro de la conversacion mantenida entre el usuario
y el servidor. Para ello, se define el concepto de sesion , que se maneja
de la siguiente forma:
* Eleliente realiza un pedido al servidor.
* Elservidor responde el pedido y, a su vez, le devuelve un identifica
dor al cliente.
[Link] users com20 1. LAPROGRAMACION WEB
* Eleliente debera, en los sucesivos pedidos, incluir este identificador
ent cada pedido que realice al servidor.
* El servidor, al reconocer el identifieador, puede mantener un estado
de pedidos de un mismo cliente.
De esta forma, se soluciona el problema que acarrea la naturaleza
sin estado del protocolo HTTP.
Hay dos formas de lograr que el navegador incluya este identificador
de sesi6n en cada pedido al servidor. La primera es el uso de cookies
Las cookies (;galletitas!) son pequeiios archivos con informacion que el
servidor envia al navegador para que este guarde, y que el navegador
vuelve a enviar en cada pedido que realiza al servidor. De este modo.
el navegador puede euardar informacién especifica sobre el sitio que se
estd visitando, como el identificador de sesidn o las preferencias del nsua-
rio (por ejemplo, el idioma o el color con que pretiere visualizar la pagina).
La segunda forma, llamada URL rewriting nce que el navegador
sobrescriba todos los enlaces que vuelven al servidor, agregandoles
como pardmetro el identificador de sesion, Esto es: cada accion que el
usuario pueda hacer desde el navegador que vnelva al servidor (y que
no sea un enlace extemo a otro sitio). va a tener agregado un parimetzo
cou el identificador. De esta forma, al hacer clic sobre cualquiera de los
links que tenga la pagina. estara pasando
su vez el identificador de sesion, y asi el
LAS COOKIES SON servidor podra identificarlo.
Es importante destacar que todo tipo de
: informacion de estado se guarda en el serv
INFORMACION QUE dor. Es este quien mantiene los datos asocia-
NAVEGADOR GUARDA ‘os con la sesién del usuario, Por ejemplo:
en el clasico sistema de compra online, don-
YVUELVE AENVIAR | ge hay un carrito de compras virtual, cada
‘vez que un usuario agrega un producto, se
e R agrega a la lista que ya contiene el carrito del
usuario, pero este carrito y su informacion
ARCHIVOS CON
>> wwuired users comDESARROLLO WEB CON JAVA DESDE CERO a
reside en el servidor, asociado con el identificador de sesién del clien-
te. El cliente simplemente manda pedidos y se le muestran resultados,
sin saber lo que ocurre del otro lado.
Pedidos HTTP
Hemos visto que los clientes realizan pedidos mediante el protocolo
HTTP a servidores web. Lo que no vimos hasta ahora es que los pedidos
HTTP pueden ser de varios tipos (también son Hamados “métodos”)
La Tabla 1 mmestra los diferentes tipos de pedidos que existen actual
mente para el protocolo HTTP, version 1.1
site)
Bereh coon) Baro eton}
OPTIONS Se usa para preguntarle al servidor las diferentes formas
de comumicacion que soporta
GET ide un recurso al servidor
HEAD Igual que GET, pero el servidor solo devuelve
el encabezado de lo pedido.
POST ‘Método que se usa para enviar informaci6n al servidor
PUT Usado para enviar reoursos al servider.
DELETE Boma recursos del servidor.
TRACE Se usa para pedir un rastzeo del pedido.
CONNECT Metodo reservado.
Tabla 1. Los diferentes métodos que define el protocolo HTTP.
con «EES 1, LA PROGRAMACION WEB
Estos ocho métodos definidos en la especificacién del protacolo permi-
ten establecer conexiones muy avanzadas entre clientes y servidores,
pero que no son usadas, por lo general, por las aplicaciones web estandar.
Elmétodo TRACE, por ejemplo, se usa para testear que el servidor esté
recibiendo los datos correctamente y para depurar las conexiones. La ma-
yoria de los servidores en produccién directamente tienen deshabilitados
nnchos de estos métodos o estan asociados con algiin tipo de directiva
de seguridad que impide que cnalqnier usuario los ejecute. Caso con-
trario, cualquier usuario desde algiin Ingar remoto del planeta podria
gjecutar un DELETE en una pagina y la borraria del servidor. En este libro
vamos a referimos tinicamente a pedidos de los tipos POST y GET. Si bien
apriori POST y GET parecen totalmente distintos entre si, vamos a ver que
pueden usarse con los mismos propasitos, aunque hay casos en los qne
se evidencia que uno es mas idéneo que el otro. La especificaci6n reco-
mienda distintos usos para cada uno de ellos: dice que el método GET
deberia usarse solamente para obtener datos del servidor. y POST. para
enviar informacién al servidor, como ser una orden de compra o una ac-
tmalizacién de un dato. Asi y todo, podemos sar GET para enviar informa-
cién al servidor (con ciertas limitaciones) y POST para obtenerla.
Algo sobre seguridad
La seguridad en aplicaciones web excede ampliamente los aleances y con-
tenidos de este libro. Es un tema muy tratado y se ha escrito mucho acerca
de ello. Pero vamos a dar un pequeiio pantallazo del tema, su problemitica
y algunas formas de mantenerlo bajo control. Los sistemas web implementan
mumerosos procesos en los que deben ofrecer seguridad.
‘Mas adelante veremos una aplicacién simple pero poderosa que se utiliza
para brindar seguridad en lo referido a antenticaciones y autorizaciones
© Autenticacion —_es el proceso que se encarga de verificar que un usta-
rio es realmente quien dice que es. Es comim en muchos sitios web;
cada vez que nos piden que ingresemos nuestro nombre de usuario
>> wowired users .comDESARROLLO WEB CON JAVA DESDE CERO oe 23
y contrasefla, basicamente estan pidienclo que demostremos que
somos el usnario duefto de la contraseita, y por eso la ingresamos.
* Autorizacion —_consiste en verificar que un usuario dado (que, supo-
nemos, ya se ha autenticado) tenga permisos para efectuar determi-
nada operacion. Por ejemplo, en determinado sistema, solo el usuia-
rio administrador puede borrar informacion; de manera que, cuando
el servidor identifique que se esta pidiendo borrar algo, primero
debera verificar que el usuario que esta pidiendo el borrado sea un
usuario de tipo administrador. y, en ese caso, autorizara la accién.
Sin embargo, el principal problema de seguridad que plantean las aplica-
ciones web (al igual que toda aplicacion distribuida) es el transporte de da-
tos. El protocolo HTTP transporta informacion entre computadoras a través
de muchos nodos hasta llegar al servidor al cual se dirige. Esto trae muchos
problemas de seguridad, ya que alguien puede tener acceso a la comnmnica-
cin que se establece entre cliente y servidor y leer los datos que se transmi-
ten, y estos datos pueden incluir nimeros de tarjetas de crédito, claves, etc.
La solucion que se usa hoy en dia (aunque, en materia de seguridad infor-
iniitica, nada es ciento por ciento seguro) es un protocolo Ilamado HTTPS .
Este protocolo especifica que las comunicaciones se siguen haciendo igual
que con HTTP, con la diferencia de que, antes de enviar la informacion el
cliente. la encripta El [Link] —desencripta.__y luego la procesa.
Asi, si alguien logra interceptar la conmunicacién, es casi imposible que pueda
descifiar su contenido.
@ RESUMEN
Hemoos visto los servicios de valor que brindan los sitios web dinimicos. Describimos tam-
wee
bign sus limitaciones y cémo subsanarlas analizando la programacién web independien-
temente del lenguaje de programacién utilizado para implementar nuestras aplicaciones.
wwwredusers com <€mo 1. LAPROGRAMACION WEB
Actividades
TEST DE AUTOEVALUACION
1 ¢Cuales son los dos actores fimdamentales en la navegaci6n por intemet?
2 Enqué se diferencia un servidor de paginas estaticas de uno
de paginas dintmicas?
{Qué caracteristica del protocolo HTTP es la que nds limita la programacion web?
Qué solucién se aplica a este problema?
{De qué formas el navegador puede enviar al servidor el identificador de sesion?
Aue w
Usando telnet y simulando ser un navegador web, ingrese a su diario online
favorito y obtenga la pagina principal.
x
{Qué es una cookie?
8 — Por qué la mayoria de los servidores web tienen deshabilitado el método
HTTPDELETE?
9 (Cull es la diferencia entre antenticacion y autorizacion?
10 Porque es necesario encriptar la informacion confidencial cuando
es enviada a través de internet?
Sittiene alguna consulta tScniea relacionada con el contenido, puede contactarse
‘con nuestros expertos: profesor @[Link]a
Servlets
En este capitulo veremos como es en Ia practica una aplicacion web
Java, Aprenderemos qué es um servlet, configuraremos un servidor
‘Tomeat para realizar pruebas y. finalmente, nos introduciremos en
la codificacién de algunos ejemplos.
-¥éQué son los servlets?..
Un ejemplo: Hola mundo
HitpServletRequest 33 wActividadeS. cones
HitpServletResponse .. 35
Utilizar servlets. 37
Resumen...
1
AAA26 cas 2. SERVLETS
{Qué son los servlets?
Segtin vimos en el primer capitulo, para crear una aplicacién web basta
con desarrollar un servicor que escuche pedidos y devuelva recursos.
Pero es claro que el desarrollo web no consiste tinicamente en €s0,
Sun cred (dentro del contexto del Java Community Process, que permite
a cualquier persona del mundo participar en la toma de decisiones)
la Java Servlet Technology «na especificacion que define una serie
de clases, paquetes y procedimientos que se utilizan para la creacién
de servlets. la base fiindamental del desarrollo web con Tava.
Algo a destacar acerca de los servlets es que la Java Servlet Techno-
logy esuna —_especifieacidu —_—_—. Es decir, que la tecnologia consta solamen-
te de un documento, muy detallado, donde indica la funcionalidad que
se provee y como debera ser el software que la implemente, pero no
proporciona ningiu tipo de software en concreto. Si bien Sun desarrollé
su propia implementacion, Ia especificacién nos permite trabajar con
cualquier implementacién que queramos, en tanto y en cuanto se aten-
gaa la especificacion, Podemos decir que esta tiltima define ua estan
dar que ha de cumplirse por los implementadores.
El hecho de trabajar en base a una especificacién tiene muchas ven-
tajas, pero también un problema: la especificacién solo define como
debe comportarse el software, pero no limita sus capacidades. Por lo
tanto, algunos implementadores le agregan muchas funcioualidades
wee
SERVLETS Y VERSIONES DE ESPECIFIC.
Es muy probable que en un futuro salgan nuevas versiones, con més funcionalidades.
En este libro utilizaremos una de sus miltiples versiones. Recomendamos visitar la
pagina [Link] com/technetwork java javace/servletindex him op ara estar
al tanto de los cambios de version.
>> wummired users .comDESARROLLO WEB CON JAVA DESDE CERO wea 7
aa implementacién que desarrollan, de forma tal de cumplir con la
cespecificacion, pero, ademis, soportar sus propios requerimientos.
Esto conlleva el riesgo de que, si usamos funcionalidades extra de una
implementaci6n especifica, después sera mas dificil migrar a evalgnier
otra implementacion.
Un servlet es. entonces, un componente de software Java que se encar-
ga de generar contenido dinamico en respuesta a pedidos HTTP. Todo ser-
viet reside dentro de un servlet container que es una parte del servidor
web. El servidor web recibe los pedidos, revisa su sintaxis y los deriva al
servlet container, que, a su vez, determina qué servlet debe invocarse,
construye los objetos correspondientes que recibira el servlet, le envia
el pedido y el servlet devuelve la respuesta generada, El servlet container
sun componente dentro del servidor.
Componentes
pedidas
respuestas
Figural. Elserviet container —_es un componente mas dentro del servidor.
wee
SERVLET EN ENTORNOS DE DESARROLLO.
‘Veremos que algunos de los métocos de los servlets no son utilizados en Ia programacién
web, sino que sirven para brindar informacién al desarrollador. principalmente cuando se
trabaja con un entomno de desarrollo muy potente. De esta forma, en caso de tener muchos
servlets, el entomo de desarrollo nos mostraré informacién extra para su mejor manipulacién.28 2. SERVLETS
La especitficaci6n define una interfaz servlet que puntualiza los
miétodos que se describen a continuacién:
void init(ServletConfig config):
/* Cuando el contenedor crea el servlet (ya sea por un pedido o
por inicializacién del servidor), llama a este método para que
el servlet pueda inicializar los recursos necesarios durante su vida */
void destroy():
/* Método llamado cuando el contenedor decide destruir
el servlet, El servlet deberd liberar los recursos que tomé
y ejecutar acciones sabiendo que seré destruido ——*/
ServletConfig getServletConfig:
/* Devuelve el objeto de configuracién del servlet */
void service(ServletRequest req, ServletResponse res):
/* Método de ejecucion del servlet. Dado un pedido
(encapsulado por un ServletRequest) y un objeto de respuesta
(el objeto ServletResponse), el servlet ejecuta su légica en este método */
String getServletinfoQ):
/* Devuelve una cadena con informacion sobre este servlet */
Luego nos dedicaremos a los detalles, pero, basicamente, podemos ver
que un servlet se inicializa, se le efectitan pedidos y finalmente se destruye.
La especificacién es lo suficientemente amplia como para soportar
servlets que respondan a cualquier tipo de pedido. Nosotros vimos que,
pata intemet, las comunicaciones se realizan mediante el protocolo HTTP.
Por lo tanto, es obvio que existen clases especificas para servlets que res-
ponden a pedidos HTTP, ya que son los mas comes hoy en dia.
>> www red users comDESARROLLO WEB CON JAVA DESDE CERO a 2
Dingrama de clases_1
Figura 2. Diagrama de clases de servlets.
Laclase abstracta —-HitpServiet define los siguientes métodos:
protected void doDelete(HttpServletRequest, HttpServletResponse);
protected void doGet(HitpServletRequest. HtpServletResponse):
protected void doHead(HttpServietRequest, HttpServletResponse):
protected void doOptions(HtpServletRequest, HittpServletResponse):
protected void doPost(HtpServletRequest, HitpServletResponse):
protected void doPut(HtpServletRequest, HttpServletResponse);
protected void doTrace(HttpServletRequest, HttpServletResponse):
protected void service(HttpServletRequest, HttpServletResponse);
void service(ServletRequest req, ServletResponse res);
protected long getLastModified(HitpServietRequest):
‘Veamos cémo funciona un servlet: en particular, un HttpServlet
[Link] users com30 cas 2. SERVLETS
© Unpedido HTTP Ilega al servidor.
* El servidor interpreta el pedido y lo reenvia al servlet container
+ Elsservlet container parsea el pedido, crea los objetos correspondientes
y crea o llama a la instancia del servlet que ha de manejarto.
+ Elserviet asignado para mangjar ese pedido es, asumamos,
un HitpServlet .
© Elserviet container invoca el método Service con los objetos
HitpServletRequest y HitpServletResponse que creé como parametros.
* El servlet inspecciona los objetos recibidos como parémettos e invoca
el método correspondiente, segitn el tipo de pedido recibido
+ El método se ejecuta y la respuesta es generada
+ Elservlet container envia la respuesta al cliente que origins el pedido.
Ciclo de vida de un Servigt
ing
service(ServletRequest
req, ServletResponse res)
©
Figura 3. Ciclo de vida de un servlet.
El tipo de pedido es uno de los que vimos en el Capitulo 1. Como ve-
mos, hay métodos definidos para manejar cualquier tipo de pedido.
>> wowired users comDESARROLLO WEB CON JAVA DESDE CERO oa 31
Un ejemplo: Hola mundo
‘Veamos un ejemplo de servlet, el clasico “Hola mundo!”
package capitulo2;
import [Link]. JOException;
import [Link] PrintWriter:
import [Link]:
import javax. servlet http. HtpServlet:
import [Link];
‘import javax servlet http HitpServletResponse:
fe
* Extendemos la clase HitpServlet para definir
* muestra propia funcionalidad cuando el
* servlet sea invocado
+
public class HolaMundoServlet extends HttpServlet {
protected void doGet(HtpServletRequest req. HttpServletResponse res)
throws ServletException, IOException {
/* Llamamos al método doPost. Este servlet responde
de la misma manera tanto a pedidos GET como POST */
doPost(req, res);
protected void doPost(HttpServletRequest req, HttpServletRespouse res)
throws ServletException, IOException {
[Link] users com <«€32 ESS 2. SERVLETS
/* Obtenemos el abjeto que envia texto
al cliente */
PrintWriter out = [Link]():
La respuesta
‘[Link](“Hola mundo!”):
1/ Cerramos el stream
[Link]:
[Link]():
E] servlet es invocado por el contenedlor de servlets del servidor, y,
si el pedido es de tipo POST 0 GET, el servlet responde con una pagina
HTML (aunque no tenga ningun tipo de marca HTML, no deja de ser un
documento HTML) que dice “Hola mundo!”. Este servlet no es muy util
que digamos, ya que entrega siempre la misma cadena de texto.
Anngue es ejecutado como un servicio de contenido dinamico, esta
devolviendo contenido estitico.
wee
CONTENT-TYPE
Los servlets pueden especificar qué tipo de contenido estén devolviendo (el content=
type ). para que el navegador lo pueda manejar. De esta forma, si un servlet entrega
un contenido que no sea HTML, el navegador puede utilizar algtin plugin o abrir otra
aplicacion, dependiendo del tipo de contenido que esté recibiendo (que podria ser un
documento Word, un PDF o cualquier otro tipo que sea necesario)..
>> wow red users comDESARROLLO WEB CON JAVA DESDE CERO losers] 33
Antes de pasar a otro ejemplo, veamos en qué consisten las clases,
HpServletRequest_ y HitpServletResponse
HttpServletRequest
Esta clase encapsula La informacion que contiene el pedido del cliente.
La clase se extiende a partir de ServletRequest . una clase que contiene op-
ciones de pedidos genéricos, y la extiende con informacién especifica del
protocolo HTTP. Un servlet accede a esta clase para saber qué contenido
devolver. Aunque es tedricamente posible implementar toda la funcionali-
dad de un sitio web en un solo servlet basandose en parametros del pedi-
do, seria a costa de un cédigo inmanejable, confuso y dificil de mantener.
Para evitarlo, esta clase provee métodos para acceder a pardmetros, enca-
bezados. cookies y opciones de seguridad. Veamos algunos de los meto-
dos (tanto de la clase HitpServletRequest como de su clase padre.
ServletRequest . que usaremos mas seguido:
Object getAttribute(String name)
Enumeration getAttributeNames()
void removeAttribute(String name)
void setAttribute(String name, Object 0)
Locale getLocale()
Enumeration getLocales)
Map getParameterMap()
Enumeration getParameterNames()
String[] getParameterValues(String name)
Cookie[] getCookies()
HitpSession getSession)
HitpSession getSession(boolean create)
String getRequestedSessionldQ
[Link] users com <€a cass 2. SERVLETS
Un pedido puede tener asociados objetos, Ilamados atributos —. Estos
objetos no son asociados al pedido por el navegador web. sino por compo-
nentes en el servidor. Mas adelante veremos ewes son los usos de estos
atributos. Los métodos _—_getAttribute, getArtributeNames , removeAttribute _y
setAttribute manipulan dichos atributos asociados.
Los navegadores mis recientes permiten al usuario definir el idioma
en que prefiere navegar en la Web. Esto se traduce en un encabezado Lla-
mado Accept-Language que define el o los idiomas preferidos. Si progra-
amos mestras aplicaciones para que tomen en cuenta esta informacion,
podremos mostrar al usuario paginas en su idioma, sin interaccién por
partede él. Los métodos _—getL.ocale_y getLocales devuelven elo los idiomas
preferidos por el usuario, segtin el pardanetro enviado por el navegador.
Los métodos —getParameterMap . getParameterNames —_y_getParameterValues
nos permiten interactuar con los parametros enviados por el navega-
dor. Estos paramettos, a diferencia de los atzibutos, si son asignados
por el navegador cuando el usuario interactia con la pagina, pulsando
un enlace o enviando un formulario web. El metodo getCookies nos per-
nite obtener las cookies que este cliente tiene alojadas.
Y por illtimo, los métodos getSession Y getRequestedSessionld nos sirven
para tener acceso a la sesion a la cual pertenece este pedido. Notemos que
getRequestedSessionld es el indicador de sesién del qe hablabamos en el
Capitulo 1. ¥ getSession nos devuelve un objeto ‘HitpSession que contiene
toda la informacion de sesion en el servidor.
whe
LENGUAJES Y NAVEGADORES
Aligual que con otras funcionalidades, no podemos depencer de que el navegador
que utilice el usuario nos envie el encabezado —Aceept-Language _. ya que puede suce-
der que ese navegador si soporte esta fimcionalidad pero que el usuario no la haya
definido 0 no sepa cémo tiene que hacerlo.
>> [Link] users comDESARROLLO WEB CON JAVA DESDE CERO E 35
HttpServletResponse
Esta interfaz define datos y métodos para manipular la informacion
que sera devuelta al cliente, Un servlet recibe de parémetro una ins-
tancia de este tipo de objeto y es su tarea modificar el objeto segiin
su funcionalidad para que luego la respuesta le sea enviada al cliente,
‘Veamios algunos de los metodos que usaremos de esta interfaz y de su
superinterfaz, —_ServletResponse
ServletOntputStream getOurputStream()
PrintWriter getWriter()
void addCookie(Cookie cookie)
void addHeader(String name, String value)
void setHeader(String name. String value)
boolean containsHeader(String name)
void sendRedirect(String location)
Los métodos getOutputStream()_y getWriter() nos devuelven objetos en
los que podemos escribir el contenido de la respuesta, En el primer easo,
un OutputStream , util para devolver contenido binario, y en el segundo
caso, un Print Writer, apto para devolver texto al cliente,
wee
COOKIES QUE VENCEN,
Las cookies tienen una fecha de expiracion, Esta caracteristica puede resultar muy ttil
si queremos guardar un dato sélo por determtinado periodo de tiempo, por ejemplo,
para recordar a un usuario durante una semana, Fl navegador es el encarzado de
liminar las cookies que estan vencidas.
wuwured users com <«36 ces 2. SERVLETS
Con addCookie(Cookie c) —_podemos enviar una cookie al cliente, que
Imego ser seenviada en cada pedido y Ia podremos inspeccionar. Es
importante notar que el usuario podria asignar la opeién de no recibir
cookies en su navegador, de manera que debemos prever esta situacion
y no escribir aplicaciones que dependan del uso de ellas. Los métodos
addFieader(String uame, String value) —_y_ setHeader(String name, String value)
escriben contenido en el encabezado de la respuesta. La diferencia en
tre estos métodos consiste en que setHeader _escribe el valor en el enca-
bezado, pisando (si hubiera) un valor existente. En cambio, addFleader
nos permite asignar mmiltiples valores a una misma entrada, Para evitar
pisar valores, el método containsHeader(String name) —_nos permite saber si
ya existe un valor asignado como eneabezado para un nombre dado.
Por ultimo, — sendRedireet(String location) _se utiliza para indicar al navega-
dor que debe redirigirse a otra pagina.
(aa Hosing Sever
Figura 4. Grafico que esquematiza la estructura de HitpServlet.
>> [Link] users comDESARROLLO WEB CON IAVA DESDE CERO aS 37
Utilizar servlets
Hemos visto algunos ejemplos de servlets, pero ahora llegé el momento
de verlos en accién. Vamos a configurar un servidor web y a realizar un,
pedido a los servlets para verlos ejecutindose.
Para los ejemplos de este libro, vamos a utilizar las siguientes tecnologias:
* Eclipse entomo de desarollo. Si bien no es necesario, todo tipo
de desarrollo se simplifica enormemente gracias a este framework.
Eclipse poco a poco se va convirtiendo en la herramienta de desa-
rollo grifico de facto, Basada en el viejo Visnal Age de IBM, ahora
de cédigo abierto, es un sofware que emplea plugins en los que se
puede agregar funcionalidades y soporte para muchisimas tareas
con poco esfiter70. De hecho, mediante el uso de plngins se puede
utilizar Eclipse para desarrollo no solo de Java, sino también de
PHP y otros lenguajes.
* Tomcat : servidor web y servlet container. Tomcat es un proyecto open
source de muchisima calidad desarollado por Apache, que aetualmen-
te es utilizado en entomos de produccién por numerosas empresas.
Usaremos la version § que, al momento de redacci6n del libro, es la alti-
ma versi6n estable y soporta la especitficacién de servlets 24 (que es la
que seguimos en este libro). Debemos notar
que Tomeat necesita un JDK. para fneionar.
Tomeat es, sin dndas, el servidor de codi= UN SERVLET
i ia. U'
go abierto més maduro hoy en dia, Usado GENERA CONTENIDO
por una enorme cantidad de usuarios y
empresas de todo el mundo, con muchisi- DINAMICO EN
mo soporte, tanto de la comunidad como RESPUESTA A
del Ambito empresarial, tiene tanto pres-
tigio que fue el servidor elegido por Sun. PETICIONES HTTP
para ser la implementacion de referencia
de las nevas especificaciones de servlets 5 y
y JSP que va desarrollando.
wowwired users com &€38 ca 2. SERVLETS
* Apache Struts: framework de desarrollo web creaclo por Apache. Es
préeticamente un esténdar en la industria, y. si bien hay varias altema-
tivas para hacer desarrollos web, es un framework completo, con miles
de usuarios, mucho soporte y documentacion,
Eclipse
Eclipse se puede bajar de [Link]/downloads No ahonda-
remos mucho sobre las caracteristicas de Eclipse en si, que son muchi-
simas, sino que simplemente explicaremos los conceptos de desarrollo
web mediante su uso.
Una vez descargado Eclipse (hay versiones para Windows y Linux),
se instala y queda creada una carpeta donde se encuentra el ejecutable.
Eelipse no genera entradas en el registro de Windows ni crea archivos
en otro lugar que no sea la carpeta de instalacién.
Existen diferentes versiones de Eclipse que podremos descargar desde
su pagina. Nosotros descargaremos Eclipse IDE for Java EE Developers
y obtendremos una carpeta con todo lo necesario para el desarrollo web.
Instalar Tomcat
‘Vamos a usar Tomcat como servidor web y servlet container.
La instalacién de Tomcat es sencilla, y vamos a integrarlo con Eclipse.
aaa
Eclipse es un producto gratuito desarrollaclo por Eclipse Foundation, una fundacién
sin fines de Incro que. en la actualidad, cuenta con el fuerte apoyo de mas de 80
‘empresas, entre ellas IBM, Nokia, Intel, BEA, Sybase y Hewlett Packard. Fie fundado
en el aito 2004 por el Consorcio Eclipse.
>> wwwired users comDESARROLLO WEB CON JAVA DESDE CERO 39
0 Para comenzar, descargue Tomcat desde _ [Link]
tomcat . Si el enlace no funciona, busque algiin otro servidor activo
ena pagina de descargas de Tomcat: ittp:/tomeatapacheorg
) Descomprima el contenido del archivo y elija donde alojarlo. A modo de
ejemplo, lo puede descomprimir en C:\tomeat-version Para poder
‘usar Tomcat con Eclipse, debe instalarle un plugin a este tltimo, disponible
en www. [Link]/tomeatPIugin htm!
[Link]40 mea >. SERVLETS
Este archivo esun .ZIP_ que contiene una carpeta llamada com sysdeo.
eclipse.tomeat_version . Esta carpeta es el plugin de Eclipse y, para instalarla,
solo basta con copiarla (0 moverla) dentro de la carpeta plugins de Eclipse.
Por ejemplo: si descomprimimos Eclipse en C:\eclipse, entonces debemos
copiar (o mover) la carpeta descomprimida a C\eclipse\plugins\ de forma tal
que nos quede la carpeta_—_C:\eclipse\plugins\[Link].tomeat_version
Una vez instalado el plugin Sysdeo _, solo basta con iniciar (0 reini-
ciar) Eclipse para que los cambios hagan efecto
(eles: Ces (e dN):
0 Para comenzar, acceda al panel de control de Eclipse desde
Window/Preferences
Cv 33
vse.
6 van ss
omathone [alah |
>> [Link] mers comDESARROLLO WEB CON JAVA DESDE CERO 41
>
a) Seleccione la opcién Tomcat en el érbol para ver las opciones del plugin.
Debe seleccionar Versionx.x como version de Tomeat e ingresar la
carpeta de instalacion de Tomeat, por ejemplo: C:\tomeat-version
es
Apache Jakarta Project
aura seong tg ae treet, rans youve an Test eee
‘Songnsen
Ayeuraton geyser tt oct on Ket
oRTALIIA. en /uebarpe/ ROOT snd.
Sanaa aaa aie
OTE pan sci tn orc cece 8
NOTE Fr sere nrn args begs rnd at mt
"Seeman eco ages
SRG SMALE Sane same pons2 foxeres} 2. SERVLETS
Una vez ejecutado el servidor. por defecto estar configurado para
‘escuchar pedidos en el puerto 8080. Bastard con abrir un navegador y
http:/Mlocalhost:8080 para hacer correr Tomcat.
Ahora que tenemos un servlet container funcionando, vamos a ver
como hacer para comer servlets.
‘Crearemos un nuevo proyecto en Eclipse. del tipo Tomeat Project .
alquellamaremos Servlets. Paraesto, iremosa _—_—File/New/Project _y elegi-
escribir la direcei¢
vemosel wizard Tomcat Project (ver Figura). Alsesto de las opciones
las dejamos como vienen por defecto.
© New Project
Select a wizard
Croat a Jaya project weh aWAR structure
Ward
BZ werent
dara Propet rom Baty Ant Balle
Se Pogin Propet
ae cs
Figura 5. El proyecto de tipo Tomcat Project tae preconfigurada una
estructura de directorios para poder desplegar los servlets y configuraciones.
Como resultado final, al ejecutar Eclipse, podremos ver la interfaz
gréfica del IDE de la siguiente forma:
>> [Link] mers comDESARROLLO WEB CON JAVA DESDE CERO 43
0 ] TOMCAT botones para arrancar, detener y reiniciar Tomcat.
Estos botones son provistos por el plugin SYSDEO.
0 2 EJECUCION: botones para correr aplicaciones, depurarlas y ejecutar
aplicaciones extemas.
03 ‘VISTAS: estos botones permiten intercambiar las dlstintas vistas posibles.
La vista Java es la mas apropiada para el desarrollo de cédigo.
0. 4. CODIGO vista del cédigo fuente, usando un editor que resalta la sintaxis
propia de Java.
0 PANEL: el panel inferior suele ser usado para mostrar mensajes de la aplicacién.
En este caso, vemos la consola de salida de Tomcat.
0 PANEL: los paneles son configurables y podemos agregar y quitar cuantas
‘ventanas queramos. En este caso, tenemos una vista de la aplicacién actual“4 oss 2. SERVLETS
Contextos
Un servidor web puede tener corriendo varias aplicaciones web 0
contextos . Cada contexto puede ser tanto un sitio web completo como
un modulo de una aplicacion. Por ejemplo, muchos servidores comparti-
dos corren una tnica instancia de Tomcat y tienen varios contexts que
sirven a diferentes direcciones web. Cuando creamos el proyecto Tomcat
en Eclipse, también definimos un contexto del mismo nombre en el Tom-
cat. Si pulsamos el botén derecho del mouse sobre el icono del proyecto
y elegimos la opcién Tomcat project , veremos que se presentan algunas.
opeiones sobre el contexto que el proyecto define. Update context definition
y Remove context definition agregan y quitan, respectivamente, la definicion
del contexto que el proyecto define al servidor web. De esta forma, pode-
mos tener una instancia de Tomeat corriendo. y cargar y descargar contex-
tos (aplicaciones web) de este sin necesidad de detener el servidor.
Primer proyecto
Al tenninar la configuracion, lo primero que vamos a desear es
probar un servlet. Por lo tanto, en Eclipse vamos a File/New Project/Web/
Dynamic web Project. Indicamos el nombre del proyecto, por ejemplo
elclasico servletHolaMundo [Link] Target runtime. la opcién.
Apache Tomcat vx.0 (dependiendo de la version que instalemos). Al crear-
se el proyecto, nos encontraremos con su contenido por defecto.
6) PranVclam canon ine!
‘Tomeat tiene la capacidad de soportar la carga de clases de manera dinémica,
Esto significa que al momento de modificar una clase que esta realizando una carga
y corriendo (como por ejemplo, un servlet), Tomeat detecta el cambio y. de ser nece-
sario, reinicia también el contexto.
>> wowed users .comDESARROLLO WEB CON JAVA DESDE CERO os 45
En Java Resources podremos poner los servlets pulsando el boten dere-
cho delmouse en New/Servlet . Completamos la informacién necesaria de
la ventana Create Servlet como el nombre del paquete y la clase,
Presionamos el botén Next y de esta manera configuramos los méto-
dos que deseamos para nuestro servlet; en este caso, solo dejaremos
seleccionado el método doGet . Al finalizar. se generara el archivo Hola-
Miundo,java con el contenido.
El cédigo que debemos escribir dentro de doGet es el siguiente:
PrintWriter out;
out = [Link]():
[Link](“”);
[Link](“Ejemplo de Serviet<‘title>”):
[Link](“ ")
[Link](“Hola Mundo”):
out printin(“"):
Este ejemplo se encuentra alojado en la web de RedUsers.
Al finalizar la codificacin, hacemos clic en el botén RUN, selecciona-
mos el servidor que ya tenemos configurado y abriré un navegador dentro
de Eclipse con el resultado que programamos.
El archivo [Link]
La especificacién define que la carpeta WEB-INF es donde debe ir toda
{a informacion relativa a la aplicacion. En particular, define que dentro de
ella debe existir el archivo [Link]. Este archivo es el deployment des-
criptor um archivo XML que contiene toda la informacién de configura-
cin de la aplicacion. En el apéndice veremos una descripeion completa de
las posibilidades que offece este descriptor, pero por ahora echemos un
vistazo a las funcionalidades ms importantes que usaremos en este libro:
[Link] users com €€46 oe 2. SERVLETS
* display-name define el nombre que le queramos dar a nuestra aplicacién,
* context-param contiene un par nombre-valor y define un parémetro de
icializacion dentro del contexto. Pueden definirse 0 o mids elementos
context-param . Cualquier servlet podra acceder a estos parmetros.
* filter y filte-mapping definen los filttos. En el capitulo sobre filtros
veremos a fondo esta configuracion.
* servlet y servlet-mapping _contienen la definicidn de los servlets.
Veamos el cédigo ejemplo por defecto:
<2xmnl version="1.0” encoding="UTE-8"2>
HolaMundoServlet
HolaMundoServlet
/HolaMundoServlet
30
* En servlet definimos los servlets que residirén en el contexto. Todo
servlet que queramos usar debe estar declarado en el descriptor.
Cada elemento debe contener un servlet-name que es el nombre con
»DESARROLLO WEB CON JAVA DESDE CERO [Users] a7
«qe sera referenciado el servlet dentro del contexto, y un servlet.
class , que es el nombre completo de la clase del servlet. Opcional-
‘mente se puede definir uno o mas init-param. , que, similarmente al
elemento context-param _, consisten en un par param-name y param-value ,
que especifica nombre y valor del pardmeto a definir, respective
mente. Estos paramettos de inicializacion solo pueden ser vistos
por el servlet en donde son definidos.
* servlet-mapping define una relacion entre un servlet y ua patron de di-
recciones web, Es el que especifica qué servlet ha de cargarse segin a
qué direccién web (0 URL. Uniform Resource Locator _) se haya accedido.
servlet-name indica a qué servlet se le est definiendo la relacién (segtin
el nombre definido previamente en el elemento servlet). y url-pattem
especifica el patron de direcciones web asociado.
Interactuar con el servlet
Para poder crear una aplicacion web, es menester que podamos brindar
interaccién con el usuario, El servlet debe poder recibir informacion de en-
trada, procesarla y devolver una respuesta acorde. ,Cémo enviarle datos al
servlet? Basicamente hay dos formas, dependiendo de si usamos. GET 0 POST
como tipo de pedido HTTP (0 ambos). Recordemos que GET, en teoria, se
usaba tnicamente para pedir un recurso: sin
‘embargo, pocemos usarlo para enviar cierto
tipo limitado de informacion al servidor. UN SERVLET
Un pedido GET no es ni mas ni menos que PUEDE RECIBIR
una direccién web enviada al servidor (como vi- .
mosenel Capitulo 1). Cuando escribimos en el INFORMACION DE
navegador una direccién web, estamos generan- ENTRADA Y DAR UNA
down pedido GET. Podemos también agregarle
parimettos al pedido, y estos seri recibidos RESPUESTA ACORDE
por el servidor. Para enviar paramettos, debe-
mos agregar, luego de la direccion, el query
string. que se construye de la siguiente forma:
[Link] com <«€48 >. SERVLETS
* un‘ % indicando qne comienza la seccién de parémetros;
un par nombre y valor, separados por un“ :
+ sihay més de un parémetto, estos se separan mediante * &.
Por ejemplo, si quiero pasar los parémetros “nombre” y “edad”, con va-
lores “Juan” y “16” respectivamente, la direccién web resultante seria:
hitp:///?nombre=Iuan&edad=16
El protocolo HTTP no impone ninguna restriccion al largo de las diree-
ciones web que pueden ser enviadas; sin embargo, los servidores si. Aun-
que existen servidores que aceptan tamaios més grandes, por compatibili-
dad se recomienda que el tamaiio total no supere los 256 caracteres.
Unpedido POST se crea utilizando formularios HTML. Al enviarse el
fonmulatio a la direcciou especificada en el tag