Introducción
Las aplicaciones Web son diferentes a los
sitios Web convencionales porque éstas
son capaces de crear una respuesta
dinámica.
Muchos sitios Web ofrecen sólo páginas
estáticas, en cambio una aplicación Web
es capaz de interactuar con bases de datos
y lógica de negocios con la finalidad de
personalizar la respuesta a enviar.
Introducción (…)
Cuando aparecieron los Servlets Java, los
desarrolladores se dieron cuenta de que
eran más rápidos y más potentes que el
CGI estándar, eran portables y extensibles.
Lo problemático del asunto era el hecho de
tener que escribir infinitas sentencias
println() para enviar código HTML al
navegador. Como respuesta a esto
surgieron las JavaServer Pages.
Introducción (…)
Los JSP permiten escribir código Java
dentro de ellos, pudiendo así mezclar
fácilmente HTML con Servlets y tener todas
las ventajas de éstos.
Sin embargo este modelo no resolvía
todavía los problemas propios de las
aplicaciones Web, como control de flujo por
ejemplo.
Introducción (…)
Las aplicaciones Web en general tienen tres
aspectos a considerar en su desarrollo:
El código de acceso, inserción, consulta,
actualización y/o eliminación de los datos.
El código del diseño de las páginas a mostrar.
El código que controla el flujo de las páginas de
la aplicación.
Con la práctica nos damos cuenta que si
una aplicación Web grande tiene estos
aspectos muy mezclados se vuelve difícil de
mantener.
Introducción (…)
Una forma de separar estos aspectos es
usando la arquitectura MVC: Modelo-Vista-
Controlador, donde:
El modelo representa a la lógica de negocios
(manipulación de datos).
La vista representa la presentación de los datos
(diseño de páginas).
El controlador representa el código de
navegación de la aplicación (control de flujo).
Patrones de Diseño
Los patrones de diseño son soluciones
efectivas de problemas comunes en el
diseño de software.
La efectividad de un patrón ya ha sido
comprobada.
Un patrón es reusable.
Los patrones facilitan el aprendizaje de los
programadores inexpertos.
Patrones de Diseño (…)
Los patrones de diseño se pueden
clasificar, según su propósito, en:
Patrones creacionales: abstraen el proceso de
instanciación y ocultan los detalles de cómo los
objetos son creados o inicializados.
Patrones estructurales: describen como las
clases y objetos pueden ser combinados para
formar grandes estructuras y proporcionar
nuevas funcionalidades.
Patrones de Diseño (…)
Patrones de comportamiento: tratan de
cómo definir la comunicación e
interacción entre los objetos de un
sistema con la finalidad de reducir el
acoplamiento entre éstos.
Patrón MVC
El patrón de diseño Modelo-Vista-
Controlador fue aportado originariamente
por el lenguaje de programación SmallTalk.
Consiste en dividir una aplicación en tres
componentes: Modelo, Vista y Controlador.
Se basa en la separación de
responsabilidades ya que cada una de las
partes se encarga de un aspecto específico
y no interfiere con el de las otras.
Patrón MVC: Modelo
Representa las capas de lógica de negocios
y persistencia de datos de la aplicación.
Está formada por todos los objetos de
negocio que soportan los procesos propios
del dominio de la aplicación.
Se encarga del acceso a los datos para
realizar consultas, eliminaciones,
inserciones, actualizaciones y almacenarlos
en un medio persistente, como por ejemplo
una base de datos, un archivo de texto,
XML, etc.
Patrón MVC: Vista
Representa la capa de presentación de los
datos.
Se encarga de mostrar la información al
usuario, por lo tanto tiene que ver con el
diseño y formateo de los datos para su
presentación.
Interfaz de usuario para la interacción con la
aplicación.
En la vista solo se deben de realizar
operaciones simples, como condiciones,
ciclos, etc.
Patrón MVC: Controlador
Se encarga de controlar el flujo de la
aplicación.
Tiene la función de recibir y responder a los
eventos (acciones del usuario), convirtiendo
éstos en solicitudes de servicio.
Además, tiene que redirigir o asignar la
parte de lógica de negocios a cada petición.
Cuenta con un mecanismo para guardar las
correspondencias entre peticiones y
respuestas que se les asignan.
Cada acción del usuario causa que se inicie
de nuevo un nuevo ciclo.
Patrón MVC: Funcionamiento
El procesamiento de los
datos se lleva a cabo
entre sus tres
componentes.
El controlador recibe una
petición y decide quien la
lleva a cabo en el modelo.
Una vez terminadas las
operaciones en el modelo,
se transfiere el flujo al
controlador, que devuelve
los resultados a una vista
asignada.
Patrón MVC: Funcionamiento (…)
El controlador tiene almacenado la
relación entre las posibles peticiones y la
lógica de negocio que les corresponden.
Patrón MVC: Ventajas
Separación total entre las capas de
presentación, lógica de negocio y acceso a
datos.
Esta separación es fundamental para el
desarrollo de aplicaciones consistentes,
reutilizables y más fácilmente mantenibles,
resultando en un ahorro de tiempo.
En Java se puede implementar el patrón
MVC con la clase Observer pero de una
manera sencilla, sin embargo con Struts se
aplica en toda una aplicación Web
convencional.
Frameworks
Un framework es la extensión de un
lenguaje, a través de una o más jerarquías
de clases que implementan una
funcionalidad y que pueden ser extendidas
de manera opcional.
Apache Struts Framework
Originalmente fue creado por Craig R.
McClanahan y donado al proyecto Jakarta
de Apache Software Foundation en el año
2000.
En Junio de 2001 se libera la primera
versión, y desde entonces muchos
desarrolladores han participado en la
mejora continua de este framework.
Actualmente se ha lanzado una nueva
versión de este framework, la cual se
denomina Struts 2.
Apache Struts Framework (…)
Es un framework de código abierto para
desarrollar aplicaciones Web J2EE usando
el patrón de diseño Modelo-Vista-
Controlador.
Usa y extiende la Java Servlet API para
motivar a los desarrolladores a adoptar la
arquitectura MVC.
Simplifica notablemente la implementación
de una aplicación siguiendo la arquitectura
del patrón MVC.
Apache Struts Framework (…)
El controlador ya se encuentra
implementado en Struts, sin embargo y si es
necesario es posible extenderlo o
modificarlo.
El flujo de la aplicación se controla desde
un archivo XML.
Proporciona la integración con el modelo, la
lógica de negocio se implementa basándose
en clases predefinidas por el framework y
siguiendo el patrón Facade.
Apache Struts Framework (…)
Facilita y soporta la construcción de la
interfaz de la aplicación utilizando un
conjunto de tags predefinidos.
Se busca es evitar el uso de scriptles, que
son trozos de código Java entre “<%” y
“%>”; para ganar mantenibilidad y
performance.
Permite el desarrollo de sus componentes
en paralelo o por personal especializado.
Apache Struts Framework (…)
El framework provee tres componentes:
Un manejador de petición proporcionado por el
desarrollador de la aplicación, que se usa para
relacionarlo a una determinada URI.
Un manejador de respuesta que se utiliza para
transferir el control a otro recurso que se
encargará de completar la respuesta.
Una biblioteca de tags que ayuda a los
desarrolladores a crear aplicaciones interactivas
basadas en formularios.
Apache Struts Framework (…)
Struts provee la infraestructura básica para
la implementación del patrón MVC,
permitiendo así que los desarrolladores
puedan concentrarse en la lógica de
negocios.
El framework está compuesto por
aproximadamente 300 clases e interfaces
que están organizadas en alrededor de 12
paquetes de nivel superior.
Struts: Funcionamiento
El navegador genera una solicitud que es
atendida por el Controlador (un Servlet
especializado).
El Controlador también se encarga de
analizar la solicitud, seguir la configuración
que se le ha programado en su XML y
llamar al Action correspondiente pasándole
los parámetros enviados.
El Action instanciará y/o utilizará los objetos
de negocio para concretar la tarea.
Struts: Funcionamiento (…)
Según el resultado que retorne el Action, el
Controlador derivará la generación de
interfaz a una o más JSPs, las cuales
podrán consultar los objetos del Modelo
para mostrar información de los mismos.
Struts: Funcionamiento (…)
Struts: Controlador
La clase ActionServlet es el corazón del
framework ya que es el controlador y se
configura como servlet en el archivo
web.xml
Struts: Controlador (…)
Cada vez que un usuario hace una petición
es manejada por Struts Action Servlet.
Cuando el ActionServlet recibe la petición
intercepta la URL y basado en el archivo de
configuración struts-config.xml, dirige la
petición al Action Class correspondiente.
El Action Class es parte del controlador y se
encarga de comunicarse con el modelo.
Struts: Controlador (…)
Todas las peticiones atendidas por el
framework siguen un patrón en su
nomenclatura, por defecto *.do, pero éste
se puede cambiar en el archivo web.xml.
Struts: struts-config.xml
Es el archivo de configuración de Struts,
aquí se mapean las acciones (peticiones).
Sección <form-beans> contiene las
definiciones de beans.
Se usa un elemento <form-bean> por cada
bean de formulario, tiene los siguientes
atributos importantes:
Name: Identificador único para referenciarlo en
los mapeos de acciones.
Struts: struts-config.xml (…)
Type: ruta completa de la clase Java del bean de
formulario.
Sección <action-mappings> contiene las
definiciones de acciones, se usa un
elemento <action> por cada acción, se
definen los siguientes atributos:
Path: nombre de la clase action en relación al
contexto de la aplicación.
Type: ruta completa de la clase Java de la clase
Action.
Struts: struts-config.xml (…)
Name: El nombre del <form-bean> para usar con
esta action, si corresponde.
Forward: ruta del archivo JSP a llamar.
Dentro de cada <action> se pueden definir
más de un forward, teniendo las siguientes
propiedades:
Name: nombre del forward que será utilizado al
llamarlo desde la clase Action.
Path: ruta de la página JSP.
Struts: Action Class
Una clase Action de una aplicación Struts
extiende a la clase
org.apache.struts.action.Action.
Una clase Action actúa como un envoltorio
para la lógica de negocio y provee una
interfaz al modelo.
Es el mediador entre la vista y el Modelo, ya
que transmite los datos desde la Vista hacia
el proceso específico del modelo y retorna
los resultados en sentido contrario.
Struts: Action Class (…)
Una acción funciona como un adaptador
entre una petición HTTP entrante y la lógica
de negocio creando una instancia de la
Action correspondiente y ejecutando el
método execute().
Por lo tanto es necesario que la subclase
sobreescriba el método execute().
No se debe añadir lógica de negocio en ella,
mejor utilizar otra capa DAO.
Struts: Action Class (…)
Método execute():
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response
) throws java.lang.Exception
Struts: Action Class (…)
Sus parámetros son:
mapping - El ActionMapping usado para seleccionar
esta instancia
form - ActionForm bean para esta petición, si existe
request - La petición HTTP que se está procesando
response - La respuesta HTTP que se está creando.
Lanza una excepción si en la lógica de
negocio ocurre también una excepción.
Struts: Action Form
Una de las tareas que consume mucho
trabajo es la interacción con formularios, ya
sea para editar u obtener nueva
información.
Las comprobaciones, la gestión de errores,
el volver a presentar el mismo form al
usuario con los valores que puso y los
mensajes de error están soportados por
Struts con los Action Forms y JSP.
Struts: Action Form (…)
Un ActionForm es un JavaBean que se
extiende
org.apache.struts.action.ActionForm.
Implementa los métodos get y set para cada
input de un formulario de una página, y los
métodos validate y reset.
Se llena automáticamente en el lado del
servidor con los datos introducidos desde
un formulario en el lado del cliente.
Struts: Modelo
Comprende toda la lógica del negocio, son
las clases Java que el desarrollador tiene
que implementar.
No existe un formato definido para la
creación de estos componentes, el
framework proporciona interfaces a bases
de datos, etc.
Se elige el modelo de acuerdo con los
requerimientos del cliente.
Struts: Vista
Los componentes de la Vista son JSP y se
encargan de la presentación de la
información al usuario y del ingreso de sus
datos.
Muestran los datos proporcionados por los
componentes del modelo.
Struts provee soporte para construir
fácilmente la interfaz de usuario a través de
la utilización de HTML Tag Library.
Struts: Vista (…)
Pudiendo obtener aplicaciones multi-idioma,
interacción con formularios y otras
utilidades.
Para usar los Struts HTML Tags es
necesario incluir la siguiente línea en el
JSP:
<%@ taglib
uri="http://jakarta.apache.org/struts/tags-html"
prefix="html" %>
Struts: Tag Library
<html:html> Genera el tag <html>.
<html:form> Genera <form>
<html:button> Genera el tag <input type="button">.
<html:submit> Genera <input type="submit"> para
enviar los datos ingresados.
<html:reset> Genera <input type="reset">
<html:checkbox> Genera el tag <input
type="checkbox">
<html:hidden> Genera el tag <input type="hidden">.
<html:img> Genera el tag <img>
Struts: Tag Library (…)
<html:link> Genera un link html
<html:password /> Genera el tag <input
type=“password”>.
<html:radio> Genera un radio button (<input
type="radio">).
<html:select multiple="true" property="selectBox">
Genera la lista en el formulario, selectBox debe ser
un array. Usar <html:options> para especificar las
entradas.
<html:text> Genera el tag <input type="text">
Struts: Tag Library (…)
<html:textarea> Genera el tag <textarea>.
<html:file /> Genera el tag <input type=“file”> para
subir archivos.
<html:base> Genera el tag <base>. Este tag debe
ser usado dentro del tag <head>
<html:errors> Genera el codigo html para mostrar los
errors que pueden ocurrir en la página.
<html:message key="thekey"/> Busca el valor
correspondiente al key dado en el archivos de
recursos y lo muestra.
Struts: Internacionalización
Struts provee la facilidad de crear
aplicaciones multilenguaje.
Para crear una aplicación multilenguaje se
debe crear un archivo de texto (ej:
ApplicationResources.properties) en el
directorio donde se encuentren las clases
de la aplicación(ej. empresa/aplicacion) que
contenga las claves y valores con el formato
clave.subclave=texto de los textos que
pertenezcan al idioma principal.
Struts: Internacionalización (…)
Ejemplo:
login.titulo = Ingreso al Sistema
login.labelusuario = Usuario :
login.labelpassword= Password :
Para cada idioma alternativo se creará un
archivo nuevo que se llame igual pero que
termine en "_xx.properties" siendo xx el
código ISO de idioma (ej:
ApplicationResources_en.properties).
Struts: Internacionalización (…)
En struts-config.xml se debe configurar el
Tag /servlet/init-param/param-name
application y ponerle como param-value la
localización del archivo con el idioma
principal.
Struts: Internacionalización (…)
Por ultimo se utiliza el Tag <bean:message
key="clave.subclave"/> donde clave y
subclave corresponden al texto por el que
se reemplazará según el idioma del usuario.
Ejemplo:
<H1>
<bean:message key="login.titulo"/>
</H1>
Struts: Utilización I
En el struts-config.xml
<action path="/Welcome"
forward="/pages/Welcome.jsp"/>
En el JSP inicial
<html:link page="/Welcome.do">Primera peticion
al controlador</html:link>
En Welcome.jsp
Apache Struts Project
La organización principal, a la cual
pertenece este proyecto es la Apache
Software Foundation.
Apache Struts Project es la comunidad de
desarrollo de código abierto que se encarga
de crear y mantener el Apache Struts
Framework.
Está formado por un grupo diverso de
voluntarios con sentido de colaboración.
Apache Struts Project (…)
El proyecto es llamado "Struts“ porque la
finalidad del framework es proporcionar algo
como "bases invisibles" que soporten el
desarrollo de aplicaciones profesionales.
Struts nos proporciona el pegamento que
une diversos elementos de la plataforma
Java en un todo coherente.
Apache Struts Project (…)
El objetivo del proyecto es aprovechar los
estándares existentes mediante la
producción de las piezas que faltan para ser
capaces de crear aplicaciones de categoría
empresarial que sean fáciles de mantener
en el tiempo.
Ofrece dos versiones principales del
framework Struts.
Apache Struts Project (…)
Struts 1 es reconocido como el framework
más popular para aplicaciones Web en
Java.
Este framework, en su versión 1.x, es
maduro, está bien documentado, y cuenta
con un amplio soporte.
Es la mejor alternativa para afrontar
problemas comunes de desarrollo.
Apache Struts Project (…)
Struts 2 fue originalmente conocido como
WebWork 2; después de trabajar
independientemente por varios años, las
comunidades de Struts y WebWork unieron
fuerzas para crear Struts 2.
El framework 2.x es la mejor opción para
afrontar elegantemente los problemas
difíciles del desarrollo.
Apache Struts Project (…)
Struts 2 es un elegante y extensible
framework para la creación de la empresa
de aplicaciones web en Java.
El framework está diseñado para apoyar el
ciclo completo de desarrollo, desde la
construcción, el despliegue y a lo largo del
periodo de mantenimiento de las
aplicaciones.
Links de interés
http://struts.apache.org/
http://struts.apache.org/2.x/
http://struts.apache.org/1.x/
http://www.roseindia.net/struts/