2
Contenido
• Motivación Diseño Capa Presentación.
• Arquitectura Modelo/Vista/Controlador.
• Controlador.
• Vista.
• Control peticiones duplicadas.
3
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 Arquitecturaspara organizar los elementos.
Modelado Aplicaciones
Web
4
contenidoPrincipal <<Frame Content>>
Tema2
{target=contenido}
Navegacion
<<Frame Content>>
<<targeted link>>Regist ro
Cabecera <<Frame Content>>
<<link>>
FormRegist ro
<<Text>> nombre
<<Text>> nif
<<Text>> correo
<<password>> clave
<<submit>> enviar
Relación de
agregación
Registro
validarDatos()
f(){}
FormCheck
checkDNI(dni)
checkCorreo(correo)
5
Session
Cliente
ServletRegistro HashMap
put()
get()
usuariosusuarios
usuario : Stringusuario : String
1
+usuarios
1
{name="listaUsuarios"}
Isi
<<TagLib>>
{uri="/ isi" ;name="isi"}
Usuarios <<import>>
ListaUsuariosTag
usuarios : List
<<Tag>>
<<contains>>
{identificador="String"; nombre="String"
{engine="JSP"}
6
Arquitectura Capa
Presentación• Aplicación interactiva: Modelo/Vista/Controlador
Modelo
Vista
Controlador
Notifica Cambio
Notifica Interacción
Usuario
Selección Vista
Ejecuta
funcionalidad
Consulta Estado
•Modelo:•Encapsula estado aplicación
•Responde consultas estado
•Expone la funcionalidad
•Notifica cambios a la vista
•Vista:•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
7
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/
8
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>
9
FrontControllerHttpServlet
Accion
ejecutar()
ListaUsuariosAccion
ejecutar()
LoginAccion
ejecutar()
SalirAccion
ejecutar()
FrontController
Pet icionHelper
getAccion(peticion : HttpServletRequest) : Accion
FrontController helper :
PeticionHelper
act : Accion :
RequestDispatcher
act = getAcc ion(HttpServletRequest)
vista = ejecutar(HttpServletRequest, HttpServletResponse, ServletContext)
forward( HttpServletRequest, HttpServletResponse)
RequestDispatcher
asociado a "vista"
10
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
11
Esquema General
: Navegador FrontController
: Servlet
: Accion vista : JSP : JavaBean : Etiqueta
Peticion HTTP (GET/POST)
vista = ejecutar()
forward
Interacciona con
"Lógica de Negocio"
Obtiene Datos
Ejecuta "Lógica de
Presentación"Respuesta HTTP
Página Web
Controlador Modelo Vista
Prepara "Datos" en
JavaBeans
Controles
comunes
Asociación
Petición-Acción
12
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.