61
3ra. Reunión de SpringHispano How to run Spring MVC por neodevelop

2 Spring MVC

  • Upload
    fede77m

  • View
    87

  • Download
    12

Embed Size (px)

Citation preview

Page 1: 2 Spring MVC

3ra. Reunión de SpringHispano

How to run Spring MVC por neodevelop

Page 2: 2 Spring MVC

Acerca de mi...

La referencia total: SpringHispano.org y grails.org.mx

Page 3: 2 Spring MVC

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

Page 4: 2 Spring MVC

SpringFramework

“Spring es una tecnología dedicada para permitir construir aplicaciones usando

POJO’s…”, Rod Johnson – The Server Side

Page 5: 2 Spring MVC

SpringFramework

Spring es un poderoso framework de aplicaciones que resuelve muchos

problemas comunes en el desarrollo de aplicaciones Java (SDK y EE).

Page 6: 2 Spring MVC

Vista general de SpringFramework

Page 7: 2 Spring MVC

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

Page 8: 2 Spring MVC

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

Page 9: 2 Spring MVC

El patrón de diseño MVC

Page 10: 2 Spring 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

Page 11: 2 Spring MVC

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

Page 12: 2 Spring MVC

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.

Page 13: 2 Spring MVC

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

Page 14: 2 Spring MVC

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

Page 15: 2 Spring MVC

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

Page 16: 2 Spring MVC

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

Page 17: 2 Spring MVC

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

Page 18: 2 Spring MVC

Componentes de Spring MVC HandlerMapping

Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales

Page 19: 2 Spring MVC

Funcionamiento de Spring MVC

Page 20: 2 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.

Page 21: 2 Spring MVC

Configurar una App con Spring MVC

Page 22: 2 Spring MVC

Spring MVC - Spring MVC - DispatcherServletDispatcherServlet Como muchos framework’s MVC, tambien Como muchos framework’s MVC, tambien

SpringMVC es Request Driven(Manejado por SpringMVC es Request Driven(Manejado por Solicitudes)Solicitudes)

DispatcherServlet.- Es el servlet central que DispatcherServlet.- Es el servlet central que atiende todas esta solicitudes y las gestionaatiende todas esta solicitudes y las gestiona

Ofrece mucha más funcionalidad para facilitar Ofrece mucha más funcionalidad para facilitar el desarrolloel desarrollo

Esta completamente integrado con el Esta completamente integrado con el contenedor de Spring, con todo lo que esto contenedor de Spring, con todo lo que esto implicaimplica

Page 23: 2 Spring MVC

Spring MVC - Spring MVC - DispatcherServletDispatcherServlet

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

Page 24: 2 Spring MVC

WebApplicationContextWebApplicationContext

Cada DispatcherServlet tiene su propio Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina ApplicationContext, a este se le denomina WebApplicationContextWebApplicationContext

El WebAppCtx va a contener la El WebAppCtx va a contener la configuración de los elementos para que configuración de los elementos para que SpringMVC funcioneSpringMVC funcione

El WebAppCtx va a poder usar los El WebAppCtx va a poder usar los beans(DAO’s, Servicios, etc.) que se beans(DAO’s, Servicios, etc.) que se declararon en el contexto de la aplicacióndeclararon en el contexto de la aplicación

Page 25: 2 Spring MVC

Elementos del WebAppCtxElementos del WebAppCtx

ControllersControllers Handler MappingsHandler Mappings View ResolversView Resolvers Locale ResolversLocale Resolvers Theme ResolverTheme Resolver InterceptorsInterceptors Handler Exception ResolverHandler Exception Resolver

Page 26: 2 Spring MVC

Controller y AbstractController El tipo de Controller más simpleEl tipo de Controller más simple Solo requiere implementar el método Solo requiere implementar el método

handlerRequestInternal()handlerRequestInternal() Le envía un ModelAndView al WebAppCtx Le envía un ModelAndView al WebAppCtx

para que determine el view y alimente para que determine el view y alimente con el modelo su contenidocon el modelo su contenido

Page 27: 2 Spring MVC

SimpleUrlHandlerMappingSimpleUrlHandlerMapping

Es un tipo de HandlerMappingEs un tipo de HandlerMapping Víncula directamente la URL con el Víncula directamente la URL con el

controller que se ejecutarácontroller que se ejecutará Se pueden usar Ant Path’s para vincular Se pueden usar Ant Path’s para vincular

varias URL’s a un Controllervarias URL’s a un Controller

Page 28: 2 Spring MVC

InternalResourceViewResolverInternalResourceViewResolver

Es un tipo de ViewResolverEs un tipo de ViewResolver Se le debe indicar a través de un prefijo Se le debe indicar a través de un prefijo

la ubicación de los archivos de views o la ubicación de los archivos de views o JSPJSP Permite poner detrás de WEB-INF las JSP’sPermite poner detrás de WEB-INF las JSP’s

Se le indica con un sufijo de que tipo son Se le indica con un sufijo de que tipo son las vistas que va a utilizar para mostrarlas vistas que va a utilizar para mostrar

Page 29: 2 Spring MVC

Ahora si...

Hola Mundo con SpringMVC

Page 30: 2 Spring MVC

Más controllers…Más controllers…• ControllerController

– AbstractControllerAbstractController• MultiActionControllerMultiActionController

• BaseCommandControllerBaseCommandController– AbstractCommandControllerAbstractCommandController

– AbstractFormControllerAbstractFormController

» SimpleFormControllerSimpleFormController

» AbstractWizardFormControllerAbstractWizardFormController

– ThrowawayControllerThrowawayController

– ParameterizableViewControllerParameterizableViewController

Page 31: 2 Spring MVC

Más Handler Mappings…Más Handler Mappings…

• BeanNameUrlHandlerMappingBeanNameUrlHandlerMapping

• SimpleUrlHandlerMappingSimpleUrlHandlerMapping

• CommonsPathHandlerMappingCommonsPathHandlerMapping

• ControllerClassNameHandlerMappingControllerClassNameHandlerMapping

• DefaultAnnotationHandlerMappingDefaultAnnotationHandlerMapping

Page 32: 2 Spring MVC

Más View Resolvers..Más View Resolvers..• AbstractCachingViewResolverAbstractCachingViewResolver

• XmlViewResolverXmlViewResolver

• XsltViewResolverXsltViewResolver

• ResourceBundleViewResolverResourceBundleViewResolver

• UrlBasedViewResolverUrlBasedViewResolver

• BeanNameViewResolverBeanNameViewResolver

• InternalResourceViewResolverInternalResourceViewResolver

• VelocityViewResolverVelocityViewResolver / / FreeMarkerViewResolverFreeMarkerViewResolver

Page 33: 2 Spring MVC

Otros conceptos...

Command: Clase que será modificada Command: Clase que será modificada mediante un formulario, generalmente un mediante un formulario, generalmente un Java Bean, es parte del ModeloJava Bean, es parte del Modelo

Bind: Es la acción de asignar los Bind: Es la acción de asignar los parámetros de un request a un Java Bean parámetros de un request a un Java Bean y vicecersay vicecersa

Page 34: 2 Spring MVC

¿Qué más provee Spring MVC?

• Spring's form tag librarySpring's form tag library Spring provee para las views de una librería que Spring provee para las views de una librería que

ayuda a facilitar el binding de objetos de un ayuda a facilitar el binding de objetos de un formularioformulario

Cada tag provee un conjunto de atributos Cada tag provee un conjunto de atributos correspondientes al tipo de elemento para no dejar correspondientes al tipo de elemento para no dejar de lado la funcionalidadde lado la funcionalidad

Solo hay que agregar la taglib al encabezado de la Solo hay que agregar la taglib al encabezado de la View:View:– <%@ taglib prefix="form" <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>uri="http://www.springframework.org/tags/form" %>

Page 35: 2 Spring MVC

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

Page 36: 2 Spring MVC

Creando un MultiActionController

public class ReportController extends MultiActionController {

public ModelAndView handleSimpleReport(HttpServletRequest request,HttpServletResponse response) throws Exception {

return new ModelAndView("simpleReport", getModel());}

public ModelAndView handleSimpleReportPost(HttpServletRequest request,HttpServletResponse response) throws Exception {

String reportTitle = request.getParameter("reportTitle");Map model = getModel();model.put("ReportTitle", reportTitle);

return new ModelAndView("simpleReportCompile", model);}...

Page 37: 2 Spring MVC

Configurando un MultiActionController

<bean id="controller" class="org.springframework.samples.jasperdemo.web.ReportController">

<property name="methodNameResolver"><ref local="resolver"/></property>

</bean>

<bean id="resolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">

<property name="mappings"><props>

<prop key="/simpleReport.pdf">handleSimpleReport</prop><prop key="/simpleReportPost.pdf">handleSimpleReportPost</prop></props>

</property></bean>

Page 38: 2 Spring MVC

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

Page 39: 2 Spring MVC

Let's code...

Veamos un ejemplo...

Page 40: 2 Spring MVC

¿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

Page 41: 2 Spring MVC

¿Cómo funciona SimpleFormController? Su funcionamiento depende del método del Su funcionamiento depende del método del

request(modificable):request(modificable): GET => Implica mostrar el formulario por lo que GET => Implica mostrar el formulario por lo que

se carga el modelo para desplegar la view se carga el modelo para desplegar la view indicada en un parametro denominado indicada en un parametro denominado ‘formView’‘formView’

POST => Sucede cuando hay un envío de POST => Sucede cuando hay un envío de formulario implicado, por lo que se procede a formulario implicado, por lo que se procede a ejecutar las acciones necesarias con el ejecutar las acciones necesarias con el Command, y mostrar la View indicada en Command, y mostrar la View indicada en ’successView’’successView’

Page 42: 2 Spring MVC

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

Page 43: 2 Spring MVC

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

Page 44: 2 Spring MVC

Request GET – Envío de la forma Si la validación es satisfactoria, es decir,

no hay errores, entonces se llama onSubmit()

Page 45: 2 Spring MVC

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

Page 46: 2 Spring MVC

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

Page 47: 2 Spring MVC

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 objetoCliente cliente = (Cliente)obj;// ValidacionesValidationUtils.rejectIfEmpty(errors, "nombre", "nombre.empty","El nombre no puede ir

vacÂ’o...");ValidationUtils.rejectIfEmpty(errors, "direccion", "direccion.empty","La direccion no puede ir

vacÂ’o...");ValidationUtils.rejectIfEmpty(errors, "RFC", "RFC.empty","El RFC no puede ir vacÂ’o...");if(cliente.getNombre().length()<=2)

errors.rejectValue("nombre", "nombre.length", "El nombre debe ser mayor de dos caracteres");

}

}

Page 48: 2 Spring MVC

Configurando un validador

<bean id="clienteForm" class="org.springhispano.web.FormaCliente"> <property name="formView" value="editCliente"/> <property name="successView" value="redirect:list.htm"/> <property name="service" ref="service"/> <property name="validator" ref="clienteValidator"/></bean>

Page 49: 2 Spring MVC

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

Page 50: 2 Spring MVC

SpringMVC 2.5

Basados en anotaciones:Basados en anotaciones: @Controller@Controller @RequestMapping@RequestMapping @SessionAttributes@SessionAttributes @RequestParam@RequestParam @InitBinder@InitBinder @ModelAttribute@ModelAttribute

Page 51: 2 Spring MVC

@Controller@Controller

Habilita que cierta clase declarada actue Habilita que cierta clase declarada actue como Controllercomo Controller

No hay necesidar de heredar alguna otra No hay necesidar de heredar alguna otra claseclase

El proposito básico de @Controller es El proposito básico de @Controller es actuar como estereotipo para la clase actuar como estereotipo para la clase anotadaanotada

Para complementar la configuración nos Para complementar la configuración nos ayudaremos de @RequestMappingayudaremos de @RequestMapping

Page 52: 2 Spring MVC

@RequestMapping@RequestMapping

Es usada para mapear las URL’s como por Es usada para mapear las URL’s como por ejemplo: ‘/forma.spring’, ‘hi.form’, etc.ejemplo: ‘/forma.spring’, ‘hi.form’, etc.

Tipicamente el tipo de nivel de la Tipicamente el tipo de nivel de la anotación mapea un request en un anotación mapea un request en un FormControllerFormController

Y adicionalmente le dicta su Y adicionalmente le dicta su comportamiento en base al acceso de la comportamiento en base al acceso de la URL con ayuda de los metodos GET y URL con ayuda de los metodos GET y POSTPOST

Page 53: 2 Spring MVC

@RequestParam@RequestParam

Permite Mapear un atributo a través el Permite Mapear un atributo a través el método GET de la aplicaciónmétodo GET de la aplicación

Se declara por lo general dentro de la Se declara por lo general dentro de la firma del método como un parametro firma del método como un parametro másmás

Hace el binding por sí soloHace el binding por sí solo

Page 54: 2 Spring MVC

@ModelAttribute@ModelAttribute

Permite Mapear un atributo o bien un Permite Mapear un atributo o bien un Command completo de un formulario Command completo de un formulario HtmlHtml

Tambien permite enviar un modelo de Tambien permite enviar un modelo de datos al viewdatos al view

Se declara en la firma del método como Se declara en la firma del método como un parametro más del mismoun parametro más del mismo

Page 55: 2 Spring MVC

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

Page 56: 2 Spring MVC

Un ejemplo al fin...

Ya era hora !!!

Page 57: 2 Spring MVC

Resumen técnico

Page 58: 2 Spring MVC

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

Page 59: 2 Spring MVC

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... ?:)

Page 60: 2 Spring MVC

Referencias

SpringHispano.org SpringFramework.org http://delicious.com/neodevelop

Tag de Spring y Spring MVC

Page 61: 2 Spring MVC

Gracias!!!

Y sigamos haciendo comunidad...