Spring Mvc Final
Upcoming SlideShare
Loading in...5
×
 

Spring Mvc Final

on

  • 14,110 views

Brief presntation about SpringMVC

Brief presntation about SpringMVC

Statistics

Views

Total Views
14,110
Views on SlideShare
13,692
Embed Views
418

Actions

Likes
1
Downloads
472
Comments
1

4 Embeds 418

http://www.springhispano.org 271
http://www.slideshare.net 81
http://springhispano.org 64
http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • puedes pasar el código fuente de los ejemplos!!!
    Gracias.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Spring Mvc Final Spring Mvc Final Presentation Transcript

  • 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...