Spring Mvc Final

  • 9,697 views
Uploaded on

Brief presntation about SpringMVC

Brief presntation about SpringMVC

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • puedes pasar el código fuente de los ejemplos!!!
    Gracias.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
9,697
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
477
Comments
1
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 19. Funcionamiento de Spring MVC
  • 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 !!!
  • 57. Resumen técnico
  • 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...