Debido a la explosión de las aplicaciones móviles cada día nos encontramos con una mayor necesidad de utilizar frameworks web que generen paginas HTML sencillas de tal forma que luego puedan decorarse con otras tecnologías tipo Bootstrap,JQuery mobile o similares. A este tipo de categoría pertenece el framework Spring MVC que cada día es mas utilizado en las empresas. La siguiente comparativa es interesante para ver que cuota de mercado tiene cada framework. Comparativa frameworks web y cuota de mercado Como podemos ver aunque JSF es el standard Spring MVC hoy por hoy es el framework web mas utilizado.vamos a dedicar algunos post a introducir este framework desde cero. En mi libro tenemos un par de capítulos que explican a detalle el modelo MVC y el modelo MVC 2 o de FrontController. Recordemos que un modelo de FrontController funciona de la siguiente manera. Como podemos ver existe un único servlet que recibe todas las peticiones (GET,POST etc) y según la información que recibe delega en el comando adecuado que ejecuta la petición y devolverá unos resultados u otros.spring MVC se apoya en este concepto.vamos a montar como punto de partida una aplicación con Spring MVC que realice estas operaciones tan sencillas (Lista y Formulario). Para ello lo primero que necesitaremos es definir unas
dependencias a nivel de Maven (pom.xml) con las librerias de Spring necesarias. pom.xml </pre> <dependencies> <dependency> <groupid>org.apache.geronimo.specs</groupid> <artifactid>geronimo-servlet_3.0_spec</artifactid> <version>1.0</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>3.2.4.release</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>3.2.4.release</version> </dependency> </dependencies> <pre> Realizado este paso vamos a configurar el framework Spring dentro de nuestra aplicación web. Para ello deberemos añadir el siguiente bloque de código en nuestro web.xml. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>spring MVC</display-name> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <init-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/application-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> El fichero web.xml da de alta un nuevo servlet denominado DispatcherServlet que es el que realiza las tareas de controlador frontal de la aplicación y captura todas las peticiones ya que su url-pattern es /. Este controlador se apoya en el fichero clásico de Spring Framework que se encargará de gestionar los distintos flujos de la aplicación a traves del uso de beans.
Vamos a ver el código del fichero application-context.xml : <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <bean name="/lista" class="com.arquitecturajava.listacontroller"/> <bean name="/formulario" class="com.arquitecturajava.formulariocontroller"/> </beans>
En nuestro caso vamos a optar por un primer ejemplo muy muy básico que usa dos beans que gestionan las distintas urls a las que accedemos utilizando el patron MVC2. Si echamos un vistazo al código de cada de estas dos clases veremos lo siguiente. Código ListaController: package com.arquitecturajava; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.mvc.controller; public class ListaController implements Controller { public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { return new ModelAndView("/WEB-INF/jsp/Lista.jsp"); }
} Código FormularioControlller : package com.arquitecturajava; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.web.servlet.modelandview; import org.springframework.web.servlet.mvc.controller; public class FormularioController implements Controller { public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws Exception { } return new ModelAndView("/WEB-INF/jsp/Formulario.jsp"); } Como podemos ver nuestras clases implementan el interface Controller y tienen un método muy similar al método ejecutar (handlerequest) que nos redirige a una URL en concreto.
Una vez tenemos claro como funcionan los controladores que hemos definido es momento de ver el contenido de los ficheros JSP a los que hacen referencia. Lista.jsp </pre> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>lista de Personas</title> </head> <body> <ul> <li>pedro</li> <li>maria</li> </ul> <a href="formulario">ir a formulario</a> </body> </html> <pre>
Formulario.jsp </pre> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>lista de Personas</title> </head> <body> <form action="lista"> Nombre<input type="text" name="nombre" /></br> Apellidos<input type="text" name="apellidos" /></br> <input type="submit" value="aceptar"/> </form> </body> </html> <pre> Si solicitamos la url /Lista Spring MVC nos devolverá el contenido el fichero Lista.jsp. @Controller y Anotaciones El ejemplo que acabamos de construir es muy elemental y no hace uso para nada del sistema de anotaciones @Controller moderno del framework que cubriremos en el
siguiente Articulo. He preferido centrarme en los conceptos básicos y en la configuración propia del framework.