Цей матеріал - завершальна частина циклу "Введення в Enterprise-розробку". Попередні статті:
Давай розберемо найпростіший приклад реалізації MVC з прикладу Spring-MVC. Для цього напишемо невеликий Hello World додаток на spring-boot. Щоб ти міг повторити все сам, я дам тобі покрокову інструкцію. Спочатку ми напишемо невеликий додаток, а потім розберемо його.
Крок 1. Створення spring-boot програми в IntelliJ IDEA
За допомогою File->New->Project... створюємо новий проект. У вікні, в лівому бічному меню, вибираємо Spring Initializr, вибираємо Project SDK, опцію Initializr Service URL залишаємо дефолтною.
Натискаємо кнопку Next. У наступному вікні потрібно вибрати параметри проекту. Ми будемо Maven проект. Вибираємо Type - Maven Project, заповнюємо Group та Artifact
Натискаємо кнопку Next. У наступному вікні потрібно вибрати компоненти Spring Framework, який ми будемо використовувати. Нам достатньо двох:
- Spring Web - компонент, який дозволить нам створювати Web додатки. Ця компонента включає Spring MVC.
- Thymeleaf - так званий движок шаблонів. Штука, яка дозволить нам передавати дані з Java у HTML сторінки
У наступному вікні вибираємо ім'я та розташування проекту у файловій системі:
Натискаємо кнопку Finish. Проект створено. У нас вийшла наступна структура проекту:
Тут нам цікаві 2 файли: pom.xml – дескриптор розгортання. Штука, яка дозволяє швидко та просто імпортувати бібліотеки з різних фреймвроків у наш проект, а також штука, в якій ми конфігуруємо складання нашої програми. Програма наша збирається за допомогою Maven, pom.xml - конфігураційний файл цієї системи збирання. Java клас - MvcDemoApplication. Це головний клас нашої програми, з якої ми будемо запускати наш spring-boot проект. Для запуску достатньо запустити метод main у цьому класі. Наведемо код цього класу, а також файлу pom.xml: MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MvcDemoApplication.class, args);
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.codegym</groupId>
<artifactId>mvc_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mvc_demo</name>
<description>Spring MVC Demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Крок 2. Створення веб-сторінок
Наш додаток буде дуже простим. У нас буде головна сторінка - index.html, всередині якого буде розміщено посилання на сторінку привітання - greeting.html. На сторінці greeting ми відобразимо вітання. Реалізуємо можливість надсилання імені для привітання на сторінку greeting.html через параметри url. Створимо головну сторінку нашої програми - index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main page</title>
</head>
<body>
<p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
Тепер створимо сторінку greeting.html:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>
Тут з нетипової для html сторінки можна побачити тег:
<p th:text="'Hello, ' + ${name} + '!'" />
Атрибут
th
у тега
p
- це інструмент движка шаблонів Thymeleaf. Завдяки ньому значенням тега
p
буде текст “Hello, “ + значення змінної
name
, яке ми поставимо з Java коду.
Крок 3. Створення контролера
Усередині пакту mvc_demo створимо пакет contoller, усередині якого створимо наш контролер, HelloWorldController:
@Controller
public class HelloWorldController {
@RequestMapping(value = "/greeting")
public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
З одного боку тут зовсім небагато коду, але з іншого боку багато чого відбувається. Почнемо розбір. Анотація @Controller - свідчить, що цей клас є контролером. Контролери Spring обробляють HTTP запити на певний адресаи. У нашому класі є метод helloWorldController, який позначений інструкцією - @RequestMapping(value = "/greeting"). Ця інструкція говорить нам у тому, що це метод обробляє HTTP GET запити на адресау /greeting. Іншими словами, цей метод спрацює, якщо хтось перейде за адресаою /greeting. Цей метод повертає String. Відповідно до Spring-MVC, метод контролера повинен повернути ім'я уявлення. Далі Spring буде шукати html файл, з таким ім'ям, який і поверне як відповідь на HTTP запит. Як ти бачиш, наш метод повертає ім'я веб-сторінки, Наш метод приймає 2 аргументи. Розберемо їх: Параметр 1: @RequestParam(name = "name", required = false, defaultValue = "World") String name. Анотація @RequestParam говорить про те, що параметр String name є параметром url. У дужках анотації зазначено, що даний параметр в url є не обов'язковим (required = false), у разі його відсутності значенням параметра String name буде World (defaultValue = "World"), а якщо він буде присутнім, то даний параметр в url буде іменуватися name (name = "name") Тут може бути багато незрозуміло. Наведемо приклади. У таблиці нижче вказано, яким буде значення параметра String name, при різних варіантах звернення на адресау /greeting (з параметрами URL і без)
Приклад URL |
Значення параметра String name |
/greeting |
World |
/greeting?name=Amigo |
Amigo |
/greeting?name=Zor |
Zor |
Параметр 2: Другим параметром є Model Model. Цей параметр є деякою моделлю. Ця модель складається з різних атрибутів. Кожен атрибут має ім'я та значення. Щось на кшталт пар ключ-значення. За допомогою цього параметра ми можемо передавати дані з Java коду в HTML сторінки. Або ж, говорячи термінологією MVC, передавати дані з Моделі (Model) в Подання (View). Залишилося розібрати останній рядок. Те, як ми передаємо дані з Java в html або з Model у View. У тілі методу є наступний рядок:
model.addAttribute("name", name);
Тут ми створюємо новий атрибут з ім'ям name і присвоюємо значення параметра name. Згадай, нещодавно ми обговорювали тег:
<p th:text="'Hello, ' + ${name} + '!'" />
Ми говорабо, що значенням тега p буде текст “Hello, “ + значення змінної name, яке ми поставимо з Java коду. Це значення ми і задали за допомогою рядка
model.addAttribute("name", name);
Крок 5. Запуск
Для запуску, нам потрібно запустити метод main у класі MvcDemoApplication:
У логах запуску, ми побачимо, що наш web додаток стартував на порту 8080:
А це означає, що ми можемо йти в браузер на сторінку:
http://localhost:8080 :
Тут нам з'явилася сторінка index.html. Перейдемо за посиланням на greetin:
При цьому переході спрацював наш контролер. Ми не передавали через URL жодних параметрів, тому, як було зазначено в анотації, значення атрибута name набуло дефолтного значення World. Спробуємо тепер передати параметр через URL:
Все працює так, як і задумано. Тепер спробуй простежити шлях змінної name:
- Користувач передав через URL значення параметра name = Amigo ->
- Контролер обробив нашу дію, прийняв змінну name і задав атрибут моделі, з ім'ям name та прийнятим значенням ->
- З моделі ці дані потрапабо у View, на сторінку greeting.html і відобразабося користувачеві
От і все!
Сьогодні ми познайомабося з тобою з досить великою та цікавою темою MVC (Model – View – Controller). Це закінчення циклу, мета якого – познайомити тебе з тим, що потрібно знати перед початком Enterprise-розробки.
Залишайте в коментарях теми, що вас цікавлять, — зробимо! |
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ