Guía Detallada sobre Spring MVC Framework

Introducción

Spring MVC es un marco de trabajo (framework) basado en Java que sigue el patrón de arquitectura Modelo-Vista-Controlador (MVC). Es uno de los módulos más populares de Spring Framework y se utiliza para crear aplicaciones web de manera eficiente. En esta guía, cubriremos los conceptos fundamentales de Spring MVC, cómo configurar un proyecto, y algunos ejemplos básicos para entender cómo funciona.

1. ¿Qué es Spring MVC?

Spring MVC es un marco de trabajo diseñado para el desarrollo de aplicaciones web, basado en el patrón Modelo-Vista-Controlador (MVC). Este patrón ayuda a separar las responsabilidades dentro de una aplicación web en tres componentes principales:

Spring MVC facilita el desarrollo de aplicaciones web escalables y mantenibles al seguir este patrón de separación de responsabilidades.

2. Estructura de un Proyecto Spring MVC

Un proyecto básico de Spring MVC sigue una estructura de directorios bien definida. Aquí te mostramos una estructura típica de carpetas:

src/
 └── main/
      ├── java/
      │    └── com/
      │        └── ejemplo/
      │            └── controlador/
      │            └── modelo/
      │            └── servicio/
      ├── resources/
      │    ├── application.properties
      │    └── META-INF/
      └── webapp/
           ├── WEB-INF/
           │    ├── views/
           │    └── web.xml

3. Componentes Clave de Spring MVC

3.1. El DispatcherServlet

El DispatcherServlet es el corazón de Spring MVC. Se encarga de recibir todas las peticiones HTTP y dirigirlas al controlador adecuado. Es el punto de entrada de todas las solicitudes en una aplicación Spring MVC.

Cuando el DispatcherServlet recibe una solicitud, la pasa a un controlador específico para su procesamiento.

3.2. Controladores (Controllers)

Los controladores son clases que manejan las peticiones del usuario. En Spring MVC, un controlador es una clase Java que está anotada con @Controller o @RestController. La anotación @RequestMapping (o sus variantes) se usa para mapear las URLs a métodos dentro de un controlador.

Ejemplo de un controlador básico:

@Controller
public class MiControlador {

    @RequestMapping("/saludar")
    public String saludar(Model model) {
        model.addAttribute("mensaje", "¡Hola, Mundo!");
        return "saludo"; // nombre de la vista (JSP, Thymeleaf, etc.)
    }
}

En este ejemplo, el método saludar maneja las solicitudes que llegan a la URL /saludar. El Model se usa para pasar datos a la vista.

3.3. Vistas (Views)

Las vistas son las interfaces que presentan los datos al usuario. En Spring MVC, las vistas se pueden renderizar con varias tecnologías, como JSP (JavaServer Pages), Thymeleaf, o FreeMarker.

Un archivo JSP básico que muestra el mensaje del controlador sería algo como:

<!-- saludo.jsp -->
<!DOCTYPE html>
<html>
<head>
    <title>Saludo</title>
</head>
<body>
    <h1>${mensaje}</h1>
</body>
</html>

3.4. El Modelo (Model)

El modelo se utiliza para representar los datos de la aplicación. Puede ser un objeto Java simple, como una clase POJO (Plain Old Java Object), que contiene los datos que el controlador necesita enviar a la vista.

3.5. El HandlerMapping y ViewResolver

4. Configuración Básica de Spring MVC

Para usar Spring MVC en una aplicación, necesitas configurarlo. A continuación, se muestra cómo hacer una configuración mínima usando Java Config (sin necesidad de un archivo web.xml):

4.1. Configuración del DispatcherServlet

En web.xml, agregamos la configuración del DispatcherServlet:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
  
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
  
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4.2. Configuración de Spring MVC en Java

Usamos una clase de configuración para habilitar Spring MVC con anotaciones:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.ejemplo")
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp().prefix("/WEB-INF/views/").suffix(".jsp");
    }
}

En este caso, estamos configurando la vista para que los archivos JSP se ubiquen en WEB-INF/views/ y tengan la extensión .jsp.

4.3. Clase de configuración principal

La clase principal que arranca la aplicación de Spring se configura así:

@WebServlet
public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return null;
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { WebConfig.class };
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

5. Ejercicio: Crear un Controlador Simple

  1. Crea una clase llamada SaludoController que maneje las solicitudes en /saludo.
  2. Haz que esta clase pase un mensaje “Bienvenido a Spring MVC” al modelo.
  3. Crea una vista saludo.jsp que muestre este mensaje.

Pistas:

6. Conclusión

Spring MVC es un framework robusto y flexible para el desarrollo de aplicaciones web basadas en Java. Con Spring MVC, puedes separar claramente las responsabilidades en tu aplicación, lo que facilita su mantenimiento y escalabilidad.

Puntos clave: