Transcript SPRING MVC

SPRING MVC
Qué es Spring ?

Spring es un framework de aplicaciones Java/J2EE desarrollado usando licencia de OpenSource.
Se basa en una configuración a base de JavaBeans bastante simple. Es interesante el uso de
programación orientada a aspectos (IoC). Tiene plantillas que permiten un más fácil uso de
Hibernate, iBatis, JDBC..., se integra "de fábrica" con Quartz, Velocity, Freemarker, Struts,
Webwork2 y tienen un plugin para eclipse.

Ofrece un ligero contenedor de bean para los objetos de la capa de negocio, DAOs y repositorio de
Datasources JDBC y sesiones Hibernate.

El objetivo de Spring es no ser intrusivo, aquellas aplicaciones configuradas para usar beans
mediante Spring no necesitan depender de interfaces o clases de Spring, pero obtienen su
configuración a través de las propiedades de sus beans. Este concepto puede ser aplicado a
cualquier entorno, desde una aplicación J2EE a un applet.

La meta a conseguir es separar los accesos a datos y los aspectos relacionados con las
transacciones, para permitir objetos de la capa de negocio reutilizables que no dependan de
ninguna estrategia de acceso a datos o transacciones. Spring ofrece una manera simple de
implementar DAOs basados en Hibernate sin necesidad de manejar instancias de sesión de
Hibernate o participar en transacciones. No necesita bloques “try-catch”, innecesario para el
chequeo de transacciones.
Qué proporciona ?

Una potente gestión de configuración basada en JavaBeans, aplicando los principios de Inversión de
Control (IoC). Esto hace que la configuración de aplicaciones sea rápida y sencilla.

Una capa de abstracción JDBC que ofrece una significativa jerarquía de excepciones (evitando la
necesidad de obtener de SQLException los códigos que cada gestor de base de datos asigna a los
errores), simplifica el manejo de errores, y reduce considerablemente la cantidad de código
necesario.

Un framework MVC (Model-View-Controller), construido sobre el núcleo de Spring. Este framework
es altamente configurable vía interfaces y permite el uso de múltiples tecnologías para la capa vista
como pueden ser JSP, Velocity, Tiles, iText o POI. De cualquier manera una capa modelo realizada
con Spring puede ser fácilmente utilizada con una capa web basada en cualquier otro framework
MVC, como Struts, WebWork o Tapestry.

El objetivo central de Spring es permitir que objetos de negocio y de acceso a datos sean
reutilizables, no atados a servicios J2EE específicos. Estos objetos pueden ser reutilizados tanto en
entornos J2EE (Web o EJB), entornos de pruebas, etc.… sin ningún problema. La arquitectura en
capas de Spring ofrece mucha de flexibilidad.
Qué es IoC ?

Spring se basa en IoC. IoC es lo que nosotros conocemos como El Principio de Inversión de
Dependencia, Inversion of Control" (IoC) o patrón Hollywood ("No nos llames, nosotros le
llamaremos") .Traduciendo este principio a términos de este trabajo, en lugar de que el código de la
aplicación llame a una clase de una librería, un framework que utiliza IoC llama al código. Es por
esto que se le llama "Inversión", ya que invierte la acción de llamada a alguna librería externa.
consiste en:

Un Contenedor que maneja objetos por ti.
El contenedor generalmente controla la creación de estos objetos. Por decirlo de alguna manera, el
contenedor hace los “new” de las clases java para que no los realices tu.
El contenedor resuelve dependencias entre los objetos que contiene.


Funcionamiento
Funcionamiento
[1] Las peticiones pasan a través de un servlet que actúa de Front Controller
(DispatcherServlet).
[2] El DispatcherServlet consulta a un HandlerMapping para decidir a que controlador le
pasa la petición. Usa la URL de la solicitud para decidir.
[3 - 4] El controlador procesa la petición, accede a la lógica de negocio y potencialmente
obtiene resultados (modelo, un Map) además selecciona la vista para presentar el
modelo.

Para que el controlador no esté acoplado a la vista, se devuelve un identificador lógico (
nombre) de vista.

Devuelve al DispatcherServlet un objeto que encapsula ambos: ModelAndView.
[5] El DispatcherServlet utiliza un ViewResolver para resolver el nombre en una vista
concreta

Normalmente un JSP, pero se soportan otros Velocity, XSLT, Tiles, …
[6] El DispatcherServlet utiliza la vista para mostrar el modelo al usuario.
DispatcherServlet

Objeto de la clase DispatcherServlet del paquete org.springframework.web.servlet.

Actúa como un broker: despacha las peticiones que recibe al controlador responsable de
tratarlas.

Configurar el /WEB-INF/web.xml de la aplicación para que el dispatcher reciba las
peticiones.

Lee su configuración del fichero dispatcher-servlet.xml :




Ubicado en el /WEB-INF/ de la aplicación
Referencia al HandlerMapping
Referencias a los controladores
Referencia al ViewResolver
HandlerMapping

Interfaz HandlerMapping del paquete org.springframework.web.servlet

Spring proporciona varias implementaciones. Dos de las más utilizadas son:

Paquete: org.springframework.web.servlet.handler
BeanNameUrlHandlerMapping
- Selección por nombre del bean (el nombre coincide con la URL de
invocación). Es el HandlerMapping por defecto.

<bean name="/home.htm" class="this.is.an.example.HomePageController"/>

SimpleUrlHandlerMapping
- Se define una tabla que asocia URLs a controladores.
Controller


Interfaz Controller del paquete org.springframework.web.servlet.mvc
Método principal:
ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse
response) throws Exception;

Usualmente para implementar un controlador se extiende de la clase abstracta
AbstractController del mismo paquete.

Al controlador se le inyecta (si es necesario) la referencia al bean que ofrece el servicio
de la lógica de negocio.
ViewResolver


Interfaz ViewResolver del paquete org.springframework.web.servlet
Método:
View resolveViewName(String viewName, Locale locale) throws Exception



Spring ofrece algunas implementaciones:
Paquete: org.springframework.web.servlet.view
ResourceBundleViewResolver
- Un fichero bundle contiene las definiciones de vista (mapeo nombre de vista a implementación
de vista). Por ejemplo, bundle views_EN.properties:
nombre-vista.class = org.springframework.web.servlet.view.JstlView
nombre-vista.url=/WEB-INF/views/en_GB/user/edit.jsp

UrlBasedViewResolver
- No mapeo: el nombre es directamente una referencia a la vista.
- No implementa soporte para localización.
View


Interfaz View del paquete org.springframework.web.servlet
Métodos principales:
String getContentType() void render(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception

Spring proporciona múltiples implementaciones de esta interfaz
- JstlView, VelocityView, TilesView, XsltView, ...
Ahora Veamos el Código