Post on 03-Apr-2018
7/28/2019 M3_LAB3
1/19
GUA DE LABORATORIO 3
SPRING MVC
7/28/2019 M3_LAB3
2/19
Tecsup Spring MVC
LABORATORIO
Objetivos:
Implementar la capa de presentacin con Spring MVC.
Equipos, Materiales, Programas y Recursos:
PC con Sistema Operativo con soporte a Java.
IDE para Java
Navegador Web (recomendable Firefox)
Contenedor de Servlets (recomendable Tomcat)
Spring Framework
Introduccin:
En la presente sesin, se detalla el framework Spring MVC para la implementacin de lacapa de presentacin.
Preparacin:
El alumno debe haber revisado las presentaciones dadas en la clase de teora.
Procedimiento y Resultados:
Spring MVC
Crear un proyecto Dynamic Web Project que utilice el Tomcat 7.
Copiar las libreras entregadas por el profesor.
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 1
7/28/2019 M3_LAB3
3/19
Tecsup Spring MVC
Crear el archivo /WebContent/WEB-INF/web.xml :
web.xml
Spring3
despachadororg.springframework.web.servlet.DispatcherServlet1
despachador*.html
contextConfigLocation
classpath:/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
/redirect.jsp
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 2
7/28/2019 M3_LAB3
4/19
Tecsup Spring MVC
Crear el archivo: /WEB-INF/despachador-servlet.xml
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 3
7/28/2019 M3_LAB3
5/19
Tecsup Spring MVC
Crear el archivo applicationContext.xml en src:
Crearemos el archivo redirect.jsp en WebContent:
Crear la clase IndexController.java:
package trastienda.web;
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;
@Controller
public class IndexController {
@RequestMapping(value = "/index", method = RequestMethod.GET)protected ModelAndView inicio(HttpServletRequest request,
HttpServletResponse response) throws Exception {return new ModelAndView("logeo");
}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 4
7/28/2019 M3_LAB3
6/19
Tecsup Spring MVC
Crearemos el archivo logeo.jsp en/WEB-INF/jsp/
Sistema de Trastienda
Usuario:
Clave:
Acceder al proyecto y probar.
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 5
7/28/2019 M3_LAB3
7/19
Tecsup Spring MVC
Ejercicio con Spring MVC
Escribir una calculadora que permita realizar las operaciones de suma, resta, multiplicaciny divisin.
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 6
7/28/2019 M3_LAB3
8/19
Tecsup Spring MVC
Spring Bean Container
MODELO DE DOMINIO
Usuario.javapackage trastienda.modelo;
import java.util.ArrayList;import java.util.Collection;
public class Usuario {
private String idUsuario;private String clave;private String nombres;private String paterno;
private String materno;private String correo;private String direccion;private String telefono;private String estado;private Collection roles = new ArrayList();
// 1. Escribir constructor vaco// 2. Generar constructor con campos// 3. Generar getters y setters
}
Rol.java
package trastienda.modelo;
import java.util.ArrayList;import java.util.Collection;
public class Rol {
private String rolNombre;private String descripcion;private Collection usuarios = new ArrayList();
// 1. Escribir constructor vaco// 2. Generar constructor con campos// 3. Generar getters y setters
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 7
7/28/2019 M3_LAB3
9/19
Tecsup Spring MVC
EXCEPCIONES
DAOExcepcion.java
package trastienda.excepcion;
publicclass DAOExcepcion extends Exception {
/****/privatestaticfinallongserialVersionUID = 1L;
public DAOExcepcion() {super();// TODO Auto-generated constructor stub
}
public DAOExcepcion(String arg0, Throwable arg1) {super(arg0, arg1);// TODO Auto-generated constructor stub
}
public DAOExcepcion(String arg0) {super(arg0);// TODO Auto-generated constructor stub
}
public DAOExcepcion(Throwable arg0) {super(arg0);// TODO Auto-generated constructor stub
}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 8
7/28/2019 M3_LAB3
10/19
Tecsup Spring MVC
LoginExcepcion.java
package trastienda.excepcion;
publicclass LoginExcepcion extends Exception {
/****/privatestaticfinallongserialVersionUID = 3332421583748907236L;
public LoginExcepcion() {super();// TODO Auto-generated constructor stub
}
public LoginExcepcion(String message, Throwable cause) {super(message, cause);
// TODO Auto-generated constructor stub}
public LoginExcepcion(String message) {super(message);// TODO Auto-generated constructor stub
}
public LoginExcepcion(Throwable cause) {super(cause);// TODO Auto-generated constructor stub
}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 9
7/28/2019 M3_LAB3
11/19
Tecsup Spring MVC
CAPA DE SERVICIO (NEGOCIO)
SeguridadService.javapackage trastienda.service;
import trastienda.excepcion.DAOExcepcion;import trastienda.excepcion.LoginExcepcion;import trastienda.modelo.Usuario;
public interface SeguridadService {
public Usuario validar(String idUsuario, String clave) throws DAOExcepcion,LoginExcepcion;
}
SeguridadServiceImpl.javapackage trastienda.service;
import org.springframework.beans.factory.annotation.Autowired;
import proyecto.dao.UsuarioDAO;import proyecto.excepcion.DAOExcepcion;import proyecto.excepcion.LoginExcepcion;import proyecto.modelo.Usuario;
@Servicepublic class SeguridadServiceImpl implements SeguridadService {
@Autowiredprivate UsuarioDAO usuarioDAO;
public void setUsuarioDAO(UsuarioDAO usuarioDAO) {this.usuarioDAO = usuarioDAO;
}
public Usuario validar(String idUsuario, String clave) throws DAOExcepcion,LoginExcepcion {
return usuarioDAO.validar(idUsuario, clave);}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 10
7/28/2019 M3_LAB3
12/19
Tecsup Spring MVC
CAPA DE PERSISTENCIA
UsuarioDAO.javapackage trastienda.dao;
import proyecto.excepcion.DAOExcepcion;import proyecto.excepcion.LoginExcepcion;import proyecto.modelo.Usuario;
public interface UsuarioDAO {
public Usuario validar(String idUsuario, String clave) throws DAOExcepcion,LoginExcepcion;
}
UsuarioDAOImpl.javapackage trastienda.dao;
import java.sql.ResultSet;import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.dao.EmptyResultDataAccessException;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
import proyecto.excepcion.DAOExcepcion;import proyecto.excepcion.LoginExcepcion;import proyecto.modelo.Usuario;
@Repositorypublic class UsuarioDAOImpl implements UsuarioDAO {
@Autowiredprivate JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;
}
public Usuario validar(String idUsuario, String clave)throws LoginExcepcion, DAOExcepcion {
System.out.println("UsuarioDAOImpl: validar(): " + idUsuario+ ", clave: " + clave);
String query = "selectid_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado from usuariowhere id_usuario=? and clave=?";
ParameterizedRowMapper mapper = newParameterizedRowMapper() {
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 11
7/28/2019 M3_LAB3
13/19
Tecsup Spring MVC
public Usuario mapRow(ResultSet rs, int rowNum) throwsSQLException {
Usuario vo = new Usuario();vo.setIdUsuario(rs.getString("id_usuario"));vo.setClave(rs.getString("clave"));
vo.setNombres(rs.getString("nombres"));vo.setPaterno(rs.getString("paterno"));vo.setMaterno(rs.getString("materno"));vo.setCorreo(rs.getString("correo"));vo.setDireccion(rs.getString("direccion"));vo.setTelefono(rs.getString("telefono"));vo.setEstado(rs.getString("estado"));return vo;
}};try {
return (Usuario) jdbcTemplate.queryForObject(query, new Object[] {
idUsuario, clave }, mapper);} catch (EmptyResultDataAccessException e) {
System.out.println("Usuario y/o clave incorrecto");throw new LoginExcepcion();
} catch (Exception e) {System.out.println("Error: " + e.getMessage());throw new DAOExcepcion(e.getMessage());
}
}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 12
7/28/2019 M3_LAB3
14/19
Tecsup Spring MVC
Agregar al applicationContext.xml:
jdbc:mysql://localhost:3306/tienda?
autoReconnect=true
com.mysql.jdbc.Driver
root
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 13
7/28/2019 M3_LAB3
15/19
Tecsup Spring MVC
CAPA DE PRESENTACIN
LoginController.javapackage trastienda.web;
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;
import trastienda.excepcion.LoginExcepcion;import trastienda.service.SeguridadService;
@Controllerpublic class LoginController {
@Autowiredprivate SeguridadService seguridadService;
public void setSeguridadService(SeguridadService seguridadService) {this.seguridadService = seguridadService;
}
@RequestMapping(value = "/login", method = RequestMethod.POST)protected ModelAndView logeo(HttpServletRequest request, HttpServletResponse
response) throws Exception {
System.out.println("Dentro de LoginController");ModelAndView mv = null;
String u = request.getParameter("idUsuario");String p = request.getParameter("clave");System.out.println(u);System.out.println(p);
try {
seguridadService.validar(u, p);mv = new ModelAndView("redirect:portada.html");} catch (LoginExcepcion e) {
mv = new ModelAndView("error", "mensaje", "Usuario y/o claveincorrectos");
}
return mv;}
}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 14
7/28/2019 M3_LAB3
16/19
7/28/2019 M3_LAB3
17/19
Tecsup Spring MVC
PortadaController.javapackage proyecto.web;
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;
@Controllerpublic class PortadaController {
@RequestMapping(value = "/portada")protected ModelAndView inicio(HttpServletRequest request,
HttpServletResponse response) throws Exception {return new ModelAndView("portada");
}}
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 16
7/28/2019 M3_LAB3
18/19
Tecsup Spring MVC
Crear la siguiente pgina en /WEB-INF/jsp
portada.jsp
Sistema de Trastienda
Trastienda v1
Mantenimiento de Usuarios
Mantenimiento de Roles
Salir
Dpto. de Informtica David Rodrguez - drodriguez@tecsup.edu.pe Pg. 17
7/28/2019 M3_LAB3
19/19
Tecsup Spring MVC
Conclusiones:
En la presente sesin, se detall el framework Spring MVC que permite implementar la capade presentacin de una aplicacin. Adems, vimos la configuracin en capas del FrameworkSpring.