Struts en Java

siis 13,199 views 62 slides Mar 14, 2008
Slide 1
Slide 1 of 62
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62

About This Presentation

No description available for this slideshow.


Slide Content

Struts : MVC en Java
8º Seminario Internacional de
Informática y Sistemas
Ing. Ana María Pacheco Aspilcueta

Agenda
Introducción
Conceptos fundamentales
Apache Struts Framework
Características
Controlador
Vista
Modelo
Utilización
Apache Struts Project

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 (…)
Ejemplo:
<servlet>
<servlet-name>action</servlet-name> ...
<init-param>
<param-name>application</param-name>
<param-value>
empresa.aplicacion.ApplicationResources
</param-value>
</init-param>

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

Struts: Utilización I (…)
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
<h3><bean:message key="welcome.heading"/></h3>
<p><bean:message key="welcome.message"/></p>
</body>
</html:html>

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>

Struts: Utilización II (…)
TestAction .java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class TestAction extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
return mapping.findForward("testAction"); } }

Struts: Utilización II (…)
En TestAction.jsp
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<html:html locale="true">
<head>
<title><bean:message key=“test.title"/></title>
</head>
<body bgcolor="white">
<h3><bean:message key=“test.mensaje"/></h3>
</body>
</html:html>

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/
Tags