Beruflich Dokumente
Kultur Dokumente
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
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:
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
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
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]
[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:
El directorio src contendr al subdirectorio trilcejf (estar vacio) y el WEB-INF al subdirectorio lib (estar
vacio)
Cdigo fuente
Cdigo fuente
Cdigo del servlet trilcejf.ServletPrueba.java:
Cdigo fuente
Cdigo del servlet trilcejf.ServletEnlace.java:
10
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
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
12
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
Cdigo fuente
Cdigo del servlet trilcejf.ServletColor:
14
15
16
17
.
Ejemplo: se crear una aplicacin web con un directorio raz asociado de nombre RequestDispatcherEjemplo.
Su estructura de directorios ser
18
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
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
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
Cdigo fuente
25