Начнем с истории. Spring MVC появился в составе Spring Framework ещё в его ранних релизах, как способ создания приложений на основе архитектуры Model-View-Controller. MVC изначально разработан для организации кода в крупных приложениях, чтобы разделить логику обработки данных (Model), отрисовку интерфейса (View) и управление запросами (Controller). Spring MVC взял всё лучшее из этой концепции, добавив свою магию конфигурации и гибкости.
Spring MVC стал настолько успешным и популярным, что многие разработчики ассоциируют его напрямую с самим Spring Framework.
Как работает MVC?
MVC — это как сложенный оркестр, где:
- Model: отвечает за данные (база данных, бизнес-логика). Это, условно, музыканты, играющие произведение.
- View: занимается отображением данных для пользователя. Это публика, которая наслаждается мелодией.
- Controller: управляет всем этим действом. Это дирижёр, который знает, что делать с данными из Model и куда их отправить для отображения во View.
[Клиент (браузер)]
↓
[Controller] → [Model]
↓
[View]
MVC разделяет приложение на три независимых компонента, где каждый отвечает за свою часть работы: Model хранит данные и бизнес-логику, View отвечает за отображение, а Controller orchestrate взаимодействие между ними. Это как разделение труда в команде: каждый занимается тем, что умеет лучше всего, не мешая другим. Представьте, что ваш фронтенд разработчик не хочет видеть ваши "страшные" SQL-запросы в HTML-файлах. С MVC вы изолируете запросы, логику, состояние и отображение, чтобы не пугать коллег. Такая архитектура делает код чище, понятнее и проще в поддержке.
Spring MVC привносит в проект:
- Гибкость: вы можете использовать любые технологии для Views — HTML, JSP, Thymeleaf и даже JSON/XML (да, REST API тоже построены на MVC).
- Масштабируемость: Spring MVC позволяет легко управлять большими проектами, разделяя код на модули.
- Автоматизация: с помощью Spring вы экономите массу времени на рутине, используя аннотации и простую настройку.
- Интеграция: благодаря Spring Boot Spring MVC легко интегрируется в экосистему Spring (например, Spring Security для авторизации, Spring Data для работы с базой данных и т.д.).
Преимущества использования Spring MVC
- Скорость разработки: меньше кода, больше функциональности.
- Простота тестирования: контроллеры легко тестируются благодаря их независимости от представлений.
- Шаблонизация: интеграция с шаблонизаторами (например, Thymeleaf) делает создание пользовательских интерфейсов проще.
- Обработка ошибок: встроенные механизмы для обработки исключений.
- Поддержка REST: Native поддержка RESTful API для современных веб-приложений.
Подключение Spring MVC в проект
Для начала работы с Spring MVC потребуется настроить зависимости для вашего проекта. Если вы работаете с Spring Boot (а мы точно работаем!), это особенно просто.
Spring Boot берёт на себя всю "черновую" работу по интеграции. Для Spring MVC достаточно добавить стартер-зависимость:
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-web'
Этот стартер включает:
- Встроенный веб-сервер (Tomcat по умолчанию).
- Основные компоненты Spring MVC для работы с HTTP-запросами.
- Jackson для сериализации/десериализации JSON (актуально для REST API).
Настройка начального конфигурационного файла
Spring Boot автоматически настраивает большинство аспектов для работы с Spring MVC. Вам нужно лишь убедиться, что в вашем application.properties или application.yml всё готово для работы:
application.properties:
server.port=8080
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Здесь мы видим:
server.port— задаёт порт для нашего веб-сервера.spring.mvc.view.prefixиspring.mvc.view.suffix— указывает путь и расширение для представлений (например, JSP).
Первый взгляд на Spring MVC: пример
Создание минимального контроллера
Давайте добавим в наш проект простой контроллер для обработки HTTP-запросов.
Код контроллера:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "hello"; // Возвращает имя представления
}
}
- @Controller: указывает, что данный класс является контроллером Spring MVC.
- @GetMapping("/hello"): связывает HTTP GET-запросы на URI
/helloс методомsayHello. - return "hello": возвращает имя представления. Spring будет искать файл
hello.jspв указанной директории.
Добавление представления
Создайте файл hello.jsp в папке src/main/webapp/WEB-INF/views/.
hello.jsp:
<html>
<body>
<h1>Привет, Spring MVC!</h1>
</body>
</html>
Теперь запустите ваше приложение, перейдя в браузере на http://localhost:8080/hello. Если вы видите сообщение "Привет, Spring MVC!", то всё настроено правильно!
Почему всё так легко заработало?
"Магия" заключается в Spring Boot. Он автоматически:
- Подключил Tomcat как веб-сервер.
- Настроил обработку HTTP-запросов с использованием Spring MVC.
- Подготовил предустановленный
DispatcherServlet, который управляет всей маршрутизацией запросов.
Важные моменты, которые вы должны знать:
- DispatcherServlet: это центральный компонент Spring MVC. Он принимает все входящие HTTP-запросы и передаёт их соответствующим контроллерам.
- Model и View: в следующей лекции мы углубимся в то, как данные передаются из контроллера в представления. Спойлер: это проще, чем кажется.
- Ошибки конфигурации. Если что-то не работает, начните с проверки:
- Правильности пути до файлов в
application.properties. - Правильности версии зависимостей (Spring Boot Starter Web и других).
- Правильности пути до файлов в
На этом этапе у нас есть базовое понимание того, что такое Spring MVC, как его подключить и запустить простое приложение. В следующих лекциях мы углубимся в работу с контроллерами, моделями и представлениями, а также начнём делать вещи посложнее.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ