sábado, 4 de julio de 2015

¿Como es un proyecto simple de SpringMVC en Eclipse con Maven y Tomcat?

Veamos como podemos armar el proyecto mas simple posible de Spring MVC utilizando Eclipse, Maven y Tomcat.


Versiones:

  • Eclipse (Eclipse Luna 4.4.1)
  • Maven (Apache Maven 3.3.3)
  • Tomcat (Apache Tomcat 7.0.62)
  • Java (jdk1.8.0_20)
  • Spring MVC (4.1.1.RELEASE)


Paso 01: Creamos un Dynamic Web Project


En Eclipse Luna creamos un nuevo proyecto web de la siguiente manera:



 
Utilizamos para el proyecto el nombre enSpringMVC_v001 y presionamos el botón “Finish”



Paso 02: Convertimos al Proyecto Web un Proyecto Maven


En eclipse esto se logra con un click derecho sobre el proyecto y eligiendo: Project > Configure > Convert to Maven Project





Nos muestra la siguiente pantalla, que está Ok, con lo cual no modificamos ningún valor:





Luego, una vez creado el pom.xml le vamos a agregar dependencias:




Podremos agregar dependencias en el pom.xml presionando el botón “Add...





Las dependencias que buscaremos incorporar son las siguientes:


  • Spring Framework: versión 4.1.1.RELEASE
  • Servlet JSTL: versión 1.2
  • Log con Logback: versión 1.0.13








En el pom.xml sería como sigue, Igual dejaremos que el eclipse sea quien edite el pom.xml


Para Spring Framework: versión 4.1.1.RELEASE


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.1.RELEASE</version>
        </dependency>


Para Servlet JSTL: versión 1.2

1
2
3
4
5
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency> 

Para Log con Logback: versión 1.0.13

1
2
3
4
5
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.0.13</version>
        </dependency>

Comenzamos agregando las dependencias con el Eclipse:

Primero Spring Framework: versión 4.1.1.RELEASE




Y seguimos agregando las dependencias anteriormente mencionadas hasta que llegamos a la última:


Dependencia Log con Logback: versión 1.0.13





El pom.xml que nos genera el eclipse queda de la siguiente manera:

 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<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/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>enSpringMVC_v01</groupId>
 <artifactId>enSpringMVC_v01</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>war</packaging>
 <build>
  <sourceDirectory>src</sourceDirectory>
  <plugins>
   <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
     <warSourceDirectory>WebContent</warSourceDirectory>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </plugin>
   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.3</version>
    <configuration>
     <source>1.8</source>
     <target>1.8</target>
    </configuration>
   </plugin>
  </plugins>
 </build>
 <dependencies>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>4.1.1.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-aop</artifactId>
   <version>4.1.1.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.1.1.RELEASE</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-web</artifactId>
   <version>4.1.1.RELEASE</version>
  </dependency>

   <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
  </dependency>

   <dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version>1.0.13</version>
  </dependency>
 </dependencies>
</project>

Paso 03: Agregamos el archivo XML de beans de Spring 


Creamos el archivo XML para definir los beans de spring. Por convención (convention over configuration) tenemos que nombrarlo  javaen-servlet.xml para que spring lo encuentre dentro del WEB-INF:


LA convención se debe a que en el web.xml utilizamos el nombre del servlet de spring javaen
<servlet-name>javaen</servlet-name>


Desde el eclipse > New XML File




Lo creamos vacío presionando Finish y hacemos copy&paste de este sencillo xml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:p="http://www.springframework.org/schema/p"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 
 <context:component-scan base-package="com.javaen.controller" />
 
 <bean id="viewResolver"
  class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass"
   value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
 </bean>
</beans>


Como se puede observar, ya estamos definiendo dónde vamos a dejar los Controller de Spring, o sea dentro del paquete com.javaen.controller


Y también donde vamos a dejar las “vistas”, o sea las páginas JSP que alojaremos dentro del directorio /WEB-INF/jsp/







Paso 04: Agregamos el web.xml al proyecto web


A continuación, generamos el web.xml si no está en nuestro proyecto. En nuestro caso, no está con lo cual lo tuvimos que agregarlo:


Hacemos click con el botón derecho del mouse sobre nuestro Proyecto y elegimos:


Java EE Tools > Generate Deployment Descriptor Stub





Editamos al web.xml para agregar al DispatchServlet de Spring

 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
<?xml version="1.0" encoding="UTF-8"?>
<web-app 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee" 
  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>enSpringMVC_v01</display-name>

     <servlet>
        <servlet-name>javaen</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>javaen</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
      
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>






Paso 05: Creamos nuestro primer Controller de Spring






Y después de presionar el botón Finish obtenemos nuestra clase Java sobre la cual copiaremos el siguiente código que define el controller de Spring con sus anotaciones:


HelloController.java


 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
package com.javaen.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

 /**
 * @author [Pablo Ezequiel]
 *
 */
@Controller
public class HelloController {
 
 @RequestMapping("/helloController")
 public ModelAndView helloController() {
 
  String message = "<br>"
          +"<div style='text-align:center;'>"
    +"<h2>Hola Mundo Spring MVC!</h2>"
    +"Mensaje del Controller de Spring"
    +"</div><br><br>";
  
  return new ModelAndView("respuesta", "message", message);
 }
}


Compartimos a continuación la imagen de la clase HelloController en el eclipse





A continuación crearemos las páginas JSP

Paso 06: Creamos las vistas en páginas JSP



Vamos a crear a dos páginas JSP:


  • index.jsp Una para dar la bienvenida
  • respuesta.jsp para ser accedida a través del controller de Spring MVC


Contenido de la página index.jsp de bienvenida:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hola Spring MVC</title>
</head>
<body>

 <br>Primera aplicación con Spring MVC
<br> 
<a href="helloController.htm">Click para un nuevo mensaje de bienvenida</a>
</body>
</html>




Creación de la página respuesta.jsp en el directorio WEB-INF/jsp para alojar las vistas:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hola Spring MVC</title>
</head>
<body>

 Hola! Soy la respuesta con el Mensaje desde el controller:
<br>
${message} 

 </body>
</html>

Veamos las pantallas en el Eclipse:




Paso 07: Revisamos la estructura del proyecto

La estructura del proyecto debería verse de la siguiente manera:

Resaltamos con el marcado amarillo a los componentes mas importantes:





Paso 08: Agregamos el proyecto web al Tomcat


Con el botón derecho sobre el servidor Tomcat nos aparece el diálogo que nos permite agregar a nuestra aplicación web al Tomcat con “Add and Remove …”



A continuación podemos iniciar el servidor web Tomcat habilitando a nuestro proyecto enSpringMVC_v001 a brindar servicio:





Con el Tomcat levantado, accedemos a la URL donde nuestro proyecto enSpringMVC_v001 está escuchando:







Y ahora:





Referencias:

El artículo estuvo basado en el tutorial http://crunfy.me/1FI1eHD  del blog de java http://crunchify.com/  


Descargar el código de GitHub:

Pueden descargar el código de este ejemplo en el repositorio de GitHub del Blog


Un poco de Feedback...

¿Pudieron seguir todos los pasos?
¿De que manera les gustaría ampliar el contenido de este artículo?





1 comentario: