Spring MVC
Uso de Spring MVC en ataStore
Spring MVC
Uno de los componentes del framework Spring es el módulo Spring MVC
Paradigma MVC
El paradigma modelo-vista-controlador establece una forma de desarrollar aplicaciones basado en la estricta separación de la lógica de negocio y la presentación. De esta manera se puede trabajar en la presentación (plantillas HTML, JSP, etc.) más ágilmente.
Uno de los frameworks que más contribuyeron a extender la filosofía MVC es Struts.
Spring MVC es el módulo de Spring que implementa MVC. La documentación se encuentra en Spring MVC
Anotaciones de Spring MVC
En las últimas versiones de Spring MVC se usan anotaciones para configurar las clases. Veamos algunas de las anotaciones más usadas:
@Controller
Anotando una clase Java como @Controller se convierte en un controlador, es decir, en una clase encargada de recibir las peticiones HttpServletRequest.
@RequestMapping
Cada método que anotemos con @RequestMapping se asociará a determinada URL o patrón de URLs. También podemos especificar el método HTTP (GET o POST) al que responderá.
Veamos un ejemplo:
@Controller public class ProductController { @RequestMapping("/productList*") public String list(...) { ... } @RequestMapping("/productCreate*") public String create(...) { ... } @RequestMapping(value = "/productSave", method = RequestMethod.POST) public String save(...) { ... } }
Más elementos de Spring MVC
El objeto Model
El objeto Model simplemente es un mapa donde guardaremos los objetos que queremos pasar a la vista (es la M de MVC).
Podemos tener acceso al objeto Model simplemente declarándolo en un método del controller.
@RequestMapping("/productList*") public String list(Model model) { model.addAttribute("userName", "Johnny"); model.addAttribute("today", Calendar.getInstance()); ... }
Autobinding de los parámetros del request
Spring puede procesar los parámetros del request y crear automáticamente un objeto con ellos sin más que especificarle el objeto que queremos crear como parámetro de un método del controlador.
Por ejemplo:
@RequestMapping("/productSave*") public String save(Product product) { ... }
Para que Spring sepa como rellenar el objeto deberán coincidir los nombres de los elementos del formulario HTML con los nombres de los campos de la clase Java.
URL al estilo REST
Spring nos facilita trabajar con URLs al estilo REST parseando las variables que contengan. Para ello debemos usar la anotación @PathVariable. Por ejemplo:
@RequestMapping("/{lang}/productEdit/{productId}/*") public String edit(@PathVariable String lang, @PathVariable Long productId) { ... }
Interceptors
Un handler interceptor de Spring MVC es lo mismo que un ServletFilter, es decir, una clase que puede interceptar peticiones y respuestas, justo antes de que se produzcan, para modificarlas convenientemente.
Podemos definir nuevos interceptors en el archivo de configuración de Spring WEB-INF/spring/servlet-context.xml, bajo el elemento