3. 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.
4. Introducción (…)
Ventajas de los servlet frente a los CGI:
Más rápidos
Más potentes
Portables
Extensibles
Desventajas
Escribir líneas infinitas println() para enviar código HTML al
navegador
Solución
JavaServerPage
5. Introducción (…)
JSP permite escritura de código Java
dentro de ellos consiguiendo todas las
ventajas tanto de los servlets como del
código HTML
Sigue habiendo problemas propios de las
aplicaciones web: El control de flujo
6. 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.
7. 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).
8. 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.
9. 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.
10. 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.
11. 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.
12. 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.
13. 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.
14. 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.
15. Patrón MVC: Funcionamiento (1)
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.
17. Patrón MVC: Funcionamiento (3)
El controlador tiene almacenado la
relación entre las posibles peticiones y la
lógica de negocio que les corresponden.
18. 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.
19. 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.
20. Apache Struts Framework
Un poco de historia…
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.
21. 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.
22. 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 (struts-config.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.
23. Apache Struts Framework (…)
Facilita y soporta la construcción de la interfaz
de la aplicación utilizando un conjunto de tags
predefinidos.
Lo que se busca es evitar el uso de scriptles,
que son trozos de código Java entre “<%” y
“%>”; para ganar mantenibilidad y
rendimiento.
Permite el desarrollo de sus componentes en
paralelo o por personal especializado.
24. 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.
25. 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.
26. 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.
27. 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.
29. 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
30. 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.
31. 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.
32. 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.
33. 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.
34. 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.
35. 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.
36. 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.
38. 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.
39. 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.
40. 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.
41. 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.
42. 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.
43. 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://struts.apache.org/tags-
html" prefix="html" %>
44. 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>
45. 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">
46. 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.
47. 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.
48. 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).
49. 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.
51. 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>
52. 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
54. Struts: Utilización II
En el struts-config.xml
<action path="/TestAction" type=
“aplicacion.TestAction“ >
<forward name="testAction" path=
"/pages/TestAction.jsp"/>
</action>
En el JSP inicial
<html:link page="/TestAction.do">Test the
Action</html:link>
57. 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.
58. 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.
59. 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.
60. 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.
61. 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.
62. 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.