2 spring mvc
TRANSCRIPT
![Page 1: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/1.jpg)
3ra. Reunión de SpringHispano
How to run Spring MVC por neodevelop
![Page 2: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/2.jpg)
Acerca de mi...
La referencia total: SpringHispano.org y grails.org.mx
![Page 3: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/4.jpg)
SpringFramework
“Spring es una tecnología dedicada para permitir construir aplicaciones usando
POJO’s…”, Rod Johnson – The Server Side
![Page 5: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/6.jpg)
Vista general de SpringFramework
![Page 7: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/9.jpg)
El patrón de diseño MVC
![Page 10: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/18.jpg)
Componentes de Spring MVC HandlerMapping
Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales
![Page 19: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/19.jpg)
Funcionamiento de Spring MVC
![Page 20: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/21.jpg)
Configurar una App con Spring MVC
![Page 22: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/29.jpg)
Ahora si...
Hola Mundo con SpringMVC
![Page 30: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/30.jpg)
Más controllers…Más controllers…• ControllerController
– AbstractControllerAbstractController• MultiActionControllerMultiActionController
• BaseCommandControllerBaseCommandController– AbstractCommandControllerAbstractCommandController
– AbstractFormControllerAbstractFormController
» SimpleFormControllerSimpleFormController
» AbstractWizardFormControllerAbstractWizardFormController
– ThrowawayControllerThrowawayController
– ParameterizableViewControllerParameterizableViewController
![Page 31: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/31.jpg)
Más Handler Mappings…Más Handler Mappings…
• BeanNameUrlHandlerMappingBeanNameUrlHandlerMapping
• SimpleUrlHandlerMappingSimpleUrlHandlerMapping
• CommonsPathHandlerMappingCommonsPathHandlerMapping
• ControllerClassNameHandlerMappingControllerClassNameHandlerMapping
• DefaultAnnotationHandlerMappingDefaultAnnotationHandlerMapping
![Page 32: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/32.jpg)
Más View Resolvers..Más View Resolvers..• AbstractCachingViewResolverAbstractCachingViewResolver
• XmlViewResolverXmlViewResolver
• XsltViewResolverXsltViewResolver
• ResourceBundleViewResolverResourceBundleViewResolver
• UrlBasedViewResolverUrlBasedViewResolver
• BeanNameViewResolverBeanNameViewResolver
• InternalResourceViewResolverInternalResourceViewResolver
• VelocityViewResolverVelocityViewResolver / / FreeMarkerViewResolverFreeMarkerViewResolver
![Page 33: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/34.jpg)
¿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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/39.jpg)
Let's code...
Veamos un ejemplo...
![Page 40: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/40.jpg)
¿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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/41.jpg)
¿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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/45.jpg)
¿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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/49.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/51.jpg)
@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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/52.jpg)
@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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/53.jpg)
@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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/54.jpg)
@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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/55.jpg)
@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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/56.jpg)
Un ejemplo al fin...
Ya era hora !!!
![Page 57: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/57.jpg)
Resumen técnico
![Page 58: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/58.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/59.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/60.jpg)
Referencias
SpringHispano.org SpringFramework.org http://delicious.com/neodevelop
Tag de Spring y Spring MVC
![Page 61: 2 Spring MVC](https://reader034.vdocuments.mx/reader034/viewer/2022042503/55cf9bdd550346d033a7ab1c/html5/thumbnails/61.jpg)
Gracias!!!
Y sigamos haciendo comunidad...