Почнемо з історії. 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 взаємодію між ними. Це як розподіл праці в команді: кожен займається тим, що вміє найкраще, не заважаючи іншим. Уявіть, що ваш frontend-розробник не хоче бачити ваші "страшні" 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) робить створення UI простішим.
- Обробка помилок: вбудовані механізми для обробки виключень.
- Підтримка 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, як його підключити і запустити простий застосунок. У наступних лекціях ми заглибимось у роботу з контролерами, моделями і поданнями, а також почнемо робити речі складніші.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ