Sie sind auf Seite 1von 27

Estructura y despliegue de aplicaciones J2EE ADR Infor S

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

Indice
2 - Estructura y despliegue de aplicaciones web..............................................................................................1
Aplicaciones web.....................................................................................................................................1
Despliegue mediante war.........................................................................................................................1
Etapa de desarrollo...................................................................................................................................4
Ejemplo de desarrollo..............................................................................................................................5
Variables de instancia............................................................................................................................13
Delegar peticiones a otros recursos........................................................................................................16
Obtencin del contexto..........................................................................................................................17
Ejercicios............................................................................................................................................................23
Ejercicio 1..............................................................................................................................................23
Ejercicio 2..............................................................................................................................................24

2 - Estructura y despliegue de aplicaciones web


Aplicaciones web
Una APLICACIN WEB consiste en un conjunto de servlets, pginas jsp, ficheros html, clases Java de
apoyo empaquetadas o no en ficheros jar y otro tipo de recursos tales como ficheros de imgenes, de
sonidos, de texto, etc.
Una aplicacin web puede existir de dos modos:
Mediante un fichero de extensin war (Web Application Resource, a veces tambin se le suele
llamar Web ARchive) que engloba a todo su contenido. Se crea mediante la herramienta jar incluido
en el J2SE, del mismo modo que un fichero jar. Este empaquetamiento se produce en la etapa de
produccin, es decir, cuando la aplicacin ha sido comprobada y depurada para su comercializacin.
Mediante una estructura de directorios basada en la especificacin definida por Sun para los
Servlets. Dentro de esta estructura deben ubicarse de forma adecuada los componentes de la
aplicacin.
Es el modo de trabajo habitual en la etapa de desarrollo de la aplicacin, es decir, cuando se
realizan pruebas y modificaciones constantes en sus componentes.
Con estos modos de existencia se persigue que la misma aplicacin web pueda ser deplegada en
diferentes servidores web manteniendo su funcionalidad y sin ninguna modificacin de cdigo.
A partir de la especificacin 2.2 de los servlets, todos los servidores compatibles con la misma deben aceptar
para el despliegue de aplicaciones web, su fichero war asociado, que se ubicar en el directorio del servidor
que su fabricante indique.
A partir de ese momento, y sin hacer nada ms, la aplicacin web estar disponible para todo el mundo.
CONCLUSIN:
Modo de trabajo habitual en las aplicaciones web. De divide en dos fases:
Etapa de desarrollo: su usa una estructura de directorios. Se preven constantes cambios en los
componentes de la aplicacin
Etapa de produccin: se usa un fichero war. Los objetivos de la aplicacin se han logrado y no se
preven modificaciones en sus componentes. Todos los recursos de la aplicacin se empaquetan en un
war para que pueda ser desplegada en cualquier tipo de servidor J2EE compatible con la
especificacin.

Despliegue mediante war


Para ilustrar el proceso de despliegue de una aplicacin web, se va a suponer que se han cumplido las dos
etapas mencionadas anteriormente, se dispone de un fichero war de nombre Prueba.war que engloba todos
1

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


sus componentes y que se le ha hecho llegar al administrador del servidor J2EE en el que se va a desplegar.
Los componentes de la aplicacin sern:
Dos servlets: ServletPrueba.java y ServletEnlace.java
Un fichero html y una imagen: FormularioPrueba.html y tomcat.gif
Un fichero xml: web.xml
Cul es el siguiente paso?
El administrador asignar a la aplicacin un context path o ruta de contexto coincidente con el nombre del
fichero war, que indica el URL mediante el que cualquier cliente puede acceder a la misma. Cada
aplicacin web estar asociada a un contexto y todos sus componentes existirn en relacin a ese contexto
En este caso, el contexto ser /Prueba. El contexto debe empezar por /. Esta barra significa directorio raz del
servidor a nivel de aplicaciones web desplegadas en l. Cada servidor tiene el suyo propio:
En el caso de Tomcat es tomcat_home\webapps
En el caso de JBoss versiones tipo 3 y 4 es jboss_home\server\default\deploy. El servidor de JBoss
se levanta ejecutando jboss_home\bin\run.bat. Para tumbarlo, jboss_home\bin\shutdown.bat o se
cierra la sesin del DOS asociado al startup del server.
Instalarlo es sencillo: se va a www.jboss.org, enlace "Download" de la fila JBoss AS. Las
versiones 3.X integran como contenedor web a Jetty (es software desarrollado por la gente de
Jboss); las 4.X, integran Tomcat como contenedor web. Para el curso descargar la versin
4.0.5, pulsando sobre el botn Download. Lo que se descarga en un .zip que debe
descomprimirse. Hecho esto, ya est instalado.
Para que el server arranque correctamente, deben agregarse las siguientes variables de
entorno de usuario:
JAVA_HOME: directorio de instalacin del JDK
JBOSS_HOME: directorio de instalacin del servidor

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

La asignacin de ruta de contexto comentada anteriormente se hace de modo automtico, sin ms que colgar
el fichero war del raz del servidor.
Si se utiliza Tomcat, el administrador ubicar Prueba.war colgando de tomcat_home\webapps. Hecho
esto, el despliegue se considera finalizado. A continuacin se levanta Tomcat y se crear la estructura de
directorios siguiente:

Esta configuracin de directorios post-despliegue se debe la estructura de directorios conforme a


especificacin en que se basan todos las aplicaciones web (se estudiar en el siguiente apartado). Adems
de los directorios de arriba aparecern
META-INF\MANIFEST.MF que contiene informacin sobre la versin del JDK con el que se est
trabajando
Prueba.jcp asociado al proyecto de trabajo con JCreator.
Los importantes no son stos sino los del grfico. El fichero Prueba.jcp se utilizar para poner a
disposicin del programador el cdigo de todos los componentes de la aplicacin en JCreator y, as,
3

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


poder estudiarlo y modificarlo convenientemente. Para ello, siendo JavaServidor el espacio de trabajo actual
Men Project/Insert Project into Workspace y se selecciona el fichero jcp correspondiente a la
aplicacin desplegada. En este caso, tomcat_home\webapps\Prueba\Prueba.jcp
Desplegada la aplicacin y levantado el servidor, un cliente acceder al fichero index (htm, html o jsp) de la
misma, mediante http://localhost:8080/Prueba
NOTA IMPORTANTE: para que los alumnos puedan actuar como administradores y usuarios de la
aplicacin, se suministra Prueba.war en http://teleformacion.fer.es/general/prt/c/j2ee/2/Prueba.war con el fin
de que se despliegue en Tomcat y en JBoss.
Picar con el derecho sobre el enlace y Guardar como si hay algn problema para descargar el war
pulsando directamente sobre el enlace anterior.
El fichero war deber situarse colgando de
tomcat_home\webapps si se trabaja con Tomcat
jboss_home\server\default\deploy si se hace con JBoss (debe tenerse libre el puerto 8080 ya que se
ejecuta a travs de este puerto)
A continuacin, levantar el servidor.
Finalmente se acceder al index de la aplicacin mediante http://localhost:8080/Prueba tanto si se trabaja con
Tomcat como si se trabaja con JBoss.
Este ser el modo en que se proporcionarn las aplicaciones de ejemplo: mediante un enlace que permite
descargar el war de la aplicacin. El alumno deber desplegarlo en el servidor de trabajo y posteriormente
acceder a su index mediante http://localhost:8080/nombreDelWar
Para acceder al cdigo de sus componentes se har uso del fichero jcp contenido en el directorio raz de la
aplicacin tal y como se ha explicado anteriormente.
Repetir el proceso de despliegue con Encuesta.war. Para ello, tumbar Tomcat, ubicar Encuesta.war en
tomcat_home\webapps y volver a levantar Tomcat. El war se descarga
desdehttp://teleformacion.fer.es/general/prt/c/j2ee/2/Encuesta.war.
Se acceder al index de la aplicacin mediante http://localhost:8080/Encuesta
Hacer lo mismo con jChartsServletExamples.war. Se encuentra en
http://teleformacion.fer.es/general/prt/c/j2ee/2/jChartsServletExamples.war. Se trata de una aplicacin web
capaz de generar diversos tipos de grficos con datos procedentes de un servlet. Se acceder la index
mediante http://localhost:8080/jChartsServletExamples

Etapa de desarrollo
El punto de partida de todo desarrollador de aplicaciones web es la creacin de un document root o
directorio raz de aplicacin que va a contener a todos sus componentes. Este directorio raz colgar del
4

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


directorio raz de todas las aplicaciones web del servidor J2EE de trabajo.
En el caso de Tomcat, tomcat_home\webapps.
En el caso de JBoss, jboss_home\server\default\deploy
Hecho esto, el desarrollador deber
Situar los ficheros html, jsp, xml, txt, imgenes, sonidos, etc. colgando directamente del directorio
raz de su aplicacin o de subcarpetas del mismo
Crear un subdirectorio WEB-INF colgando del raz de la aplicacin y almacenar en l, el fichero
descriptor de despliegue web.xml.
NOTA: el contenido de este fichero es fundamental para el despliegue de la
aplicacin ya que describe al contenedor web sus elementos y el modo en que se
accede a los mismos. Adems, define aspectos de seguridad, ficheros de
bienvenida, parmetros iniciales, parmetros de contexto, etc. Cuando Tomcat (y,
en general cualquier servidor J2EE compatible) se levanta, lee este fichero y, si
contiene algn tipo de error, se lanzan excepciones que indican que el servidor no
se ha levantado correctamente.
Este directorio contiene los recursos privados de la aplicacin. No son accesibles
directamente desde el cliente, en el sentido de que no puede descargrselos y ver su cdigo
Crear un subdirectorio WEB-INF\classes y almacenar en l los class de los servlets compilados y
otras clases de apoyo. Debe tenerse en cuenta que si estn empaquetados, los class se ubicarn en
subdirectorios adecuados atendiendo a sus estructuras de paquete.
Crear un subdirectorio WEB-INF\lib y almacenar en l libreras de clases en forma de ficheros jar
que la aplicacin web usa. Tpicamente drivers de BDs y libreras de etiquetas.
Adems, suele crearse una carpeta de nombre src (source) colgando del raz de la aplicacin donde se
ubican los cdigos fuente de los servlets, en el caso de que el desarrollador quiera hacerlos pblicos

Ejemplo de desarrollo
Para ilustrar la etapa de desarrollo de una aplicacin web, se va a crear la aplicacin que se despleg al
principio partiendo de cero. Se recuerda que constaba de un formulario y dos servlets. Su directorio raz o
document root se llamar Prueba.
Estructura de la aplicacin web cuyo directorio raz es Prueba: es la misma que se obtuvo despus de
desplegar Prueba.war. Se recomienda eliminar el directorio tomcat_home\webapps\Prueba con el fin de volver
a realizar la aplicacin paso a paso

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

NOTA 1 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: se indican los pasos
que deben seguirse para realizar la aplicacin web Prueba con JCreator
El IDE cuenta con una plantilla para crear aplicaciones web que se va a modificar para ajustarla a nuestro
modo de trabajo. Para ello se emplean los subdirs de jcreator_home\Templates.
Primero se realizar una copia de Template_4 de nombre Copia de Template_4, por si acaso.
A continuacin, se eliminar el contenido de src y se crear un subdir de nombre coincidente con el
nombre de vuestro paquete de trabajo (en mi caso, trilcejf). Se recomienda que el alumno utilice
tambin este nombre para evitar complicaciones a la hora de descargar las soluciones.
Colgando de Template_4 se crear el dir WEB-INF, y colgando de l el subdir lib.
Por ltimo, se editar el fichero setup.tst y se modificar su contenido de forma que quede como el siguiente:
; This file contains the setup information for a template project.
[LABEL]

Jesus Web Application

[DESTPATH] "WEB-INF\classes"
[SRCPATH] "src\trilcejf"
En la primera lnea, en vez de Jesus, poner vuestro nombre. Cuando se cree un nuevo proyecto aparecer un
nuevo icono con la label o etiqueta definida.
En la ltima lnea, en vez de trilcejf, cada alumno pondr el nombre de su correspondiente package de trabajo
(en mi caso, trilcejf). Se recomienda mantener el trilcejf para evitar complicaciones en la descarga de las
soluciones
La estructura de directorios colgando de Templates quedar as:

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

El directorio src contendr al subdirectorio trilcejf (estar vacio) y el WEB-INF al subdirectorio lib (estar
vacio)

NOTA 2 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: hecho lo anterior, se


explica a continuacin la creacin de una aplicacin web con JCreator basada en la template o plantilla
comentada en la nota anterior:
Crear, en mi caso, una Jesus Web Application mediante File/New/Project de nombre Prueba que
forme parte del espacio de trabajo J2EE. Debe tenerse lo siguiente:

Para ello, se teclea Prueba en Name y se selecciona desde el botn de puntitos


tomcat_home\webapps.
Despus Finish. Hecho esto, JCreator crea la carpeta Prueba y todos los subdirectorios indicados en el fichero
de configuracin de plantilla setup.tst
Agregar un fichero html de nombre FormularioPrueba a la aplicacin, ubicndolo en
tomcat_home\webapps\Prueba.

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Agregar los servlets ServletPrueba y ServletEnlace a la aplicacin, ubicndolos en
tomcat_home\webapps\Prueba\src\trilcejf.
Los class resultantes de la compilacin de los servlets aparecern en
tomcat_home\webapps\Prueba\WEB-INF\classes\trilcejf. Para comprobarlo, ir al men Project/Project
Settings/Output Path y verificar que aparece tomcat_home\webapps\Prueba\WEB-INF\classes.
Si, una vez creado el proyecto, no se ve su contenido, picar con el botn dcho sobre l y seleccionar Show
All Files
A continuacin, se proporcionan los fuentes de cada uno de los ficheros mencionados anteriormente para
que el alumno desarrolle la aplicacin. En posteriores ocasiones, se proporcionar al alumno la
aplicaciones web empaquetada en su correspondiente war. El alumno la desplegar y acceder a todos sus
componentes desde JCreator.

Cdigo del fichero descriptor de despliegue de la aplicacin (web.xml)


Si alguien no conoce XML, puede consultar http://www10.brinkster.com/trilcejf/XML.pdf

Cdigo fuente

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Una vez pulsado el enlace, conviene ir a men Ver/Cdigo fuente para obtener el contenido sin ningn tipo
de formato.
Despus del DTD, debe aparecer la etiqueta <web-app>, que va a ser el elemento raz del fichero XML. El
resto de elementos son caractersticos de una aplicacin web J2EE compatible y tienen que estar contenidos
entre <web-app> y su cierre </web-app>.
El fichero descriptor de una aplicacin web puede contener muchos elementos. En el curso se van a ver slo
los ms importantes y utilizados.
Cdigo de FormularioPrueba.html:

Cdigo fuente
Cdigo del servlet trilcejf.ServletPrueba.java:

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

Cdigo fuente
Cdigo del servlet trilcejf.ServletEnlace.java:

10

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Cdigo fuente
Finalizada la aplicacin en JCreator, se tendr la siguiente estructura:

Finalizada la etapa de desarrollo de la aplicacin, el siguiente paso sera empaquetar sus componentes en un
fichero war para que pueda ser desplegada en cualquier servidor J2EE compatible con la especificacin de los
servlets
Para ello, se utiliza la herramienta jar del JDK (es necesario tenerlo instalado y correctamente configurado).
Para comprobar que el JDK est correctamente configurado tiene que aparecer la ruta del directorio
jdk_home\bin, en la variable del sistema Path
En Windows 2000, NT y XP, picar con el derecho en Mi PC y seleccionar Propiedades. Luego,
pestaa Opciones avanzadas, botn Variables de entorno y doble clic en la variable del sistema Path.
Hecho esto, se agrega la ruta indicada al final de la ltima existente, separada por un punto y coma.
En W98 y Millenium, editar el autoexec.bat y agregar la ruta anterior a la variable Path. Debe
reiniciarse.
En mi mquina (monta WXP Professional) el valor de la variable Path es
%SYSTEMROOT%\SYSTEM32;%SYSTEMROOT%;%SYSTEMROOT%\SYSTEM32\WBEM;C:\Archivos
de programa\Java\jdk1.5.0_06\bin
Verificado lo anterior, se abre una sesin del DOS, se accede al directorio raz de la aplicacin y se teclea
tomcat_home\webapps\Prueba>jar cvf Prueba.war *
manifest agregado
agregando: FormularioPrueba.html(entrada = 968) (salida= 456)(desinflado 52%)
agregando: Prueba.jcp(entrada = 1270) (salida= 396)(desinflado 68%)
agregando: src/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: src/trilcejf/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: src/trilcejf/ServletEnlace.java(entrada = 653) (salida= 321)(desinflado 50%)
agregando: src/trilcejf/ServletPrueba.java(entrada = 1225) (salida= 519)(desinflado 57%)
agregando: tomcat.gif(entrada = 1934) (salida= 1939)(desinflado 0%)

11

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


agregando: WEB-INF/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: WEB-INF/classes/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: WEB-INF/classes/trilcejf/(entrada = 0) (salida= 0)(almacenado 0%)
agregando: WEB-INF/classes/trilcejf/ServletPrueba.class(entrada = 1803) (salida= 976)(desinflado 45%)
agregando: WEB-INF/classes/trilcejf/ServletEnlace.class(entrada = 922) (salida=549)(desinflado 40%)
agregando: WEB-INF/classes/trilcejf/ServletColor.class(entrada = 2443) (salida=1350)(desinflado 44%)
agregando: WEB-INF/web.xml(entrada = 886) (salida= 334)(desinflado 62%)
agregando: WEB-INF/lib/(entrada = 0) (salida= 0)(almacenado 0%)

Finalmente se ubicar Prueba.war en el raz del servidor (tomcat_home\webapps, si se emplea Tomcat), se


levantar y los clientes podrn acceder al index de la aplicacin mediante
http://localhost:8080/Prueba
NOTA 1: si se modifica el web.xml de la aplicacin, no es necesario tumbar al servidor para que la
aplicacin se actualice.

NOTA 2: observar en la carpeta tomcat_home\logs los ficheros de texto asociados a los logs. Un log es un
flujo de cadenas de texto que indican lo que sucede durante la ejecucin de una aplicacin. Este flujo de
cadenas puede almacenarse en un fichero de texto como ocurre aqu.
Habitualmente el programador cuando quiere debuggear o verificar el funcionamiento de un servlet, utiliza
System.out.println(mensaje). Con esta lnea se muestra por consola el mensaje del argumento.
Una mejor aproximacin, sobre todo en la etapa de produccin, es escribir mensajes en el correspondiente
fichero log de la aplicacin, mediante los mtodos
void log(String mensaje) de javax.servlet.http.ServletContext o de javax.servlet.GenericServlet
La diferencia entre ambos es que con el segundo se muestra el nombre el servlet donde se ha definido el
mtodo.
Tambin puede utilizarse
void log(String mensaje, Throwable t) para mostrar la pila de mtodos ejecutados hasta el momento en que
se lanza la excepcin o error asociado al segundo argumento.
As, si se agregan las siguientes lneas al final de trilcejf.ServletPrueba

se observa en el fichero tomcat_home\logs\localhost_log.2004-03-21.txt las siguientes entradas:


2004-03-21 13:53:45 StandardContext[/Prueba]log mediante el contexto

12

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


2004-03-21 13:53:45 StandardContext[/Prueba]ServletPruebaNombre: log mediante el metodo de GenericServlet

Ahora se recomienda realizar el ejercicio 1 del tema

Variables de instancia
En esta seccin del tema se analizan los problemas asociados al acceso concurrente a variables de instancia
definidas en servlets. La conclusin a la que se llegar ser que no debe trabajarse con variables de instancia
que almacenen datos que puedan ser modificados por las peticiones de los clientes
Se recuerda brevemente el esquema de funcionamiento de un servidor web que integra contenedor web
cuando un cliente realiza una peticin a un servlet:
El contenedor web crea un objeto de la clase del servlet y, mediante ese "nico" objeto se gestionan
todas las peticiones de los clientes usando para cada una de ellas un hilo distinto. Las variables de
instancia definidas en la clase son compartidas por todos los hilos asociados a cada peticin y podra darse el
caso de que varios hilos accedieran a la misma simultneamente provocando resultados no esperados.
Posibles soluciones:
Hacer que en el cdigo del servlet no haya cdigo que implique un acceso a las variables de
instancia y trabajar con variables locales definidas en los mtodos de servicio doPost(..), doGet(..).
De este modo, no hay problema de acceso concurrente, porque cada hilo obtiene su copia de dichas
variables locales sin interferencia con las del resto de hilos asociados al resto de peticiones.
Definir slo variables de instancia que almacenen valores fijos y comunes a todas las peticiones.
Es la mejor.
Ejemplos: drivers de bases de datos, rutas de otros servlets que formen parte de la aplicacin;
en resumidas cuentas, datos fijos que comparten todas las peticiones.
Por ejemplo, drivers de BDs comunes a todas las peticiones.
Sincronizar los mtodos de servicio. Esto es una solucin horrenda que ralentizara el acceso de los
clientes a la aplicacin. Hasta que no se ejecutara todo el cdigo del mtodo de servicio no se
permitira el acceso al mismo de otra peticin.
Implementar la interface de marcado SingleThreadModel. En este caso, se permite al contenedor
instanciar varios objetos servlet y se impide que varios hilos ejecuten simultneamente el mtodo de
servicio de un objeto servlet. De este modo, pueden procesarse varias peticiones simultneamente,
pero mediante varios objetos servlet.
Se va a realizar un ejemplo que ilustra el problema.
Se partir del siguiente formulario:

13

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

Para ejecutar el servlet, http://www.myjavaserver.com/servlet/trilcejf.Color


El usuario escribir su nombre y seleccionar un color. A continuacin, pulsar Enviar y los datos sern
capturados por un servlet de nombre trilcejf.ServletColor. El servlet, en base a esos datos, mostrar un pgina
html con el color de fondo introducido cuyo contenido ser el nombre y dicho color. Para provocar un
funcionamiento incorrecto (muestra del html respuesta con un nombre no tecleado por el usuario y un color de
fondo no seleccionado), sera necesario que varios usuarios realizaran accesos simultneos al servlet.
Se crear una aplicacin web con un directorio raz asociado de nombre Color.
Estructura de directorios:

Descriptor de despliegue web.xml:

Cdigo fuente
Cdigo del servlet trilcejf.ServletColor:
14

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

15

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Cdigo fuente
NOTA: el problema de acceso concurrente a las variables color y nombre por parte de los hilos asociados a
las peticiones de clientes y los correspondientes resultados inesperados se soluciona sin ms que declararlas
locales en el mtodo doGet(..)

Delegar peticiones a otros recursos


En el esquema de trabajo tpico de los servlets, un servlet recibe una peticin http, ejecuta cdigo ubicado en
los mtodos de servicio para generar la respuesta html y la enva al cliente.
En muchas ocasiones, los servlets no generan la respuesta sino que actan como gestores de la peticin
mediante la ejecucin de cdigo de control con instrucciones if condicionales. En funcin del bloque
condicional que se ejecute se delega la generacin de respuesta a otros recursos tales como pginas html,
pginas jsp u otros servlets.
La interface javax.servlet.RequestDispatcher contiene dos mtodos que permiten delegar la generacin de
respuestas a otros recursos.
El mtodo forward, que permite delegar el procesamiento de la peticin a una pgina html, jsp u otro
servlet.
El mtodo include, que permite incluir la respuesta generada por uno de estos recursos en el servlet
sobre el que se aplica
Explicacin detallada de ambos mtodos:
void forward(ServletRequest request, ServletResponse response): delega el procesamiento de la
peticin al recurso especificado en el argumento del objeto RequestDispatcher sobre el que se aplica.
Toda respuesta vertida al flujo de salida mediante el objeto out asociada a lneas anteriores y
posteriores a la del mtodo no se considera. El resto de cdigo, s.
void include(ServletRequest request, ServletResponse response): delega temporalmente el
procesamiento de la peticin al recurso especificado en el argumento del objeto RequestDispatcher
sobre el que se aplica, incluyendo en el servlet en el que se encuentra definido, adems de la respuesta
generada hasta la lnea del include, una pgina html, jsp o la respuesta html generada por otro servlet.
Muy usado para incorporar encabezados (headers) y pies de pgina (footers) comunes a todos los
recursos de una aplicacin web.
Para poder aplicar estos mtodos es necesario obtener un objeto de la interface RequestDispatcher.
Se consigue de dos posibles formas:
Para poder aplicar estos mtodos es necesario obtener un objeto de la interface RequestDispatcher.
Se consigue de dos posibles formas:
Mediante los mtodos de la interface javax.servlet.ServletContext

16

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega):
se emplea, sobre todo, cuando se desea delegar en ficheros html o jsps. Tambin sirve
para servlets.
RequestDispatcher getNamedDispatcher(String
nombreServletAlQueSeDelegaEnDescriptor): habitualmente usado para delegar en
otro servlet. Debe especificarse el nombre o alias que se le ha asignado al servlet en
el descriptor de despliegue de la aplicacin
Para poder aplicar estos mtodos es necesario obtener un objeto de la
interface ServletContext. Antes de explicar cmo se obtiene conviene
explicar el significado de contexto en el mbito de las aplicaciones web. Se
explica en el siguiente apartado
Mediante el mtodo de la interface javax.servlet.ServletRequest
RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega): se
emplea, sobre todo, cuando se desea delegar en ficheros html o jsps

Obtencin del contexto


Un contexto est asociado a un objeto ServletContext, que est contenido en un objeto ServletConfig. Es
utilizado para compartir datos entre todos los servlets y jsps de una aplicacin. Proporciona al programador:
Un contenedor virtual para almacenar objetos a los que pueden acceder todos los servlets y jsps de
una misma aplicacin web. En este sentido, se emplea para pasar datos de un servlet a otro. Es
importante resaltar que hay un contexto por cada aplicacin web.
Interfaces que permiten comunicarse con el entorno de ejecucin de la aplicacin web, es decir, con el
contenedor web, por ejemplo, para obtener el tipo MIME de un fichero, para escribir en un fichero log
del servidor, para obtener un objeto RequestDispatcher usado para delegar en otros recursos el
procesamiento de la peticin, para conocer la ruta asociada al directorio raz de una aplicacin web,
etc. Consultar la API.
Cmo se obtiene el contexto de una aplicacin web?
Mediante el mtodo ServletContext getServletContext() de la interface ServletConfig o mediante
getServletContext () de GenericServlet. Se obtiene un contexto vaco, todava no contiene elementos.
Cmo se agregan atributos al contexto de una aplicacin web?
Mediante el mtodo de la interface javax.servlet.ServletContext void setAttribute(String clave, Object
valor). Se asigna una clave y un valor asociado a la misma. La clave debe ser una String y el valor un Object.
Cmo se obtienen atributos del contexto de una aplicacin web?
Mediante el mtodo de esta misma interface Object getAttribute(String clave).

17

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


NOTA: etiquetas tpicas empleadas en el descriptor de despliegue y relacionadas con el contexto son:
<context-param> <param-name> y <param-value>

.
Ejemplo: se crear una aplicacin web con un directorio raz asociado de nombre RequestDispatcherEjemplo.
Su estructura de directorios ser

Descarga del war de la aplicacin:


http://teleformacion.fer.es/general/prt/c/j2ee/2/RequestDispatcherEjemplo.war
A continuacin, ubicarlo en tomcat_home\webapps y levantar Tomcat.
Para ver el cdigo de sus componentes, se recuerda el proceso a seguir:
Siendo JavaServidor el espacio de trabajo actual
Men Project/Insert Project into Workspace y se selecciona el fichero jcp correspondiente a la
aplicacin desplegada, en este caso,
tomcat_home\webapps\RequestDispatcherEjemplo\RequestDispatcherEjemplo.jcp
Inicio de la aplicacin:
http://localhost:8080/RequestDispatcherEjemplo/fecha

18

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Ahora conviene realizar el ejercicio 2 del tema
NOTA IMPORTANTE:
Adems de en el contexto de una aplicacin web, existen otros objetos utilizados para compartir datos
entre todos los servlets de una aplicacin. Ordenados de menor a mayor alcance son los siguientes:
En la peticin o request (objeto HttpServletRequest y alcance request).
Los datos son especficos de cada peticin y se mantienen durante la vida de la misma
(tiempo que tarda el thread asociado a la peticin en ejecutar el mtodo de servicio del
servlet). Muy empleado cuando los datos tienen que compartirse entre dos servlets ligados
por un forward(..) o include(..).
Para introducir y obtener datos, se emplean los mtodos de javax.servlet.ServletRequest void
setAttribute(String clave, Object valor) y Object getAttribute(String clave) respectivamente.
Hubiera sido lo ms ptimo para el ejercicio 2, que acaba de realizarse. Ver cdigo en
http://www10.brinkster.com/trilcejf/ServletRequestDispatcher.txt y
http://www10.brinkster.com/trilcejf/ServletDelegado.txt
En una sesin (objeto HttpSession y alcance sesin).
Los datos suelen ser especficos de cada peticin y persistentes hasta que la sesin se
mantenga activa (el tiempo de vida de una sesin la controla el programador mediante
mtodos adecuados de HttpSession. Se estudiarn ms adelante).
Para introducir y obtener datos, se emplean los mtodos de javax.servlet.http.HttpSession void
setAttribute(String clave, Object valor) y Object getAttribute(String clave) respectivamente.
Ejemplo: el carrito de compra que a cada usuario se le asigna para almacenar sus adquisiciones en una
aplicacin de comercio electrnico.
En el contexto de la aplicacin (objeto ServletContext y alcance aplicacin).
Los datos suelen ser comunes a todas las peticiones y accesibles desde todos los servlets y
JSPs de la aplicacin. Se mantienen hasta que se elimine el contexto (ocurre cuando la
aplicacin queda fuera de servicio, por ejemplo, al tumbar el servidor, sobrepasar un tiempo
lmite de inactividad del servlet, o si el servidor est trabajando con insuficiente memoria.
Ejemplo de datos tpicos ubicados en el contexto son el driver de conexin a una BD, el url de la BD a la que
van a conectarse todos los usuarios, el nombre de usuario y la contrasea de la anterior BD, etc.
Qu criterios deben aplicarse para saber cal usar?
Bsicamente dos:
El tiempo durante el que se necesitan los datos.
Los recursos que necesiten acceder a los mismos.
19

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Por regla general, se emplear aquel objeto cuyo alcance sea menor (request).
Esquema de las caractersticas asociadas a los objetos empleados para compartir datos y recursos entre
componentes de una aplicacin web:

Qu significa que un objeto sea thread-safe o de hilo seguro?


Que slo un hilo va a poder trabajar con dicho objeto. Si otro hilo intenta acceder al mismo, ste debe esperar
a que finalice la ejecucin del hilo que est trabajando en la actualidad con el objeto.
Qu debe hacerse para convertir un objeto de hilo no seguro en seguro?
Programarlo con bloques sincronizados.
Ejemplo:
20

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

De este modo se asegura que el atributo de contexto saludo es de hilo seguro y que la salida provocada por
la ejecucin de este bloque ser Hola.
Si, desde otro servlet de la aplicacin, un hilo asociado a otro cliente intentara ejecutar estas lneas

debera esperar a que finalizara la ejecucin del hilo que actualmente est ejecutando el bloque sincronizado
para poder machacar el atributo saludo .
Resumen:
Los atributos de tipo request y las variables locales de los mtodos de servicio son thread-safe o de hilo
seguro.
Las variables de instancia, los atributos de contexto y los atributos de sesin no son thread-safe. Para que los
atributos sean, deben programarse dentro de un bloque sincronizado.
Eventos relacionados con los objetos contexto de aplicacin, peticin y sesin

21

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

Elemento a agregar en el descriptor de despliegue, colgando directamente de <web-app>:


<listener>
<listener-class>nombreClase</listener-class>
</listener>

22

Ejercicios
Ejercicio 1
Se trata de crear una aplicacin web que conste de un formulario html de nombre Encuesta y que genere una
interface grfica como la mostrada en http://www.myjavaserver.com/~trilcejf/EncuestaPrivada.html, para que
los clientes rellenen una serie de datos que se emplearn en una encuesta on-line. Todos los datos, excepto los
asociados a las casillas de verificacin, debern ser capturados por un servlet de nombre
trilcejf.ServletEncuesta, que generar una respuesta html personalizada.
La respuesta variar en funcin de la eleccin de sexo realizada por el usuario:
Si se elige hombre, el color de fondo ser cyan y aparecer un enlace que apunta a Hombres.html
(este fichero mostrar la imagen tomcat.gif)
Si se escoge mujer, el color de fondo ser rosa y el enlace apuntar a Mujeres.html (mostrar la
imagen taza.gif)
Adems, se enviar un saludo personalizado y se mostrarn en una tabla todos los datos capturados excepto
los de las casillas, que se mostrarn en otra tabla indicando las actividades de ocio seleccionadas por el
cliente.
Se acceder a la aplicacin una vez desplegado en el Tomcat del alumno, el fichero war asociado a la
aplicacin. Su nombre es Encuesta.war y se despleg en la seccin "Despliegue mediante su war" de la teora.
Si no se ha desplegado, usar el enlace http://teleformacion.fer.es/general/prt/c/j2ee/2/Encuesta.war
Una vez desplegado el war y levantado Tomcat, se accede al index de la aplicacin mediante
http://localhost:8080/Encuesta
Descriptor de despliegue web.xml:

23

Estructura y despliegue de aplicaciones J2EE ADR Infor SL


Cdigo fuente
Estructura de directorios:

Ejercicio 2
NOTA: en todos los ejercicios se proporcionar el war de la aplicacin con el fin de que el alumno lo
despliegue y se familiarice con su funcionamiento. Tambin se indicar cmo se inicia la aplicacin.
Descarga del war: http://teleformacion.fer.es/general/prt/c/j2ee/2/RequestDispatcher.war
Inicio de aplicacin: http://localhost:8080/RequestDispatcher
A continuacin, el alumno intentar realizar la aplicacin por su cuenta creando un directorio raz cuyo
nombre ser el especificado en el enunciado del ejercicio, habitualmente NombreDelWarNombreAlumno.
Si el alumno se llama Pedro, por ejemplo, el raz de la aplicacin, en este caso, ser RequestDispatcherPedro
Crear una aplicacin web con un directorio raz de nombre RequestDispatcherNombreAlumno.
El inicio de la aplicacin ser el formulario RequestDispatcher.html. Mostrar un cuadro de texto y un botn
de Enviar. En funcin de lo que teclee el usuario, el procesamiento de la peticin se delegar en un recurso
diferente.
Si teclea yo , se delegar en Cucu.html. Contendr la imagen tomcat.gif y un enlace que apunta al
applet JuegoCapitales.html
Si teclea tu , en Cucu.jsp. Contendr la imagen taza.gif y el mismo enlace al applet
JuegoCapitales.html
Si teclea algo distinto de yo o tu, en el servlet trilcejf.ServletDelegado. Deber incluir un encabezado
y un pie de pgina
NOTA IMPORTANTE: si tenis problemas para ejecutar Cucu.jsp debis copiar el fichero
jdk_home\lib\tools.jar a tomcat_home\common\lib. Es un bug asociado a las versiones 5.X de Tomcat.

24

Estructura y despliegue de aplicaciones J2EE ADR Infor SL

NOTA: es conveniente realizar un esquema de la aplicacin. Si no sale, descargarlo desde


http://teleformacion.fer.es/general/prt/c/j2ee/2/EsquemaRequestDispatcher.doc
Descriptor de despliegue web.xml:

Cdigo fuente

25

Das könnte Ihnen auch gefallen