01 introducción

30
mayo de 2005 Introducción modelo MVC y arquitectura Struts

Upload: roberto-moreno-donoro

Post on 05-Jul-2015

424 views

Category:

Education


0 download

TRANSCRIPT

Page 1: 01 introducción

mayo de 2005

Introducción modelo MVC y arquitectura Struts

Page 2: 01 introducción

¿Qué es STRUTS?

Strut: “Componente estructural no visible que soporta una construcción o estructura”

Framework Opensource para construir aplicaciones web Java

Parte de proyecto Jakarta de Apache Se basa en JavaBeans, ResourceBundles,

XML, Jakarta Commons Fomenta el modelo MVC Model 2

Page 3: 01 introducción

Tecnologías subyacentes (I)

HTTP Protocolo original para transporte HTML Hoy transporte genérico de archivos Sin estado “solución” cookies y reescritura de URLs Petición (GET, POST) Respuesta (RESPONSE)

Common Gateway Interface (CGI) Origen del “web dinámico” Programas ejecutados por Servidor Web Dependientes de plataforma y necesitan “entender” HTML y

HTTP Sin estandarización

Page 4: 01 introducción

Tecnologías subyacentes (II)

Java Servlets Resuelven dos problemas de CGIs:

Rendimiento: Una instancia múltiples hilos Portabilidad: write-once run-anywhere Abstracción de sesión, petición, respuesta en base objetos Java.

Clases java que corren en contenedores (Tomcat, Jrun, Weblogic, …) Conexión: Servidor web (Apache, IIS) pasa al contenedor ciertas

URLs Autónomo: El contenedor incorpora servidor web

Inconvenientes: Misma pega que CGIs Programa renderiza html

out.println("<P>One line of HTML.</P>");out.println("<P>Another line of HTML.</P>");

Page 5: 01 introducción

Tecnologías subyacentes (III)

Java Server Pages (JSP) Servlet del “revés” página HTML con inserciones de código. Contenido dinámico:

Inserción código Java: Expresiones: <%= %>

<B> Hora de visita de esta página: <%= new Date() %></B>

Scriptlets <% %> Declaraciones <!% %>

JSP Tags (mayor limpieza que insertar código): Incorporadas (JSTL) Extensible Taglibs (Struts, definidas por usuario).

Alternativas en otros lenguajes: ASP (VisualBasic, .Net) PHP

Page 6: 01 introducción

Tecnologías subyacentes (IV)

Java Beans Clases java con estructura común

Propiedades privadas (datos) Métodos de acceso públicos:

Lectura (accessors): getPropiedad() isPropiedad() Escritura (mutators): setPropiedad()

Manipulables por introspección (sin necesidad de conocer nombre de propiedades)

Estándar de paso de variables a JSPs

Page 7: 01 introducción

JSP Model 1

JSP Model 1. Primera recomendación diseño de aplicaciones web en base a JSPs

JSPs, JavaBeans, JDBC Vigente para aplicaciones sencillas

Page 8: 01 introducción

Problemas Model 1 Código spaguetti:

Lógica compleja conduce a diversos flujos que se entremezclan dentro de un JSP (condiciones y bucles)

Difícil reutilización Cada JSP suele ser autocontenida, incorpora toda la funcionalidad.

Prácticas Copy&Paste (repetición de funcionalidad) El código tiende a ser no modular

Las actualizaciones requieren modificaciones en muchos sitios. Dificil de modificar aspecto.

Tareas entremezcladas (perdida de eficiencia) Diseñador gráfico debe saber programar y/o programador diseñar

interfaces gráficas. Depuración problemática

Los contenedores de servlets devuelve error en línea de JSP convertido a Servlet.

Page 9: 01 introducción

Origen MVC Finales de los 70 Aparecen GUIs MVC (Model – View – Controller):

Comienzos de los 80 framework de Smalltalk para crear interfaces de usuario

Partes: Modelo: Sistema contenedor de datos Vista: Sistema de presentación (salida) Controlador: Lógica de interacción usuario (entrada)

Page 10: 01 introducción

Model 2 Especificación 0.92 de Servlets/JSP introduce la arquitectura Model 2.

Incorpora conceptos de MVC A veces se conoce MVC2 o Web MVC Separación lógica/presentación:

Datos representados en JavaBeans (modelo), que contienen lógica de negocio y estado de la aplicación.

Servlets (controlador) gestionan acceso a datos y el flujo de navegación (controlador)

JSPs gestionan la presentación (vista).

Page 11: 01 introducción

¿Por qué Struts?

Aplicaciones web componentes críticos para empresas:

Listas en tiempo record Deben durar

Gran cantidad de tecnologías disponibles Java Presentación: JSPs, plantillas Velocity Manejo de BBDD: JDBC y EJBs

¿Cómo juntamos todo en tiempo record?Struts

Page 12: 01 introducción

Introducción Struts

Struts: Elemento central Controlador MVC. Puente entre vista y

controlador Incorpora elementos necesarios “invisibles” comunes a toda

aplicación web profesional

Beneficios Refuerza la modularidad y partición de la aplicación Incrementa la separación de roles Incrementa la manejabilidad del código Incrementa la extensibilidad del código Centra al desarrollador en la lógica de negocio. Reduce el TCO de una aplicación, reduciendo sus costes de

desarrollo y mantenimiento

Page 13: 01 introducción

Arquitectura Componentes del sistema:

Modelo: Combinación de EJBs, Java Beans y clases derivadas de la clase

de Struts ActionForm Vista:

Representada por JSPs, para los cuales Struts proporciona librerías de JSP Tags. Aunque no obliga a usar JSPs, favorece su utilización.

Controlador: Implementado a través del servlet ActionServlet que llama a las

clases derivadas de Action que se definan.

Configuración: A través del fichero web.xml (común a toda aplicación web) y

el fichero struts-config.xml (común a toda aplicación que haga uso de struts)

Page 14: 01 introducción

Componentes Controlador (I)

Interacción con el usuario: Formularios Recogen información de usuario. Acciones (Actions) Envían datos de formularios. Hiperenlaces Envían usuario a otra pág.

Componentes principales de Struts: ActionForm. Permite definir formularios e

hiperenlaces Actions a medida. Derivando de la clase base

Action se implentan acciones.

Page 15: 01 introducción

Componentes Controlador (II)

Hiperenlaces: Enlace a un recurso en la aplicación Modelados a través de clase

ActionForward. Definidos por configuración. Ejemplo:

<forward name="welcome“ path="/pages/index.jsp"/>

JSPs y otros componentes lo referenciarán por el nombre (“welcome”)

Page 16: 01 introducción

Componentes Controlador (III)

Formularios: HTML y HTTP proporcionan mecanismos para enviar información de usuario

a la aplicación Struts proporciona la clase ActionForm.

Son JavaBeans con métodos para validar los datos recibidos El desarrollador sólo define el ActionForm y Struts mapea automáticamente

sus propiedades con campos del formulario HTML con el mismo nombre.

public final class LogonForm extends ActionForm { private String username = null; public String getUsername() { return (this.username);

} public void setUsername(String username) { this.username = username; }}

Page 17: 01 introducción

Componentes Controlador (IV)

Formularios: Referencia desde configuración:

<form-bean

name="articleForm"

type="org.apache.artimus.struts.Form"/>

Page 18: 01 introducción

Componentes Controlador (V)

Actions a medida: En un formulario “action” es a dónde van dirigidos los datos Struts proporciona Action para recoger los datos en cuestión,

que se le proporcionan a través de un ActionForm. Ejemplo:

public final class LogonAction extends Action { public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { MyForm myForm = (MyForm) form; // ... return mapping.findForward("continue"); }}

Page 19: 01 introducción

Componentes Controlador (VI)

Actions a medida: Desde la versión 1.1 de Struts se prefiere el método execute() frente a

perform() ActionMapping.

De cara al exterior sirve para proporcionar una URI a un Action determinado. Se especifica por configuración. Ejemplo:<action-mappings><action path="/logonSubmit" type="app.LogonAction" name="logonForm" scope="request" validate="true" input="/pages/logon.jsp"/></action-mappings>

Clase derivada de ActionMapping

¿Requiere validación?

URI

Page 20: 01 introducción

Componentes Controlador (VII)

ActionServlet: Pieza central. “Reparte el juego”. Recibe todas las peticiones y redirecciona al

action determinado. También completa y valida los ActionForms.

Extensible. Puede extenderse a través de subclases (no habitual).

Page 21: 01 introducción

Componentes Modelo (I)

JavaBeans: No son parte de Struts, sino son parte de

especificación de Java. Struts no fija en dónde se almacena el modelo

(EJBs, BBDD relacional, servidor LDAP). Habitualmente relacionados con ActionForms.

Recomendable separarlos Struts ofrece funcionalidad para “mapear” propiedades de

ActionForm a JavaBean del modelo

Page 22: 01 introducción

Componentes Vista (I)

JSPs: Struts no obliga utilizar JSPs para la vista, podría

utilizarse otras alternativas (templates velocity). Struts incluye librerías de tags.

Facilitan interacción con componentes de controlador Incorporan lógica útil (p.e. facilidad para incorporar bucles

en presentación) Incorporan funcionalidad adicional: Soporte para

internacionalización.

Alguna funcionalidad se ha incorporado en la especificación JSTL (Struts es anterior a JSTL)

Page 23: 01 introducción

Componentes Vista (II)

JSPs: struts-html.tld. Tags JSP que encapsulan componentes de

formularios HTML.

JSP “normal”: <input type="text" name="username“

value="<%=loginBean.getUsername() >"/>

Tags Struts: <html:text property="username"/>

struts-bean.tld. Tags JSP para el manejo de beans y soporte de internacionalización adicional al nativo de Java (parte de funcionalidad en JSTL).

Page 24: 01 introducción

Componentes Vista (III)

JSPs: struts-logic.tld. Tags para testear valores de

propiedades (mucha funcionalidad presente en JSTL), iterar sobre colecciones, etc. Ejemplo. Iteración sobre beans de una HashTable:

<logic:iterate id="element" name="myhashtable">Next element is <bean:write

name="element“ property="value"/>

</logic:iterate>

struts-nested.tld. Tags JSP que permiten acceder de forma ordenada a beans encapsulados en otros beans (anidamiento).

Page 25: 01 introducción

Componentes Vista (IV)

JSPs: struts-tiles.tld. Tags para crear bloques

reutilizables de presentación (tiles). Facilita cambiar el aspecto general de una aplicación (Look & Feel). Se basa en la directiva include de los JSPs Permite crear definiciones de pantalla en base a bloques:

cabecera, pie, menu, cuerpo, etc. Permite definir distribuciones uniformes para todo el sitio (layouts) Ofrece un soporte alternativo para internacionalización (Tiles

diferentes dependiendo del Locale).

Vistas diferentes según roles, tipo de navegador, etc.

Page 26: 01 introducción

Configuración (I)

web.xml: Todo lo que recibe el ServletContainer va a

parar al ActionServlet. Mapping de URLs (2 esquemas):

*.do /do/*

Especificación de qué librerías de tags se van a utilizar (incluir taglibs adecuadas)

<taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib>

Page 27: 01 introducción

Configuración (II)

ApplicationResources.properties Fichero properties utilizado por defecto para las

etiquetas de los mensajes internacionalizados. struts-config.xml:

Los componentes están débilmente acoplados para permitir reutilización e independencia unos de otros

Struts-config.xml configura la relación entre ellos. Define principalmente:

Action-mappings: Qué Actions ha de aceptar el ActionServlet

Form-beans: Las clases ActionForms que aceptará como entrada la aplicación

Page 28: 01 introducción

Configuración (III)

Ejemplo struts-config.xml:

Page 29: 01 introducción

Todo en uno

Page 30: 01 introducción

Referencias

MVC: http://ootips.org/mvc-pattern.html http://www.object-arts.com/EducationCentre/Overviews/MVC.htm

JSP/Servlets: http://java.sun.com/products/servlet/ http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

Struts: http://struts.apache.org/ http://rollerjm.free.fr/pro/Struts11.html