01 introducción

579 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
579
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
44
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

01 introducción

  1. 1. Introducción modelo MVC y arquitectura Struts mayo de 2005
  2. 2. ¿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
  3. 3. 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
  4. 4. 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>");
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. 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.
  9. 9. 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)
  10. 10. 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).
  11. 11. ¿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
  12. 12. 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
  13. 13. 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)
  14. 14. 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.
  15. 15. 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”)
  16. 16. 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; } }
  17. 17. Componentes Controlador (IV) Formularios:  Referencia desde configuración: <form-bean name="articleForm" type="org.apache.artimus.struts.Form"/>
  18. 18. 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"); } }
  19. 19. 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" URI type="app.LogonAction" name="logonForm" Clase derivada scope="request" de ActionMapping validate="true" input="/pages/logon.jsp"/> ¿Requiere </action-mappings> validación?
  20. 20. 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).
  21. 21. 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
  22. 22. 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)
  23. 23. 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).
  24. 24. 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).
  25. 25. 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.
  26. 26. 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>
  27. 27. 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
  28. 28. Configuración (III) Ejemplo struts-config.xml:
  29. 29. Todo en uno
  30. 30. Referencias MVC:  http://ootips.org/mvc-pattern.html  http://www.object-arts.com/EducationCentre/Overviews/M 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

×