Curso de J2EE

Etapa de desarrollo

El punto de partida de todo desarrollador de aplicaciones web es la creación de un document root o directorio raíz de aplicación que va a contener a todos sus componentes. Este directorio raíz colgará del directorio raíz 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, imágenes, sonidos, etc. colgando directamente del directorio raíz de su aplicación o de subcarpetas del mismo
  • Crear un subdirectorio WEB-INF colgando del raíz de la aplicación y almacenar en él, el fichero descriptor de despliegue web.xml.
NOTA: el contenido de este fichero es fundamental para el despliegue de la aplicación ya que describe al contenedor web  sus elementos y el modo en que se accede a los mismos. Además, define aspectos de seguridad, ficheros de bienvenida, parámetros iniciales, parámetros de contexto, etc. Cuando Tomcat (y, en general cualquier servidor J2EE compatible) se levanta, lee este fichero y, si contiene algún tipo de error, se lanzan excepciones que indican que el servidor no se ha levantado correctamente.

Este directorio contiene los recursos privados de la aplicación. No son accesibles directamente desde el cliente, en el sentido de que no puede descargárselos y ver su código

  • 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 están empaquetados, los class se ubicarán en subdirectorios adecuados atendiendo a sus estructuras de paquete.
  • Crear un subdirectorio WEB-INF\lib y almacenar en él librerías de clases en forma de ficheros jar que la aplicación web usa. Típicamente drivers de BDs y librerías de etiquetas.
  • Además, suele crearse una carpeta de nombre src (source) colgando del raíz de la aplicación donde se ubican los códigos fuente de los servlets, en el caso de que el desarrollador quiera hacerlos públicos

Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Ejemplo de desarrollo

Para ilustrar la etapa de desarrollo de una aplicación web, se va a crear la aplicación que se desplegó al principio partiendo de cero. Se recuerda que constaba de un formulario y dos servlets. Su directorio raíz o document root se llamará Prueba.

Estructura de la aplicación web cuyo directorio raíz es Prueba: es la misma que se obtuvo después de desplegar Prueba.war. Se recomienda eliminar el directorio tomcat_home\webapps\Prueba con el fin de volver a realizar la aplicación paso a paso

NOTA 1 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: se indican los pasos que deben seguirse para realizar la aplicación 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 continuación, 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 también 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 línea, 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 línea, 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)

 

NOTA 2 PARA TRABAJAR CON APLICACIONES WEB EN JCREATORPRO: hecho lo anterior, se explica a continuación la creación de una aplicación 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 botón de puntitos   tomcat_home\webapps. Después Finish. Hecho esto, JCreator crea la carpeta Prueba y todos los subdirectorios indicados en el fichero de configuración de plantilla setup.tst

  • Agregar un fichero html de nombre FormularioPrueba a la aplicación, ubicándolo en tomcat_home\webapps\Prueba.
  • Agregar los servlets ServletPrueba y ServletEnlace a la aplicación, ubicándolos en tomcat_home\webapps\Prueba\src\trilcejf.

Los class resultantes de la compilación de los servlets aparecerán 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 botón dcho sobre él y seleccionar Show All Files

A continuación, se proporcionan los fuentes de cada uno de los ficheros mencionados anteriormente para que el alumno desarrolle la aplicación. 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.

 

Código del fichero descriptor de despliegue de la aplicación (web.xml)

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

Código fuente

Una vez pulsado el enlace, conviene ir a menú Ver/Código fuente para obtener el contenido sin ningún tipo de formato.

Después del DTD, debe aparecer la etiqueta <web-app>, que va a ser el elemento raíz del fichero XML. El resto de elementos son característicos de una aplicación web J2EE compatible y tienen que estar contenidos entre <web-app> y su cierre </web-app>.

El fichero descriptor de una aplicación web puede contener muchos elementos. En el curso se van a ver sólo los más importantes y utilizados.

Código de FormularioPrueba.html:

Código fuente

Código del servlet trilcejf.ServletPrueba.java:

Código fuente

Código del servlet trilcejf.ServletEnlace.java:

Código fuente

Finalizada la aplicación en JCreator, se tendrá la siguiente estructura:

Finalizada la etapa de desarrollo de la aplicación, el siguiente paso sería empaquetar sus componentes en un fichero war para que pueda ser desplegada en cualquier servidor J2EE compatible con la especificación 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, pestaña Opciones avanzadas, botón 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 máquina (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 sesión del DOS, se accede al directorio raíz de la aplicación 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%)

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 raíz del servidor (tomcat_home\webapps, si se emplea Tomcat), se levantará y los clientes podrán acceder al index de la aplicación mediante

http://localhost:8080/Prueba

NOTA 1: si se modifica el web.xml de la aplicación, no es necesario tumbar al servidor para que la aplicación 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 ejecución de una aplicación. 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 línea se muestra por consola el mensaje del argumento.

Una mejor aproximación, sobre todo en la etapa de producción, es escribir mensajes en el correspondiente fichero log de la aplicación, mediante los métodos

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 método.

También puede utilizarse

void log(String mensaje, Throwable t) para mostrar la pila de métodos ejecutados hasta el momento en que se lanza la excepción o error asociado al segundo argumento.

Así, si se agregan las siguientes líneas 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

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

Ahora se recomienda realizar el ejercicio 1 del tema


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Si desea obtener un acceso sin restricciones a los contenidos del curso de J2EE y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.