Beruflich Dokumente
Kultur Dokumente
Reunin de SpringHispano
How to run Spring MVC por neodevelop
Acerca de mi...
La referencia total: SpringHispano.org y grails.org.mx
Agenda
SpringFramework
Spring es una tecnologa dedicada para permitir construir aplicaciones usando POJOs, 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).
MVC = Model View Controller Provee de un mecanismo para construir una delgada y limpia capa web Claramente separa el negocio, la navegacin y la lgica de presentacin
Controller(Controlador)
Maneja la lgica de navegacin e interactua con la capa de servicio para la lgica 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
Motivaciones
Motivaciones
Motivaciones
Motivaciones
Spring MVC
Spring provee de una solucin simple y eficaz para usar el patrn MVC Y ahora con la versin 2.5 ofrece tambin 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
DispatcherServlet La implementacin del controller frontal de Spring Controller Componente que maneja los request del usuario Encapsula la lgica de navegacin Delega a los objetos de los servicios la lgica de negocio View Responsable para mostrar la salida, sea cual sea...
ModelAndView Creado por el controller Almacena los datos del Modelo Asocia una vista al Request Puede ser la implementacin de una vista fsica o el nombre de una vista lgica ViewResolver Usado para mapear nombres de vistas lgicas a implementaciones de vista actuales
HandlerMapping
Interface usada por el DispatcherServlet para mapear los request entrantes hacia los controllers individuales
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.
Como muchos frameworks MVC, tambien SpringMVC es Request Driven(Manejado por Solicitudes) DispatcherServlet.- Es el servlet central que atiende todas esta solicitudes y las gestiona Ofrece mucha ms funcionalidad para facilitar el desarrollo Esta completamente integrado con el contenedor de Spring, con todo lo que esto implica
WebApplicationContext
Cada DispatcherServlet tiene su propio ApplicationContext, a este se le denomina WebApplicationContext El WebAppCtx va a contener la configuracin de los elementos para que SpringMVC funcione El WebAppCtx va a poder usar los beans(DAOs, Servicios, etc.) que se declararon en el contexto de la aplicacin
Controllers Handler Mappings View Resolvers Locale Resolvers Theme Resolver Interceptors Handler Exception Resolver
Controller y AbstractController
El tipo de Controller ms simple Solo requiere implementar el mtodo handlerRequestInternal() Le enva un ModelAndView al WebAppCtx para que determine el view y alimente con el modelo su contenido
SimpleUrlHandlerMapping
Es un tipo de HandlerMapping Vncula directamente la URL con el controller que se ejecutar Se pueden usar Ant Paths para vincular varias URLs a un Controller
InternalResourceViewResolver
Es un tipo de ViewResolver Se le debe indicar a travs de un prefijo la ubicacin de los archivos de views o JSP
Se le indica con un sufijo de que tipo son las vistas que va a utilizar para mostrar
Ahora si...
Ms controllers
Controller
AbstractController
MultiActionController BaseCommandController
AbstractCommandController AbstractFormController SimpleFormController AbstractWizardFormController
ThrowawayController ParameterizableViewController
Ms Handler Mappings
BeanNameUrlHandlerMapping SimpleUrlHandlerMapping CommonsPathHandlerMapping ControllerClassNameHandlerMapping DefaultAnnotationHandlerMapping
Ms 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 accin de asignar los parmetros de un request a un Java Bean y vicecersa
Spring provee para las views de una librera 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="form" uri="http://www.springframework.org/tags/form" %>
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); } ...
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>
Let's code...
Veamos un ejemplo...
Qu ms puedo hacer?
Manejar Beans en formularios con SimpleFormController Agregar lgica de binding en los datos tratados desde la vista Agregar lgica de desplegado de errores en la vista Definir un objeto Command para la forma Agregar lgica en el Submit de la forma Adems Agregar lgica de validacin
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 envo de formulario implicado, por lo que se procede a ejecutar las acciones necesarias con el Command, y mostrar la View indicada en successView
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 sesin si es necesario Muestra la forma a trabajar
onBind() Llamado despus del bind pero antes de la validacin Permite manualmente hacer el bind de los parametros del request del objeto Command antes de la validacin formBackingObject() Entrega el objeto Command Quiz de la sesi, o quiz de base de datos Si la validacin falla entonces se agregan los errores al ModelAndView y son mostrados en la forma
Veremos una forma ms efectiva de hacer esto... :D Afortunadamente tenemos a Spring 2.5 con las nuevas caractersticas... Pero ms adelante...
Arquitectura de Validacin
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, "nombre", "nombre.empty","El nombre no puede ir vaco..."); ValidationUtils.rejectIfEmpty(errors, "direccion", "direccion.empty","La direccion no puede ir vaco..."); ValidationUtils.rejectIfEmpty(errors, "RFC", "RFC.empty","El RFC no puede ir vaco..."); if(cliente.getNombre().length()<=2) errors.rejectValue("nombre", "nombre.length", "El nombre debe ser mayor de dos caracteres"); } }
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>
Pero tambin...
Existe un proyecto de Spring llamado Spring Modules Validations Basado en anotaciones, como: @NotNull @Email @Length @MinLength @MaxLength @NotBlank Otras ms...
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 bsico de @Controller es actuar como estereotipo para la clase anotada Para complementar la configuracin nos ayudaremos de @RequestMapping
@RequestMapping
Es usada para mapear las URLs como por ejemplo: /forma.spring, hi.form, etc. Tipicamente el tipo de nivel de la anotacin 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 travs el mtodo GET de la aplicacin Se declara por lo general dentro de la firma del mtodo como un parametro ms 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 mtodo como un parametro ms del mismo
@SessionAttributes
Lista los nombres de los atributos del modelo que deben ser almacenados en sesin Permite que dichos objetos puedan ser utilizados en request posteriores, si es el caso...
Un ejemplo al fin...
Resumen tcnico
Ms de SpringMVC
Usar todos los HandlerMappings, ViewResolvers Implementar velocity, freemarker, tiles... Aplicar interceptores Manejar excepciones Usar otros controllers Internacionalizacin Temas Ajax: Dojo, Prototype, Script.aculo.us,DWR BTW, si hay tiempo veamos DWR
Ms de SpringMVC
Integracin con: JSF Struts 1.x y 2.x Webwork Tapestry WebFlow 2(Subproyecto de Spring) Portlet's Algunos WebServices Nos gustara mucho que alguno de ustedes propusiera y expusiera un tema... ?:)
Referencias
Gracias!!!