Você está na página 1de 18

Taller Spring MVC 3.

0

Por medio de este taller se implementara un proyecto de Web usando Spring

1. Abrir Eclipse

2. Ingresar a File--> New-->Other


3. Seleccionar Dynamic Web Project y luego en el boton Next






4. Crear el Nuevo proyecto con los parametros siguientes y luego hacer clic en botn Finish


Esta es la estructura general que tiene el proyecto al ser creado

5. A continuacin se le aadirn propiedades Spring al proyecto para habilitar las propiedades de
Spring, haciendo clic derecho sobre el proyecto y haciendo la siguiente seleccin:


6. Para hacer uso de las libreras se necesitaran descargar las dependecias, la herramienta Maven
se encargara de esto y a continuacin se le aadir esta propiedad al proyecto haciendo clic
derecho y haciendo la siguiente seleccin:








7. Luego llenar el formulario de la siguiente forma, notar que para el campo Source Directory debe
estar seleccionado src Luego hacer clic en Finish

Notar como despus de aadir estas dos tecnologas, cambia la estructura general de los
proyectos aadiendo nuevos folders que sern usados. (copiar pom brindado)


8. A continuacin se creara una pagina Principal Simple para confirmar el funcionamiento del entorno web,
se creara una jsp en la carpeta WebContent, para esto se hara clic derecho sobre esta carpeta y hacer la
siguiente seleccin.






9. Llamaremos a esta pagina index.jsp y se hara clic en Finish


10. Se insertara el siguiente cdigo dentro del JSP que se acaba de crear y se a continuacin se guardara
haciendo clic sobre el botn Save o Ctrl+S


11. Dentro de la carpeta Web-Inf encontraremos el archivo de configuracin llamado web.xml, abrir este
archivo y borrar todo el cdigo que tiene en ese momento y reemplazarlo por el siguiente:


















<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>

</web-app>

12. A continuacin se desplegara la aplicacin, para esto se hara clic derecho sobre el proyecto y seleccionar
lo siguiente:

En la siguiente ventana de seleccin asegurar que el servidor seleccionado sea Tomcat v6.0 y hacer clic en
Finish


Eclipse levantara el servidor y luego de hacer el proceso de compilacin se abrir el navegador mostrando la
pagina JSP creada

13. Nuevamente abrir el archivo web.xml, esta vez ser modificado para aadir un dispatcher servlet, este se
encargara de enrutar todas las solicitudes. Aadir el siguiente cdigo despus de el cierre del tag display-
name .












14. A continuacin crearemos el archivo de configuracin de spring, en este se definirn los beans, este
archivo debe de estar ubicado dentro del folder WEB-INF y su nombre ser el parmetro que hayamos
puesto dentro del tag servlet-name mas -servlet en este caso nuestro archivo ser llamado dispatcher-
servlet. Se hara clic derecho sobre el folder WEB INF y se hara la siguiente seleccin:


<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet </servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
15. En el siguiente recuadro ingresar como nombre dispatcher-servlet.xml y luego hacer clic en Finish


16. Se abrir el archivo dispatcher-servlet que se acaba de crear y se modifacara para que unciamente tenga
el siguiente cdigo:










Este es un ejemplo simple que ensea como se relaciona cierta ruta con su clase respectiva. A continuacin
se creara la siguiente clase con la lgica interna a manejar.

17. Bajo el folder Java Resources se encuentra un subfolder llamado src. Se hara clic derecho sobre este para
crear un nuevo paquete.



<?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.xsd">

<bean name="/hello.htm" class="springapp.web.HelloController"/>

</beans>
18. Llenar el siguiente recuadro de la siguiente forma y dar clic en Finish


Luego de crear el paquete se procede a crear la clase Controller que tendr toda la lgica.

19. Dar clic derecho sobre el paquete recin creado y hacer la siguiente seleccin para crear una nueva
clase.

En el siguiente recuadro nombrar la clase HelloController

20. Esta nueva clase deber tener el siguiente cdigo

















21. Procederemos a crear la vista que mostrara el resultado. Crearemos un nuevo JSP llamado hello.jsp
dentro de la carpeta WEBCONTENT y tendr el siguiente cdigo








Probar nuevamente la aplicacin sin embargo, una vez desplegada la pagina principal, accesar a la direccin
http://localhost:8080/TallerSpring/hello.htm.

Para ensear mayor funcionamiento de las herramientas que provee Spring tendremos que hacer
uso de la librera estndar JSTL y para facilitar este proceso haremos un archivo de cabecera que
estar incluido en todos los dems JSP que deseemos.

22. dentro de la carpeta WEB-INF crear una nueva carpeta llamada jsp, mover el archivo hello.jsp
y crear un nuevo archivo llamado include.jsp con el siguiente cdigo:







23. Abrir el archivo index.jsp y modificar todo para que solo contenga este cdigo.







import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {


@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
return new ModelAndView("hello.jsp");
}

}
<html>
<head><title>Taller :: Spring MVC</title></head>
<body>
<h1>SPRING Ingenieria en la Web</h1>
<p>Uso de vistas por media de el sistema MVC</p>
</body>
</html>

<%@ page session="false"%>
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>

<%@ include file="/WEB-INF/jsp/include.jsp" %>
<c:redirect url="/hello.htm"/>

24. Modificar el archivo ehllo.jsp para que tenga el siguiente cdigo:











25. Abrir el controlador (HelloController) y modificarlo el mtodo handleRequest para que quede de la
siguiente forma









Desplegar la aplicacin, notar que esta vez se redirige inmediatamente hacia hello.jsp

26. abrir el dispatcher-servlet y aadir estas lneas despus de la definicin del bean
<bean name="/hello.htm" class="springapp.web.HelloController"/>









27. Abrir nuevamente la clase controlador (HelloController) y modificar el mtodo anterior para que quede
de la siguiente forma









Compilar y correr nuevamente la aplicacin para probar su funcionamiento.

<%@ include file="/WEB-INF/jsp/include.jsp" %>

<html>
<head><title>Taller :: Spring MVC</title></head>
<body>
<h1>Taller Spring Ing Web</h1>
<p>Uso basico de Spring con nuevo valor: ${now} </p>
</body>
</html>
@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
String now = (new Date()).toString();
return new ModelAndView("WEB-INF/jsp/hello.jsp", "now", now);
}
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewR
esolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

@Override
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
String now = (new Date()).toString();
return new ModelAndView("hello", "now", now);
}
28. Crear un nuevo paquete bajo src springapp.domain y bajo esta una clase llamada Product con el
siguiente cdigo.





























29. Crear un nuevo paquete bajo src llamado springapp.service y bajo este crear una interface llamada
productManager




















package springapp.domain;

import java.io.Serializable;

public class Product implements Serializable {

private String description;
private Double price;

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public Double getPrice() {
return price;
}

public void setPrice(Double price) {
this.price = price;
}

public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("Description: " + description + ";");
buffer.append("Price: " + price);
return buffer.toString();
}
}
package springapp.service;

import java.io.Serializable;
import java.util.List;

import springapp.domain.Product;

public interface ProductManager extends Serializable{

public void increasePrice(int percentage);

public List<Product> getProducts();

}

30. Bajo este mismo paquete crear la clase SimpleProductManager con el siguiente cdigo




















































package springapp.service;

import java.util.List;

import springapp.domain.Product;

public class SimpleProductManager implements ProductManager {

private List<Product> products;

public List<Product> getProducts() {
return products;
}

public void increasePrice(int percentage) {
if (products != null) {
for (Product product : products) {
double newPrice = product.getPrice().doubleValue() *
(100 + percentage)/100;
product.setPrice(newPrice);
}
}
}

public void setProducts(List<Product> products) {
this.products = products;
}

}

31. En el paquete springapp.web crear una nueva clase llamada InventoryController con el siguiente
cdigo:







































32. Abrir el archivo hello.jsp y modicarlo para que quede de la siguiente forma











package springapp.web;

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Map;
import java.util.HashMap;

import springapp.service.ProductManager;

public class InventoryController implements Controller {


private ProductManager productManager;

public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

String now = (new java.util.Date()).toString();
Map<String, Object> myModel = new HashMap<String, Object>();
myModel.put("now", now);
myModel.put("products", this.productManager.getProducts());

return new ModelAndView("hello", "model", myModel);
}


public void setProductManager(ProductManager productManager) {
this.productManager = productManager;
}

}
<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
<head><title><fmt:message key="title"/></title></head>
<body>
<h1><fmt:message key="heading"/></h1>
<p><fmt:message key="greeting"/> <c:out value="${model.now}"/></p>
<h3>Products</h3>
<c:forEach items="${model.products}" var="prod">
<c:out value="${prod.description}"/> <i>$<c:out value="${prod.price}"/></i><br><br>
</c:forEach>
</body>
</html>
33. Abrir el archivo dispatcher-servlet y modificarlo para que quede de la siguiente forma










































34. bajo la carpeta WEB-INF crear una carpeta llamada clases y bajo esa carpeta crear un archivo de nombre
messages.properties con el siguiente texto








<?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.xsd">

<bean id="productManager" class="springapp.service.SimpleProductManager">
<property name="products">
<list>
<ref bean="product1"/>
<ref bean="product2"/>
<ref bean="product3"/>
</list>
</property>
</bean>

<bean id="product1" class="springapp.domain.Product">
<property name="description" value="Lamp"/>
<property name="price" value="5.75"/>
</bean>

<bean id="product2" class="springapp.domain.Product">
<property name="description" value="Table"/>
<property name="price" value="75.25"/>
</bean>

<bean id="product3" class="springapp.domain.Product">
<property name="description" value="Chair"/>
<property name="price" value="22.79"/>
</bean>

<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>

<bean name="/hello.htm" class="springapp.web.InventoryController">
<property name="productManager" ref="productManager" />
</bean>

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

title=SpringApp
heading=Taller :: Spring MVC
greeting=Bienvenido a la prueba de Spring MVC
Nuevamente levantar el servidor y correr la aplicacin.

35. bajo el paquete springapp.domain crear la siguiente clase llamada User con el siguiente codigo






















36. bajo el paquete springapp.web crear una clase llamada SimpleFormController con el siguiente cdigo



























package springapp.domain;

public class User {

private String userName;
private String email;
public void setUserName(String userName){
this.userName=userName;
}
public String getUserName(){

return userName;

}

public void setEmail(String email){
this.email=email;
}

public String getEmail(){
return email;
}
}

package springapp.web;
import springapp.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class SimpleFormController {
@RequestMapping(value = "/simpleForm.htm", method = RequestMethod.GET)
public void simpleForm(Model model) {
model.addAttribute(new User());
}
@RequestMapping(value = "/formoutput.htm", method = RequestMethod.POST)
public void simple(@ModelAttribute User user, Model model) {
model.addAttribute("user", user);
}
}
37. Bajo la carpeta jsp crear un nuevo JSP llamado simpleForm


























38. En la carpeta jsp crear un nuevo jsp llamado formoutput

























<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!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>TALLER SPRING MVC</title>
</head>
<body>
<form:form action="formoutput.htm" commandName="user" >
<table align="center" >
<tr>
<td>Nombre :</td>
<td><form:input path="userName" /></td>
</tr>
<tr>
<td>Correo Electronico :</td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>
<%@taglib prefix="core" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>Taller Spring MVC</title>
</head>
<body>
<table align="center" >
<tr>
<td>Bienvenido:</td>
<td><core:out value="${user.userName}" /></td>
</tr>
<tr>
<td>Correo Electronico:</td>
<td><core:out value="${user.email}" /></td>
</tr>
</table>
</body>
</html>
39. Aadir el siguiente vinculo a hello.jsp
<a href="simpleForm.htm">Formulario</a>

40. Modificar dispatcher-servlet.xml para que quede de la siguiente forma
















































Levantar el servidor y ejecutar la aplicacin haciendo clic en el hipervinculo
<?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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xs">

<context:component-scan base-package="springapp.web"/>

<bean id="productManager" class="springapp.service.SimpleProductManager">
<property name="products">
<list>
<ref bean="product1"/>
<ref bean="product2"/>
<ref bean="product3"/>
</list>
</property>
</bean>

<bean id="product1" class="springapp.domain.Product">
<property name="description" value="Lamp"/>
<property name="price" value="5.75"/>
</bean>

<bean id="product2" class="springapp.domain.Product">
<property name="description" value="Table"/>
<property name="price" value="75.25"/>
</bean>

<bean id="product3" class="springapp.domain.Product">
<property name="description" value="Chair"/>
<property name="price" value="22.79"/>
</bean>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages"/>
</bean>
<bean name="/hello.htm" class="springapp.web.InventoryController">
<property name="productManager" ref="productManager" />
</bean>
<bean name="/priceincrease.htm" class="springapp.web.PriceIncreaseFormController">
<property name="sessionForm" value="true"/>
<property name="commandName" value="priceIncrease"/>
<property name="commandClass" value="springapp.service.PriceIncrease"/>
<property name="validator">
<bean class="springapp.service.PriceIncreaseValidator"/>
</property>
<property name="formView" value="priceincrease"/>
<property name="successView" value="hello.htm"/>
<property name="productManager" ref="productManager"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

Você também pode gostar