Integración de Spring MVC 3 + Maven + JSP pages

Esta serie de tutoriales intentan ofrecerte proyectos limpios creados a partir de cero para que no tengas que preocuparte demasiado en integrar tecnologías más comunes de desarrollo, espero te sirva alguno.
Tecnologías a integrar
- Spring MVC Framework 3.2.13.RELEASE
- Apache Maven 4.0.0
- Java JSP Pages
Estructura del proyecto
Utilizaremos la siguiente estructura la cual es más o menos estándar para proyectos Front con Spring MVC.
Archivo .POM de Maven
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.notasprogramacion</groupid> <artifactid>Integracion1SpringMVC</artifactid> <packaging>war</packaging> <version>1.0</version> <name>Integracion1SpringMVC Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <jdk.version>1.7</jdk.version> <spring.version>3.2.13.RELEASE</spring.version> <jstl.version>1.2</jstl.version> </properties> <dependencies> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> <version>${jstl.version}</version> </dependency> </dependencies> <build> <finalname>Integracion1SpringMVC</finalname> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-compiler-plugin</artifactid> <version>3.3</version> <configuration> <source>${jdk.version} <target>${jdk.version}</target> </configuration> </plugin> </plugins> </build> </project> |
El Controlador
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.notasprogramacion.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.notasprogramacion.dto.UsuarioDto; @Controller public class HomeController { @Value("${app.urlhome}") private String urlHomeFront; @RequestMapping(value ="/", method = RequestMethod.GET) public String welcome(ModelMap model) { model.addAttribute("message", "Hola Mundo Spring MVC"); model.addAttribute("usuario", new UsuarioDto(1, "Gonzalo Silverio")); model.addAttribute("urlHome", urlHomeFront); return "home"; } } |
Una clase Modelo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
package com.notasprogramacion.dto; import java.io.Serializable; public class UsuarioDto implements Serializable { private static final long serialVersionUID = -565342423787726341L; private Integer id; private String nombre; public UsuarioDto() { } public UsuarioDto(Integer id, String nombre) { this.id = id; this.nombre = nombre; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } @Override public String toString() { return "UsuarioDto [id=" + id + ", nombre=" + nombre + "]"; } } |
El archivo de propiedades de la aplicacion
1 2 3 |
app.name=IntegracionSpringMVC app.description=Ejemplo de integracion de JSP + Spring MVC 3.2 app.urlhome=http://localhost:8080/IntegracionSpringMVC/ |
El descriptor de despliegue web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<!--?xml version="1.0" encoding="UTF-8"?--> <web-app version="2.5" 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_2_5.xsd"> <display-name>IntegracionSpringMVC</display-name> <!-- The definition of the Root Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/root-context.xml</param-value> </context-param> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Processes application requests --> <servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet de Spring --> <servlet-mapping> <servlet-name>appServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> |
Archivo para importación de Configuraciones de Spring
Aquí podría importar otros archivos de configuración de Spring, por ejemplo la configuración de tus beans para javamail o quartz, si utilizas seguridad con Spring aquí podrias importar el archivo de Spring Security, etc.
1 2 3 4 5 6 7 8 9 |
<!--?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.0.xsd"> <!-- Root Context: defines shared resources visible to all other web components --> <!-- Configuracion de Spring, creacion de beans, cargar properties, etc --> <import resource="spring-config.xml"> </import></beans> |
Archivo para creacion de beans de Spring
Este archivo podría servirte para declarar beans de Spring, por ejemplo los beans para la capa dao, la capa service, etc.
1 2 3 4 5 6 7 8 |
<!--?xml version="1.0" encoding="UTF-8"?--> <beans:beans xmlns="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/beans/util" xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- Declarar aqui los beans que sean necesarios --> </beans:beans> |
Archivo de Configuración Spring MVC
Este archivo se encarga específicamente de la configuración puramente de Spring MVC. Observa como se esta configurando de forma global el archivo de propiedades frontCore.properties; ahora si observas el controlador (archivo HomeController.java) podemos inyectar estas propiedades con la anotacion @Value.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- Propiedades globales para esta aplicacion --> <context:property-placeholder location="classpath*:frontCore.properties"> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/jsp/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean> <mvc:resources mapping="/resources/**" location="/resources/"> <mvc:annotation-driven> <context:component-scan base-package="com.notasprogramacion"> </context:component-scan></mvc:annotation-driven></mvc:resources></context:property-placeholder></beans> |
La vista JSP
Se ha creado esta vista muy basica solo para mostrar como acceder a los atributos enviados en el mapa de esta vista, como acceder atributos de Dtos y como enlazar archivos css y javascript.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <title>Maven + Spring MVC | ${message}</title> <spring:url value="/resources/css/home.css" var="coreCss"> <link href="${coreCss}" rel="stylesheet"> <h2>${message}</h2> Bienvenido ${usuario.nombre} La URL Home del proyecto es: <span class="cssURLs">${urlHome}</span> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <spring:url value="/resources/js/home.js" var="coreJs"> <script src="${coreJs}"></script> </spring:url></spring:url> |
La hoja de estilos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
body { background-color: #fffff; } h2{ color: #9b9996; } p { color: #32b0ff; font-weight: bold; } p span.cssURLs { color: #ff9232; font-weight: bold; } |
El archivo de Javascript
1 2 3 4 5 6 7 8 9 10 11 |
var homeView = { }; homeView.initContext = function() { console.log("JQuery ha sido inicializado"); }; $(document).ready(function(){ homeView.initContext(); }); |
Despliegue del proyecto
Para desplegar el ejemplo lo puedes hacer con el siguiente comando de maven, con el cual no necesitas tener ningún servidor web instalado ya que el comando descarga los archivos necesarios del plugin de Apache Tomcat, levanta dicho servidor y despliega el proyecto de maven:
1 |
mvn clean install tomcat:run |
Si el despliegue se realizo correctamente utiliza la siguiente URL en un navegador web para ver la aplicacion en ejecucion: http://localhost:8080/Integracion1SpringMVC/
Descarga del codigo fuente
Si deseas obtener los archivos de código fuente del ejemplo, desde GitHub te los puedes descargar: desde aquí, hay varios ejemplos, la carpeta de este tutorial se llama Integracion1SpringMVC.
Como puedes ver es un ejemplo muy sencillo pero podría servir para continuar integrando otras tecnologías de desarrollo que pudieras necesitar. Si te gusto el tutorial no olvides dar like, así me motivas a continuar escribiendo sobre estos temas :D, saludos.