estructura y despliegue de aplicaciones web

27
Estructura y despliegue de aplicaciones J2EE © ADR Infor S

Upload: fernando-fragoso

Post on 19-Nov-2015

52 views

Category:

Documents


7 download

DESCRIPTION

Estructura de aplicaciones WEB Java

TRANSCRIPT

  • Estructura y despliegue de aplicaciones J2EE ADR Infor SL

  • Indice2 - Estructura y despliegue de aplicaciones web..............................................................................................1

    Aplicaciones web.....................................................................................................................................1Despliegue mediante war.........................................................................................................................1Etapa de desarrollo...................................................................................................................................4Ejemplo de desarrollo..............................................................................................................................5Variables de instancia............................................................................................................................13Delegar peticiones a otros recursos........................................................................................................16Obtencin del contexto..........................................................................................................................17

    Ejercicios............................................................................................................................................................23Ejercicio 1..............................................................................................................................................23Ejercicio 2..............................................................................................................................................24

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    i

  • 2 - Estructura y despliegue de aplicaciones web

    Aplicaciones web

    Una APLICACIN WEB consiste en un conjunto de servlets, pginas jsp, ficheros html, clases Java deapoyo empaquetadas o no en ficheros jar y otro tipo de recursos tales como ficheros de imgenes, desonidos, 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 suelellamar Web ARchive) que engloba a todo su contenido. Se crea mediante la herramienta jar incluidoen el J2SE, del mismo modo que un fichero jar. Este empaquetamiento se produce en la etapa deproduccin, 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 losServlets. Dentro de esta estructura deben ubicarse de forma adecuada los componentes de laaplicacin.

    Es el modo de trabajo habitual en la etapa de desarrollo de la aplicacin, es decir, cuando serealizan pruebas y modificaciones constantes en sus componentes.

    Con estos modos de existencia se persigue que la misma aplicacin web pueda ser deplegada endiferentes 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 aceptarpara el despliegue de aplicaciones web, su fichero war asociado, que se ubicar en el directorio del servidorque 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 loscomponentes de la aplicacin

    Etapa de produccin: se usa un fichero war. Los objetivos de la aplicacin se han logrado y no sepreven modificaciones en sus componentes. Todos los recursos de la aplicacin se empaquetan en unwar para que pueda ser desplegada en cualquier tipo de servidor J2EE compatible con laespecificacin.

    Despliegue mediante war

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

    1

  • 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 delfichero war, que indica el URL mediante el que cualquier cliente puede acceder a la misma. Cadaaplicacin 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 delservidor 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 JBossse levanta ejecutando jboss_home\bin\run.bat. Para tumbarlo, jboss_home\bin\shutdown.bat o secierra 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. Lasversiones 3.X integran como contenedor web a Jetty (es software desarrollado por la gente deJboss); las 4.X, integran Tomcat como contenedor web. Para el curso descargar la versin4.0.5, pulsando sobre el botn Download. Lo que se descarga en un .zip que debedescomprimirse. Hecho esto, ya est instalado.

    Para que el server arranque correctamente, deben agregarse las siguientes variables deentorno 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

    2

  • La asignacin de ruta de contexto comentada anteriormente se hace de modo automtico, sin ms que colgarel fichero war del raz del servidor.

    Si se utiliza Tomcat, el administrador ubicar Prueba.war colgando de tomcat_home\webapps. Hechoesto, el despliegue se considera finalizado. A continuacin se levanta Tomcat y se crear la estructura dedirectorios siguiente:

    Esta configuracin de directorios post-despliegue se debe la estructura de directorios conforme aespecificacin en que se basan todos las aplicaciones web (se estudiar en el siguiente apartado). Ademsde los directorios de arriba aparecern

    META-INF\MANIFEST.MF que contiene informacin sobre la versin del JDK con el que se esttrabajando

    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 adisposicin del programador el cdigo de todos los componentes de la aplicacin en JCreator y, as,

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    3

  • 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 laaplicacin 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 lamisma, mediante http://localhost:8080/Prueba

    NOTA IMPORTANTE: para que los alumnos puedan actuar como administradores y usuarios de laaplicacin, se suministra Prueba.war en http://teleformacion.fer.es/general/prt/c/j2ee/2/Prueba.war con el finde 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 warpulsando 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 seejecuta 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 conTomcat como si se trabaja con JBoss.

    Este ser el modo en que se proporcionarn las aplicaciones de ejemplo: mediante un enlace que permitedescargar el war de la aplicacin. El alumno deber desplegarlo en el servidor de trabajo y posteriormenteacceder 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 laaplicacin tal y como se ha explicado anteriormente.Repetir el proceso de despliegue con Encuesta.war. Para ello, tumbar Tomcat, ubicar Encuesta.war entomcat_home\webapps y volver a levantar Tomcat. El war se descargadesdehttp://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 webcapaz de generar diversos tipos de grficos con datos procedentes de un servlet. Se acceder la indexmediante http://localhost:8080/jChartsServletExamples

    Etapa de desarrollo

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

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    4

  • 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 directorioraz de su aplicacin o de subcarpetas del mismo

    Crear un subdirectorio WEB-INF colgando del raz de la aplicacin y almacenar en l, el ficherodescriptor de despliegue web.xml.

    NOTA: el contenido de este fichero es fundamental para el despliegue de laaplicacin ya que describe al contenedor web sus elementos y el modo en que seaccede a los mismos. Adems, define aspectos de seguridad, ficheros debienvenida, parmetros iniciales, parmetros de contexto, etc. Cuando Tomcat (y,en general cualquier servidor J2EE compatible) se levanta, lee este fichero y, sicontiene algn tipo de error, se lanzan excepciones que indican que el servidor nose ha levantado correctamente.Este directorio contiene los recursos privados de la aplicacin. No son accesiblesdirectamente 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 yotras clases de apoyo. Debe tenerse en cuenta que si estn empaquetados, los class se ubicarn ensubdirectorios adecuados atendiendo a sus estructuras de paquete.

    Crear un subdirectorio WEB-INF\lib y almacenar en l libreras de clases en forma de ficheros jarque 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 seubican 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 alprincipio partiendo de cero. Se recuerda que constaba de un formulario y dos servlets. Su directorio raz odocument root se llamar Prueba.

    Estructura de la aplicacin web cuyo directorio raz es Prueba: es la misma que se obtuvo despus dedesplegar Prueba.war. Se recomienda eliminar el directorio tomcat_home\webapps\Prueba con el fin de volvera realizar la aplicacin paso a paso

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    5

  • NOTA 1 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: se indican los pasosque 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 nuestromodo 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 elnombre de vuestro paquete de trabajo (en mi caso, trilcejf). Se recomienda que el alumno utilicetambin 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 unnuevo 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 lassoluciones

    La estructura de directorios colgando de Templates quedar as:

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    6

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

    NOTA 2 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: hecho lo anterior, seexplica a continuacin la creacin de una aplicacin web con JCreator basada en la template o plantillacomentada en la nota anterior:

    Crear, en mi caso, una Jesus Web Application mediante File/New/Project de nombre Prueba queforme 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 ficherode configuracin de plantilla setup.tst

    Agregar un fichero html de nombre FormularioPrueba a la aplicacin, ubicndolo entomcat_home\webapps\Prueba.

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    7

  • Agregar los servlets ServletPrueba y ServletEnlace a la aplicacin, ubicndolos entomcat_home\webapps\Prueba\src\trilcejf.

    Los class resultantes de la compilacin de los servlets aparecern entomcat_home\webapps\Prueba\WEB-INF\classes\trilcejf. Para comprobarlo, ir al men Project/ProjectSettings/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 ShowAll Files

    A continuacin, se proporcionan los fuentes de cada uno de los ficheros mencionados anteriormente paraque el alumno desarrolle la aplicacin. En posteriores ocasiones, se proporcionar al alumno laaplicaciones web empaquetada en su correspondiente war. El alumno la desplegar y acceder a todos suscomponentes 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

    8

  • Una vez pulsado el enlace, conviene ir a men Ver/Cdigo fuente para obtener el contenido sin ningn tipode formato.

    Despus del DTD, debe aparecer la etiqueta , que va a ser el elemento raz del fichero XML. Elresto de elementos son caractersticos de una aplicacin web J2EE compatible y tienen que estar contenidosentre y su cierre .

    El fichero descriptor de una aplicacin web puede contener muchos elementos. En el curso se van a ver slolos 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

    9

  • Cdigo fuente

    Cdigo del servlet trilcejf.ServletEnlace.java:

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    10

  • 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 unfichero war para que pueda ser desplegada en cualquier servidor J2EE compatible con la especificacin de losservlets

    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 directoriojdk_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. Debereiniciarse.

    En mi mquina (monta WXP Professional) el valor de la variable Path es

    %SYSTEMROOT%\SYSTEM32;%SYSTEMROOT%;%SYSTEMROOT%\SYSTEM32\WBEM;C:\Archivosde 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%)

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    11

  • 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), selevantar 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 laaplicacin se actualice.

    NOTA 2: observar en la carpeta tomcat_home\logs los ficheros de texto asociados a los logs. Un log es unflujo de cadenas de texto que indican lo que sucede durante la ejecucin de una aplicacin. Este flujo decadenas puede almacenarse en un fichero de texto como ocurre aqu.

    Habitualmente el programador cuando quiere debuggear o verificar el funcionamiento de un servlet, utilizaSystem.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 correspondientefichero 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 elmtodo.

    Tambin puede utilizarse

    void log(String mensaje, Throwable t) para mostrar la pila de mtodos ejecutados hasta el momento en quese 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

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    12

  • 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 instanciadefinidas en servlets. La conclusin a la que se llegar ser que no debe trabajarse con variables de instanciaque 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 webcuando 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 gestionantodas las peticiones de los clientes usando para cada una de ellas un hilo distinto. Las variables deinstancia definidas en la clase son compartidas por todos los hilos asociados a cada peticin y podra darse elcaso 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 deinstancia 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 dichasvariables 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 losclientes a la aplicacin. Hasta que no se ejecutara todo el cdigo del mtodo de servicio no sepermitira el acceso al mismo de otra peticin.

    Implementar la interface de marcado SingleThreadModel. En este caso, se permite al contenedorinstanciar varios objetos servlet y se impide que varios hilos ejecuten simultneamente el mtodo deservicio 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:

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    13

  • 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 serncapturados por un servlet de nombre trilcejf.ServletColor. El servlet, en base a esos datos, mostrar un pginahtml con el color de fondo introducido cuyo contenido ser el nombre y dicho color. Para provocar unfuncionamiento incorrecto (muestra del html respuesta con un nombre no tecleado por el usuario y un color defondo 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:

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    14

  • Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    15

  • Cdigo fuente

    NOTA: el problema de acceso concurrente a las variables color y nombre por parte de los hilos asociados alas peticiones de clientes y los correspondientes resultados inesperados se soluciona sin ms que declararlaslocales 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 enlos 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 peticinmediante la ejecucin de cdigo de control con instrucciones if condicionales. En funcin del bloquecondicional 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 derespuestas a otros recursos.

    El mtodo forward, que permite delegar el procesamiento de la peticin a una pgina html, jsp u otroservlet.

    El mtodo include, que permite incluir la respuesta generada por uno de estos recursos en el servletsobre el que se aplica

    Explicacin detallada de ambos mtodos:

    void forward(ServletRequest request, ServletResponse response): delega el procesamiento de lapeticin 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 yposteriores a la del mtodo no se considera. El resto de cdigo, s.

    void include(ServletRequest request, ServletResponse response): delega temporalmente elprocesamiento de la peticin al recurso especificado en el argumento del objeto RequestDispatchersobre el que se aplica, incluyendo en el servlet en el que se encuentra definido, adems de la respuestagenerada 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 losrecursos 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

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    16

  • RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega):se emplea, sobre todo, cuando se desea delegar en ficheros html o jsps. Tambin sirvepara servlets.

    RequestDispatcher getNamedDispatcher(StringnombreServletAlQueSeDelegaEnDescriptor): habitualmente usado para delegar enotro servlet. Debe especificarse el nombre o alias que se le ha asignado al servlet enel descriptor de despliegue de la aplicacin

    Para poder aplicar estos mtodos es necesario obtener un objeto de lainterface ServletContext. Antes de explicar cmo se obtiene convieneexplicar el significado de contexto en el mbito de las aplicaciones web. Seexplica en el siguiente apartado

    Mediante el mtodo de la interface javax.servlet.ServletRequest

    RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega): seemplea, 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. Esutilizado 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 deuna misma aplicacin web. En este sentido, se emplea para pasar datos de un servlet a otro. Esimportante 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 elcontenedor web, por ejemplo, para obtener el tipo MIME de un fichero, para escribir en un fichero logdel servidor, para obtener un objeto RequestDispatcher usado para delegar en otros recursos elprocesamiento 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 mediantegetServletContext () 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, Objectvalor). 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).

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    17

  • NOTA: etiquetas tpicas empleadas en el descriptor de despliegue y relacionadas con el contexto son:

    y

    .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 laaplicacin desplegada, en este caso,tomcat_home\webapps\RequestDispatcherEjemplo\RequestDispatcherEjemplo.jcp

    Inicio de la aplicacin:

    http://localhost:8080/RequestDispatcherEjemplo/fecha

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    18

  • 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 datosentre 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 delservlet). Muy empleado cuando los datos tienen que compartirse entre dos servlets ligadospor un forward(..) o include(..).

    Para introducir y obtener datos, se emplean los mtodos de javax.servlet.ServletRequest voidsetAttribute(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 yhttp://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 semantenga activa (el tiempo de vida de una sesin la controla el programador mediantemtodos adecuados de HttpSession. Se estudiarn ms adelante).

    Para introducir y obtener datos, se emplean los mtodos de javax.servlet.http.HttpSession voidsetAttribute(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 unaaplicacin 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 yJSPs de la aplicacin. Se mantienen hasta que se elimine el contexto (ocurre cuando laaplicacin queda fuera de servicio, por ejemplo, al tumbar el servidor, sobrepasar un tiempolmite 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 quevan 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.

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    19

  • 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 entrecomponentes 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 esperara 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:

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    20

  • De este modo se asegura que el atributo de contexto saludo es de hilo seguro y que la salida provocada porla 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 sincronizadopara 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 hiloseguro.

    Las variables de instancia, los atributos de contexto y los atributos de sesin no son thread-safe. Para que losatributos sean, deben programarse dentro de un bloque sincronizado.

    Eventos relacionados con los objetos contexto de aplicacin, peticin y sesin

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    21

  • Elemento a agregar en el descriptor de despliegue, colgando directamente de :

    nombreClase

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    22

  • Ejercicios

    Ejercicio 1

    Se trata de crear una aplicacin web que conste de un formulario html de nombre Encuesta y que genere unainterface grfica como la mostrada en http://www.myjavaserver.com/~trilcejf/EncuestaPrivada.html, para quelos clientes rellenen una serie de datos que se emplearn en una encuesta on-line. Todos los datos, excepto losasociados a las casillas de verificacin, debern ser capturados por un servlet de nombretrilcejf.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 laimagen taza.gif)

    Adems, se enviar un saludo personalizado y se mostrarn en una tabla todos los datos capturados exceptolos de las casillas, que se mostrarn en otra tabla indicando las actividades de ocio seleccionadas por elcliente.

    Se acceder a la aplicacin una vez desplegado en el Tomcat del alumno, el fichero war asociado a laaplicacin. 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 mediantehttp://localhost:8080/Encuesta

    Descriptor de despliegue web.xml:

    23

  • 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 lodespliegue 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 cuyonombre 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 RequestDispatcherPedroCrear 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 botnde Enviar. En funcin de lo que teclee el usuario, el procesamiento de la peticin se delegar en un recursodiferente.

    Si teclea yo, se delegar en Cucu.html. Contendr la imagen tomcat.gif y un enlace que apunta alapplet JuegoCapitales.html

    Si teclea tu, en Cucu.jsp. Contendr la imagen taza.gif y el mismo enlace al appletJuegoCapitales.html

    Si teclea algo distinto de yo o tu, en el servlet trilcejf.ServletDelegado. Deber incluir un encabezadoy un pie de pgina

    NOTA IMPORTANTE: si tenis problemas para ejecutar Cucu.jsp debis copiar el ficherojdk_home\lib\tools.jar a tomcat_home\common\lib. Es un bug asociado a las versiones 5.X de Tomcat.

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    24

  • 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

    Estructura y despliegue de aplicaciones J2EE ADR Infor SL

    25

    Indice2 - Estructura y despliegue de aplicaciones webAplicaciones webDespliegue mediante warEtapa de desarrolloEjemplo de desarrolloVariables de instanciaDelegar peticiones a otros recursosObtencin del contexto

    EjerciciosEjercicio 1Ejercicio 2