Diseño de la capa de presentación Aplicaciones Distribuidas Contenido • Motivación Diseño Capa Presentación. • Arquitectura Modelo/Vista/Controlador. • Controlador. • Vista. • Control peticiones duplicadas. 2 Motivación • Muchas tecnologías: • HTTP, HTML dinámico, JavaScript, Servlets, JSP, JavaBeans, Etiquetas de Extensión, ... • En una aplicación web existen “relaciones de navegación”. • Es necesario controlar el acceso a los recursos y la navegación. • Debemos evitar el procesamiento de peticiones duplicadas. • ... • Modelado Aplicaciones Web y definir Arquitecturas para organizar los elementos. 3 Modelado Aplicaciones Web f(){ } FormCheck checkDNI(dni) checkCorreo(correo) Cabecera FormRegist ro Registro validarDatos() <<Fra me Content>> Relación de agregación Principal <<Text>> nombre <<Text>> nif <<Text>> correo <<password>> clave <<submit>> enviar <<Frame Content>> contenido <<link>> <<Frame Content>> Regist ro Navegacion <<targeted link>> {target=cont enido} 4 Tema2 Session usuarios ServletRegistro HashMap +usuarios 1 Usuarios usuario : String put() get() <<import>> Cliente <<TagLib>> Isi {uri="/ isi" ;name="isi"} <<contains>> {engine="JSP"} {name="listaUsuarios"} {identificador="String"; nombre="String" 5 <<Tag>> ListaUsuariosTag usuarios : List Arquitectura Capa Presentación • Aplicación interactiva: Modelo/Vista/Controlador Consulta Estado Modelo Notifica Cambio Vista •Modelo: Ejecuta funcionalidad •Vista: Selección Vista Notifica Interacción Usuario •Encapsula estado aplicación •Responde consultas estado •Expone la funcionalidad •Notifica cambios a la vista Controlador •Visualiza el modelo. •Solicita actualizaciones del modelo •Envía interacciones usuario al controlador •Permite que el controlador seleccione la vista •Controlador: •Define el comportamiento aplicación •Correspondencia acciones usuario actualizaciones del modelo •Selecciona la vista para la respuesta 6 Modelo/Vista/Controlador Aplicación • Limitaciones tecnologías web: • El modelo no puede notificar eventos a la interface gráfica. • Las interacciones del usuario están restringidas a peticiones HTTP. • Enviadas por el navegador. • Aplicación MVC en entornos web (J2EE): • Modelo: Enterprise JavaBeans, objetos distribuidos, datos (DAO). • Vista: JSP, Navegador • Controlador: Servlet • Framework Struts: • http://jakarta.apache.org/struts/ 7 Controlador • Roles: • Definición del comportamiento de la aplicación. • Control de Seguridad. • Log, ... • Correspondencia peticiones-acción en el modelo. • Patrón Command (retorna selección de vista). • Seleccionar la vista para la respuesta. • Obtenida a partir de la acción. • Implementación basada en Servlets (patrón Frontcontroller) . • Correspondencia URL lógicas (web.xml): <servlet-mapping> <servlet-name>FrontController<servlet-name> <url-pattern>*.ctrl</url-pattern> </servlet-mapping> 8 FrontController Pet icionHelper getAccion(peticio n : Http Servl etRequest) : Accion Ht tpServlet Accion Front Controller ejecutar() ListaUsuariosAccion LoginAccion SalirAccion ejecutar() ejecutar() ejecutar() FrontController helper : PeticionHelper act : Accion : RequestDi spatcher act = get Acc ion(Htt pS ervletRequest) RequestDispatcher asociado a "vista" vista = ejecutar(HttpServletRequest, HttpServletResponse, ServletContext) forward( HttpServletRequest, HttpServletResponse) 9 Vista • Página JSP: genera la vista • Página Web, fichero XML, ... • Navegador visualiza la vista. • La elección de la vista depende de la acción a realizar y del resultado: clases Acción. • Responsabilidades de la página JSP: • Recoger los datos a visualizar utilizando JavaBeans. • Utilizar etiquetas de extensión para la lógica de la presentación (iteraciones, reescrituras URL, ...) • Patrones “View Helper” y “Service to Worker”. • Cumple principios JSP: separación roles. • Ocultar las vistas (páginas JSP) al cliente: • Directorio inaccesible: /WEB-INF/privado 10 Esquema General Controlador : Navegador Modelo : Accion FrontController : Servlet Peticion HTTP (GET/POST) Vist a vista : JSP : JavaBean Controles comunes Asociación Petición-Acción Interacciona con "Lógica de Negocio" vista = ejecutar() Prepara "Datos" en JavaBeans forward Obtiene Datos Ejecuta "Lógica de Presentación" Respuesta HTTP Página Web 11 : Etiqueta Peticiones Duplicadas • Motivación: • Controlar la navegación del cliente. • Evitar procesamiento de formularios duplicados. • Solución: Token de Sincronización. • Token: identificador único. • Cada formulario incluye un campo oculto con un token. • En una sesión de navegación existe un “token actual”. • Enviado en el último formulario. • Sólo se procesa el formulario si contiene el token actual. • Se comprueba la validez del token antes de procesar la respuesta • Responsabilidad del controlador. • Token generado por una etiqueta de extensión. 12