Уроки Java Spring Boot

Уроки Java Spring Boot / #1 — Создание веб-сайта на Java
Представляем вам большой курс по изучению технологии Spring Boot MVC. В ходе курса вы научитесь работать с фреймворком Spring и на его основе создадите небольшой веб блог. Вы научитесь работать с базами данных, шаблонами и общим построением сайтов на основе языка Java.
Видеоурок
Полезные ссылки:
- Официальный сайт IntelliJ IDEA ;
- Официальный сайт Spring ;
- Конструктор проекта на Spring.
Информация про Java Spring Boot
Платформа Java Spring Boot была впервые выпущена в 2004 году. С тех пор платформа постоянно обновляется и пополняется новыми функциями. На сегодняшний день платформа является наиболее продвинутым фреймворком для создания веб сайтов на основе языка Java.
C первых дней выпуска Spring был тепло встречен разработчиками Java, так как это был первый достойный конкурент технологии JavaBeans . JavaBeans, как и Spring, предоставляют набор различных решений для реализации веб проектов.

На основе Spring Boot вы можете создавать веб сайты различных жанров и возможностей. Вы можете создать простой одностаничник или крупный веб проект для какого-либо международного банка.
Spring содержит хорошо описанную документацию, а также множество готовых решений, что можно копировать и использовать в своих проектах.
Технология MVC
Spring реализует шаблон проектирования MVC. MVC расшифровывается как «model-view-controller» или же модель вид контроллер. Данный шаблон позволяет структурировать все файлы внутри проекта и делает чтобы каждый файл отвечал лишь за свою часть работы.
Рассмотрим простой запрос к веб сайту, написанному на Spring Boot. Когда пользователь переходит на какую-либо страницу сайта, то переход отслеживается в контроллере. Контроллер понимает по какому URL адресу перешёл пользователь и далее обращается к модели. Модели могут обратиться к базе данных, получить оттуда какие-то значение, выполнить различные вычисления и далее вернуть эти данные обратно в контроллер. Далее контроллер передает все данные в шаблон, который как раз и показывается пользователю. Шаблон в свою очередь представляет из себя простую HTML страницу с различными текстами, кнопками, картинками и прочим.

Таким образом, приложение делиться на три части, каждая из которых выполняет свою роль в проекте.
Создание проекта
Создать пустой шаблонный проект можно самому или же можно воспользоваться специальным сайтом для подготовки готового проекта. Если создавать пустой проект самому, то необходимо следовать официальной документации .

В случае использования сервиса Start Spring.io вы можете выбрать нужные для вас пакеты, после чего нажать на клавишу «Generate» для генерации и скачивания архивного проекта.

Чтобы открыть проект вы можете воспользоваться любой средой разработки, к примеру программой IntelliJ IDEA .
План курса
В ходе курса мы научимся писать сайты с использованием Java Spring Boot MVC. Мы рассмотрим все основные моменты при работе с данным фреймворком. За курс мы создадим множество шаблонов, рассмотрим работу с шаблонизаторами, рассмотрим работу с базой данных, а также создадим небольшой полноценный проект по типу веб-блога.
К концу курса у вас будет достаточно знаний чтобы начать разрабатывать сайты на основе Java Spring.
Перед изучением курса вам необходимо ознакомиться с языками для вёрстки сайта: HTML , CSS и JavaScript . Также вам необходимо обладать навыками работы с языком Java прежде чем изучать платформу Спринг. Все дополнительные курсы можно посмотреть на нашем ресурсе.
Spring Boot: быстрое знакомство и старт на примере простого веб-приложения
Изучите Spring Boot, создав веб-приложение с минимальным набором классов. Подробная инструкция с примером структуры проекта.
Юрий Авраменко
Senior Software Developer
На этом примере рассмотрим, как можно быстро научиться создавать веб-приложения, которые могут из микроприложений вырасти в серьезные проекты.
Первоначальная настройка приложения
Переходим на сайт Spring Initializr и подготавливаем минимальный шаблон для нашего будущего приложения:
В левой части оставляем настройки по умолчанию, кроме версии Java (будет достаточно 8), и заполняем Project Metadata.
В правой части необходимо добавить зависимости, нужные для приложения.
- Spring Web — модуль, включающий необходимые компоненты для веб-приложения и имеющий встроенный контейнер сервлетов Apache Tomcat.
- Spring Data JPA — библиотека, используемая для взаимодействия с сущностями базы данных.
- H2 Database — очень удобная база данных. Располагается в памяти, следовательно, хранит данные только пока запущено приложение. Не используется в продакшене, но для знакомства в этом проекте её будет достаточно.
- Apache Freemarker — шаблонизатор, будем использовать его для генерации HTML-страниц.
Всё готово, нажимаем GENERATE и получаем архив с исходным кодом проекта. Это минимальный каркас, который импортируем в используемую IDE.
В этом проекте используется IntelliJ IDEA.
Следуем по пути File -> New -> Project from Existing Sources, в диалоговом окне выбираем папку, где находится pom.xml файл проекта. Импортируем проект.
В следующих диалоговых окнах все настройки оставляем по умолчанию. Единственное, в одном из окон удостоверимся, что имеем ранее установленную JDK соответствующей версии, в данном случае 8.
Если JDK не была установлена ранее, её можно скачать с официального сайта.
Все остальные окна кликаем Next и в последнем — Finish.
Кратко рассмотрим структуру проекта. В первую очередь интересны:
- файл pom.xml — файл с описанием всех зависимостей, необходимых для приложения;
- файл application.properties — файл с настройками проекта;
- каталог java — основной каталог пакетов и классов;
- каталог resources — каталог для хранения ресурсов (шаблоны, файлы настроек, локализации и т.д.).
Создадим дополнительные пакеты :
- entity— для сущностей, в текущем проекте это будет класс Task;
- controller— для классов контроллера;
- repository— для слоя Repository, интерфейс с описанием общих методов, которые будут использоваться при взаимодействии с базой данных;
- service— для классов с бизнес-логикой.
Основной сущностью данного приложения будет сущность Task, которая будет иметь идентификатор, описание задачи, дату выполнения, приоритет выполнения.
Создадим класс Task в пакете entity
package com.myorganization.Organizer.entity; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import java.util.Date; @Entity public class Task < @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private Integer priorityId; private String description; private Date date; public Task() < >public Task(Integer id, Integer priorityId, String description, Date date) < this.id = id; this.priorityId = priorityId; this.description = description; this.date = date; >public Integer getId() < return id; >public void setId(Integer id) < this.id = id; >public Integer getPriorityId() < return priorityId; >public void setPriorityId(Integer priorityId) < this.priorityId = priorityId; >public String getDescription() < return description; >public void setDescription(String description) < this.description = description; >public Date getDate() < return date; >public void setDate(Date date) < this.date = date; >>
Класс помечен аннотацией @Entity. Она указывает на то, что данный класс является сущностью и будет сохраняться в БД.
Данная сущность имеет первичный ключ поле id. Поле помечено аннотацией @Id и аннотацией @GeneratedValue, которая задает стратегию генерации первичного ключа как автоматическую генерацию, в этой сущности – целые числа в порядке возрастания.
Создадим интерфейс TaskRepository в пакете repository
package com.myorganization.Organizer.repository; import com.myorganization.Organizer.entity.Task; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface TaskRepository extends JpaRepository
Класс унаследован от JpaRepository – интерфейса фреймворка Spring Data, предоставляющего набор стандартных методов JPA для работы с БД. Для данного приложения нет необходимости создавать дополнительные методы.
Создадим класс TaskService в пакете service
package com.myorganization.Organizer.service; import com.myorganization.Organizer.entity.Task; import com.myorganization.Organizer.repository.TaskRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import java.util.List; @Service public class TaskService < @Autowired private TaskRepository taskRepository; public ListgetAll() < return taskRepository.findAll(Sort.by(Sort.Order.asc("date"), Sort.Order.desc("priorityId"))); >public Task save(Task task) < return taskRepository.save(task); >public void delete(int id) < taskRepository.deleteById(id); >>
Класс содержит три метода для работы с задачами:
- getAll() – метод, возвращающий все задачи, отсортированные в порядке возрастания даты и порядке убывания приоритета.
- save(Task task) – метод создания новой задачи.
- delete(int id) – метод, удаляющий задачу по переданному id.
Создадим контроллер TaskController в пакете controller
package com.myorganization.Organizer.controller; import com.myorganization.Organizer.entity.Task; import com.myorganization.Organizer.service.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller public class TaskController < @Autowired private TaskService taskService; @GetMapping("/") public String getAll(Model model) < ListtaskList = taskService.getAll(); model.addAttribute("taskList", taskList); model.addAttribute("taskSize", taskList.size()); return "index"; > @RequestMapping("/delete/") public String deleteTask(@PathVariable int id) < taskService.delete(id); return "redirect:/"; >@PostMapping("/add") public String addTask(@ModelAttribute Task task) < taskService.save(task); return "redirect:/"; >>
Класс контроллер содержит три метода для управления задачами. При вызове методы обращаются в сервис TaskService, производят необходимые действия с сущностью и перенаправляют по заданному пути.
Замечание. Более правильно было бы добавить еще один интерфейс TaskService, который будет реализовывать существующий класс TaskService (изменим название на TaskServiceImpl), но в рамках этого приложения делать это не будем.
Создадим index.ftlh – шаблон для Freemarker в каталоге resources/templates
Organizer Organizer
Add task to list
Task list(task count : $)
Id Priority Task description Date Delete from list <#list taskList as task> $ $ $ $ "">Delete #list>
Стандартный HTML-файл. Единственное отличие – это конструкции вида $ и обозначение списка , вместо которых Freemarker подставит нужные нам значения.
Добавим простой CSS-файл style.css в каталоге resources/static/css:
table < border-collapse: collapse; >table th, table td
Запускаем первое приложение на Spring Boot
Переходим к классу OrganizerApplication.class. Он был сформирован автоматически на первом шаге конфигурации каркаса проекта. Его содержимое:
package com.myorganization.Organizer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class OrganizerApplication < public static void main(String[] args) < SpringApplication.run(OrganizerApplication.class, args); >>
Переходим в меню >Run-> Run ‘OrganizerApplication’ или запускаем через сочетание клавиш Shift+F10. Процесс запуска отобразится в консоли ниже.
Переходим в браузер, набираем в адресной строке адрес localhost:8080 и наблюдаем работающий прототип приложения Organizer.
Так с помощью Spring Boot с минимальным набором классов менее чем за час можно создать работающее веб-приложение или основу для будущих проектов. Это уже тема другой статьи.
Посмотрите также 10 шпаргалок для веб-разработчика. Там есть видеокурс по Spring Boot.
Spring boot что это такое для новичка

Архитектура современных приложений состоит из отдельных модулей, как показано на рисунке выше. Эти модули часто называют Frontend и Backend. Frontend – это модуль, который отвечает за юзер-интерфейс и логику, которые предоставляется приложением при использовании. Так, например когда мы заходим в соцсети через браузер, мы взаимодействуем именно с FrontEnd-модулем приложения. То, как отображаются наши посты в виде сторисов или карточек, сообщения и другие активности реализуются именно в FrontEnd-модуле. А все данные, которые мы видим, хранятся и обрабатываются в Backend или серверной части приложения. Эти модули обмениваются между собой посредством разных архитектурных стилей: REST, GRPC и форматов сообщений – JSON и XML.
В этой статье мы напишем примитивную серверную часть социальной сети с использованием Spring Boot, запустим свой сервер, рассмотрим разные типы HTTP запросов и их применение.
Необходимое требование к читателю: умение писать на Java и базовые знания Spring Framework. Данная статья познакомит вас со Spring Boot и даст базовые понятия данного фреймворка.
☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»
Инициализация проекта
Чтобы создать Spring Boot проект, перейдем на страницу https://start.spring.io/ и выберем необходимые зависимости: в нашем случае Spring Web. Чтобы запустить проект, необходима минимальная версия Java 17. Скачиваем проект и открываем в любом IDE (в моем случае – Intellij Idea)

Spring Web – зависимость, которая предоставляет контейнер сервлетов Apache Tomcat (является дефолтным веб-сервером). Проще говоря, сервлеты – это классы, которые обрабатывают все входящие запросы.
Открываем проект и запускаем.

Мы видим, что проект запустился и готов обрабатывать запросы на порту 8080 – Tomcat started on port(s): 8080 (http) .
Теперь создадим свой первый класс – GreetingController . Controller-классы ответственны за обработку входящих запросов и возвращают ответ.
Чтобы сделать наш класс Controller , достаточно прописать аннотацию @RestController . @RequestMapping указывает, по какому пути будет находиться определённый ресурс или выполняться логика.

Если отправить запрос по адресу http://localhost:8080/ , мы получим ошибку, т. к. по этому пути не определены логика обработки запроса и ресурсы.
☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»
Request Params
При отправке запросов мы часто используем переменные в запросе, чтобы передавать дополнительную информацию или же делать запросы гибкими. Параметр в запросе передаётся в конце адреса ( =url ) сервера и указывается после вопросительного знака ( =? ).
Например, http://localhost:8080/greet?name=Alice . Параметр запроса является = name cо значением = Alice .
Чтобы обрабатывать переменную запроса, используется аннотация @RequestParam . Параметры запроса могут быть опциональными или же обязательными. @RequestParam(«name») означает следующее: взять ту переменную из запроса, название которого равно name .

Вдобавок, запрос может содержать несколько параметров.
Например, http://localhost:8080/greet/full?name=John&surname=Smith . Параметры выделяются знаком & . В этом запросе два параметра: name=John и surname=Smith .
Чтобы обработать каждый параметр запроса, нужно пометить каждую переменную @RequestParam .

Path Variable
PathVariable по применению похож на @Request Param . @PathVariable также является параметром запроса, но используются внутри адреса запроса. Например,
RequestParam – http://localhost:8080/greet/full?name=John&surname=Smith
PathVariable – http://localhost:8080/greet/John . В этом случае John является PathVariable.
В запросе можно указывать несколько PathVariable, как и в случае RequestParam

Запрос с двумя параметризованными PathVariable.

HTTP-методы
Когда мы говорим о запросах, мы также подразумеваем HTTP-метод, который используется при отправке этого запроса. Каждый запрос представляет собой некий HTTP-метод. Например, когда мы переходим в браузере по адресу http://localhost:8080/greet/John/Smith , наш браузер отправляет GET-запрос на сервер.
Большая часть информационных систем обмениваются данными посредством HTTP-методов. Основными HTTP-методами являются – POST , GET , PUT , DELETE . Эти четыре запроса также называют CRUD-запросами.
- POST-метод – используется при создании новых ресурсов или данных. Например, когда мы загружаем новые посты в соцсетях, чаще всего используется POST-запросы. POST-запрос может иметь тело запроса.
- GET-метод – используется при получении данных. Например, при открытии любого веб-приложения, отправляется именно GET-запрос для получения данных и отображения их на странице. GET-запрос не имеет тела запроса.
- PUT-метод – используется для обновления данных, а также может иметь тело запроса, как и POST.
- DELETE-метод – используется для удаления данных.
Реализация основных методов
Давайте создадим сущности и реализуем методы, чтобы наш сервер принимал все четыре запроса. Для этого создадим сущности User и Post , и будем проводить операции над ними.
Для простоты User имеет только два поля: username и список постов posts , а сущность Post имеет поле description и imageUrl .

GET-запрос: получение пользователей

PUT-запрос: обновление списка постов пользователя

DELETE-запрос: удаление пользователя по username

В этой статье мы рассмотрели архитектуру современных web-приложений, а также написали свою серверную часть приложения, получив поверхностные знания по Spring Boot , HTTP запросы и параметры запросов.
Ссылка на репозиторий
Исходный код можно найти по ссылке.
Материалы по теме
- ☕ Сертификаты и тренинги для Java-разработчика
- ☕️ Дорожная карта Java-разработчика в 2023 году: путь с нуля до первой работы
Запускаем первое веб-приложение на Spring Boot
Разбираемся в его отличиях от фреймворка Spring и пишем простой код.


Иллюстрация: Wikimedia Commons / Spring / Colowgee для Skillbox Media

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.
В мире Java-разработки Spring, пожалуй, — самый популярный фреймворк для создания корпоративных приложений. Но если открыть документацию, литературу или курсы по нему, то мы почти сразу столкнёмся со Spring Boot.
Давайте разберёмся, почему они всегда идут рука об руку, в чём их различия и чем так хорош Spring Boot. А напоследок напишем простой проект.
Содержание
- Что такое Spring Boot и чем он отличается от Spring
- Быстрый старт
- Преимущества Spring Boot в работе
- Запускаем Spring Boot
- Создаём первое веб-приложение
- Что дальше?
Что такое Spring Boot и чем он отличается от Spring
Итак, Spring — это фреймворк для Java, на котором пишут веб-приложения и микросервисы . А Spring Boot — это расширение, которое упрощает и ускоряет работу со Spring. Оно представляет собой набор утилит, автоматизирующих настройки фреймворка.
Spring Boot разработан для ускорения создания веб-приложений. Он отличается от своего «родителя» тем, что не требует сложной настройки и имеет ряд встроенных инструментов, упрощающих написание кода.

В отличие от базового фреймворка, он умеет:
- упаковывать зависимости в стандартные starter-пакеты;
- автоматически конфигурировать приложения с помощью jar-зависимостей;
- использовать JavaConfig, что позволяет отказаться от использования XML;
- не зависеть от множественного импорта Maven и конфликтов версий, связанных с этим;
- обеспечивать мощную пакетную обработку и управлять конечными точками RES;
- упрощать интеграцию с другими Java-фреймворками, такими как JPA / Hibernate ORM, Struts и так далее;
- локально запускать встроенные HTTP-серверы, такие как Tomcat и Jetty, упрощая разработку и тестирование веб-приложений.
Всё это и привело к широкому распространению Spring Boot, сделав его основным инструментом для разработки веб-приложений при работе с фреймворком Spring.
Быстрый старт
Знакомство с библиотекой можно начать с официальной документации. В ней собраны краткие описания основных аннотаций, классов и методов, а также разобраны практические примеры их использования. После этого лучше перейти на «продвинутую» документацию с разбором методов работы с JSON, логированием, тестированием и другими деталями.
Для отработки знаний на практике у Spring Boot есть большой гайд с разработкой отдельных приложений и их частей. И конечно, не стоит забывать официальную документацию самого фреймворка Spring. В ней подробно разобрана работа не только с Boot, но и с другими модулями.
Преимущества Spring Boot в работе
Spring Boot «из коробки» имеет несколько инструментов, ускоряющих работу программиста.
Spring Boot Starters с предварительно настроенными зависимостями
Одна из особенностей Spring Boot — Spring Boot Starters. Это предварительно настроенные зависимости, облегчающие работу с проектом. В зависимости от задач к приложению можно подключить один или несколько starter-пакетов.
Например, в Spring Boot Starter Web есть инструменты для разработки веб-приложений (Tomcat, Jackson) и для обработки JSON. А Spring Boot Starter Test содержит классы и зависимости для тестирования, такие как Mockito и Spring Boot Test.
Подробное описание Spring Boot Starters с примерами работы можно найти в документации.
Встроенные веб-серверы
Разработчик, пишущий код на Spring Boot, может запускать встроенные веб-серверы: Tomcat, Jetty и Undertow, не тратя время на настройку сторонних серверов. Если же ему по какой-то причине необходимо использовать свой сервер, то для этого достаточно исключить зависимости по умолчанию и выбрать подходящий starter-пакет.
Готовые функции
Как и родительский фреймворк, Spring Boot позволяет работать со встроенными модулями, которые легко интегрируются в приложения, добавляя функциональность и ускоряя разработку. Например:
- Spring Data — позволяет работать с различными базами данных;
- Spring Boot Actuator — функция для мониторинга и управления созданным приложением.
Все встроенные функции подробно описаны в документации и указаны в левом столбце меню.
Запускаем Spring Boot
Для того чтобы приступить к работе со Spring Boot, нам необходимо создать новый проект и подготовить IDE к работе.
Шаг 1. Создаём новый проект на Spring Boot
Самый простой способ подготовить фреймворк для работы — воспользоваться сайтом start.spring.io. Это конструктор, который позволяет легко задать конфигурацию проекта на Spring Boot.

В левой части экрана указаны различные варианты настройки, включая параметры проекта. Так как мы тестируем возможность запуска Spring Boot, то можем ничего не менять. Обратите внимание, что сайт автоматически предлагает использовать наиболее актуальную версию Spring Boot. На 5 июля это 3.1.1.
В правой части указаны зависимости, которые мы можем использовать в своём проекте. Для работы с веб-приложением требуется нажать на кнопку ADD DEPENDENCIES и добавить пункт Spring Web:

Теперь на экране будет видна добавленная зависимость:

Нажимаем кнопку Generate и скачиваем архив — это шаблон нашего проекта. Он скоро пригодится.
Пока разархивируем его и зайдём в директорию. В ней содержится нескольких файлов:
- файл mnvw, который позволяет запустить проект Maven без его установки;
- файл pom.xml, содержащий описания всех зависимостей приложения;
- каталог java — основной каталог пакетов и классов;
- каталог resources, хранящий ресурсы: шаблоны, файлы настроек, локализации и так далее;
- application.properties — файл с настройками проекта, размещённый в подпапках шаблона.
Вся последующая работа будет проходить именно в этой директории.
Шаг 2. Запускаем IDE
Для работы со Spring Boot подойдёт любой из популярных редакторов кода, например IntelliJ IDEA или Visual Studio Code.
Мы будем использовать Visual Studio Code. Запустите редактор и создайте новый проект. После этого перейдите в раздел Extensions и в поиске найдите Spring Boot Extension Pack:

Установите его. Теперь в VSC можно будет работать со Spring Boot и создавать веб-приложения.
Теперь в скачанном архиве в директории src/main/java/com/example/demo откройте файл DemoApplication.java:

В этом файле будем писать весь код. По умолчанию он используется в качестве стартовой страницы при запуске сервиса. В нём можем писать код на Java, вставлять элементы из HTML и CSS для оформления страницы.
Мы подготовили наш редактор кода к работе со Spring Boot и создали шаблон проекта. Теперь приступим к созданию веб-приложения.
Создаём первое веб-приложение
Начнём с классического приложения приветствия. Напишем код, который будет создавать веб-страницу с надписью «Привет, читатели Skillbox Media». Для этого заменим код в VSC на новый:

В терминале IDE появится информация о запуске Spring Boot:

Если код написан неправильно, то вместо этого окна вы увидите информацию об ошибках. Но у нас всё хорошо. Не завершая работу кода в IDE, откроем браузер и перейдём по адресу http://localhost:8080/hello.
На экране наша надпись:

Усложним задачу — попробуем вывести имя читателя вместо обезличенного обращения. Для этого откроем страницу с именем, переданным в качестве параметра name:

Всё получилось. Мы видим не общее обращение к читателям, а имя человека.
Что дальше?
- «Spring Boot по-быстрому» Майкла Хеклера;
- «Spring Boot в действии» Крейга Уоллса;
- «Learning Spring Boot 3.0» Грега Тернквиста.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!
Читайте также:
- Фреймворк Spring: зачем он нужен, как устроен и как работает
- Тест. Какой язык создадите вы — Java или Python?
- Python для новичков: сферы применения и возможности
Так называют архитектуру программного обеспечения, при использовании которой код разделяется на независимые части, что облегчает его обновление и поддержку.
Курс
Python просто выучить, даже если вы никогда не программировали. Во время обучения вам будет помогать эксперт-куратор. Вы разработаете 3 проекта для портфолио, а Центр карьеры поможет найти работу Python-разработчиком.
Узнать про курс

Профессии с трудоустройством
- Графический дизайнер
- Python-программист
- Инженер по тестированию
- Бизнес-аналитик
- Интернет-маркетолог 2023