JavaRush /Java блог /Random UA /Частина 8. Пишемо невелику програму на spring-boot
Professor Hans Noodles
41 рівень

Частина 8. Пишемо невелику програму на spring-boot

Стаття з групи Random UA
Цей матеріал - завершальна частина циклу "Введення в Enterprise-розробку". Попередні статті: Частина 8. Пишемо невелику програму на spring-boot - 1Давай розберемо найпростіший приклад реалізації MVC з прикладу Spring-MVC. Для цього напишемо невеликий Hello World додаток на spring-boot. Щоб ти міг повторити все сам, я дам тобі покрокову інструкцію. Спочатку ми напишемо невеликий додаток, а потім розберемо його.

Крок 1. Створення spring-boot програми в IntelliJ IDEA

За допомогою File->New->Project... створюємо новий проект. У вікні, в лівому бічному меню, вибираємо Spring Initializr, вибираємо Project SDK, опцію Initializr Service URL залишаємо дефолтною. Частина 8. Пишемо невелику програму на spring-boot - 2Натискаємо кнопку Next. У наступному вікні потрібно вибрати параметри проекту. Ми будемо Maven проект. Вибираємо Type - Maven Project, заповнюємо Group та Artifact Частина 8. Пишемо невелику програму на spring-boot - 3Натискаємо кнопку Next. У наступному вікні потрібно вибрати компоненти Spring Framework, який ми будемо використовувати. Нам достатньо двох:
  • Spring Web - компонент, який дозволить нам створювати Web додатки. Ця компонента включає Spring MVC.
  • Thymeleaf - так званий движок шаблонів. Штука, яка дозволить нам передавати дані з Java у HTML сторінки
Частина 8. Пишемо невелику програму на spring-boot - 4Частина 8. Пишемо невелику програму на spring-boot - 5У наступному вікні вибираємо ім'я та розташування проекту у файловій системі: Частина 8. Пишемо невелику програму на spring-boot - 6Натискаємо кнопку Finish. Проект створено. У нас вийшла наступна структура проекту: Частина 8. Пишемо невелику програму на spring-boot - 7Тут нам цікаві 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: Частина 8. Пишемо невелику програму на spring-boot - 9У логах запуску, ми побачимо, що наш web додаток стартував на порту 8080: Частина 8. Пишемо невелику програму на spring-boot - 10А це означає, що ми можемо йти в браузер на сторінку: http://localhost:8080 : Частина 8. Пишемо невелику програму на spring-boot - 11Тут нам з'явилася сторінка index.html. Перейдемо за посиланням на greetin: Частина 8. Пишемо невелику програму на spring-boot - 12При цьому переході спрацював наш контролер. Ми не передавали через URL жодних параметрів, тому, як було зазначено в анотації, значення атрибута name набуло дефолтного значення World. Спробуємо тепер передати параметр через URL: Частина 8. Пишемо невелику програму на spring-boot - 13Все працює так, як і задумано. Тепер спробуй простежити шлях змінної name:
  1. Користувач передав через URL значення параметра name = Amigo ->
  2. Контролер обробив нашу дію, прийняв змінну name і задав атрибут моделі, з ім'ям name та прийнятим значенням ->
  3. З моделі ці дані потрапабо у View, на сторінку greeting.html і відобразабося користувачеві
От і все!

Сьогодні ми познайомабося з тобою з досить великою та цікавою темою MVC (Model – View – Controller). Це закінчення циклу, мета якого – познайомити тебе з тим, що потрібно знати перед початком Enterprise-розробки.

Залишайте в коментарях теми, що вас цікавлять, — зробимо!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ