appwebjavaee
TRANSCRIPT
-
7/31/2019 AppWebJavaEE
1/98
DESARROLLO DE APLICACIONES WEBCON JAVA ENTERPRISE EDITION
Junta de Comunidades de Castilla-La Mancha
Consejera de Educacin, Cultura y Deportes
Sergio Tendero Zapero
-
7/31/2019 AppWebJavaEE
2/98
Desarrollo de aplicaciones web con Java Enterprise Edition
ndice de contenido1. Arquitectura Java EE....................................................................................................................................4
1.1. La plataforma Java................................................................................................................................4
1.1.1. El lenguaje Java............................................................................................................................4
1.1.2. Herramientas de desarrollo y ejecucin........................................................................................8
1.2. Ediciones..............................................................................................................................................9
1.3. Java Enterprise Edition.......................................................................................................................11
1.3.1. Modelo de aplicacin..................................................................................................................11
1.3.2. Capas en la arquitectura Java EE................................................................................................14
1.3.3. Contenedores Java EE................................................................................................................17
1.3.4. Empaquetando aplicaciones........................................................................................................20
1.3.5. Java EE API................................................................................................................................22
2. Entorno de desarrollo..................................................................................................................................22
3. Capa Web....................................................................................................................................................25
3.1. Aplicaciones web en Java EE.............................................................................................................25
3.1.1. Introduccin................................................................................................................................25
3.1.2. Ciclo de vida de una aplicacin web...........................................................................................27
3.1.3. Mdulos web..............................................................................................................................27
3.1.4. Configurando aplicaciones web..................................................................................................29
3.2. Tecnologa Java Servlets.....................................................................................................................30
3.2.1. Qu es un Servlet?....................................................................................................................30
3.2.2. Ciclo de vida de un Servlet.........................................................................................................31
3.2.3. Inicializacin de un Servlet.........................................................................................................31
3.2.4. Escribiendo mtodos de servicio.................................................................................................32
3.2.5. Compartiendo informacin.........................................................................................................33
3.2.6. Filtrando peticiones y respuestas................................................................................................34
3.2.7. Invocando otros recursos web.....................................................................................................363.2.8. Manteniendo el estado del cliente...............................................................................................37
3.2.9. Finalizando un Servlet................................................................................................................38
3.3. Tecnologa JavaServer Pages..............................................................................................................39
3.3.1. Qu es una pgina JSP?............................................................................................................39
3.3.2. Ciclo de vida de una pgina JSP.................................................................................................40
3.3.3. Creando contenido esttico.........................................................................................................42
3.3.4. Creando contenido dinmico......................................................................................................42
3.3.5. Usando scripting en pginas JSP................................................................................................43
2
-
7/31/2019 AppWebJavaEE
3/98
Desarrollo de aplicaciones web con Java Enterprise Edition
3.3.6. Usando etiquetas en JSP.............................................................................................................44
3.3.7. El lenguaje de expresiones unificado..........................................................................................45
3.3.8. Componentes JavaBeans.............................................................................................................46
3.3.9. Reutilizacin de contenido en pginas JSP.................................................................................49
3.3.10. Transfiriendo el control a otro componente web.......................................................................49
3.4. Arquitectura de la capa web................................................................................................................50
3.4.1. Introduccin................................................................................................................................50
3.4.2. JSP: Modelo 1.............................................................................................................................51
3.4.3. JSP: Modelo 2.............................................................................................................................52
3.4.4. Apache Struts..............................................................................................................................55
3.5. Ajax en Java EE..................................................................................................................................64
3.5.1. Introduccin................................................................................................................................64
3.5.2. Ajax y tecnologas en el lado del servidor Java EE.....................................................................67
4. Capa de negocio..........................................................................................................................................68
4.1. Introduccin........................................................................................................................................68
4.2. Tecnologas y estrategias....................................................................................................................69
4.2.1. Aproximacin POJO JavaBeans..............................................................................................69
4.2.2. Aproximacin EJB......................................................................................................................71
5. Capa de persistencia...................................................................................................................................77
5.1. Introduccin........................................................................................................................................77
5.2. Modelos clsicos de persistencia........................................................................................................77
5.2.1. Persistencia en las clases del modelo..........................................................................................78
5.2.2. Persistencia en clases auxiliares..................................................................................................78
5.3. Mecanismos y tecnologas de persistencia..........................................................................................81
5.3.1. Java Database Connectivity (JDBC)...........................................................................................81
5.3.2. Mapeo Objeto-Relacional. Java Persistence API........................................................................83
6. Comunicacin entre capas y aplicaciones...................................................................................................90
6.1. Introduccin........................................................................................................................................90
6.2. RMI EJBs........................................................................................................................................90
6.3. Servicios Web.....................................................................................................................................92
6.3.1. Introduccin................................................................................................................................93
6.3.2. Axis ............................................................................................................................................95
6.3.3. JAX-WS.....................................................................................................................................96
7. Bibliografa y referencias............................................................................................................................97
3
-
7/31/2019 AppWebJavaEE
4/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Objetivo del curso
Sentar las bases para el desarrollo de aplicaciones web multicapa con la tecnologa Java
Enterprise Edition, viendo qu componentes y servicios proporciona la plataforma en cada una de
las capas.
1. Arquitectura Java EE
1.1. La plataforma Java
La plataforma Java est conformada por un conjunto de productos y especificaciones
software de Oracle Corporation que componen un entorno para el desarrollo y despliegue de
aplicaciones software.
1.1.1. El lenguaje Java
Java es un lenguaje de programacin de propsito general, originalmente desarrollado por
James Gosling para la empresa Sun Microsystems y liberado en 1995 como el componente central
de la plataforma Java.
La sintaxis del lenguaje deriva de C y C++, pero dispone de un modelo de objetos ms
simple y elimina herramientas de bajo nivel, que suelen inducir a numerosos errores, como la
manipulacin directa de punteros o memoria.
La implementacin original y de referencia del compilador, la mquina virtual y las
bibliotecas de clases de Java han sido desarrolladas por Sun Microsystems desde su aparicin, y
4
-
7/31/2019 AppWebJavaEE
5/98
Desarrollo de aplicaciones web con Java Enterprise Edition
continuadas tras su adquisicin por parte de Oracle Corporation. Para ello, en 1998 se cre el Java
Community Process (JCP) como proceso formalizado que permite a las diferentes partes interesadas
involucrarse en la definicin de nuevas versiones y caractersticas de la plataforma Java. El proceso
de definicin est basado en el uso de los Java Specification Request (JSR), que son documentos
formales que describen las especificaciones y tecnologas propuestas para que sean aadidas a la
plataforma Java.
A nivel de licencias, se han liberado la gran mayora de las tecnologas Java bajo la
Licencia Pblica General de GNU (GNU GPL).
Los objetivos de diseo del lenguaje de programacin Java estn dirigidos por la naturaleza
de los entornos de trabajo en los que el software debe ser desplegado. En particular, el gran
crecimiento de Internet y la World-Wide Web, junto con el comercio electrnico, ha provocado la
necesidad de desarrollar aplicaciones seguras, robustas, con un alto rendimiento y con la capacidad
de ejecutarse en mltiples plataformas sobre redes distribuidas y heterogneas.
De esta manera, entre los principios de diseo del lenguaje Java podemos destacar:
Simple y orientado a objetos: las caractersticas del lenguaje lo hacen fcil de aprender,
permitiendo a los programadores comenzar a utilizarlo rpidamente. Adems es orientado a
objetos, para aprovecharse de las ms modernas metodologas de desarrollo software y para
permitir su uso en aplicaciones distribuidas de tipo cliente-servidor, cuyas necesidades
coinciden con los paradigmas de encapsulacin y el paso de mensajes tpicos del software
orientado a objetos.
Robusto y seguro: uno de los aspectos ms importantes es la alta fiabilidad del software,
para lo que se proporcionan comprobaciones en tiempo de compilacin as como en tiempo
de ejecucin. Se dispone de un modelo de gestin de memoria muy sencillo, en el cual el
programador es el que decide el momento en el que se crea un objeto, y por tanto se ocupa la
memoria, mientras que es el entorno de ejecucin, mediante el recolector de basura, el que
decide cuando la memoria debe ser liberada. Al estar dirigida a operar bajo entornos
distribuidos, la tecnologa Java dispone de una serie de caractersticas de seguridad tanto en
5
-
7/31/2019 AppWebJavaEE
6/98
Desarrollo de aplicaciones web con Java Enterprise Edition
el lenguaje como en el entorno de ejecucin que permite construir aplicaciones seguras
frente a intrusiones de cdigo malicioso.
Portable y arquitectnicamente neutral: al estar dirigido a un entorno eminentemente
heterogneo, es necesario que el software se acomode a diversos sistemas operativos,
plataformas y que sea capaz de interoperar con mltiples interfaces de programacin; para
ello, el compilador de java genera bytecode, que es un formato intermedio que permite
transportar cdigo eficientemente sobre mltiples plataformas hardware y software. Este
cdigo intermedio podr ser ejecutado en una plataforma especfica a travs de una mquina
virtual de Java o Java Virtual Machine (JVM), que interpreta y ejecuta las instrucciones
reflejadas en el bytecode segn la plataforma concreta, existiendo as diferentes mquinas
virtuales para las diversas arquitecturas.
Alto rendimiento: se dispone de diferentes mecanismos que permiten lograr este objetivo,
entre ellos destaca la posibilidad de ejecutar mltiples hilos (threads) simultneos, de
manera que cada uno de ellos puede realizar una tarea de forma paralela (descargar un
fichero, interaccionar con el usuario, etc.); adems de ste, en la interpretacin del cdigo no
es necesario volver a comprobar el entorno de ejecucin, el recolector de basura se ejecuta
en un hilo de baja prioridad, etc.
Interpretado y dinmico: como se coment anteriormente, Java utiliza una ejecucin basada
en la interpretacin de un cdigo intermedio (bytecode); esto conlleva algunos beneficios
asociados como una mejora en la fase de enlazado del programa, que tiene un carcter
dinmico, enlazando slo las clases que se necesitan.
A la vista de estos principios, un ciclo de desarrollo y ejecucin simple en Java implicara
escribir el cdigo fuente del programa en ficheros con extensin .java, compilarlos, obteniendo as
una serie de ficheros .class que contienen el bytecode o cdigo intermedio y ejecutarlos en una
instancia de una mquina virtual.
6
-
7/31/2019 AppWebJavaEE
7/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Como se dijo anteriormente, es posible implementar mquinas virtuales de Java para las
diferentes plataformas existentes, permitiendo as ejecutar el mismo bytecode sobre diferentes
sistemas operativos, y alcanzado as uno de los objetivos de Java, el write once, run anywhere, es
decir, se puede escribir un programa y ejecutarlo en cualquier dispositivo para el que se haya
implementado una mquina virtual.
Desafortunadamente, no todo son ventajas, y la interpretacin del cdigo intermedio
provoca un rendimiento en ejecucin inferior a los programas que se ejecutan a travs de cdigo
nativo. Para minimizar este impacto en el rendimiento se han introducido tcnicas como la
compilacin en tiempo de ejecucin o Just-in-time compilation (JIT), que convierte el cdigo
intermedio en cdigo nativo durante su ejecucin. Esta tcnica suele estar incluida en las ltimas
mquinas virtuales disponibles.
A nivel general, puede decirse que los programas escritos en Java y ejecutados con tcnicas
JIT son ms lentos que los generados con lenguajes que utilizan compilacin nativa, como C o C++,
de un orden similar a otros que tambin usan tcnicas JIT, como C# u otros de la plataforma .NET,
7
-
7/31/2019 AppWebJavaEE
8/98
Desarrollo de aplicaciones web con Java Enterprise Edition
y ms rpidos que los lenguajes que no utilizan compiladores nativos como PHP, Perl, Ruby o
Phyton.
1.1.2. Herramientas de desarrollo y ejecucin
Dos de los principales productos de la plataforma son el Java Development Kit (JDK) y el
Java Runtime Environment (JRE).
El JDK es la parte de la plataforma dirigida a los desarrolladores, por lo que incluye tanto el
propio lenguaje de programacin Java, como un conjunto de herramientas de desarrollo: el
intrprete (java), el compilador (javac), el empaquetador (jar), el depurador (jdb), el generador de
documentacin (javadoc), etc. Adems de todas estas herramientas, una distribucin del JDK
incluye el conjunto de componentes del JRE.
El JRE proporciona el entorno de ejecucin de aplicaciones Java, para lo cual cuenta con
una implementacin del conjunto de libreras estndar (Java API), y la mquina virtual de Java o
Java Virtual Machine (JVM), adems de otros componentes adicionales.
De forma anloga a otras plataformas de programacin, el conjunto de libreras estndar
proporciona un conjunto de funciones y servicios al programador para la realizacin de tareas
comunes: manejo de datos, seguridad, acceso a bases de datos, creacin de interfaces de usuario,
etc. Las clases se organizan en la API en paquetes, conteniendo cada paquete un conjunto de
interfaces, clases y excepciones. La definicin de la API est controlada por Oracle a travs del
programa Java Community Process.
Por su parte, la JVM, es el ente que permite la ejecucin del cdigo intermedio generado por
el compilador de Java, obteniendo as la independencia de la plataforma, que es uno de los
principales objetivos de esta tecnologa.
8
-
7/31/2019 AppWebJavaEE
9/98
Desarrollo de aplicaciones web con Java Enterprise Edition
A continuacin, se muestra un diagrama de la plataforma Java:
1.2. Ediciones
La plataforma Java est dividida actualmente en ediciones, estando cada una de ellas
dirigida a un entorno diferente de aplicaciones y contando con un conjunto de libreras estndar que
pueden variar en mayor o menor medida.
Java Card: es la edicin dirigida a la ejecucin de aplicaciones Java (applets) en tarjetas
inteligentes o 'smart cards' y otros dispositivos similares, siendo los principales objetivos de
la tecnologa la portabilidad y seguridad. Tiene su propia definicin de bytecode y de su
mquina virtual (Java Card Virtual Machine), as como un conjunto mnimo de libreras,
todo ello optimizado para el entorno al que va dirigido. Su uso es frecuente en tarjetas tipo
SIM.
9
-
7/31/2019 AppWebJavaEE
10/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Java Micro Edition (Java ME): diseada para su uso en dispositivos mviles como telfonos
o PDAs. Se caracteriza por disponer de un conjunto reducido de las libreras de clases de
Java que permiten el desarrollo de aplicaciones para estos dispositivos de recursos
reducidos. Actualmente se dispone de dos configuraciones, entendidas como un conjunto de
libreras bsicas y una serie de capacidades de la mquina virtual. La Conected Limited
Device Configuration (CLDC) para dispositivos pequeos y la configuracin Conected
Device Configuration (CDC) para dispositivos con unas capacidades superiores. La
primera de ellas es la utilizada como estndar de facto para el desarrollo de juegos para
mvil.
Java Standard Edition (Java SE): es la edicin central de la tecnologa, en la que se
fundamentan las dems, y que posibilita el desarrollo de aplicaciones de propsito general,
ejecutables en ordenadores personales, servidores y dispositivos similares, ya sea en forma
de applets, aplicaciones de escritorio o de consola. Define un conjunto de libreras que
conforman su API y que dan servicios de carcter general a las aplicaciones (uso de sistemas
de archivos, redes, interfaces grficas, etc.).
Java Enterprise Edition (Java EE): se trata de la edicin dirigida al desarrollo de
aplicaciones empresariales, multicapa y distribuidas. Para ello se basa en la API de laedicin estndar a la que aade un conjunto de libreras, tales como JDBC, RMI, e-mail,
JMS, web services, XML, etc; as como una serie de especificaciones para componentes de
la arquitectura Java EE, como Enterprise Java Beans, Connectors, servlets, portlets, Java
Server Pages, etc. Por ltimo, aparece el concepto de servidor de aplicaciones Java EE,
como una entidad software con capacidad de manejar las transacciones, la seguridad, la
escalabilidad, la concurrencia y la gestin de los componentes de la arquitectura que se
despliegan sobre l, permitiendo as que el desarrollador se concentre en la implementacin
de la lgica de negocio en lugar de la infraestructura o las tareas de integracin.
10
-
7/31/2019 AppWebJavaEE
11/98
Desarrollo de aplicaciones web con Java Enterprise Edition
JavaFX: es la edicin ms reciente, estando dirigida al desarrollo de aplicaciones del lado
cliente o RIA (rich Internet applications). Dispone de un SDK propio en el que se incluyen
herramientas para la compilacin y ejecucin, y una API con soporte para manipulacin de
contenidos multimedia, componentes de interfaz de usuario, etc.
1.3. Java Enterprise Edition
La edicin empresarial de Java o Java EE, est dirigida al desarrollo de aplicaciones
empresariales, multicapa y distribuidas. Proporciona a los desarrolladores un conjunto potente
componentes y servicios que les permite reducir el tiempo de desarrollo, la complejidad de las
aplicaciones y mejorar el rendimiento de dichas aplicaciones.
1.3.1. Modelo de aplicacin
11
-
7/31/2019 AppWebJavaEE
12/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Java EE propone un modelo de aplicacin que parte del lenguaje Java y del concepto de
mquina virtual que proporcionan la portabilidad y la seguridad.
El modelo est diseado para soportar aplicaciones que implementen los servicios
empresariales para clientes, empleados, proveedores, u otros que realicen peticiones o
contribuciones a la empresa, siendo por tanto dichas aplicaciones inherentemente complejas en su
lgica, con necesidad de acceder a mltiples fuentes de datos y de ser distribuidas a una gran
variedad de clientes. Para responder a estos servicios y requerimientos, Java EE define una
arquitectura multicapa que proporciona la escalabilidad, accesibilidad y gestin que este tipo de
aplicaciones empresariales necesita.
Este modelo divide el trabajo para implementar los servicios empresariales requeridos en
dos partes: la lgica de negocio y presentacin, que deber implementar el desarrollador y los
servicios estndares del sistema que son proporcionados por la propia plataforma, aportando as al
desarrollador soluciones para los problemas de nivel de sistema que implica un servicio
implementado bajo una arquitectura multicapa.
En este modelo multicapa y distribuido, la lgica de la aplicacin est dividida en
componentes, que realizan diferentes funciones y que pueden estar desplegados en diferentes
mquinas dependiendo de la capa a la que el componente pertenezca, es decir, la plataforma Java
EE define una arquitectura con una separacin de capas, cada una de ellas con un conjunto de
responsabilidades y unos componentes asociados puestos a disposicin del desarrollador para
implementar las funcionalidades de cada capa especfica.
12
-
7/31/2019 AppWebJavaEE
13/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Un componente Java EE es una unidad funcional de software autocontenida, que se
ensambla dentro de una aplicacin con sus clases y ficheros asociados. La especificacin de Java
EE define los siguientes componentes:
Aplicaciones cliente y applets que se ejecutan en el cliente, perteneciendo as a la capa
cliente.
Java Servlet, JavaServer Faces y JavaServer Pages (JSP) son componentes web que se
ejecutan en el servidor (capa web).
Enterprise JavaBeans (EJB) son componentes de la capa de negocio que se ejecutan en el
servidor.
Los componentes Java EE estn escritos en lenguaje Java y se compilan de la misma manera
que cualquier programa del lenguaje. La diferencia entre las clases Java estndares y los
componentes radica en que estos ltimos deben cumplir su correspondiente especificacin, lo cual
garantiza su correcta ejecucin y gestin en los servidores Java EE.
13
-
7/31/2019 AppWebJavaEE
14/98
Desarrollo de aplicaciones web con Java Enterprise Edition
1.3.2. Capas en la arquitectura Java EE
El modelo de aplicacin de la plataforma Java EE define una arquitectura multicapa. A
continuacin se exponen las responsabilidades y componentes ms importantes asociados a cada
capa.
(i) Capa cliente.
En la capa cliente estn los componentes que interactan directamente con el usuario,
permitindole introducir los datos y enviar peticiones. Proporcionan la interfaz grfica de
presentacin al usuario y tambin pueden incluir mecanismos de validacin de los datos
introducidos por el usuario mediante lenguajes de script. Existen dos tipos de componentes:
Clientes web: consisten en dos partes diferenciadas, las pginas web dinmicas que
contienen diferentes tipos de lenguaje de marcado y que se generan a travs de los
componentes web que se ejecutan en la capa web, y el navegador web, que renderiza laspginas recibidas del servidor. A este tipo de clientes se le suele denominar 'clientes ligeros',
ya que la carga de operacin se realiza en el servidor, mientras que el cliente se limita a
presentar los contenidos. En ocasiones, una pgina web recibida de la capa web puede
incluir un applet, que es una pequea aplicacin cliente escrita en el lenguaje de
programacin Java y que se ejecuta en la mquina virtual del cliente.
Aplicaciones cliente: se denomina as a las aplicaciones que se ejecutan en la mquina
cliente y que permiten disponer de una interfaz ms rica que la que proporcionan los
lenguajes de marcado. Adems, estas aplicaciones tienen la posibilidad de acceder
directamente a la capa de negocio y pueden implicar procesamiento de datos, por tanto se les
suele denominar de tipo 'cliente pesado', estando normalmente basadas en la plataforma Java
SE.
14
-
7/31/2019 AppWebJavaEE
15/98
-
7/31/2019 AppWebJavaEE
16/98
Desarrollo de aplicaciones web con Java Enterprise Edition
JavaServer Faces: es una tecnologa que proporciona un framework de componentes de
interfaz de usuario a las aplicaciones web.
Al igual que en la capa de cliente, se pueden incluir componentes JavaBeans para gestionar
la entrada del usuario y enviar esa entrada a los componentes que se ejecutan en la capa de negocio
para su procesamiento.
(iii) Capa de negocio
Se ocupa de implementar la lgica de negocio necesaria para dar respuesta a los requisitos
del dominio de la aplicacin, lo que incluye recibir los datos de la capa cliente y la capa web y
procesarlos, emitiendo as los resultados adecuados, y gestionando, si es necesario, la persistencia
de la informacin, comunicndose con la capa de sistemas de informacin empresarial.
16
-
7/31/2019 AppWebJavaEE
17/98
Desarrollo de aplicaciones web con Java Enterprise Edition
(iv) Capa de sistemas de informacin empresarial.
Esta capa permite la conexin de la arquitectura Java EE con los recursos empresariales
como sistemas ERP, sistemas transaccionales, sistemas de base de datos, u otros sistemas de
informacin heredados, con los que la aplicacin necesita comunicarse, por ejemplo para
proporcionar conectividad con bases de datos.
1.3.3. Contenedores Java EE
En las aplicaciones multicapa de cliente ligero clsicas se requieren muchas lneas de cdigo
para la gestin de las transacciones, del estado, de la ejecucin multihilo, del pool de recursos y de
otros detalles de bajo nivel. Java EE proporciona una serie de servicios subyacentes en forma de
contenedor para cada tipo de componente, de manera que el desarrollador puede utilizarlos y
centrarse en la resolucin del problema de negocio concreto.
17
-
7/31/2019 AppWebJavaEE
18/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Un contenedor es la interfaz entre un componente y la funcionalidad de bajo nivel especfica
de la plataforma que soporta el componente. Antes de poder ejecutar un componente deber ser
ensamblado en un mdulo Java EE y desplegado en el contenedor correspondiente.
El proceso de ensamblado implica especificar una serie de parmetros del contenedor para
los componentes de la aplicacin Java y para la aplicacin en s misma, de manera que dichos
parmetros permiten configurar el soporte subyacente aportado por el servidor Java EE, incluyendo
servicios como la seguridad, la gestin de las transacciones, el servicio de bsqueda Java Naming
and Directory Interface (JNDI), la conectividad remota, etc. Es decir, en funcin de los parmetros
especificados al ensamblar la aplicacin, podemos hacer que sta vare su comportamiento sinnecesidad de cambiar el cdigo de los componentes. Aparte de estos servicios configurables, los
contenedores tambin proporcionan servicios no configurables como la gestin del ciclo de vida de
los EJBs y Servlets, la gestin del pool de conexiones a base de datos, la persistencia de datos y el
acceso a la API de la plataforma.
La plataforma Java EE define cinco tipos de contenedores:
Contenedor de applets: gestiona la ejecucin de los applets. Consiste en un navegador web y
un plug-in de Java ejecutndose juntos en el cliente.
Contenedor de aplicacin cliente: gestiona la ejecucin de los componentes de la aplicacin
cliente. Tanto el contenedor como la aplicacin se ejecutan en cliente.
Contenedor web: gestiona la ejecucin de las pginas JSP y los servlets de las aplicaciones
Java EE, controlando el ciclo de vida de los servlets y el mapeo entre una URL y un servlet
determinado, garantizando que la peticin dispone de los derechos de acceso adecuados.
Tambin permiten gestionar algunos componentes EJB para aplicaciones Java EE. Los
componentes web y su contenedor se ejecutan en el servidor Java EE.
Contenedor de Enterprise Java Beans (EJB): gestiona la ejecucin de los EJBs en las
aplicaciones Java EE. Al igual que los componentes web, se ejecutan en el servidor Java EE.
Servidor Java EE: es la parte de ejecucin de un producto Java EE, proporcionando
contenedores de EJB y web.
18
-
7/31/2019 AppWebJavaEE
19/98
-
7/31/2019 AppWebJavaEE
20/98
Desarrollo de aplicaciones web con Java Enterprise Edition
tambin se pueden encontrar servidores web que nicamente disponen del contenedor web, como
por ejemplo Apache Tomcat, que es un contenedor web que implementa las especificaciones de
Java Servlets y JSP para generar un servidor web HTTP para Java.
1.3.4. Empaquetando aplicaciones
Normalmente, el desarrollador no maneja directamente el servidor que se va a utilizar en
produccin, por lo que, una vez que se disponga de una versin de la aplicacin estable, sta debera
publicarse en el servidor correspondiente. Para ello, Java EE dispone de los mecanismos deempaquetamiento y despliegue, que nos permiten garantizar una correcta publicacin en los
servidores de produccin.
Una aplicacin Java EE se entrega a travs de un Enterprise Archive (EAR), que es un Java
Archive (JAR) estndar con la extensin .ear.
Un fichero JAR supone la agregacin de muchos ficheros en uno. Se utiliza para distribuir
aplicaciones Java o libreras, incluyendo las clases, los metadatos y los recursos asociados. Para
crear el archivo JAR se utiliza el comando jar, incluido en el JDK, que genera un archivo que usa el
formato ZIP.
Un fichero EAR contiene mdulos Java EE y descriptores de despliegue.
Un descriptor de despliegue es un documento XML con extensin .xml que describe los
parmetros de despliegue de una aplicacin, mdulo o componente. La informacin del descriptor
es declarativa, pudiendo ser cambiada sin necesidad de modificar el cdigo fuente. En tiempo de
ejecucin, el servidor Java EE lee el descriptor de despliegue y acta sobre la aplicacin, mdulo o
componente en consecuencia, por tanto permite variar el comportamiento de la aplicacin sin variar
su cdigo.
Se pueden diferenciar dos tipos de descriptores de despliegue, los que se definen a travs de
la especificacin Java EE, que permiten la configuracin de cualquier implementacin que cumpla
20
-
7/31/2019 AppWebJavaEE
21/98
Desarrollo de aplicaciones web con Java Enterprise Edition
con dicha especificacin; y los dependientes del del entorno de ejecucin, que permiten configurar
parmetros especficos de la implementacin Java EE que da el servidor de aplicaciones utilizado.
Por ejemplo puede permitir configurar el 'context root' de la aplicacin, el mapeo entre los nombres
portables de los recursos de la aplicacin y los recursos del servidor, as como otros parmetros
especficos del servidor de aplicaciones como las directivas de cacheo. Los descriptores se incluyen
en el directorio META-INF del empaquetado.
Un mdulo Java EE consiste en uno o ms componentes Java EE para el mismo tipo de
contenedor y un descriptor de despliegue asociado. La especificacin define cuatro tipos de
mdulos:
Mdulos EJB, que contienen ficheros de clases (.class) de EJBs y el descriptor
correspondiente, en el que se pueden incluir aspectos como los atributos de seguridad y
transaccin para los beans. Se empaquetan en ficheros JAR con la extensin .jar.
Mdulos web, que contienen ficheros de clases de Servlets, ficheros JSP, otras clases de
soporte, ficheros HTML, otros recursos estticos, y un descriptor de despliegue de
aplicacin web. Los mdulos web se empaquetan con la extensin .war (Web ARchive).
Mdulos de aplicaciones cliente, que contienen ficheros de clases y un descriptor de
despliegue de la aplicacin cliente. Se empaquetan con la extensin .jar.
Mdulos adaptadores de recursos, que contienen todas las interfaces, clases, libreras y
documentacin, junto con el descriptor de despliegue del adaptador del recurso,
implementando as la arquitectura de conector para un EIS particular. Se empaquetan
como ficheros JAR con la extensin .rar (resource adapter archive).
21
-
7/31/2019 AppWebJavaEE
22/98
Desarrollo de aplicaciones web con Java Enterprise Edition
1.3.5. Java EE API
El ltimo componente clave de la plataforma Java EE es la API, ya que, como se coment
anteriormente, incluye todas las bibliotecas de Java SE ms algunas adicionales que permiten
proporcionar los servicios requeridos por las aplicaciones Java EE.
Veamos una ilustracin con las APIs ms importantes y su relacin con los contenedores:
2. Entorno de desarrollo
El entorno de desarrollo de aplicaciones Java EE tiene dos elementos principales, una
herramienta IDE (Integration Development Environment) para el desarrollo y un servidor Java EE
22
-
7/31/2019 AppWebJavaEE
23/98
Desarrollo de aplicaciones web con Java Enterprise Edition
para el despliegue y ejecucin.
Bsicamente, un IDE es una aplicacin software que proporciona utilidades a los
desarrolladores para la construccin de aplicaciones, tales como, editores de cdigo fuente,
compiladores, depuradores, herramientas de construccin automticas (build), diagramas de clases,
etc. Adems suelen incluir la posibilidad de aumentar sus prestaciones a travs de plug-ins u otros
mecanismos de extensin.
Para la plataforma Java EE, los IDEs ms conocidos son NetBeans y Eclipse, siendo este
ltimo es el que se utilizar en el curso en su versin 'Eclipse IDE for Java EE Developers', que se
puede descargar desdehttp://www.eclipse.org/downloads/
Eclipse es un IDE escrito principalmente en Java, lo que implica que para ejecutarse
necesitar tener acceso a un JRE, esto permite que la herramienta sea independiente de la
plataforma en la que se ejecuta.
Al ser una herramienta de desarrollo, necesita proveer de una serie de utilidades como
compilador, depurador, etc. lo cual podra hacerse enlazando con el JDK oficial. Sin embargo,
Eclipse incluye el Java Development Tools (JDT) que proporciona una serie de utilidades entre las
que destaca:
Un compilador incremental de Java, que implementa la especificacin del lenguaje Java. El
hecho de ser incremental permite que una vez realizada la primera construccin en las
siguientes slo se reconstruye la parte que ha cambiado. El compilador clasifica los
problemas encontrados en errores y advertencias. La existencia de una advertencia no afectaa la ejecucin y depuracin del programa. Los errores de compilacin respecto a la
especificacin del lenguaje Java siempre se reportan como errores, mientras que para el
resto de problemas el desarrollador puede especificar si desea que se reporten como
advertencias, errores o que directamente se ignoren.
Un asistente de cdigo.
Una infraestructura de bsqueda indexada que se usa en la bsqueda, asistencia de cdigo y
refactorizacin.
23
http://www.eclipse.org/downloads/http://www.eclipse.org/downloads/http://www.eclipse.org/downloads/ -
7/31/2019 AppWebJavaEE
24/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Formateador de cdigo fuente.
El compilador de Java de Eclipse cumple con las especificaciones de los distintos JDK
disponibles. El desarrollador deber seleccionar para cada aplicacin el nivel de conformidad desea
utilizar. Esto provocar que las clases generadas por el compilador debern ser ejecutadas por un
JRE del mismo o superior nivel.
Si se desea compilar en Eclipse utilizando el compilador oficial, se podra hacer a travs de
la herramienta Ant.
Un servidor Java EE es aquel que es compatible con alguna de las especificaciones de Java
EE. En este curso se va a utilizar el Apache Tomcat 7.0.x como servidor web Java EE y JBoss
Application Server 7.1.x como servidor de aplicaciones Java EE.
24
-
7/31/2019 AppWebJavaEE
25/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Apache Tomcat es un servidor web HTTP de cdigo abierto que implementa las
especificaciones de Java Servlet y JavaServer Pages (JSP), por tanto se le puede considerar un
contenedor web Java EE. En su versin 7.0.x soporta las especificaciones Servlet 3.0, JSP 2.2 y EL
2.2, por tanto es un contenedor web Java EE 6.
JBoss Aplication Server o JBoss AS es un servidor de aplicaciones Java EE de tipo open
source desarrollado por JBoss, que es una divisin de Red Hat. Implementa las especificaciones y
servicios de un servidor de aplicaciones Java EE completo: EJB, JPA, JAAS, JMS, JNDI, JTA, etc.,
disponiendo de JBossWeb como contenedor web, estando ste basado en Apache Tomcat. JBoss AS
en su versin 7.1.x ha sido certificado como implementacin completa de Java EE 6.
3. Capa Web
3.1. Aplicaciones web en Java EE
3.1.1. Introduccin
En la arquitectura Java EE, la capa web se encarga de recibir y procesar las peticiones que
provienen de la capa cliente, generando contenido dinmico que puede requerir de la interaccin
con la capa de negocio, interconectando, por tanto, la capa cliente con la lgica de la aplicacin.
Tpicamente, el cliente enva una peticin HTTP al servidor web, que en el caso de la
plataforma Java EE dispondr de un contenedor web. El servidor web se encarga de convertir la
peticin a un objeto HTTPServletRequest, que contendr toda la informacin de la peticin, y
pasarlo al componente web responsable de tratarla, por ejemplo un servlet o una pgina JSP. El
componente web puede generar un objeto HTTPServletResponse o pasarle la peticin a otro
componente web. En cualquier caso se generar dicho objeto, que ser convertido por el servidor
25
-
7/31/2019 AppWebJavaEE
26/98
Desarrollo de aplicaciones web con Java Enterprise Edition
web en la respuesta HTTP que se devuelve al cliente.
Entre los componentes web nos encontramos a los Servlets y las pginas JSP. Los Servlets
son clases del lenguaje de programacin Java que dinmicamente procesan peticiones y generan
respuestas; por su parte, las pginas JSP son documentos basados en texto que se ejecutan comoServlets pero con una aproximacin ms natural para crear contenido esttico. Aunque servlets y
pginas JSP pueden utilizarse de forma intercambiable, cada tipo de componente tiene sus ventajas.
Los Servlets se acomodan mejor a las aplicaciones orientadas a servicios, por ejemplo los puntos de
acceso o 'endpoints' de los servicios web se pueden implementar como servlets, y a las funciones de
control de una aplicacin orientada a la presentacin. Los JSP son ms adecuados para la
generacin de contenido basado en lenguajes de marcado como HTML o XML.
La ltima tecnologa de componentes web incluida en la especificacin de Java EE son los
JavaServer Faces, cuyo propsito es el de construir aplicaciones altamente interactivas y orientadas
a la presentacin, para lo que generan contenido basado en lenguajes de marcado como XHTML.
Los componentes web son soportados por los servicios del contenedor web, como gestin de
las peticiones, concurrencia, seguridad, y gestin del ciclo de vida.
26
-
7/31/2019 AppWebJavaEE
27/98
-
7/31/2019 AppWebJavaEE
28/98
Desarrollo de aplicaciones web con Java Enterprise Edition
ficheros:
Clases de utilidad que se ejecutan en server-side: para acceso a base de datos, conformes
a la arquitectura de componentes JavaBeans, etc.
Clases de client-side: applets y otras clases de utilidad.
Un mdulo web tiene una estructura especfica. El directorio raz se denomina 'document
root', en l es donde se sitan las pginas JSP, las clases de client-side, los recursos web estticos,
etc.
El directorio raz contiene un subdirectorio llamado web-inf, en el se pueden encontrar los
siguientes ficheros y directorios:
classes: es el directorio que contiene las clases de server-side: servlets, clases de utilidad y
JavaBeans.
tags: un directorio que contiene ficheros de tag, que son la implementacin de las libreras
de tags.
lib: el directorio que contiene los archivos JAR con las libreras invocadas desde las clases
de server-side.
Descriptores de despliegue, como el web.xml, que es el descriptor de despliegue de la
aplicacin web, u otros descriptores propios de tecnologas o servidores.
A continuacin se muestra una ilustracin con la estructura de un mdulo web:
28
-
7/31/2019 AppWebJavaEE
29/98
-
7/31/2019 AppWebJavaEE
30/98
Desarrollo de aplicaciones web con Java Enterprise Edition
indicar que componente web debe manejar la peticin.
Declarar los ficheros de bienvenida: son los ficheros a utilizar en caso de que una peticin
no mapee directamente a un componente web. Si no se especifica nada, se utilizar el
index.xxx como pgina de bienvenida por defecto.
Configurar parmetros de inicializacin: se pueden configurar parmetros a compartir entre
todos los componentes web a travs de un objeto que representa el contexto de la aplicacin.
Tambin se pueden indicar parmetros para un componente web especfico.
Mapear errores a pginas de error: Se puede especificar un mapeo entre el cdigo de estado
devuelto por una respuesta HTTP (p.ej:error 500), o una excepcin del lenguaje java a
cualquier componente web. Las pginas JSP tambin permiten especificar una pgina en
caso de error. Si se ha definido tanto en el web.xml como en la jsp, esta ltima tiene
precedencia.
Declarar referencias a recursos: si un componente web usa objetos como enterprise beans,
data sources o web services, se pueden utilizar las anotaciones de Java EE para inyectar esos
recursos en la aplicacin.
Ver ejemplo: hola
3.2. Tecnologa Java Servlets
3.2.1. Qu es un Servlet?
La tecnologa Java Servlets supone la respuesta de la plataforma Java a la necesidad de
generar contenido dinmico en el servidor ante una peticin de un cliente.
Un Servlet es una clase del lenguaje de programacin Java que extiende las capacidades de
los servidores que hospedan aplicaciones accedidas por medio del modelo de programacin
30
-
7/31/2019 AppWebJavaEE
31/98
Desarrollo de aplicaciones web con Java Enterprise Edition
peticin-respuesta. Aunque los servlets pueden responder a cualquier tipo de respuesta,
normalmente se usan para las aplicaciones ubicadas en servidores web. Para estas aplicaciones la
tecnologa Java Servlet define una clases servlets especificas para HTTP.
Los paquetes javax.servlet y javax.servlet.http proporcionan las interfaces y clases para
escribir servlets. Todos los servlets deben implementar la interfaz Servlet que define los mtodos
del ciclo de vida. Para implementar servicios genricos se puede usar o extender la clase
GenericServlet, mientras que para servicios especficos de tipo HTTP se puede utilizar la clase
HttpServletque proporciona mtodos como doGeto doPostpara manejar las peticiones HTTP.
3.2.2. Ciclo de vida de un Servlet
El ciclo de vida de un servlet es controlado por el contenedor, de manera que cuando una
peticin se mapea a un servlet, el contenedor realiza los siguientes pasos:
1. Si no existe una instancia del servlet, entonces carga la clase del servlet, crea una instancia e
inicializa el servlet llamando al mtodo init.
2. Invoca el mtodoservice pasndole los objetos de peticin y respuesta.
Si el contenedor necesita eliminar el servlet lo finalizar invocando al mtodo destroy.
3.2.3. Inicializacin de un Servlet
Despus de que el contenedor web cargue y cree la instancia de la clase del servlet, y antes
de que comience a atender peticiones, es necesario inicializarlo. En la inicializacin se suelen leer
datos de configuracin persistentes, se inicializan recursos, o realizan actividades iniciales; para ello
se puede sobreescribir el mtodo initde la interfaz Servlet, sabiendo que este mtodo ser invocado
en la inicializacin.
31
-
7/31/2019 AppWebJavaEE
32/98
Desarrollo de aplicaciones web con Java Enterprise Edition
3.2.4. Escribiendo mtodos de servicio
Los servicios proporcionados por un Servlet se implementan a travs del mtodo service de
la clase GenericServlet o los mtodo tipo do (doGet, doPost, etc.) de la clase HttpServlet, u otras
especficas de otros protocolos.
El patrn general de un mtodo de servicio es extraer la informacin de la peticin, acceder
a los recursos y lgica externa y componer la respuesta en base a la informacin obtenida.
(i) Obteniendo informacin de las peticiones
Una peticin contiene datos pasados entre un cliente y el servlet. Todas las peticiones
implementan la interfaz ServletRequest, en particular, las peticiones HTTP implementan la interfaz
HTTPServletRequestque extiende a la anterior. Estas interfaces definen mtodos para acceder a la
siguiente informacin:
Parmetros: se usan para transmitir informacin entre clientes y servlets.
Atributos de tipo objeto: se utilizan para pasar informacin entre el contenedor de servlets y
un servlet o entre servlets que colaboran.
Informacin sobre el protocolo utilizado para comunicar la peticin y sobre el cliente y
servidor involucrados en la peticin.
Informacin sobre localizacin.
Tambin se puede obtener el flujo de entrada (input stream) de la peticin y obtener los
datos manualmente.
En una peticin HTTP se pueden obtener las cabeceras, la consulta realizada, etc.
32
-
7/31/2019 AppWebJavaEE
33/98
-
7/31/2019 AppWebJavaEE
34/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Sesin javax.servlet.http.HttpSession Componentes web manejando una peticin que pertenece a la
sesin
Peticin Subtipo de
javax.servlet.ServletRequest
Componentes web manejando la peticin
Pgina javax.servlet.jsp.JspContext Pgina JSP que crea el objeto
Como cualquier otro objeto o recurso compartido es necesario controlar el acceso a estos
objetos, ms an al encontrarnos en un entorno multihilo, ya que, normalmente, un contenedor web
crea un hilo para manejar cada peticin. Si se quiere garantizar que cada instancia de un Servlet
maneja una nica peticin cada vez, este Servlet debera implementar la interfaz
SingleThreadModel, asegurando as un acceso exclusivo a los miembros de la instancia. Esta
solucin puede tener un aspecto negativo en el rendimiento, ya que las peticiones que gestionase
una misma instancia se procesaran secuencialmente; adems la especificacin de Sevlet 2.4 marca
esta interfaz como 'deprecated'.
Si realmente se necesita gestionar el acceso concurrente a los recursos, sean o no miembros
de un Servlet, lo mejor es utilizar las tcnicas generales de sincronizacin del lenguaje Java, o la
gestin de transacciones para datos alojados en sistemas gestores de bases de datos.
3.2.6. Filtrando peticiones y respuestas
Un filtro es un objeto que puede transformar la cabecera y el contenido de una peticin o
una respuesta. Los filtros difieren de los componentes web en que stos normalmente no crear unarespuesta, sino que proporcionan una funcionalidad que se puede aadir a cualquier tipo de recurso
web. De esta manera, un filtro no debera tener dependencias de ningn recurso web para el cual
est actuando como filtro. Las principales tareas que puede realizar un filtro son:
Consultar la peticin y actuar en consecuencia.
Bloquear el par peticin-respuesta.
Modificar las cabeceras y datos de la peticin y/o la respuesta. Para ello proporciona una
34
-
7/31/2019 AppWebJavaEE
35/98
Desarrollo de aplicaciones web con Java Enterprise Edition
versin personalizada de la peticin o la respuesta.
Interactuar con recursos externos.
Las aplicaciones de los filtros incluyen: autenticacin, logging, conversin de imgenes,
compresin de datos, encriptacin, transformacin de XML, etc.
Se puede configurar un recurso web para ser filtrado por una cadena de cero, uno o ms
filtros en un orden especfico. Esta cadena se especifica cuando la aplicacin se despliega y se
instancia cuando el contenedor carga el componente.
Las tareas involucradas para el uso de filtros son:
Programar el filtro: un filtro es una clase que implementa la interfaz Filter, cuyo mtodo
principal es doFilteren el que se deben ejecutar las tareas del filtro.
Programar la peticin o respuesta personalizada: existen muchas formas de modificar una
peticin o una respuesta, por ejemplo aadiendo atributos a la peticin o insertando datos enla respuesta. Para modificar los flujos de entrada o salida, se suele utilizar un objeto tipo
'wrapper' o envoltorio siguiendo el patrn 'Wrapper' o el 'Decorator'.
Especificar la cadena de filtros para cada recurso web: un contenedor web utiliza el mapeo
de filtros para decidir qu filtros aplicar a cada recurso web, para lo que puede utilizar un
nombre o un patrn URL. Los filtros se invocan en el orden en el que el mapeo aparece en la
lista de mapeos del WAR, dentro del descriptor del despliegue. Adems, es necesario
especificar cmo se aplica a las peticiones: slo cuando viene de una peticin directa, slo
cuando proviene de un 'forward', slo cuando se utiliza un 'include', o slo cuando se est
utilizando un mecanismo de error, pudiendo indicarse varios tipos de aplicacin al mismo
filtro.
Ver ejemplo: holaFiltros
35
-
7/31/2019 AppWebJavaEE
36/98
Desarrollo de aplicaciones web con Java Enterprise Edition
3.2.7. Invocando otros recursos web
Un componente web puede invocar otros recursos web de dos formas: directa e
indirectamente. Un componente web invoca a otro indirectamente cuando incluye su URL dentro de
la respuesta devuelta al cliente.
La invocacin directa se produce mientras que el componente web se est ejecutando,
existiendo dos posibilidades, que el componente web incluya el contenido del otro recurso, o que le
transmita el flujo e informacin de la peticin.
Para invocar a otro recurso disponible en el servidor primero se debe obtener un objeto
RequestDispatcher, ya sea de la peticin o del contexto web. Dependiendo de donde se haya
obtenido ser necesario indicar el camino de acceso al recurso de forma relativa (si se obtiene de la
peticin) o de forma absoluta (si se obtiene del contexto web).
(i) Incluyendo otros recursos en la respuesta
Habitualmente es til incluir otro recurso web en la respuesta, por ejemplo partes estticas a
incluir como un anuncio, informacin de copyright, etc. Para ello es necesario invocar al mtodo
include (request, response) del objetoRequestDispatcher.
Si el recurso es un componente web, el efecto de la inclusin es enviar la peticin al
componente y ejecutarlo, permitiendo que escriba informacin en el cuerpo de la respuesta, pero no
que cambie informacin referente a las cabeceras.
36
-
7/31/2019 AppWebJavaEE
37/98
-
7/31/2019 AppWebJavaEE
38/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Una vez que se dispone de la sesin, se le pueden asociar atributos de tipo objeto por
nombre, de manera que se harn accesibles a todos los componentes web que accedan a esa sesin,
ya sea en la misma peticin o en peticiones sucesivas dentro de la misma sesin.
Debido a que no hay manera de que un cliente indique por HTTP que no necesita ms la
sesin, cada sesin tendr un tiempo de vida asociado (timeout) que puede ser accedido y
configurado en el propio objeto o tambin a travs del descriptor de despliegue para indicar un
tiempo por defecto. Tambin se dispone de un mtodo invalidate que permite terminar la sesin
liberando cualquier dato asociado.
Un contenedor web puede utilizar diferentes mecanismos para asociar una sesin con un
usuario. Todos ellos se basan en pasar un identificador entre el cliente y el servidor. Este
identificador puede estar mantenido en el cliente como cookie o puede ser incluido por el
componente web en cada URL que se devuelve al cliente (reescritura de URL).
Ver ejemplo: holaSesion
3.2.9. Finalizando un Servlet
Cuando un contenedor de servlet determina que un servlet debe ser eliminado (por ejemplo
cuando el contenedor requiere memoria o se est apagando), el contenedor invoca el mtodo
destroy de la interfaz Servlet. En ese mtodo el programador deber liberar los recursos asociados al
servlet y dar persistencia a cualquier dato que se requiera.
En principio, la invocacin a destroy debera hacerse cuando todas las peticiones de servicio
se hayan completado, pero podra haber circunstancias en las que esto podra no cumplirse (por
ejemplo, por requerir un tiempo superior al esperado o 'de gracia'), en ese caso es necesario
38
-
7/31/2019 AppWebJavaEE
39/98
Desarrollo de aplicaciones web con Java Enterprise Edition
asegurarse que todos los hilos que todava estn manejando peticiones se completen, disponindose
de diferentes mecanismos para asegurarlo:
Mantener un registro de los hilos que estn ejecutando el mtodoservice en cada momento.
Proporcionar un shutdown limpio, para lo que se deber notificar a los mtodos de larga
duracin el shutdown y esperar a que terminen.
Tener un pool de mtodos de larga duracin, que pregunten por el shutdown y si es
necesario paren y terminen.
3.3. Tecnologa JavaServer Pages
La tecnologa JavaServer Pages (JSP) permite crear contenido web, tanto con componentes
estticos como dinmicos, de una manera sencilla. Para ello, esta tecnologa pone a disposicin del
desarrollador todas las capacidades de la tecnologa Java Servlet pero proporcionando una
aproximacin ms natural para crear el contenido esttico.
Las principales caractersticas de esta tecnologa son:
Un lenguaje para desarrollar pginas JSP, que son documentos de texto que describen cmo
procesar una peticin y construir una respuesta.
Un lenguaje de expresiones para acceder a objetos del lado del servidor.
Mecanismos para definir extensiones al lenguaje JSP.
3.3.1. Qu es una pgina JSP?
Una pgina JSP es un documento que contiene dos tipos de texto: datos estticos, que
pueden ser expresados en cualquier formato basado en texto (HTML, SVG, WML y XML), y
elementos JSP que permiten construir el contenido dinmico.
39
-
7/31/2019 AppWebJavaEE
40/98
Desarrollo de aplicaciones web con Java Enterprise Edition
La extensin recomendada para un fichero de una pgina JSP es .jsp. La pgina puede estar
compuesta de un fichero que incluya otros ficheros que pueden contener una pgina JSP completa o
un fragmento de una pgina JSP. La extensin recomendada para un fichero de un fragmento es
.jspf.
3.3.2. Ciclo de vida de una pgina JSP
Una pgina JSP atiende peticiones como un servlet, por tanto, el ciclo de vida y muchas de
las capacidades estn determinadas por la tecnologa Java Servlet.
Cuando una peticin se mapea a una pgina JSP, el contenedor web comprueba si el servlet
de la pgina JSP est obsoleto respecto a la pgina JSP. En caso afirmativo, el contenedor traduce la
pgina JSP a una clase Servlet y compila la clase. Por tanto, una de las ventajas de las pginas JSP
sobre los servlets es que, durante el proceso de desarrollo, el proceso de construccin se realizaautomticamente.
Durante la fase de traduccin, cada tipo de dato de la pgina JSP se trata de forma diferente.
Los datos estticos se traducen en cdigo que permite incluir los datos en el flujo de respuesta,
mientras que los elementos JSP se tratan de la siguiente manera:
Las directivas se utilizan para controlar como el contenedor web traduce y ejecuta la pgina
JSP.
Los elementos de scripting se insertan en la clase servlet de la pgina JSP.
Si se utiliza el lenguaje de expresiones se generan los parmetros para llamar al evaluador
de expresiones JSP.
Los elementos tipo jsp:[set|get]Property se convierten en llamadas a mtodos de los
componentes JavaBeans.
40
-
7/31/2019 AppWebJavaEE
41/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Los elementos jsp:[include|forward] se convierten en invocaciones a la API de Java
Servlet.
El elementojsp:plugin se convierte en lenguaje de marcado especfico del navegador para laactivacin de un applet.
Las etiquetas personalizadas se convierten en llamadas al manejador de etiquetas que
implemente cada etiqueta.
Las fases de traduccin y compilacin pueden producir errores que se observan slo cuando
la pgina es solicitada la primera vez, en este caso, el servidor devolver una JasperException y un
mensaje de la pgina JSP y la lnea en la que ocurri el error.
Una vez que la pgina ha sido traducida y compilada, el servlet generado sigue el ciclo de
vida normal de esta tecnologa:
1. Si no existe una instancia del servlet de la pgina JSP, el contenedor carga la clase, crea una
instancia y la inicializa llamando al mtodo jspInit.
2. Se invoca el mtodo _jspService, al que se le pasan los objetos de peticin y respuesta.
Se pueden controlar diferentes parmetros en la ejecucin de una pgina JSP utilizando las
directivas de pgina, como las de control del buffer de salida o el manejo de los errores. Este control
de errores tiene precedencia sobre el indicado en el descriptor de despliegue de la aplicacin y
permite indicar una pgina de error a la que redirigir en caso de ocurra una excepcin durante la
ejecucin.
En las pginas utilizadas como pginas de error es habitual incluir la directiva: . Que hace disponible un objeto de tipo javax.servlet.jsp.ErrorData a la
pgina de manera que se pueda obtener y mostrar informacin sobre el error ocurrido.
41
-
7/31/2019 AppWebJavaEE
42/98
Desarrollo de aplicaciones web con Java Enterprise Edition
3.3.3. Creando contenido esttico
Crear contenido esttico en una pgina JSP es tan simple como escribirlo en una pgina que
consistiese nicamente en ese tipo de contenido. Este contenido esttico puede ser expresado en
cualquier formato de texto: HTML, WML y XML. Al principio de la pgina se incluye una
directiva con el atributo contentType para indicar al navegador el tipo de contenido esttico que
debe interpretar. Tambin se puede indicar la codificacin de la respuesta haciendo uso de esa
misma directiva:
3.3.4. Creando contenido dinmico
Se puede crear contenido dinmico accediendo a las propiedades de los objetos. Estos
objetos pueden ser:
Implcitos: son los que crea el contenedor web y contienen informacin sobre la peticin,
pgina, sesin o aplicacin.
Especficos de la aplicacin: en muchas ocasiones, el comportamiento de la aplicacin se
encapsula en objetos de negocio. Estos objetos pueden ser accedidos mediante etiquetas
estndar de JSP o haciendo uso de scriptlets incrustados en la pgina JSP.
Compartidos: debido a que las pginas JSP se ejecutan como servlets en multihilo, es
necesario garantizar un acceso concurrente correcto a los objetos compartidos, de formaanloga a como se indic con los propios servlets. La directiva isThreadSafe permite indicar
si las peticiones a un mismo jsp pueden atenderse de forma concurrente (valor true, que es el
comportamiento por defecto) o secuencial (valor false, que implicara generar un servlet que
implementase la interfaz SingleThreadModel).
El siguiente diagrama indica los distintos alcances que pueden ser aplicados a cualquier
objeto creado:
42
-
7/31/2019 AppWebJavaEE
43/98
Desarrollo de aplicaciones web con Java Enterprise Edition
En los siguientes apartados de esta seccin se vern los diferentes mecanismos para acceder
a los objetos y componentes, generando as el contenido dinmico.
3.3.5. Usando scripting en pginas JSP
Los elementos de scripting permiten utilizar sentencias del lenguaje de programacin Java
en las pginas JSP. Por tanto, se podrn realizar tareas como acceder a objetos, definir mtodos y
gestionar el flujo de control de la manera convencional en el lenguaje Java.
En teora, el uso de scripting en las pginas JSP debera ser sustituido por el uso de etiquetas
de libreras, en particular la JSTL, pero en ocasiones se hace necesario utilizar esta alternativa. An
as, se proporciona un mecanismo que prohbe el uso de scripting en un grupo de JSP a travs de la
inclusin de un elementoscripting-invaliden el descriptor de despligue.
El lenguaje de scripting por defecto es Java; an as se podra utilizar otro lenguaje, para lo
cual habra que incluir una directiva informando de esta circunstancia:
43
-
7/31/2019 AppWebJavaEE
44/98
-
7/31/2019 AppWebJavaEE
45/98
Desarrollo de aplicaciones web con Java Enterprise Edition
JavaServer Pages Standard Tag Library (JSTL) es un conjunto de libreras que incluyen
funcionalidades comunes a muchas aplicaciones JSP. JSTL incluye etiquetas para iteracin,
condicionales para manejar el flujo de control, manipulacin de documentos XML,
internacionalizacin, acceso a bases de datos usando SQL y otras funciones comunes.
Las etiquetas pueden tener dos formatos distintos:
Antes de utilizar un conjunto de etiquetas es necesario indicar en la pgina JSP que se va a
utilizar una librera de etiquetas a travs de la directiva correspondiente.
Si se utiliza una URI absoluta no ser necesario incluir un elemento taglib en el web.xml.
Esto, por ejemplo, se suele hacer con las JSTL estndares.
Adems, es necesario hacer accesibles a la aplicacin web las clases que implementan la
librera determinada. Esto puede hacerse incluyndolas en el WAR o estando disponibles en un
directorio comn del servidor de aplicaciones en el que se desplegar la aplicacin. En el caso de
las libreras JSTL suelen estar presentes en el servidor.
3.3.7. El lenguaje de expresiones unificado
A partir de la especificacin de JSP 2.1 se dispone del lenguaje de expresiones unificado,
45
body
-
7/31/2019 AppWebJavaEE
46/98
Desarrollo de aplicaciones web con Java Enterprise Edition
que representa la unin del lenguaje de expresiones ofrecido por JSP 2.0 y el creado para la
tecnologa JavaServer Faces.
Este lenguaje permite incluir expresiones que se evalan de forma inmediata o aplazada,
acceder a objetos implcitos que mapean los distintos alcances de una aplicacin web, utilizar
operadores y palabras reservadas para definir el valor de la expresin, etc.
Estas expresiones pueden utilizarse directamente en el cuerpo del documento o en tags que
acepten expresiones en sus atributos.
Ver ejemplo: holaJSP
3.3.8. Componentes JavaBeans
Los componentes JavaBeans son clases Java que pueden ser fcilmente reutilizadas entre
aplicaciones. Cualquier clase Java que siga unas ciertas convenciones de diseo ser un componente
JavaBean.
La tecnologas JSP soporta directamente este tipo de componentes a travs de sus elementos
del lenguaje, permitiendo acceder a los beans definidos a travs de estas clases de una manera
sencilla.
Las convenciones de diseo implican que:
46
${!empty param.username}
${pageContext.request.contextPath}
${sessionScope.cart.numberOfItems}
-
7/31/2019 AppWebJavaEE
47/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Las propiedades pueden ser de lectura y escritura, de slo lectura o de slo escritura.
Pueden ser simples, es decir, contienen un valor simple, o indexadas, representando un array
de valores.
Las propiedades deben ser accesibles a travs de unos mtodos de acceso con la siguiente
sintaxis:
Se debe definir un constructor sin parmetros.
Para indicar que la pgina va a utilizar un componente JavaBean se debe utilizar un
elementojsp:useBean como sigue:
Se debe indicar el alcance del objeto que puede ser: application,session, requestopage, si
no existiese el bean se creara.
Una vez instanciado el bean, se puede acceder a sus propiedades utilizando el elemento
jsp:setProperty para asignarles valor y jsp:getProperty para consultarlo. Para consultar tambin es
posible utilizar una expresin EL.
Cuando se estn desarrollando beans para procesar datos de un formulario, se puede seguir
un patrn de diseo haciendo coincidir los nombres de las propiedades de los beans y de los
elementos input del formulario. Esto permite que el motor de JSP asigne todos los valores entrantes
del formulario que son parte del objeto de la peticin, a las propiedades correspondientes en el bean
simplemente incluyendo una sentencia del tipo:
47
PropertyClass getProperty() { ... }
setProperty(PropertyClass pc) { ... }
-
7/31/2019 AppWebJavaEE
48/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Esto se consigue gracias a un proceso denominado introspeccin, que permite a una clase
exponer sus propiedades bajo peticin. Esta introspeccin es gestionada por el motor de JSP y se
implementa a travs del mecanismo de reflexin de Java. Si no existiese una correspondencia de
nombres, se podra conseguir el mapeo indicando individualmente cada propiedad:
Esta caracterstica de creacin de beans por introspeccin puede ser muy til a la hora de
procesar formularios HTML:
La pgina JSP inicial permite crear un bean a partir de un formulario, en ocasiones se les
suele denominar 'FormBean', y lo coloca en la peticin, que es enviada a un servlet, este ltimo
puede recuperar el bean y por tanto la informacin del formulario de una manera ms sencilla.
El servlet, dentro de sus responsabilidades de procesamiento, puede modificar las
propiedades del bean y crear otros beans adicionales. Todos ellos podran ser pasados a una pgina
JSP a la que se redirige el flujo y que permite obtener la respuesta devuelta al cliente.
48
-
7/31/2019 AppWebJavaEE
49/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Ver ejemplo: holaUsandoBeans
3.3.9. Reutilizacin de contenido en pginas JSP
Existen diferentes mecanismos para reutilizar contenido JSP en una pgina:
La directiva include: es procesada cuando la pgina JSP se traduce al servlet, por lo que su
efecto es insertar el texto contenido en otro fichero, ya sea esttico o dinmico, en la pgina
JSP con el include. La sintaxis de la directiva es:
Definir includes en el descriptor de despliegue para un grupo de pginas JSP. Slo pueden
colocarse al principio de la pgina include-prelude o al final include-coda.
Utilizar el elementojsp:include, el cual es procesado cuando la pgina se ejecuta. Si incluye
un recurso esttico, simplemente se inserta su contenido en la pgina JSP llamante, mientras
que si es dinmico, la peticin se enva al recurso incluido que se ejecuta, siendo el resultado
incluido en la respuesta de la pgina llamante.
3.3.10. Transfiriendo el control a otro componente web
Al igual que en los servlets, tambin se permite transferir el control a otro componente a
49
-
7/31/2019 AppWebJavaEE
50/98
-
7/31/2019 AppWebJavaEE
51/98
Desarrollo de aplicaciones web con Java Enterprise Edition
llamadas arquitectura JSP Modelo 1 y Modelo 2, que difieren esencialmente en el lugar donde se
realiza la mayor parte del procesamiento de las peticiones.
3.4.2. JSP: Modelo 1
En la arquitectura Modelo 1, la pgina JSP por s sola, es responsable de procesar las
peticiones entrantes y responder al cliente. Todava existe separacin entre la presentacin y el
contenido, porque todos los accesos a los datos son llevados a cabo mediante Java Beans.
Aunque el Modelo 1 debera ser perfectamente apropiado para aplicaciones simples, puede
que no sea deseable para aplicaciones complejas. El uso indiscriminado de esta arquitectura
normalmente dirige al programador a escribir una cantidad muy importante de scriptlets de JSP de
cdigo Java dentro de las pginas JSP, especialmente si hay una cantidad significante de
procesamiento de peticiones dentro de la implementacin. A pesar de que esto no podra parecer unproblema para los desarrolladores Java, es realmente un aspecto importante si las pginas JSP son
creadas y mantenidas por diseadores (lo cual es lo normal en grandes proyectos).
Ver ejemplo: modelo1
51
-
7/31/2019 AppWebJavaEE
52/98
Desarrollo de aplicaciones web con Java Enterprise Edition
3.4.3. JSP: Modelo 2
La arquitectura Modelo 2 es una aproximacin hbrida para servir contenido dinmico, ya
que combina el uso tanto de JSP como de servlets. Por lo tanto, coge las ventajas de ambas
tecnologas, usando JSP para generar la capa de presentacin y los servlets para llevar a cabo las
tareas de procesamiento. En esta arquitectura, el servlet acta como controlador y est encargado
del procesamiento de las peticiones y la creacin de los beans u objetos usados por el JSP, as como
de tomar las decisiones acerca de la prxima pgina JSP que se va a mostrar.
Es importante darse cuenta de que no existe procesamiento en las pginas JSP. Ellas slo son
responsables de extraer los objetos o los beans que deberan haber sido previamente creados por el
servlet, y de extraer la informacin dinmica que estos objetos traen e insertarla en sus plantillas
estticas. Esta aproximacin realiza una separacin ms limpia entre la presentacin y el contenido,
delimitando los roles y las responsabilidades de los desarrolladores y de los diseadores Web.
Otra de las ventajas de esta aproximacin es que la capa de control presenta un punto de
entrada nico a la aplicacin, permitiendo una gestin del estado, seguridad y presentacin ms
uniforme y fcil de mantener.
Aunque el Modelo 2 no nombra explcitamente los elementos del Modelo-Vista-
Controlador, en realidad se aproxima mucho a esta arquitectura. De hecho, en muchos mbitos, se
52
-
7/31/2019 AppWebJavaEE
53/98
Desarrollo de aplicaciones web con Java Enterprise Edition
usa MVC o Modelo 2 indistintamente.
Desde un punto de vista terico, la arquitectura Modelo-Vista-Controlador (MVC) se basa
en aislar la lgica de dominio de la entrada y la presentacin. Para conseguir esto la aplicacin se
divide en tres capas, cada una con unas responsabilidades y tareas especficas:
El modelo representa los datos de negocio, con la lgica de negocio u operaciones que
gestionan el acceso y la modificacin de estos datos de negocio. El modelo notifica a los
visores cuando cambia y permite a estos visores consultar el estado del modelo. Adems,
permite al controlador acceder a la funcionalidad de la aplicacin encapsulada en el modelo.
La vista presenta el contenido del modelo. Obtiene datos del modelo y especifica como se
presentan los datos. Actualiza la presentacin de los datos cuando cambia el modelo. Una
vista puede transmitir la entrada de un usuario al controlador.
El controlador define el comportamiento de la aplicacin. Atiende las peticiones de usuario
y selecciona las vistas para la presentacin. Interpreta las entradas del usuario y las mapea
en acciones a ser realizadas por el modelo. En una aplicacin web, las entradas del usuario
son peticiones HTTP GET y POST. Un controlador selecciona la vista a mostrar basado en
las interacciones del usuario y el resultado de las operaciones del modelo.
(i) Implementando el controlador
En la plataforma Java EE, el controlador suele implementarse a travs de un clase servlet.
Este servlet puede ser nico, de manera que se define un punto de entrada comn para todas las
peticiones de la aplicacin, siguiendo as el patrn Front Controller.
Este enfoque permite concentrar la gestin de la seguridad, los errores y la asignacin de
recursos a las peticiones (por ejemplo, conexiones a bases de datos), sin embargo, concentrar todas
las peticiones en una nica clase implica incluir una gran cantidad de procesamiento dependiente de
la peticin a tratar, generndose un cdigo con una baja cohesin y poco escalable y mantenible.
53
-
7/31/2019 AppWebJavaEE
54/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Para evitar estos problemas, pueden adoptarse diferentes soluciones que mejoran la calidad del
controlador.
1) Switch - case
Si se tiene un nmero de tipos de peticiones relativamente bajo, cuatro o cinco, es posible
implementar el controlador con una nica clase que dispone de un bloque switch-case en el que en
funcin de un valor, se selecciona el tipo de peticin a tratar.
El valor que identifica la peticin puede ser pasado como parmetro a travs de un campo
oculto del formulario que genera la peticin, o puede venir codificado en la propia url de la
peticin.
En cualquier caso, se podr obtener un valor que indique el bloque case a ejecutar que no
debera implicar una gran cantidad de lgica.
Ver ejemplo: modelo2
2) Patrn Comando
Si el nmero de tipos de peticiones es alto o requieren de una gran cantidad de lgica, se
suele utilizar el patrn Comando. Este patrn implica la definicin de una clase especfica para cada
peticin o accin, que presenta una interfaz uniforme a travs de la implementacin de un mtodo
cuya invocacin da como resultado la ejecucin de la lgica de negocio, y cuyo resultado determina
el componente de la vista a cargar.
54
-
7/31/2019 AppWebJavaEE
55/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Al igual que en el enfoque switch-case, es necesario indicar al controlador que comando es
el que debe ejecutarse a consecuencia de una peticin determinada. Para ello, siguen siendo vlidos
los mecanismos de paso de parmetros o codificacin en la url de la peticin. En funcin del valor
de la accin a realizar, se instanciar la clase del comando a ejecutar, normalmente haciendo uso de
una Fbrica.
La siguiente ilustracin muestra un resumen de la arquitectura Modelo 2 / Modelo-Vista-
Controlador enriquecida con el uso de los patrones de diseo Front Controller y Command.
3.4.4. Apache Struts
Apache Struts es un framework de cdigo abierto para el desarrollo de aplicaciones web
Java EE.
Su objetivo es crear un entorno de desarrollo de aplicaciones con un alto grado de
escalabilidad y mantenibilidad. Para ello, implementa el patrn de diseo Modelo-Vista-
55
-
7/31/2019 AppWebJavaEE
56/98
-
7/31/2019 AppWebJavaEE
57/98
Desarrollo de aplicaciones web con Java Enterprise Edition
(ii) ActionMapping
La informacin sobre el mapeo o control de flujo est representada a travs de la clase
ActionMapping. Esta clase encapsula informacin de configuracin que normalmente es obtenida a
travs del procesamiento de un XML.
Los elementos ms importantes que se incluyen en el archivo de configuracin son:
: contiene la definicin de los beans de formulario (ActionForm) que podrn
ser instanciados en la aplicacin.
: define instancias de la clase ActionForward que pueden utilizarse a
nivel global para dirigir el flujo de la aplicacin, identificndolas a travs de un nombre
lgico.
: permite definir las acciones del sistema en base a un conjunto de
propiedades:
type: nombre completo de la clase que implementa la accin.
name: nombre del bean de formulario que se va a usar en esta accin.
path: define la ruta de la peticin que implica ejecutar la accin.
validate: permite indicar si se deben realizar las validaciones previas a la ejecucin.
forward: para cada accin se pueden definir posibles caminos de flujo.
Simplemente se han descrito las propiedades ms relevantes. Para la relacin completa, se
puede consultar el DTD que debe cumplir el archivo de configuracin.
El archivo XML suele llamarse struts-config.xml, aunque es posible utilizar varios, que
pueden definir mdulos o dominios distintos dentro de la aplicacin.
57
-
7/31/2019 AppWebJavaEE
58/98
Desarrollo de aplicaciones web con Java Enterprise Edition
(iii) ActionForm
Una de las principales tareas en el desarrollo de una aplicacin web es ser capaz de gestionar
la entrada del usuario, hecha normalmente utilizando etiquetas de formularios HTML. Struts
proporciona la clase ActionForm como mecanismo de captura y validacin de la entrada,
representando cada clase que extienda deActionForm un formulario de una o ms pginas.
Las clases ActionForm no requieren de la implementacin de ningn mtodo especfico,
pero suelen seguir las convenciones de codificacin de los componentes JavaBeans, es decir,
definen propiedades y sus mtodos de acceso. De esta manera, el framework de Struts es capaz de
asignar los parmetros de la peticin a las propiedades del bean de formulario, a travs de
introspeccin, validarlos y si todo es correcto, pasarlos a la accin (clase Action) que debe tratar la
peticin.
Un ActionForm puede ser utilizado por una o ms acciones. Para ello, simplemente es
necesario indicarlo en la definicin delActionMappingde la accin. Cuando el flujo de control pase
a la accin, sta tendr disponible una instancia delActionForm indicado con la informacin de los
parmetros introducida por el usuario. La accin puede recuperar esta informacin para
interaccionar con el modelo e incluso puede modificarla como consecuencia de su ejecucin, ya
que, al seguir normalmente las convenciones JavaBeans, el ActionForm puede ser utilizado para
pasar informacin a la vista, la cual acceder a travs de los mecanismos y etiquetas habituales de
los beans.
En cuanto a la validacin, la claseActionForm incluye el mtodo validate, que es invocado
por el controlador despus de que se hayan rellenado las propiedades del bean y antes de pasar el
flujo de control a la accin. Este mtodo tiene una implementacin por defecto que devuelve null,
que indica que no se han producido errores de validacin y que se puede invocar a la accin; el
desarrollador puede sobreescribirlo realizando las validaciones que considere apropiadas y
devolviendo un listado deActionErrors en caso de que se encuentren problemas.
58
-
7/31/2019 AppWebJavaEE
59/98
Desarrollo de aplicaciones web con Java Enterprise Edition
Una aproximacin comn es realizar validaciones iniciales usando el mtodo validate, y
luego manejar la validacin de la lgica de negocio desde el objetoAction.
Struts proporciona el plug-in Struts Validator que contiene un conjunto de reglas de
validacin bsicas y que puede ser ampliadas con facilidad.
(iv) Action
La claseAction es la encargada de procesar las solicitudes. El controlador deber evaluar la
informacin sobre la peticin y en base a la informacin sobre los mapeos, decidir qu clase Action
es la que debe tratarla, invocando al mtodo execute de la clase. Este mtodo recibe tanto los
objetos que representan la peticin y la respuesta (HttpServletRequest y HttpServletResponse para
una peticin http), como un objetoActionForm con la informacin de los parmetros pasados por el
usuario y el objetoActionMappingque le facilitar la tarea de reenvo del control a otra accin o a
un componente de la vista.
Tpicamente, en el mtodo execute se realizan las siguientes tareas:
Se valida el estado actual de la sesin del usuario, comprobando si se ha autenticado
correctamente; sino, podra redirigirse a una pgina que le permita introducir sus
credenciales u otra informacin de autenticacin. Esto podra ocurrir porque un usuario
intente entrar "en el medio" de una aplicacin, o porque la sesin ha expirado y el
contenedor de servlet cre una nueva. En otras ocasiones, la responsabilidad sobre la
autenticacin y autorizacin de la aplicacin se lleva a cabo mediante filtros (interfaz
javax.servlet.Filter) que pueden apoyarse en alguna API o framework de seguridad.
Se pueden realizar validaciones sobre la informacin que viene en la peticin, ya sean
complementarias o no a las que se hacen a travs del ActionForm. Si se encuentra un
problema, se pueden almacenar las claves de los mensajes de error apropiados como un
atributo de la peticin, y reenvar el control de vuelta al formulario de entrada para que se
puedan corregir los errores.
59
-
7/31/2019 AppWebJavaEE
60/98
-
7/31/2019 AppWebJavaEE
61/98
Desarrollo de aplicaciones web con Java Enterprise Edition
aplicacin directamente. Adems, en el tratamiento es importante liberar cualquier recurso
que pueda haber quedado asignado.
(v) Aportaciones a la vista
El framework de Struts utiliza las tecnologas bsicas de Java EE para la vista, tanto
JavaServer Pages como libreras de etiquetas, a las que aade un conjunto de utilidades y
componentes que van dirigidos a facilitar el desarrollo de esta capa, entre los que destacan:
Mensajes internacionalizados: tomando como base las clases de internacionalizacin y
localizacin de la plataforma Java (Locale, ResourceBundle, PropertyResourceBundle,
MessageResource), Struts permite definir archivos de mensajes pueden ser utilizados desde
los componentes de la vista para mostrar al usuario la informacin en el lenguaje escogido.
Librera de etiquetas: Struts incluye un conjunto de etiquetas personalizadas para JSP que
ayudan a los desarrolladores tanto en la gestin y acceso a los beans (incluyendo los
ActionForms), la creacin de formularios basados en etiquetas HTML o XHTML (en los que
se pueden incluir mensajes internacionalizados), y la gestin del flujo a travs de etiquetas
de lgica e iteracin.
Composicin de pginas con Tiles: Struts proporciona un sistema de plantillas que permite
construir la vista combinando varios elementos o 'tiles'.
(vi) Request Processor
Para finalizar, es conveniente recordar el flujo de control que implica el uso del patrn
Modelo-Vista-Contr