sábado, 22 de agosto de 2009

Spring MVC implementando la interface Controller

En los 2 post anteriores hemos visto como podemos implementar un controlador(la C en MVC) mediante anotaciones, para aquellos a quienes no les guste este tipo de implementación pues hay una forma un poco más extensa y un tanto vieja, esta forma es mediante la implementación de la interface Controller, allí las va el código:

1. En el Front Controller(-servlet.xml) de tu aplicación declara el siguiente bean:

<!--
El siguiente bean mapeará las solicitudes /login/procesar.do hacia el controlador pe.com.slcsccy.springmvc.controllers.LoginController, estas solicitudes serán procesadas por el metodo: handleRequest(HttpServletRequest,HttpServletResponse) que deacuerdo al procesamiento ó lógica de negocio retornará hacia la vista apropiada
-->
<bean name="/login/procesar.do" class="pe.com.slcsccy.springmvc.controllers.LoginController">
<property name="vistaOk" value="iniciar"/>
<property name="vistaError" value="error"/>
</bean>

2. Crea una clase que implemente la interface Controller y agregale la lógica de negocia que tu quieras:

package pe.com.slcsccy.springmvc.controllers;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import pe.com.slcsccy.springmvc.dominio.Usuario;

public class LoginController implements Controller {

private String vistaOk;
private String vistaError;

/*
Método definido en la interfaz Controller e implementado aquí para dar soporte a las solicitudes cuyo patrón URL está declarado en el Front Controller(frontController-servlet.xml)
*/
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("VistaOk:"+getVistaOk());
System.out.println("VistaError:"+getVistaError());
String usuarioRequest = request.getParameter("usuario");
if ("ccacique".equals(usuarioRequest)) {
/* Creamos los datos que supuestamente los obtenemos con un Service */
Map datosLogin = new HashMap();
Usuario usuario = new Usuario();
usuario.setNombres("Carlos Alberto");
usuario.setApellidos("Cacique Yupanqui");
usuario.setCodigo("ccacique");
datosLogin.put("usuario", usuario);
/* El constructor de ModelAndView recibe como parametros el nombre de la
vista hacia la cual vamos a responder y el modelo de datos que hemos obtenido.*/
return new ModelAndView(getVistaOk(), datosLogin);
} else {
Map datosError = new HashMap();
datosError.put("mensaje", "Usuario incorrecto");
return new ModelAndView(getVistaError(), datosError);
}
}

public String getVistaOk() {
return vistaOk;
}
public void setVistaOk(String vistaOk) {
this.vistaOk = vistaOk;
}
public String getVistaError() {
return vistaError;
}
public void setVistaError(String vistaError) {
this.vistaError = vistaError;
}
}

3. Define las vistas, para el caso solo 2 páginas jsp; error.jsp e iniciar.jsp

error.jsp:
<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Pagina de Error</title>
</head>
<body>PAGINA DE ERROR:
<c:out value="${mensaje}"/>
</body>
</html>

iniciar.jsp
<%@ page contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Aplicación J2EE</title></head>
<body>Bienvenido: <c:out value="${usuario.apellidos}"/>,<c:out value="${usuario.nombres}"/>
</body>
</html>


Comparando la forma de implementación de Controllers ya sea mediante anotaciones(@Controller) o mediante la implementación de la interfaz Controller(como vimos en este post), pues la tendencia es ir hacia lo que es anotaciones, con las anotaciones podemos prescindir de declarar los controllers en el FrontController, lo unico que tenemos que hacer es escanear el contexto del contenedor en busca de estereotipos y es el contenedor quien se encargará de detectar e instanciar los controllers adecuados, recuerda que el escaneo lo realizamos con la siguiente declaración:
<context:component-scan base-package="pe.com.slcsccy.springmvc.controllers"/>

Si aún así pues no te animas por las anotaciones pues en los siguientes post vamos a ver algo más de controllers más detallados y especificos para un problema particular.


No hay comentarios.:

Publicar un comentario

Es bueno comunicarnos, comenta!!.