1. Overview
In this article, we will understand the MVC framework of Spring and SpringBoot. We will create a simple MVC example to demonstrate the MVC framework.
2. Dependencies
To get started, let’s first add the required dependencies to the project.
2.1. Spring Boot mvc dependencies
The SpringBoot provides the starter dependency spring-boot-starter-web
for the MVC. This dependency brings in all other required dependencies such as spring-webmvc
and spring-web
into the project.
You must also add dependency for view template. In this article, we will use thymeleaf
template.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2.2. Spring mvc dependencies
If your project is not spring boot, then you can add the spring-webmvc
dependency in the Spring project to use MVC. The spring-webmvc
has all other required dependencies such as spring-web
and other core dependencies like spring-core
, spring-beans
. So no need to declare those dependencies explicitly.
You should also add thymeleaf
or jsp
dependency for your view component.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.12</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.12.RELEASE</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> <version>3.0.4.RELEASE</version> <scope>compile</scope> </dependency>
3. Spring MVC
The Model-View-Controller (MVC) is an architectural design pattern that categorizes an application into three main logical components:
- the model (data of the application)
- the view (user interface that renders the model data on the screen. You can use template engines such as JSP, Thymeleaf)
- the controller (handles the request and returns the corresponding view for rendering)
The Spring Web MVC is a module of the Spring framework to support this design pattern. This framework is request-driven, designed around a DispatcherServlet
that handles all the HTTP requests and responses.
This DispatcherServlet
works as a front controller, meaning it handles all requests that come for a resource in an application and then delegates the request to the relevant controllers.
Once the controller returns the data, it passes that model data to the corresponding view and returns the view.

4. Enable MVC
You should enable MVC in your project so it will scan and register the controllers, mappings,
type converters, message converters, exception handling and so on.
4.1 Java Configuration
To enable MVC for Java configuration, add the annotation @EnableWebMvc
to one of your @Configuration
classes.
@Configuration @EnableWebMvc public class WebConfig { }
4.2. XML configuration
You can enable MVC using the XML configuration by adding <mvc:annotation-driven/>
.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <mvc:annotation-driven/> </beans>
4.3. Spring boot
The Spring Boot automatically enables MVC when it sees spring-webmvc
on the classpath.
This dependency instructs the Spring boot to treat the application as a web application and activates key behaviors such as setting up a DispatcherServlet
.
5. Spring mvc Controller
Let’s create a very simple controller to greet “Hello World”. The below controller GreetingController
handles all the HTTP GET “/greeting” requests.
@Controller public class GreetingController { @GetMapping("/greeting") public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) { model.addAttribute("name", name); return "greeting"; } }
The @GetMapping
annotation maps the HTTP GET requests to /greeting
to the greeting()
method.
@RequestParam
binds the value of the query string parameter name
into the name
parameter of the greeting()
method. This query string parameter is optional, and the defaultValue
is World
. We are adding the value of the name
parameter to a Model
object. This object is accessible to the view template.
6. View
We are using thymeleaf
template for View component. The below thymeleaf greeting.html
file takes the name attribute of model
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Spring Web MVC</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p th:text="'Hello, ' + ${name} + '!'" /> </body> </html>

Thymeleaf performs the server side rendering. It parses the greeting.html
template and evaluates the th:text
expression to render the value of the ${name}
parameter that we set in the controller.

7. Conclusion
To sum up, we have seen a simple example to demonstrate the Spring Boot and Spring MVC in this article.