SlideShare una empresa de Scribd logo
3ra. Reunión de SpringHispano How to run Spring MVC por neodevelop
Acerca de mi... La referencia total: SpringHispano.org y grails.org.mx
Agenda Vista general de SpringFramework El patrón de diseño MVC Spring MVC Componentes Funcionamiento Configurar una Aplicación con Spring MVC Más componentes de Spring MVC Más de Spring MVC...
SpringFramework “ Spring es una tecnología dedicada para permitir construir aplicaciones usando POJO’s…”, Rod Johnson – The Server Side
SpringFramework Spring es un poderoso framework de aplicaciones que resuelve muchos problemas comunes en el desarrollo de aplicaciones Java (SDK y EE).
Vista general de SpringFramework
El patrón de diseño MVC MVC =  Model – View – Controller Provee de un mecanismo para construir una delgada y limpia capa web Claramente separa el negocio, la navegación y la lógica de presentación
El patrón de diseño MVC Los tres componentes que colaboran son: Controller(Controlador)‏ Maneja la lógica de navegación e interactua con la capa de servicio para la lógica de negocio Model(Modelo)‏ El contrato entre el controller y la vista  Contiene los datos necesarios para mostrarlos en la vista Es manejado y poblado por el controller View(Vista)‏ Muestra la respuesta a la solicitud previamente hecha Obtiene los datos del modelo previamente manejado por el controller
El patrón de diseño MVC
Motivaciones Facilita la carga de mantenimiento Los cambios a la lógica de negocio son menos probables de romper la lógica de la presentación Viceversa
Motivaciones Facilita el desarrollo en un equipo multidisciplinario Los desarrolladores pueden concentrarse en en crear código de negocio robusto sin tener que preocuparse por afectar la Interfaz de Usuario Los diseñadores pueden concentrarse en construir usables y atractivas Interfaces de Usuario sin preocuparse por Java
Motivaciones Usa la mejor herramienta para tu trabajo Java es apropiado para crear lógica de negocio Los lenguajes de plantillas y etiquetado son más apropiados para crear layouts HTML.
Motivaciones Facilita las pruebas La lógica de navegación y de negocio están separadas de la lógica de presentación lo que sugiere que pueden ser probadas independiemtemente. Practicamente: podemos probar más código fuera del contendor de servlets
Spring MVC Spring provee de una solución simple y eficaz para usar el patrón MVC Y ahora con la versión 2.5 ofrece también el uso de anotaciones Hay quienes dicen que es un framework de la ola anterior... ¿será cierto?, ya veremos ahora que SS esta dentro del JCP
MVC en Spring Un solo servlet que maneja solicitudes a controllers individuales, con ayuda de un controller principal. El ruteo de solicitudes es completamente controlado por el Controller Frontal o principal. Controllers individuales pueden ser usados ara manejar varias y diferentes URL's Los controllers son POJO's Y los controllers son manejados como cualquier otro bean de Spring en el AppCtx
Componentes de Spring MVC DispatcherServlet La implementación del controller frontal de Spring Controller Componente que maneja los request del usuario Encapsula la lógica de navegación Delega a los objetos de los servicios  la lógica de negocio View Responsable para mostrar la salida, sea cual sea...
Componentes de Spring MVC ModelAndView Creado por el controller Almacena los datos del Modelo Asocia una vista al Request Puede ser la implementación de una vista física o el nombre de una vista lógica ViewResolver Usado para mapear nombres de vistas lógicas a implementaciones de vista actuales
Componentes de Spring MVC HandlerMapping Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales
Funcionamiento de Spring MVC
MVC y D.I. Todos los componentes MVC son configurados en el AppCtx de Spring Y como tal, todos los componentes de Spring se benefician y pueden ser configurados usando D.I.
Configurar una App con Spring MVC
Spring MVC - DispatcherServlet Como muchos framework’s MVC, tambien SpringMVC es Request Driven(Manejado por Solicitudes)‏ DispatcherServlet.- Es el servlet central que atiende todas esta solicitudes y las gestiona Ofrece mucha más funcionalidad para facilitar el desarrollo Esta completamente integrado con el contenedor de Spring, con todo lo que esto implica
Spring MVC - DispatcherServlet <servlet> <servlet-name>springhispanoServlet</servlet-name> <servlet-class> org . springframework .web. servlet .DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springhispanoServlet</servlet-name> <url-pattern>*. html </url-pattern> </servlet-mapping>
WebApplicationContext Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina WebApplicationContext El WebAppCtx va a contener la configuración de los elementos para que SpringMVC funcione El WebAppCtx va a poder usar los beans(DAO’s, Servicios, etc.) que se declararon en el contexto de la aplicación
Elementos del WebAppCtx Controllers Handler Mappings View Resolvers Locale Resolvers Theme Resolver Interceptors Handler Exception Resolver
Controller y AbstractController El tipo de Controller más simple Solo requiere implementar el método handlerRequestInternal()‏ Le envía un ModelAndView al WebAppCtx para que determine el view y alimente con el modelo su contenido
SimpleUrlHandlerMapping Es un tipo de HandlerMapping Víncula directamente la URL con el controller que se ejecutará Se pueden usar Ant Path’s para vincular varias URL’s a un Controller
InternalResourceViewResolver Es un tipo de ViewResolver Se le debe indicar a través de un prefijo la ubicación de los archivos de views o JSP Permite poner detrás de WEB-INF las JSP’s Se le indica con un sufijo de que tipo son las vistas que va a utilizar para mostrar
Ahora si... Hola Mundo con SpringMVC
Más controllers… Controller AbstractController MultiActionController BaseCommandController AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController ThrowawayController ParameterizableViewController
Más Handler Mappings… BeanNameUrlHandlerMapping SimpleUrlHandlerMapping CommonsPathHandlerMapping ControllerClassNameHandlerMapping DefaultAnnotationHandlerMapping
Más View Resolvers.. AbstractCachingViewResolver XmlViewResolver XsltViewResolver ResourceBundleViewResolver UrlBasedViewResolver BeanNameViewResolver InternalResourceViewResolver VelocityViewResolver  /  FreeMarkerViewResolver
Otros conceptos... Command: Clase que será modificada mediante un formulario, generalmente un Java Bean, es parte del Modelo Bind: Es la acción de asignar los parámetros de un request a un Java Bean y vicecersa
¿Qué más provee Spring MVC? Spring's form tag library Spring provee para las views de una librería que ayuda a facilitar el binding de objetos de un formulario Cada tag provee un conjunto de atributos correspondientes al tipo de elemento para no dejar de lado la funcionalidad Solo hay que agregar la taglib al encabezado de la View: <%@ taglib prefix=&quot;form&quot; uri=&quot;http://www.springframework.org/tags/form&quot; %>
Otro controller util: MultiActionController Un controller que maneja diferentes tareas Multiples metodos para manejar Cada método maneja un request diferente MethodNameResolver determina el método Basado en un parametro o en otro criterio Los métodos regresan un ModelAndView Muy bueno para agrupar tareas relacionadas en una sola clase
Creando un MultiActionController public   class  ReportController  extends  MultiActionController { public  ModelAndView handleSimpleReport(HttpServletRequest request, HttpServletResponse response)  throws  Exception { return   new  ModelAndView(&quot;simpleReport&quot;, getModel()); } public  ModelAndView handleSimpleReportPost(HttpServletRequest request, HttpServletResponse response)  throws  Exception { String reportTitle = request.getParameter(&quot;reportTitle&quot;); Map  model = getModel(); model.put(&quot;ReportTitle&quot;, reportTitle) ; return   new  ModelAndView(&quot;simpleReportCompile&quot;, model); } ...
Configurando un MultiActionController <bean id= &quot;controller&quot;  class= &quot;org.springframework.samples.jasperdemo.web.ReportController&quot; > <property name= &quot;methodNameResolver&quot; > <ref local= &quot;resolver&quot; /> </property> </bean> <bean id= &quot;resolver&quot;  class= &quot;org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver&quot; > <property name= &quot;mappings&quot; > <props> <prop key= &quot;/simpleReport.pdf&quot; >handleSimpleReport</prop> <prop key= &quot;/simpleReportPost.pdf&quot; >handleSimpleReportPost</prop> </props> </property> </bean>
Integración con vista  Spring MVC provee de la integración con otras tecnologías de vista como: JSP & JSTL Tiles Velocity & Freemarker XSLT PDF JasperReports
Let's code... Veamos un ejemplo...
¿Qué más puedo hacer? Manejar Beans en formularios con SimpleFormController Agregar lógica de “binding” en los datos tratados desde la vista Agregar lógica de desplegado de errores en la vista Definir un objeto Command para la forma Agregar lógica en el Submit de la forma Además Agregar lógica de validación
¿Cómo funciona SimpleFormController? Su funcionamiento depende del método del request(modificable): GET => Implica mostrar el formulario por lo que se carga el modelo para desplegar la view indicada en un parametro denominado ‘formView’ POST => Sucede cuando hay un envío de formulario implicado, por lo que se procede a ejecutar las acciones necesarias con el Command, y mostrar la View indicada en ’successView’
Request GET – Desplegar la forma formBackingObject()‏ Prepara y entrega el objeto Command Permite el pre-llenado de la forma referenceData()‏ Carga los datos de referencia necesarios para desplegar la forma showForm()‏ Completa el ModelAndView y lo regresa Poner el objeto Command en sesión si es necesario Muestra la forma a trabajar
Request GET – Envío de la forma onBind()‏ Llamado después del bind pero antes de la validación Permite manualmente hacer el bind de los parametros del request del objeto Command antes de la validación formBackingObject()‏ Entrega el objeto Command Quizá de la sesió, o quizá de base de datos Si la validación falla entonces se agregan los errores al ModelAndView y son mostrados en la forma
Request GET – Envío de la forma Si la validación es satisfactoria, es decir, no hay errores, entonces se llama onSubmit()‏
¿Muchos métodos no? Veremos una forma más efectiva de hacer esto... :D Afortunadamente tenemos a Spring 2.5 con las nuevas características... Pero más adelante...
Arquitectura de Validación No está atada a HttpServletRequest No esta atada a la capa Web Validación de objetos de dominio Entrada de los clientes remotos también necesita validación Puede ser probada desde fuera del contenedor Implemenetación independente Conversión de errores son no-fatal
Creando un validador public   class   ClienteValidator   implements   Validator  { public   boolean  supports( Class  clazz) { return   Cliente . class .equals(clazz); } public   void  validate(Object obj,  Errors  errors) { //Casting  del   objeto Cliente  cliente = ( Cliente )obj; //  Validaciones ValidationUtils .rejectIfEmpty(errors, &quot;nombre&quot;, &quot;nombre.empty&quot;,&quot;El nombre no puede ir vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;direccion&quot;, &quot;direccion.empty&quot;,&quot;La direccion no puede ir  vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;RFC&quot;, &quot;RFC.empty&quot;,&quot;El RFC no puede ir vacÂ’o...&quot;); if (cliente.getNombre().length()<=2)‏ errors.rejectValue(&quot;nombre&quot;, &quot;nombre.length&quot;, &quot;El nombre debe ser mayor de dos caracteres&quot;); } }
Configurando un validador <bean id=&quot;clienteForm&quot; class=&quot;org.springhispano.web.FormaCliente&quot;> <property name=&quot;formView&quot; value=&quot;editCliente&quot;/> <property name=&quot;successView&quot; value=&quot;redirect:list.htm&quot;/> <property name=&quot;service&quot; ref=&quot;service&quot;/> <property name=&quot;validator&quot; ref=&quot;clienteValidator&quot;/> </bean>
Pero también... Existe un proyecto de Spring llamado  Spring Modules Validations Basado en anotaciones, como: @NotNull @Email @Length @MinLength @MaxLength @NotBlank Otras más...
SpringMVC 2.5 Basados en anotaciones: @Controller @RequestMapping @SessionAttributes @RequestParam @InitBinder @ModelAttribute
@Controller Habilita que cierta clase declarada actue como Controller No hay necesidar de heredar alguna otra clase El proposito básico de @Controller es actuar como estereotipo para la clase anotada Para complementar la configuración nos ayudaremos de @RequestMapping
@RequestMapping Es usada para mapear las URL’s como por ejemplo: ‘/forma.spring’, ‘hi.form’, etc. Tipicamente el tipo de nivel de la anotación mapea un request en un FormController Y adicionalmente le dicta su comportamiento en base al acceso de la URL con ayuda de los metodos GET y POST
@RequestParam Permite Mapear un atributo a través el método GET de la aplicación Se declara por lo general dentro de la firma del método como un parametro más Hace el binding por sí solo
@ModelAttribute Permite Mapear un atributo o bien un Command completo de un formulario Html Tambien permite enviar un modelo de datos al view Se declara en la firma del método como un parametro más del mismo
@SessionAttributes Lista los nombres de los atributos del modelo que deben ser almacenados en sesión Permite que dichos objetos puedan ser utilizados en request posteriores, si es el caso...
Un ejemplo al fin... Ya era hora !!!
Resumen técnico
Más de SpringMVC Usar todos los HandlerMappings, ViewResolvers Implementar velocity, freemarker, tiles... Aplicar interceptores Manejar excepciones Usar otros controllers Internacionalización Temas Ajax: Dojo, Prototype, Script.aculo.us,DWR BTW, si hay tiempo veamos DWR
Más de SpringMVC Integración con: JSF Struts 1.x y 2.x Webwork Tapestry WebFlow 2(Subproyecto de Spring)‏ Portlet's Algunos WebServices Nos gustaría mucho que alguno de ustedes propusiera y expusiera un tema... ?:)‏
Referencias SpringHispano.org SpringFramework.org http://delicious.com/neodevelop Tag de Spring y Spring MVC
Gracias!!! Y sigamos haciendo comunidad...

Más contenido relacionado

PDF
Introducción Spring Framework
PPTX
Introducccion springframework
PDF
Diapositivas Spring Framework- Javier Oliver Fulguera
PPTX
Framework spring
PDF
Introducción a Spring framework
PDF
Spring framework 3
DOCX
Spring framework
PPTX
Orm hibernate springframework
Introducción Spring Framework
Introducccion springframework
Diapositivas Spring Framework- Javier Oliver Fulguera
Framework spring
Introducción a Spring framework
Spring framework 3
Spring framework
Orm hibernate springframework

La actualidad más candente (19)

PPTX
Spring framework
PDF
Manual Basico De Struts
PDF
Herramientas Java
PPT
Plataforma de programación Java
PDF
Web services y java
PPT
Introducción a Java EE
PDF
Spring mvc
PDF
Introducción a java EE 7
PPTX
Java Web - JSF
ODP
Desarrollo de Apps Web en Ruby on Rails
PPS
Desarrollo de aplicaciones empresariales con Java EE
PDF
Frameworks J2EE
PDF
9 tecnologías v1.1
 
PDF
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
PDF
[ES] Conectividad de java a base de datos(jdbc)
PPTX
Asp.net
PPS
Aplicaciones empresariales Java EE en la nube
PDF
Introducción a Zend Framework
Spring framework
Manual Basico De Struts
Herramientas Java
Plataforma de programación Java
Web services y java
Introducción a Java EE
Spring mvc
Introducción a java EE 7
Java Web - JSF
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de aplicaciones empresariales con Java EE
Frameworks J2EE
9 tecnologías v1.1
 
Aplicaciones web con jakarta struts - Javier Oliver Fulguera
[ES] Conectividad de java a base de datos(jdbc)
Asp.net
Aplicaciones empresariales Java EE en la nube
Introducción a Zend Framework
Publicidad

Destacado (17)

PDF
Desarrolla tu primera api con spring boot
PPTX
Spring social springio ppt
PPTX
spring framework
PPTX
12 dependency injection
PDF
Springio2012 taller-seguridad-web-springsecurity-3
ODP
Creando APIs REST con Spring Boot
PDF
Codemotion Madrid 2014 - Spring ha muerto... ¡larga vida a spring boot!
PDF
Presentación Spring Boot en Autentia
PDF
86535551 ciclo-de-vida-jsf
PPTX
Spring boot et. al. para el impaciente
PDF
MVC Seminar Presantation
PPT
Why MVC?
PPT
Spring ppt
PPT
MVC ppt presentation
PDF
Model View Controller (MVC)
PPT
Mvc architecture
PPT
Curso de Desarrollo Web 2
Desarrolla tu primera api con spring boot
Spring social springio ppt
spring framework
12 dependency injection
Springio2012 taller-seguridad-web-springsecurity-3
Creando APIs REST con Spring Boot
Codemotion Madrid 2014 - Spring ha muerto... ¡larga vida a spring boot!
Presentación Spring Boot en Autentia
86535551 ciclo-de-vida-jsf
Spring boot et. al. para el impaciente
MVC Seminar Presantation
Why MVC?
Spring ppt
MVC ppt presentation
Model View Controller (MVC)
Mvc architecture
Curso de Desarrollo Web 2
Publicidad

Similar a Spring Mvc Final (20)

PPT
Hands on Spring 2.5
PPTX
Clase_MVC_I.pptx
PPTX
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
PDF
Hands-on Spring 3: The next generation
PPT
Struts en Java
PDF
Patron mvc struts
PPTX
ASP.NET MVC (2011)
PPTX
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
PPTX
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
PPT
FMK Capa de Presentacion
PPTX
3-Unidad 1. Arquitectura de Diseño
DOC
Tutorial manos a la obra con Yupp PHP Framework
PPT
01 introducción
PDF
Spring tutorial v0.271
PPT
spring
PDF
Frameworks MVC para desarrollo de UITES
Hands on Spring 2.5
Clase_MVC_I.pptx
SEMINARIO: Servicios REST. Bases de la tecnología y soporte con Spring MVC
Hands-on Spring 3: The next generation
Struts en Java
Patron mvc struts
ASP.NET MVC (2011)
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
3-Unidad 1: Arquitectura de Diseño-1.2 Controlador-Introducción
FMK Capa de Presentacion
3-Unidad 1. Arquitectura de Diseño
Tutorial manos a la obra con Yupp PHP Framework
01 introducción
Spring tutorial v0.271
spring
Frameworks MVC para desarrollo de UITES

Más de Jose Juan R. Zuñiga (19)

PDF
Apps software development with Vert.X
PDF
A lil' of Groovy for Ruby developers
PDF
Herramientas para el desarrollo de software
PDF
Agile Software Development
PPTX
Webapps testing with Groovy
KEY
Creación de plugins con Grails
PDF
El desarrollador de software
KEY
Groovy in Java7mx
PDF
Mirando hacia atrás: Retrospectivas
PDF
Equipos en Scrum ¡oing!
KEY
Integrando Groovy & Grails en el proceso de desarrollo
KEY
Creación de Builders y DSL's con Groovy
KEY
El proceso de desarrollo con herramientas Open Source
KEY
15a. Reunion de SpringHispano.org y grails.org.mx
PDF
Introducción a Groovy
PPTX
Introduccion a grails en Campusparty
PPTX
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
PPTX
Redefiniendo el MVC con Grails
PPT
Creación de Plataformas
Apps software development with Vert.X
A lil' of Groovy for Ruby developers
Herramientas para el desarrollo de software
Agile Software Development
Webapps testing with Groovy
Creación de plugins con Grails
El desarrollador de software
Groovy in Java7mx
Mirando hacia atrás: Retrospectivas
Equipos en Scrum ¡oing!
Integrando Groovy & Grails en el proceso de desarrollo
Creación de Builders y DSL's con Groovy
El proceso de desarrollo con herramientas Open Source
15a. Reunion de SpringHispano.org y grails.org.mx
Introducción a Groovy
Introduccion a grails en Campusparty
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Redefiniendo el MVC con Grails
Creación de Plataformas

Último (20)

PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
Presentación de Redes de Datos modelo osi
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
clase auditoria informatica 2025.........
PDF
Estrategia de apoyo tecnología miguel angel solis
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Diapositiva proyecto de vida, materia catedra
PDF
SAP Transportation Management para LSP, TM140 Col18
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
Presentación PASANTIAS AuditorioOO..pptx
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Influencia-del-uso-de-redes-sociales.pdf
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
introduccion a las_web en el 2025_mejoras.ppt
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Presentación de Redes de Datos modelo osi
Power Point Nicolás Carrasco (disertación Roblox).pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
El-Gobierno-Electrónico-En-El-Estado-Bolivia
clase auditoria informatica 2025.........
Estrategia de apoyo tecnología miguel angel solis
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Diapositiva proyecto de vida, materia catedra
SAP Transportation Management para LSP, TM140 Col18
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
historia_web de la creacion de un navegador_presentacion.pptx

Spring Mvc Final

  • 1. 3ra. Reunión de SpringHispano How to run Spring MVC por neodevelop
  • 2. Acerca de mi... La referencia total: SpringHispano.org y grails.org.mx
  • 3. Agenda Vista general de SpringFramework El patrón de diseño MVC Spring MVC Componentes Funcionamiento Configurar una Aplicación con Spring MVC Más componentes de Spring MVC Más de Spring MVC...
  • 4. SpringFramework “ Spring es una tecnología dedicada para permitir construir aplicaciones usando POJO’s…”, Rod Johnson – The Server Side
  • 5. SpringFramework Spring es un poderoso framework de aplicaciones que resuelve muchos problemas comunes en el desarrollo de aplicaciones Java (SDK y EE).
  • 6. Vista general de SpringFramework
  • 7. El patrón de diseño MVC MVC = Model – View – Controller Provee de un mecanismo para construir una delgada y limpia capa web Claramente separa el negocio, la navegación y la lógica de presentación
  • 8. El patrón de diseño MVC Los tres componentes que colaboran son: Controller(Controlador)‏ Maneja la lógica de navegación e interactua con la capa de servicio para la lógica de negocio Model(Modelo)‏ El contrato entre el controller y la vista Contiene los datos necesarios para mostrarlos en la vista Es manejado y poblado por el controller View(Vista)‏ Muestra la respuesta a la solicitud previamente hecha Obtiene los datos del modelo previamente manejado por el controller
  • 9. El patrón de diseño MVC
  • 10. Motivaciones Facilita la carga de mantenimiento Los cambios a la lógica de negocio son menos probables de romper la lógica de la presentación Viceversa
  • 11. Motivaciones Facilita el desarrollo en un equipo multidisciplinario Los desarrolladores pueden concentrarse en en crear código de negocio robusto sin tener que preocuparse por afectar la Interfaz de Usuario Los diseñadores pueden concentrarse en construir usables y atractivas Interfaces de Usuario sin preocuparse por Java
  • 12. Motivaciones Usa la mejor herramienta para tu trabajo Java es apropiado para crear lógica de negocio Los lenguajes de plantillas y etiquetado son más apropiados para crear layouts HTML.
  • 13. Motivaciones Facilita las pruebas La lógica de navegación y de negocio están separadas de la lógica de presentación lo que sugiere que pueden ser probadas independiemtemente. Practicamente: podemos probar más código fuera del contendor de servlets
  • 14. Spring MVC Spring provee de una solución simple y eficaz para usar el patrón MVC Y ahora con la versión 2.5 ofrece también el uso de anotaciones Hay quienes dicen que es un framework de la ola anterior... ¿será cierto?, ya veremos ahora que SS esta dentro del JCP
  • 15. MVC en Spring Un solo servlet que maneja solicitudes a controllers individuales, con ayuda de un controller principal. El ruteo de solicitudes es completamente controlado por el Controller Frontal o principal. Controllers individuales pueden ser usados ara manejar varias y diferentes URL's Los controllers son POJO's Y los controllers son manejados como cualquier otro bean de Spring en el AppCtx
  • 16. Componentes de Spring MVC DispatcherServlet La implementación del controller frontal de Spring Controller Componente que maneja los request del usuario Encapsula la lógica de navegación Delega a los objetos de los servicios la lógica de negocio View Responsable para mostrar la salida, sea cual sea...
  • 17. Componentes de Spring MVC ModelAndView Creado por el controller Almacena los datos del Modelo Asocia una vista al Request Puede ser la implementación de una vista física o el nombre de una vista lógica ViewResolver Usado para mapear nombres de vistas lógicas a implementaciones de vista actuales
  • 18. Componentes de Spring MVC HandlerMapping Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales
  • 20. MVC y D.I. Todos los componentes MVC son configurados en el AppCtx de Spring Y como tal, todos los componentes de Spring se benefician y pueden ser configurados usando D.I.
  • 21. Configurar una App con Spring MVC
  • 22. Spring MVC - DispatcherServlet Como muchos framework’s MVC, tambien SpringMVC es Request Driven(Manejado por Solicitudes)‏ DispatcherServlet.- Es el servlet central que atiende todas esta solicitudes y las gestiona Ofrece mucha más funcionalidad para facilitar el desarrollo Esta completamente integrado con el contenedor de Spring, con todo lo que esto implica
  • 23. Spring MVC - DispatcherServlet <servlet> <servlet-name>springhispanoServlet</servlet-name> <servlet-class> org . springframework .web. servlet .DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springhispanoServlet</servlet-name> <url-pattern>*. html </url-pattern> </servlet-mapping>
  • 24. WebApplicationContext Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina WebApplicationContext El WebAppCtx va a contener la configuración de los elementos para que SpringMVC funcione El WebAppCtx va a poder usar los beans(DAO’s, Servicios, etc.) que se declararon en el contexto de la aplicación
  • 25. Elementos del WebAppCtx Controllers Handler Mappings View Resolvers Locale Resolvers Theme Resolver Interceptors Handler Exception Resolver
  • 26. Controller y AbstractController El tipo de Controller más simple Solo requiere implementar el método handlerRequestInternal()‏ Le envía un ModelAndView al WebAppCtx para que determine el view y alimente con el modelo su contenido
  • 27. SimpleUrlHandlerMapping Es un tipo de HandlerMapping Víncula directamente la URL con el controller que se ejecutará Se pueden usar Ant Path’s para vincular varias URL’s a un Controller
  • 28. InternalResourceViewResolver Es un tipo de ViewResolver Se le debe indicar a través de un prefijo la ubicación de los archivos de views o JSP Permite poner detrás de WEB-INF las JSP’s Se le indica con un sufijo de que tipo son las vistas que va a utilizar para mostrar
  • 29. Ahora si... Hola Mundo con SpringMVC
  • 30. Más controllers… Controller AbstractController MultiActionController BaseCommandController AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController ThrowawayController ParameterizableViewController
  • 31. Más Handler Mappings… BeanNameUrlHandlerMapping SimpleUrlHandlerMapping CommonsPathHandlerMapping ControllerClassNameHandlerMapping DefaultAnnotationHandlerMapping
  • 32. Más View Resolvers.. AbstractCachingViewResolver XmlViewResolver XsltViewResolver ResourceBundleViewResolver UrlBasedViewResolver BeanNameViewResolver InternalResourceViewResolver VelocityViewResolver / FreeMarkerViewResolver
  • 33. Otros conceptos... Command: Clase que será modificada mediante un formulario, generalmente un Java Bean, es parte del Modelo Bind: Es la acción de asignar los parámetros de un request a un Java Bean y vicecersa
  • 34. ¿Qué más provee Spring MVC? Spring's form tag library Spring provee para las views de una librería que ayuda a facilitar el binding de objetos de un formulario Cada tag provee un conjunto de atributos correspondientes al tipo de elemento para no dejar de lado la funcionalidad Solo hay que agregar la taglib al encabezado de la View: <%@ taglib prefix=&quot;form&quot; uri=&quot;http://www.springframework.org/tags/form&quot; %>
  • 35. Otro controller util: MultiActionController Un controller que maneja diferentes tareas Multiples metodos para manejar Cada método maneja un request diferente MethodNameResolver determina el método Basado en un parametro o en otro criterio Los métodos regresan un ModelAndView Muy bueno para agrupar tareas relacionadas en una sola clase
  • 36. Creando un MultiActionController public class ReportController extends MultiActionController { public ModelAndView handleSimpleReport(HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView(&quot;simpleReport&quot;, getModel()); } public ModelAndView handleSimpleReportPost(HttpServletRequest request, HttpServletResponse response) throws Exception { String reportTitle = request.getParameter(&quot;reportTitle&quot;); Map model = getModel(); model.put(&quot;ReportTitle&quot;, reportTitle) ; return new ModelAndView(&quot;simpleReportCompile&quot;, model); } ...
  • 37. Configurando un MultiActionController <bean id= &quot;controller&quot; class= &quot;org.springframework.samples.jasperdemo.web.ReportController&quot; > <property name= &quot;methodNameResolver&quot; > <ref local= &quot;resolver&quot; /> </property> </bean> <bean id= &quot;resolver&quot; class= &quot;org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver&quot; > <property name= &quot;mappings&quot; > <props> <prop key= &quot;/simpleReport.pdf&quot; >handleSimpleReport</prop> <prop key= &quot;/simpleReportPost.pdf&quot; >handleSimpleReportPost</prop> </props> </property> </bean>
  • 38. Integración con vista Spring MVC provee de la integración con otras tecnologías de vista como: JSP & JSTL Tiles Velocity & Freemarker XSLT PDF JasperReports
  • 39. Let's code... Veamos un ejemplo...
  • 40. ¿Qué más puedo hacer? Manejar Beans en formularios con SimpleFormController Agregar lógica de “binding” en los datos tratados desde la vista Agregar lógica de desplegado de errores en la vista Definir un objeto Command para la forma Agregar lógica en el Submit de la forma Además Agregar lógica de validación
  • 41. ¿Cómo funciona SimpleFormController? Su funcionamiento depende del método del request(modificable): GET => Implica mostrar el formulario por lo que se carga el modelo para desplegar la view indicada en un parametro denominado ‘formView’ POST => Sucede cuando hay un envío de formulario implicado, por lo que se procede a ejecutar las acciones necesarias con el Command, y mostrar la View indicada en ’successView’
  • 42. Request GET – Desplegar la forma formBackingObject()‏ Prepara y entrega el objeto Command Permite el pre-llenado de la forma referenceData()‏ Carga los datos de referencia necesarios para desplegar la forma showForm()‏ Completa el ModelAndView y lo regresa Poner el objeto Command en sesión si es necesario Muestra la forma a trabajar
  • 43. Request GET – Envío de la forma onBind()‏ Llamado después del bind pero antes de la validación Permite manualmente hacer el bind de los parametros del request del objeto Command antes de la validación formBackingObject()‏ Entrega el objeto Command Quizá de la sesió, o quizá de base de datos Si la validación falla entonces se agregan los errores al ModelAndView y son mostrados en la forma
  • 44. Request GET – Envío de la forma Si la validación es satisfactoria, es decir, no hay errores, entonces se llama onSubmit()‏
  • 45. ¿Muchos métodos no? Veremos una forma más efectiva de hacer esto... :D Afortunadamente tenemos a Spring 2.5 con las nuevas características... Pero más adelante...
  • 46. Arquitectura de Validación No está atada a HttpServletRequest No esta atada a la capa Web Validación de objetos de dominio Entrada de los clientes remotos también necesita validación Puede ser probada desde fuera del contenedor Implemenetación independente Conversión de errores son no-fatal
  • 47. Creando un validador public class ClienteValidator implements Validator { public boolean supports( Class clazz) { return Cliente . class .equals(clazz); } public void validate(Object obj, Errors errors) { //Casting del objeto Cliente cliente = ( Cliente )obj; // Validaciones ValidationUtils .rejectIfEmpty(errors, &quot;nombre&quot;, &quot;nombre.empty&quot;,&quot;El nombre no puede ir vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;direccion&quot;, &quot;direccion.empty&quot;,&quot;La direccion no puede ir vacÂ’o...&quot;); ValidationUtils .rejectIfEmpty(errors, &quot;RFC&quot;, &quot;RFC.empty&quot;,&quot;El RFC no puede ir vacÂ’o...&quot;); if (cliente.getNombre().length()<=2)‏ errors.rejectValue(&quot;nombre&quot;, &quot;nombre.length&quot;, &quot;El nombre debe ser mayor de dos caracteres&quot;); } }
  • 48. Configurando un validador <bean id=&quot;clienteForm&quot; class=&quot;org.springhispano.web.FormaCliente&quot;> <property name=&quot;formView&quot; value=&quot;editCliente&quot;/> <property name=&quot;successView&quot; value=&quot;redirect:list.htm&quot;/> <property name=&quot;service&quot; ref=&quot;service&quot;/> <property name=&quot;validator&quot; ref=&quot;clienteValidator&quot;/> </bean>
  • 49. Pero también... Existe un proyecto de Spring llamado Spring Modules Validations Basado en anotaciones, como: @NotNull @Email @Length @MinLength @MaxLength @NotBlank Otras más...
  • 50. SpringMVC 2.5 Basados en anotaciones: @Controller @RequestMapping @SessionAttributes @RequestParam @InitBinder @ModelAttribute
  • 51. @Controller Habilita que cierta clase declarada actue como Controller No hay necesidar de heredar alguna otra clase El proposito básico de @Controller es actuar como estereotipo para la clase anotada Para complementar la configuración nos ayudaremos de @RequestMapping
  • 52. @RequestMapping Es usada para mapear las URL’s como por ejemplo: ‘/forma.spring’, ‘hi.form’, etc. Tipicamente el tipo de nivel de la anotación mapea un request en un FormController Y adicionalmente le dicta su comportamiento en base al acceso de la URL con ayuda de los metodos GET y POST
  • 53. @RequestParam Permite Mapear un atributo a través el método GET de la aplicación Se declara por lo general dentro de la firma del método como un parametro más Hace el binding por sí solo
  • 54. @ModelAttribute Permite Mapear un atributo o bien un Command completo de un formulario Html Tambien permite enviar un modelo de datos al view Se declara en la firma del método como un parametro más del mismo
  • 55. @SessionAttributes Lista los nombres de los atributos del modelo que deben ser almacenados en sesión Permite que dichos objetos puedan ser utilizados en request posteriores, si es el caso...
  • 56. Un ejemplo al fin... Ya era hora !!!
  • 58. Más de SpringMVC Usar todos los HandlerMappings, ViewResolvers Implementar velocity, freemarker, tiles... Aplicar interceptores Manejar excepciones Usar otros controllers Internacionalización Temas Ajax: Dojo, Prototype, Script.aculo.us,DWR BTW, si hay tiempo veamos DWR
  • 59. Más de SpringMVC Integración con: JSF Struts 1.x y 2.x Webwork Tapestry WebFlow 2(Subproyecto de Spring)‏ Portlet's Algunos WebServices Nos gustaría mucho que alguno de ustedes propusiera y expusiera un tema... ?:)‏
  • 60. Referencias SpringHispano.org SpringFramework.org http://delicious.com/neodevelop Tag de Spring y Spring MVC
  • 61. Gracias!!! Y sigamos haciendo comunidad...