Está en la página 1de 30

Introduccin modelo MVC y arquitectura Struts

mayo de 2005

Qu es STRUTS?
Strut: Componente estructural no visible que soporta una construccin 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

Tecnologas subyacentes (I)

HTTP
Protocolo original para transporte HTML Hoy transporte genrico de archivos Sin estado solucin cookies y reescritura de URLs Peticin (GET, POST) Respuesta (RESPONSE)

Common Gateway Interface (CGI)


Origen del web dinmico Programas ejecutados por Servidor Web Dependientes de plataforma y necesitan entender HTML y HTTP Sin estandarizacin

Tecnologas subyacentes (II)

Java Servlets
Resuelven dos problemas de CGIs:
Rendimiento: Una instancia mltiples hilos Portabilidad: write-once run-anywhere Abstraccin de sesin, peticin, respuesta en base objetos Java.

Clases java que corren en contenedores (Tomcat, Jrun, Weblogic, )


Conexin: Servidor web (Apache, IIS) pasa al contenedor ciertas URLs Autnomo: El contenedor incorpora servidor web Misma pega que CGIs Programa renderiza html

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

Tecnologas subyacentes (III)

Java Server Pages (JSP)


Servlet del revs pgina HTML con inserciones de cdigo. Contenido dinmico:
Insercin cdigo Java:
Expresiones: <%= %> <B> Hora de visita de esta pgina: <%= new Date() %></B>

Scriptlets <% %> Declaraciones <!% %>


Incorporadas (JSTL) Extensible Taglibs (Struts, definidas por usuario).

JSP Tags (mayor limpieza que insertar cdigo):


Alternativas en otros lenguajes:


ASP (VisualBasic, .Net) PHP

Tecnologas subyacentes (IV)


Java Beans
Clases java con estructura comn
Propiedades privadas (datos) Mtodos de acceso pblicos:
Lectura (accessors): getPropiedad() isPropiedad() Escritura (mutators): setPropiedad()

Manipulables por introspeccin (sin necesidad de conocer nombre de propiedades) Estndar de paso de variables a JSPs

JSP Model 1
JSP Model 1. Primera recomendacin diseo de aplicaciones web en base a JSPs
JSPs, JavaBeans, JDBC

Vigente para aplicaciones sencillas

Problemas Model 1

Cdigo spaguetti:
Lgica compleja conduce a diversos flujos que se entremezclan dentro de un JSP (condiciones y bucles)

Difcil reutilizacin
Cada JSP suele ser autocontenida, incorpora toda la funcionalidad. Prcticas Copy&Paste (repeticin de funcionalidad)

El cdigo tiende a ser no modular


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

Tareas entremezcladas (perdida de eficiencia)


Diseador grfico debe saber programar y/o programador disear interfaces grficas.

Depuracin problemtica
Los contenedores de servlets devuelve error en lnea de JSP convertido a Servlet.

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 presentacin (salida) Controlador: Lgica de interaccin usuario (entrada)

Model 2

Especificacin 0.92 de Servlets/JSP introduce la arquitectura Model 2.


Incorpora conceptos de MVC A veces se conoce MVC2 o Web MVC

Separacin lgica/presentacin:
Datos representados en JavaBeans (modelo), que contienen lgica de negocio y estado de la aplicacin. Servlets (controlador) gestionan acceso a datos y el flujo de navegacin (controlador) JSPs gestionan la presentacin (vista).

Por qu Struts?

Aplicaciones web componentes crticos para empresas:


Listas en tiempo record Deben durar

Gran cantidad de tecnologas disponibles Java


Presentacin: JSPs, plantillas Velocity Manejo de BBDD: JDBC y EJBs

Cmo juntamos todo en tiempo record? Struts

Introduccin Struts

Struts:
Elemento central Controlador MVC. Puente entre vista y controlador Incorpora elementos necesarios invisibles comunes a toda aplicacin web profesional

Beneficios
Refuerza la modularidad y particin de la aplicacin Incrementa la separacin de roles Incrementa la manejabilidad del cdigo Incrementa la extensibilidad del cdigo Centra al desarrollador en la lgica de negocio. Reduce el TCO de una aplicacin, reduciendo sus costes de desarrollo y mantenimiento

Arquitectura

Componentes del sistema:


Modelo:
Combinacin de EJBs, Java Beans y clases derivadas de la clase de Struts ActionForm Representada por JSPs, para los cuales Struts proporciona libreras de JSP Tags. Aunque no obliga a usar JSPs, favorece su utilizacin. Implementado a travs del servlet ActionServlet que llama a las clases derivadas de Action que se definan.

Vista:

Controlador:

Configuracin:
A travs del fichero web.xml (comn a toda aplicacin web) y el fichero struts-config.xml (comn a toda aplicacin que haga uso de struts)

Componentes Controlador (I)

Interaccin con el usuario:


Formularios Recogen informacin de usuario. Acciones (Actions) Envan datos de formularios. Hiperenlaces Envan usuario a otra pg.

Componentes principales de Struts:


ActionForm. Permite definir formularios e hiperenlaces Actions a medida. Derivando de la clase base Action se implentan acciones.

Componentes Controlador (II)


Hiperenlaces:

Enlace a un recurso en la aplicacin Modelados a travs de clase ActionForward. Definidos por configuracin. Ejemplo:
<forward name="welcome path="/pages/index.jsp"/>

JSPs y otros componentes lo referenciarn por el nombre (welcome)

Componentes Controlador (III)

Formularios:
HTML y HTTP proporcionan mecanismos para enviar informacin de usuario a la aplicacin Struts proporciona la clase ActionForm.
Son JavaBeans con mtodos para validar los datos recibidos

El desarrollador slo define el ActionForm y Struts mapea automticamente 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; } }

Componentes Controlador (IV)


Formularios:
Referencia desde configuracin:
<form-bean name="articleForm" type="org.apache.artimus.struts.Form"/>

Componentes Controlador (V)

Actions a medida:
En un formulario action es a dnde van dirigidos los datos Struts proporciona Action para recoger los datos en cuestin, que se le proporcionan a travs 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"); } }

Componentes Controlador (VI)

Actions a medida:
Desde la versin 1.1 de Struts se prefiere el mtodo execute() frente a perform()

ActionMapping.
De cara al exterior sirve para proporcionar una URI a un Action determinado. Se especifica por configuracin. Ejemplo: <action-mappings> <action path="/logonSubmit" URI type="app.LogonAction" Clase derivada name="logonForm" de ActionMapping scope="request" validate="true" Requiere input="/pages/logon.jsp"/> validacin? </action-mappings>

Componentes Controlador (VII)


ActionServlet:
Pieza central. Reparte el juego. Recibe todas las peticiones y redirecciona al action determinado. Tambin completa y valida los ActionForms. Extensible. Puede extenderse a travs de subclases (no habitual).

Componentes Modelo (I)

JavaBeans:
No son parte de Struts, sino son parte de especificacin de Java. Struts no fija en dnde 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

Componentes Vista (I)

JSPs:
Struts no obliga utilizar JSPs para la vista, podra utilizarse otras alternativas (templates velocity). Struts incluye libreras de tags.
Facilitan interaccin con componentes de controlador Incorporan lgica til (p.e. facilidad para incorporar bucles en presentacin) Incorporan funcionalidad adicional: Soporte para internacionalizacin.

Alguna funcionalidad se ha incorporado en la especificacin JSTL (Struts es anterior a JSTL)

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 internacionalizacin adicional al nativo de Java (parte de funcionalidad en JSTL).

Componentes Vista (III)

JSPs:
struts-logic.tld. Tags para testear valores de propiedades (mucha funcionalidad presente en JSTL), iterar sobre colecciones, etc.
Ejemplo. Iteracin 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).

Componentes Vista (IV)

JSPs:
struts-tiles.tld. Tags para crear bloques reutilizables de presentacin (tiles). Facilita cambiar el aspecto general de una aplicacin (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 internacionalizacin (Tiles diferentes dependiendo del Locale).

Vistas diferentes segn roles, tipo de navegador, etc.

Configuracin (I)
web.xml:

Todo lo que recibe el ServletContainer va a parar al ActionServlet. Mapping de URLs (2 esquemas):


*.do /do/*

Especificacin de qu libreras 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>

Configuracin (II)

ApplicationResources.properties
Fichero properties utilizado por defecto para las etiquetas de los mensajes internacionalizados.

struts-config.xml:
Los componentes estn dbilmente acoplados para permitir reutilizacin e independencia unos de otros Struts-config.xml configura la relacin entre ellos. Define principalmente:

Action-mappings: Qu Actions ha de aceptar el ActionServlet Form-beans: Las clases ActionForms que aceptar como entrada la aplicacin

Configuracin (III)
Ejemplo struts-config.xml:

Todo en uno

Referencias

MVC:
http://ootips.org/mvc-pattern.html http://www.objectarts.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

También podría gustarte