Empecemos con un poco de historia. Spring MVC apareció como parte del Spring Framework en sus primeras versiones, como una manera de crear aplicaciones basadas en la arquitectura Model-View-Controller. MVC se diseñó inicialmente para organizar el código en aplicaciones grandes, para separar la lógica de procesamiento de datos (Model), la renderización de la interfaz (View) y el manejo de las peticiones (Controller). Spring MVC tomó lo mejor de ese concepto y le añadió su propia magia de configuración y flexibilidad.
Spring MVC tuvo tanto éxito y se volvió tan popular que muchos desarrolladores lo asocian directamente con el propio Spring Framework.
¿Cómo funciona MVC?
MVC es como una orquesta bien afinada, donde:
- Model: se encarga de los datos (base de datos, lógica de negocio). Es, por así decirlo, los músicos tocando la pieza.
- View: se ocupa de mostrar los datos al usuario. Es el público disfrutando la melodía.
- Controller: dirige todo el asunto. Es el director de orquesta, que sabe qué hacer con los datos del Model y a dónde enviarlos para mostrarlos en el View.
[Cliente (navegador)]
↓
[Controller] → [Model]
↓
[View]
MVC divide la aplicación en tres componentes independientes, donde cada uno se responsabiliza de su parte del trabajo: Model almacena los datos y la lógica de negocio, View se encarga de la presentación, y Controller orquesta la interacción entre ellos. Es como la división del trabajo en un equipo: cada uno hace lo que mejor sabe hacer, sin estorbar a los demás. Imagínate que tu desarrollador frontend no quiere ver tus "horribles" consultas SQL en archivos HTML. Con MVC aíslas las consultas, la lógica, el estado y la presentación para no asustar a tus colegas. Esa arquitectura hace el código más limpio, más comprensible y más fácil de mantener.
Spring MVC aporta al proyecto:
- Flexibilidad: puedes usar cualquier tecnología para las Views — HTML, JSP, Thymeleaf e incluso JSON/XML (sí, REST API también se basan en MVC).
- Escalabilidad: Spring MVC permite manejar proyectos grandes fácilmente, separando el código en módulos.
- Automatización: con Spring te ahorras un montón de trabajo rutinario usando anotaciones y configuraciones sencillas.
- Integración: gracias a Spring Boot, Spring MVC se integra sin esfuerzo en el ecosistema Spring (por ejemplo, Spring Security para autorización, Spring Data para trabajar con la base de datos, etc.).
Ventajas de usar Spring MVC
- Velocidad de desarrollo: menos código, más funcionalidad.
- Facilidad para probar: los controllers son fáciles de testear gracias a su independencia respecto a las vistas.
- Templating: la integración con template engines (por ejemplo, Thymeleaf) facilita la creación de interfaces de usuario.
- Manejo de errores: mecanismos incorporados para el manejo de excepciones.
- Soporte REST: soporte nativo para RESTful APIs en aplicaciones web modernas.
Integrar Spring MVC en un proyecto
Para empezar con Spring MVC necesitas configurar las dependencias de tu proyecto. Si trabajas con Spring Boot (¡y normalmente trabajamos con él!), esto es especialmente sencillo.
Spring Boot se encarga de todo el "trabajo sucio" de la integración. Para Spring MVC basta con añadir la dependencia starter:
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-web'
Este starter incluye:
- Un servidor web embebido (Tomcat por defecto).
- Los componentes principales de Spring MVC para manejar peticiones HTTP.
- Jackson para serializar/deserializar JSON (útil para REST APIs).
Configuración del archivo inicial
Spring Boot configura automáticamente la mayor parte de lo necesario para trabajar con Spring MVC. Solo tienes que asegurarte de que en tu application.properties o application.yml está todo listo:
application.properties:
server.port=8080
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Aquí vemos:
server.port— define el puerto para nuestro servidor web.spring.mvc.view.prefixyspring.mvc.view.suffix— indican la ruta y la extensión para las vistas (por ejemplo, JSP).
Primer vistazo a Spring MVC: ejemplo
Crear un controller mínimo
Vamos a añadir a nuestro proyecto un controller sencillo para manejar peticiones HTTP.
Código del controller:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "hello"; // Devuelve el nombre de la vista
}
}
- @Controller: indica que esta clase es un controller de Spring MVC.
- @GetMapping("/hello"): enlaza las peticiones HTTP GET al URI
/hellocon el métodosayHello. - return "hello": devuelve el nombre de la vista. Spring buscará el archivo
hello.jspen la carpeta indicada.
Añadir la vista
Crea el archivo hello.jsp en la carpeta src/main/webapp/WEB-INF/views/.
hello.jsp:
<html>
<body>
<h1>¡Hola, Spring MVC!</h1>
</body>
</html>
Ahora ejecuta tu aplicación y abre en el navegador http://localhost:8080/hello. Si ves el mensaje "¡Hola, Spring MVC!", entonces todo está configurado correctamente.
¿Por qué funcionó todo tan fácilmente?
La "magia" la hace Spring Boot. Él automáticamente:
- Instaló Tomcat como servidor web.
- Configuró el manejo de peticiones HTTP usando Spring MVC.
- Preparó un
DispatcherServletpor defecto, que gestiona todo el enrutamiento de peticiones.
Puntos importantes que debes conocer:
- DispatcherServlet: es el componente central de Spring MVC. Recibe todas las peticiones HTTP entrantes y las pasa a los controllers correspondientes.
- Model y View: en la próxima clase profundizaremos en cómo se pasan los datos desde el controller a las vistas. Spoiler: es más fácil de lo que parece.
- Errores de configuración. Si algo no funciona, empieza por comprobar:
- La corrección de la ruta a los archivos en
application.properties. - La compatibilidad de las versiones de las dependencias (Spring Boot Starter Web y demás).
- La corrección de la ruta a los archivos en
En este punto ya tienes una idea básica de qué es Spring MVC, cómo integrarlo y cómo arrancar una aplicación simple. En las siguientes lecciones profundizaremos en el trabajo con controllers, modelos y vistas, y empezaremos a hacer cosas un poco más avanzadas.
GO TO FULL VERSION