ART: Diferencia entre MVC y web API


Introducción
Este articulo explica la diferencia entre ASP.NET MVC y el ASP.NET Web API y también explica cuando usar Web API con MVC.


Acerca de MVC
Modelo Vista Controlador(MVC) divide una aplicación en tres partes, Modelo, Vista y Controlador. ASP.NET tiene muchas opciones para crear aplicaciones web  usando ASP.NET  Web Form, Framework MVC que combina las caracteriscticas de ASP.NET como MasterPages, Membership basado en autenticación. MVC esta en el ensamblado "System.Web.MVC".
Los componentes que son incluidos por MVC
Modelo: Los modelos son objetos usados para recuperar y almacenar el estado del modelo en la base de datos.vamos a ver un ejemplo: Hay un objeto “Item” que recupera los datos de la base de datos y realiza una operación y entonces actualiza la data en la base de datos. si una aplicación solo lee un conjunto de datos y lo envía a la vista, entonces la aplicación  no tiene una clase asociada y el modelo de la capa fisica.
Vista: Los componentes vista muestran la Interface de usuario(UI) de la aplicación que es creado por los datos del modelo. Por ejemplo: la vista de la tabla  Items mostrados en el DrowDownList y TextBoxes que dependen del estado actual del objeto “Item”.
Controlador: En MVC, los controladores son también llamados componentes. estos componentes administran la interacción de los usuarios y la selección de una vista para mostrar en la UI. El principal trabajo de los controladores es que estos administran los valores de las consultas y transfieren estos valores a los modelos.


Los modelos recuperan la información y actualizan la información en la base de datos. las vista son usados sólo para mostrar la información, y los controladores son usados para gestionar y responder a las entradas de los usuarios y sus interacciones.


Acerca de los Web API
ASP.NET Web API permite mostrar los datos en varios formatos, como XML y JSON. Este es un framework que usa los servicios HTTP y hace que esto sea fácil para proporcionar una respuesta a la solicitud del cliente. La respuesta depende de la petición de los clientes. Web API construye los servicios HTTP y gestiona la petición usando el protocola HTTP. Web API es codigo abierto y este puede ser hospedado en la aplicación o en el servidor IIS. la petición puede ser GET, POST, DELETE o PUt. Podemos decir de las Web API lo siguiente:
  • Es un Servicio HTTP
  • Es diseñado para llegar un amplio rango de clientes.
  • Utiliza la aplicación HTTP


Diferencia entre MVC y Web API
Hay muchas diferencias entre MVC y Web API, los que se indican a continuación:
  • Usamos MVC para desarrollar aplicaciones web  que responde tanto a datos como a vistas pero  Web API es usado para generar servicios HTTP que responden sólo a datos.
  • Web API  retorna los datos en varios formatos como JSON, XML y otros formatos  basados en la aceptación de la cabecera de petición. Pero MVC retorna datos en formato JSON usando  JSONResult.
  • Web Api soporta negociación de contenidos y autoalojamiento. Todas estas no son soportadas en MVC.
  • Web API incluye varias características de MVC, como ruteo, enlace de modelo pero estas características son diferentes y están definidas en el ensamblado “System.Web.HTTP” y en MVC estas características  son definidas en el asemble “System.Web.Mvc”.
  • Web API ayuda a la creación del servicio Restful cobre el  Framework .NET, pero MVC no los soporta.


Cuando Combinar MVC con Web API
  • Cuando hacemos autoalojamiento en la aplicación, en este combinamos ambos Controlador MVC y la API en un único proyecto y este ayuda a gestionar la peticiones AJAX  y responder en XML, JSON y otros formatos.
  • Combinamos MVc y Web API para habilitar la autorización para una aplicación. En esto creamos dos filtro, uno para Web API y otro para MVC.

    Este imagen describe la combinación de ASP.NET y ASP Web API

    TUT: Aprender ASP .NET MVC Paso a Paso en 7 dias(Dia 2)


    Contenido 
    • ¿Cuál es la Agenda? 
    • Lab 06: Testeo Unitario en Proyectos MVC 
    • Lab 07: Entendiendo el Ruteo en MVC 
    • Lab 08: Validando y Asignando Valores por defecto a las URLs en MVC 
    • Lab 09: Entendiendo URLs Salientes en MVC 
    • ¿Qué hay para el Tercer Día? 

    ¿Cuál es la Agenda?

    Este artículo es la continuación de Aprender paso a paso en 7 dias y puedes revisarlo en los link siguientes: 
    En este dia 2 veremos los siguientes cuatro laboratorios: 
    • Escribiendo Testeos Unitarios en Proyectos MVC. 
    • Configurar Rutas en MVC 
    • Validación de Rutas en MVC 
    • Configurando Rutas de salida en MVC 
    Lab 06: Testeo Unitario en Proyectos MVC
    Cuando empezamos toda la serie MVC(Dia 1) empezamos con dos problemas relacionados al code-behind. 
    ¿Cómo podemos hacer testeos unitarios en ASP.NET code behind?
    ¿Como podemos reusar el code behind de ASP.NET con diferentes interfaces de usuarios?

    En esta sección vamos a concentrarnos en el primer punto, es decir, Testeo Unitario.
    Solo una rápida recapitulación si necesitamos hacer testeo unitario al siguiente método btngenerateinvoices_click de Code behind de ASP.NET, tenemos los siguientes problemas: 
    • ¿Cómo hacemos para crear los objetos sender y eventargs
    • El código de abajo se ejecuta bajo el objeto HttpContext, ¿Cómo puedo imitarlo? 
    • ¿Qué pasa con los controles de interfaz de usuario de ASP.NET, Cómo accedo a estos? 
    • ¿Qué pasa con otros objetos de ASP.NET como objeto sesion,y aplicacion, cómo accedo a estos? 
    Muchos desarrolladores podrían hablar acerca de mock tests, rhino mocks,etc. pero todavía esto es desapercibido y la compliacion aumenta con las variables de sesion, objetos de data view, controles ASP.NET UI, creando aun mas confusión.






    Asi que lo que haremos en esta sección es crear una simple aplicación MVC y haremos teste unitario en aplicaciones ASp.NEt usando el testeo unitario de Framework VSTS.

    Paso 1: Crear un simple proyecto las mostrar Customer.
    El primer paso es crear un simple proyecto MVC. Usaremos el mismo proyecto el cual nosotros temos creado en MVC(Modelo Vista Controlador) del dia 1(MyFirstHelloWorld). En caso no tengas el proyecto mencionado, por favor crea uno usando el enlace de arriba.


    La clase controlador al final del día 1 es una simple clase .NET. Por ejemplo, si miras el código del proyecto cercanamente, puedes ver fácilmente la clase controlador de Customer con se muestra a continuación: 


    En simples palabras este es una simple clase .NET podemos fácilmente instanciar la clase y crear automáticamente testeos unitarios para el mismo. Esto es exactamente lo que vamos hacer en nuestros siguientes pasos:

    Paso 2: Agregando un simple proyecto de testeo unitario.
    Vamos a usar nuestro testeo unitario del framework de VSTS para testear la clase controlador. Agrega un nuevo proyecto a su solución usando la plantilla Proyecto Prueba Unitaria.


    Paso 3: Agregar referencias apropiadas al proyecto
    Necesitamos agregar un referencia a la aplicación MVC en nuestro proyecto de prueba unitaria(MVCUnitTest), para que podamos controlar la clase Controlador.


    Una vez agregado la referencia , deberías ver en la aplicación MVC e la referencia de proyecto como se muestra en la siguiente imagen:

    Paso 4: Escribir la prueba unitario
    Una vez que tengas agregado la referencia, abre la clase de prueba unitaria,es decir UnitTest1.cs. En esta clase crear un simple método de teste llamado DisplayCustomer el cual es atribuido por el atributo TestMethod como se muestra en el siguiente código.

    Si tu ves el siguiente pedazo de código estamos creando un objeto de la clase controlador, invocando la acción del controlador, es decir, DisplayCustomer y entonce verificamos si el nombre de la vista es DisplayCustomer. Si ellos son igual esto significa el paso de la prueba o en caso contrario esto es fallido.

    Paso 5: Finalmente ejecutamos la prueba unitaria
    Una vez escrito la prueba es tiempo de ejecutar caso de prueba para lo cual vamos hacer click en el menú Prueba->Ventanas-> Explorador de Pruebas.

    En el Explorador de pruebas hacer click derecho y seleccionar Ejecutar Pruebas Seleccionadas.

    Si las cosas van bien tu deberias ver una indicación de color verde que indica que la prueba ha pasado o caso contrario deberías ver un color rojo con el detalle indicando porque la prueba ha fallado.


    Lab 7: Entendiendo el ruteo MVC
    Introducción

    Al final del día, MVC no es nada más que una dirección de URL asignada a los controladores y los controladores asignados a acciones.

    Por ejemplo cuando un usuario envia un requerimientio de URL como http://www.maninformatic.com/UbicaProducto del navegador, estas acciones son asignadas con los controladores de MVC, y los controladores de MVC finalmente invocan esas funciones.

    Lo siguiente es una simple tabla el cual muestra cómo todo esto se ve así.

    Añadiendo aún más a la complicación que podemos tener varias direcciones URL asignadas a un controlador o se puede tener más de un controlador asigna a una sola URL. Por ejemplo, puedes tener www.maninformatic.com/contactenos y www.maninformatic.com/conocenos asignada a un solo controlador llamado ConocenosController
    .
    Sería muy bueno si tenemos algún tipo de mecanismo por el cual podemos configurar estas asignaciones. Eso es lo que exactamente MVC routing significa. El enrutamiento MVC ayuda a configurar y asignar la dirección URL con los controladores fácilmente.


    Paso 1: Tomar el proyecto MVC creado en el dia 1
    Vamos a tomas el mismo proyecto de Customer( MyFisrtHelloWorld) que hemos desarrollado en la seccion anterior.

    Paso 2: Cambiar Global.asax.cs
    Todas las asignaciones de rutas son almacenados en el archivo de código fuente RouteConfig.cs. Así que como primer paso es que tenemos que ir a cambiar este archivo.


    Todas las asignaciones de rutas son almacenadas dentro de la colección llamada routes. Esta colección pertenece al namespaces System.Web.Routing. Para agregar una ruta tu necesitas llamar el método MapRoute y pasar tres parámetros name, url y defaults.

    Debajo está una captura de retazo de código de la función MapRoute.



    • Name es el nombre principal por la cual la ruta será identificada dentro la colección. 
    • URL define que tipo de formato de URL queremos conectar con el controlador.En el pedazo de código siguiente decimos que el formato URL es View/ViewCustomer. 
    • Defaults define la clase controlador y las funciones de accion los cuales serán invocados cuando la URl es llamada. Por ejemplo, en el código siguiente, decimos que cuando View/ViewCustomer es llamado, este invocará la clase controlador Customer y la funcion acción invocada sera DisplayCustomer. 
    En caso su controlador tome parámetros, puede usar el { (llaves).Por ejemplo en el siguiente pedazo de codigo, nosotros hemos usado { para especificar que podemos tener un parámetro id. Si quieres definir los parámetros como opcionales puedes usar el enum UrlParameter.Optional.

    Lo primero es comentar el código de asignación predeterminada. Vamos a explicar el código de asignación predeterminada más tarde.

    Ingresamos el siguiente codigo, el cual significa cuando llamamos a http:/localhost/view/ViewCustomer esto invocará al controlador Customer y llamara la funcion DisplayCustomer.


    Paso 3: Ejecuta la aplicación
    Si ejecutas la aplicación deberias ver lo siguiente:

    Nota: No muestra ningún nombre, porque esto tiene que ser enviado del formulario, y puedes probar cambiando el la propiedad action del formulario(view/viewCustomer).

    Si recuerdas nosotros comentamos la entrada de ruta por defecto(default), vamos a entender qué significa exactamente ese código.
    “{controller}/{action}/{id}” define este que la URL será automáticamente llamado con la convención Controlador(nombre/función) accion (nombre/valor). si tienes una clase controlador con Customer y función acción como Search entonces el URL será estructurada automáticamente como htt://www.maninformatic.com/Customer/Search.

    Lab 8: Validando y asignando valores por defecto a URLs de MVC
    MVC tiene que ver con la acción que se produce a través de la URL y los datos para esas acciones también es proporcionado por la URL.

    Seria bueno si pudiéramos validar los datos que se transmiten a través de estas URL de MVC.

    Por ejemplo vamos a considerar la URL MVC http://localhost/Customer/ViewCustomer si quieres ver el detalle para el código del customer 1001, necesitas ingresar

    http://localhost/Customer/ViewCustomer/1001.

    El código de Customer es un número natural. En otras palabras, cualquier persona que ingrese una URL MVC como http://localhost/Customer/ViewCustomer/Shiv es inválido. El framework MVC provee un mecanismo de validación por el cual podemos comprobar en la propia URL si el dato es apropiado. En este laboratorio veremos cómo validar datos el cual es ingresado en la URL MVC.

    Paso 1: Creando un simple modelo Customer.
    En este primer paso vamos a trabajar con nuestra simple clase modelo Customer ya creada en los pasos anteriores.

    Paso 2: Creando la clase controlador
    En el siguiente paso vamos a utilizar la clase controlador Customer ya creada en pasos anteriores agregando una colección de Customers en el constructor.

    El controlador tiene una simple función DisplayCustomer el cual muestra los clientes usando el valor ID. Esta función toma el valor Id y encuentra en la colección customer.

    Si miras en la función DisplayCustomer esta toma un valor id el cual es numérico. Deberíamos tomar como una validación el campo ID el cual indica lo siguiente:

    • Id debería siempre ser numérico
    • Este debería ser entre 0 y 99
    Paso 3: Aplicando Validación usando regex en la ruta MVC
    La validación descrito en el paso 2 puede ser logrado aplicando expresiones regulares en el mapeo de ruta(MapRoute). Si vamos al archivo RouteConfig.cs y vemos la función maproute., la entrada a esta función es el constraint como se muestra es la figura de abajo.


    En este orden para acomodar la validación necesitamos especificar el regex constraint es decir ‘\d{1,2}’ en la función maproute como se muestra abajo. ‘\d{1,2}’ en regex significa que la entrada debería ser numérico y ser un máximo de 1 o 2 es decir entre 0 y 99.

    Puedes especificar los valores por defecto diciendo id=0 como se muestra en el código de abajo. En el caso de que ID no este especificado este tomara el valor 0 por defecto.

    Paso 4: Probando si esto trabaja

    Ahora que estamos haciendo la validación usando la función maproute, es tiempo de probar si esta validación trabaja. La primera prueba tenemos que especificar 1 y veremos que el controlador es correcto y la data es mostrada.

    Si especificamos un valor mayor a 99, deberíamos obtener un error como se muestra abajo. Por favor note que el error es confuso pero es el efecto de la validación regex el cual especifica la función maproute.

    El punto más importante a notar es que esta validación se ejecuta antes que la solicitud a la función del controlador.

    Lab 9: Entendiendo URLs salientes en MVC

    Introducción
    Cuando hablamos de aplicaciones web, los usuarios finales estarían como navegando de una página a otra página. Como desarrollo simple primeramente estarías pensando en dar justo los nombres de la aginas como se muestra en la figura de abajo.

    Por ejemplo si quieres ir y mostrar de home.aspx a about.aspx darás el enlace al nombre de la página y las cosas deberían ser bien.

    Pero haciendo esto estas violando los principios de MVC. Los principios MVC dicen que la llamada debería primeramente llegar al controlador, pero especificando <a href=”home.aspx” a> la primera llamada es a la vista. Este inconveniente es completamente lógica del controlador y tu arquitectura MVC falla.

    Lo ideal es que las acciones deberían direccionar a las páginas. Los enlaces deberían tener acciones en la etiqueta anchor(<a>) y no nombres de páginas es decir nombres de vistas.

    Paso 1: Creando el controlador para las vistas
    Definimos las acciones que invocaran estas vistas. En el siguiente codigo tenemos definido tres acciones: GotoHome( esta invoca a la vista Home), AboutUs(Este invoca a la vista about), y SeeProduct(Este invoca a la vista product).

    Paso 2: Creando vistas
    Ahora vamos a crear las vistas para los tres métodos definidos en el controlador Site(About, Home, Product).



    Ahora vamos a crear una simple navegación entre estas simples páginas como se muestra abajo. De la vista Home nosotros estaríamos navegando a las vistas About y Product. De las vistas About y Product estaríamos navegando atrasa la vista Home.

    Paso 3: proveyendo acciones en los link.
    Para invocar las acciones relacionadas a las vistas necesitamos especificar las acciones en la etiqueta anchor como se muestra en el siguiente código.

    El código de arriba fue para la vista Product, pues hacer lo mismo para las vistas About y Home.

    Para la Vista Home:

    Para la vista About:

    Paso 4: Disfrutando su navegación
    Antes de probar la navegación, es necesario modificar el mapeo de ruta modificado el los laboratorios anteriores. Asi vamos al archivo RouteConfig.cs. y lo dejamos con en un inicio:

    Ahora si tienes especificado las acciones dentro el enlace, navegas entre las paginas Home, about y product.

    Mientras navegas puedes ver como el URL son dirigidos a las acciones mas que a los nombres de las paginas como home.aspx, aboutus.aspx el cual viola completamente los principios MVC.

    ¿Qué hay para el tercer día?
    Es la tercera sesión, hablaremos acerca de vistas parciales, validación usando notaciones de data, Razor(MVC4), Autenticación avanzada en MVC, Autenticación de formularios en MVC y mucho más. Los siguientes laboratorios podrían ser mucho más avanzados comparados al segundo día.





    TUT: Aprender SPRING MVC sobre GAE Paso a Paso en 7 dias(Dia 1)


    Contenido
    • Acerca de MVC 
    • Introducción a Spring MVC. 
    • Google App Engine(GAE) 
    • Pre-Requisitos 
    • Lab 01: Creando una simple Aplicacion ASP.NET MVC “Hola Mundo” 
    • Lab 02: Pasando datos entre el controlador y la vista 
    • Lab 03: Creando un simple modelo usando MVC 
    • Lab 04: Creando un simple formulario de entrada de datos MVC 
    • Lab 05: Usando Razor para crear vistas rápidamente 
    • ¿Y que hay para el segundo Día?
    Queriendo demostrar que el concepto MVC es igual entre ASP.NET MVC y SPRING MVC es que realizare Aprender MVC con las dos tecnologias( para ls amantes de microsoft y para los amantes del software libre).
    Pueden revisar Aprender ASP .NET MVC Paso a Paso en 7 dias(Dia 1)

    Acerca de MVC
    Para entender mejor el funcionamiento de Spring MVC voy a dar una pequeña explicación sobre el patrón de diseño Modelo-Vista-Controlador.
    MVC(Modelo Vista Controlador) es un patrón o modelo de abstracción de desarrollo de software que separa los datos de una aplicación, la interfaz de usuario , y la lógica de negocios en tres componentes distintos. El principio fundamental del patrón MVC es definir una arquitectura con claras responsabilidades para diferenciar componentes. En MVC hay tres participante.

    Modelo. Un modelo representa los datos o reglas de negocio así como el estado de la aplicación.
    Vista. esta presenta los datos al usuario en un formulario específico
    Controlador. El controlador maneja las solicitudes de las acciones realizadas por el usuario en la vista, actualiza el modelo y dirige a los usuarios la vista apropiada basándose en los resultados de la ejecución.



    Introducción a Spring MVC
    Spring MVC es uno de los módulos del framework Spring, y este provee un exhaustivo soporte para el patrón MVC.asíi como también provee soporte de otras características, una de ellas es facilitar la implementación de la capa de presentación

    El Framework Spring Web Model-View-Controller(MVC) es diseñado alrededor de un DispatcherServlet que envía solicitudes a los manejadores(handlers) con mapeo de manejadores configurables, resolución de vistas, así como soporte para carga de archivos.
    El manejador por defecto esta basado en las anotaciones @Controller y @RequestMapping, ofreciendo un amplia gama de metodos de manipulacion flexible. Con la introducción de Spring 3.0, el mecanismo @Controller también permite crear Sitios y aplicaciones web REST a través de la anotacion @PathVariable y otras características.
    La resolución de vistas de Spring es extremadamente flexible. La implementación de un controlador puede incluso escribir directamente a la secuencia de respuesta. Típicamente una instancia ModelAndView consiste de un nombre de vista y un modelo Map.
    En Spring MVC el DispatcherServlet es un Servlet que recibe las peticiones HTTP y las envía al controlador apropiado. En una aplicación SpringMVC puede ver varios DispatcherServlet para cumplir con varios propósitos(por ejemplo manejar las solicitudes de las interfaces de usuarios, solicitudes de webservices, etc) y cada DispatcherServlet tiene su propia configuración(Web ApplicationContext), el cual define las características del Servlet tales como los controladores que el servlet soporta.


    Google App Engine(GAE)
    Google App Engine permite ejecutar las aplicaciones web en la infraestructura de Google. el GAE admite aplicaciones escritas en varios lenguajes de programación, puedes crear tu aplicación a través de tecnologías de Java estándar, que incluyen JVM, servlets Java, el lenguaje de programación Java y el Framework SPRING. Al descargarse el SDK del GAE viene con un servidor local que permite la prueba de las aplicaciones en forma local, para posteriormente publicarlo en la nube de Google.

    Pre-Requisitos
    • Java 7 JDK 
    • Eclipse version Kepler 
    • SDK de GAE 1.8.4 pluying para eclipse 
    • Framework Spring 3.0 

    Lab 01: Creando una simple Aplicación “Hola Mundo” con SPRING MVC y GAE
    En este laboratorio crearemos un simple programa hola mundo, utilizando Spring MVC. Crearemos un simple controlador, y lo conectamos a una simple vista index.jsp para ver la página en el browser.

    Paso 01: Crear el Proyecto
    En el Entorno de Desarrollo de Eclipse, vamos a crear un proyecto GAE



    En la siguiente ventana le vamos a asignar el nombre MyFirstHelloWorld y vamos a asignarle el mismo nombre de paquete, marcamos la opción usar Google App Engine.



    Una vez hecho en finalizar, ya tenemos hecho la estructura de carpetas que más adelante lo modificaremos para poder adaptarlo al entorno MVC.






    Paso 02: Configurando el Proyecto con SPRING MVC
    Primero modificaremos el archivo web.xml, que es el archivo de arranque para poder incluir el DispatcherServlet.




    Descripción del web.xml ;
    • Registramos el DispatcherServlet como un Servlet llamado dispatcher que lo creamos más abajo 
    • Mapeamos este Servlet para manejar las solicitudes entrantes que comienzan /myfirsthelloworld/* 

    Ahora crearemos el DispatcherServlet que es responsable de cargar un SpringApplicationContext, el cual es usado para realizar el enlazado y la inyección de dependencias. Este archivo dispatcher-servlet.xml lo crearemos dentro la carpeta WEB-INF.



    Descripción del archivo dispatcher-servlet.
    • La declaración<context:component-scan> le dice a spring que escanee el código para encontrar beans inyectables bajo el paquete y todos sus subpaquetes especificados, de modo que cualquier código anotado con @Controller es automáticamente descubierto. 
    • La declaración <mvc:annotation-driven/> habilita el soporte de anotaciones para Spring MVC por ejemplo la anotación @Controller, así también son manejadas cosas como conversión, formateo y validación. 

    Y en el tag bean podemos asignar la ruta donde estarán las vistas /view/ (WAR/VIEW/) y la extensión de nuestras vistas.

    Copiamos las librerias(dll) del framework Spring dentro la carpeta WAR/WEB-INF/LIB( esto lo realizamos por el explorador de windows). y para que se actualice en nuestro proyecto cerramos y abrimos nuevamente el proyecto( click derecho close project y open Project).



    Ahora vamos a referenciar las librerías Spring al path de compilación( click derecho sobre el proyecto)




    Agregar las librerías de Spring en el boton Add JAR y listo habremos terminado de configurar SPRING en el proyecto.




    Paso 03: Agregar un controladorAhora vamos a agregar una clase controlador como se muestra en la siguiente figura:



    En la siguiente ventana asignamos un paquete controller y el nombre Default1Controller para el controlador.




    Incluimos el siguiente código a nuestro controlador




    Ahora vamos a describir ciertos aspectos de esta clase:

    • La clase utiliza la anotación @Controller, indicando que este es un controlador de Spring capaz de manejar solicitudes web, esta clase será automáticamente detectada con el contenedor de Spring. 
    • En la Clase Default y el método Index se utilizó la anotación @RequestMapping para especificar que este método debe manejar las solicitudes web con el path /default1 y /default1/index respectivamente. 
    • El metodo retorna un ModelAndView indicando la vista que se debe manejar(index.jsp) en la respuesta en este caso es una página jsp( configurado en el dispatcher-servlet.xlm) 

    Paso 04: Agregar una vista
    Ahora que tenemos el controlador necesitamos agregar la vista. en la carpeta creada WAR/VIEW agregamos una página index.jsp y otra include.jsp.




    El archivo include definimos los taglib que utilizaremos en todos nuestras vistas
    En el archivo include.jsp agregamos lo siguiente:



    y en la vista index.jsp




    Paso 05: Ejecutar la Aplicación
    Si haces Ctrl + F11 podrás ejecutar el proyecto. y digitar en el navegador lo siguiente:




    Lab 02: Pasando datos entre el controlador y la vista
    El controlador recibe la primera carga del modelo, la mayoría de veces nos gustaría pasar del modelo a la vista para la visualización.

    La gracia de usar un controlador consiste en el parámetro ModelMap. En ese parámetro, que en el fondo es como un HashMap, podemos meter objetos java identificados por una clave y que estarán accesibles desde la página jsp. De esta forma, podemos visualizar unos datos u otros en la página jsp.

    Paso 01: Crear proyecto y definir la vista de datos.
    Primero vamos a crear un controlador y en el controlador vamos a definir un ModelMap, como mostramos en el siguiente código:



    Paso 02: Mostrando el ModelMap en la vista.
    Lo siguiente es mostrar data en la vista pero usando tag prefijos de java. Para mostrar la vista necesitamos usar el tag <c: en la página JSP.



    Paso 03: Ejecutamos la aplicación
    Presionamos Ctrl+F11 y modificamos la URL en el Browse.



    Lab 03: Creando un simple modelo usando MVC
    En este laboratorio crearemos un simple modelo personalizado, esto con algunos datos y mostrarlo en la vista.

    Paso 01: Creamos un simple archivo de clase
    El primer paso es crear un simple modelo personalizado el cual esta en blanco con tres propiedades: code, name, y amount. crear un clase dentro del paquete myfirsthelloworld.model y asignarle el nombre Curstomer.


    Paso 02: Definimos un controlador con acción
    El primer paso es crear un controlador y agregar una simple acción que muestre el Customer.
    Importar el namespaces del modelo en la clase controlador, creamos un objeto de la clase Customer con algunos datos y lo pasamos a la vista llamado “DisplayCustomer”.




    Paso 03: Creamos una vista fuertemente tipada usando la clase.
    Necesitamos ahora unir los puntos de MVC, mediante la creación de vistas. dentro de la carpeta WAR/VIEW, creamos la vista DisplayCustomer.jsp y escribimos lo siguiente:




    Como podemos ver el objeto ModelMap llamado customer lo recibimos desde el controlador CustomerController.

    Paso 04: Ejecuta la aplicación
    Ahora para ejecutar la aplicación presiona Ctrl+F11.



    Lab 04: Creando un simple formulario de entrada de datos MVC
    Cada proyecto pequeño o grande necesita un formulario de entrada de datos. En este laboratorio crearemos una simple entrada de datos para nuestro cliente como se muestra:


    Tan pronto como el usuario final ingrese los detalles y envíe los datos estos serán direccionados a la siguiente ventana como muestra abajo:

    Paso 01: Creando la Página de entrada de datos
    El primer paso para crear una entrada de datos es usar las etiquetas form de HTML como se muestra en el código de abajo. Lo mas importante a notar es que la accion del boton es apuntada al método del controlador llamado “displaycustomer”( verificar las mayuscular o minusculas es case sensitive).

    Como ya sabemos toda pagina esta relacionada a una acción del controlador en el controlador Customer vamos a crear el método FillCustomer.



    Paso 02: Creando el controladorArriba definimos la acción del formulario hacia el controlador a la función displaycustomer
    Necesitamos obtener los datos de los controles HTML(form), llena el objeto y enviar el objeto a la vista.
    En el controlador DisplayCustomer, se ha cambiado el method a POST(enviado desde el formulario), llena el objeto objcustomer con los datos pasados como parametro y envía los objetos a la vista displaycustomer.


    Paso 03: Creando la vista para mostrar el objeto customer
    El siguiente paso es crear la vista DisplayCustomer( realizada en los pasos anteriores). En tag lib de java no existe el if-else asi que uso el choose(el igual que el case), en el case asignar el nombre test(si no da error).



    Paso 04: Finalmente ejecutar el proyecto
    Presionando las teclas CTRL + F11 ejecutamos el proyecto.



    Y al hacer clic en el botón enviar muestra la vista DisplayCustomer.


    Lab 05: Usando los TagLib para crear vistas rápidamente
    En nuestros laboratorios anteriores creamos un simple formulario de entrada de datos para customer completamos el laboratorio de forma satisfactoria pero hubieron dos problemas:
    • Los Código HTML fueron escritos manualmente. En pocas palabras esto fue poco productivo, esto es como escribir codigo HTML usando el notepad. 

    • Agregado a esto, mucho del código manual fue también escrito en el controlador para llenar los objetos y enviarlo a la vista. 
    En este laboratorio veremos como usar TagLib de java para minimizar el código manual e incrementar la productividad.

    Paso 01: Creando la clase Customer
    Para crear la clase Customer ir al laboratorio 03.

    Paso 02: Creando la entrada de formulario HTML usando TagLib form
    El TagLib Form tienen funciones el cual te permite crear controles HTML con facilidad enviar a la vista.

    En el archivo include.jsp vamos agregar la sgte instrucción:



    Paso 03: Creando una vista con tablib Form y fuertemente enlazada al modeloPara crear el formulario con tablib form es necesario que se haya referenciado en el archivo include.jsp. y tambien modificar el metodo del controlador customerController para enlazarlo al modelo customer que genera el formulario:


    Después de esto ya podemos crear nuestro formulario en la vista fillcustomer.jsp.



    .


    Paso 04: Creando el controlador
    La parte final es el codigo del controlador(Customer), el codigo del controlador ahora es mas simple.


    y al final ejecutar y mostrará los datos



    Eureka, ahora vamos por mas cheliñas para celebrar el cumplimiento de nuestro primer dia con SPRING MVC.

    ¿Y que hay para el segundo Día?


    Para el segundo día hablaremos acerca de Routing URL, fácil manera del testeo unitario MVC, atributos del controlador y mucho mas.Los siguientes laboratorio van a ser más avanzados a comparado con el primer dia. asi que realiza todos los laboratorios para que estes listo para el segundo dia.





    Suerte.