Разработка сайтов с помощью Java Spring Boot.
В предыдущей статье мы говорили о продвижении сайтов и показателей посещаемости на сайте. В данной статье мы поговорим о том, как можно за короткий промежуток времени разработать веб-приложение на фреймворке Spring с помощью Java Spring.
В современном мире веб-разработки очень сложно представить проект, собранный без применения какого-либо фреймворка на основе языка программирования на котором разрабатывается приложение. Из самых известных, это Laravel для PHP, Django для Python, и Spring для Java. К слову, фреймворки — это такой набор инструментов, который нацелен на решение определенных, часто повторяющихся в разработке приложений, задач. Это такой скелет, который состоит из библиотек, которые облегчают процесс разработки приложения с нуля.
Какую роль играет Spring Boot в создании сайта?
На одном HTML, CSS и JavaScript невозможно написать полноценный проект, потому что у нас есть функционал проекта под капотом, где мы подключаем данные из базы, прописываем функцию для любой кнопочки, берем данные из строки ввода информации и многое другое. Допустим, у Вас есть простая авторизационная страница, где нужно будет вводить и выводить данные о пользователе. Согласитесь, это большая проблема работать с ними только через HTML и JavaScript, для этого существуют языки программирования, которые прописывают всю бэкенд часть (функционал) проекта. В нашем случае, мы используем Java Spring Boot на основе языка программирования Java.
Начнем с того, что Spring Boot — это проект, построенный поверх основного фреймворка Java Spring. Есть много других проектов как Java Spring Data, Spring Batch, каждый из которых имеет свою особенность в работе с ними.
Spring Boot это в первую очередь один из самых быстрых способов создания веб приложений без особо сложных заморочек с поднятием и написанием конфигурации сервера для вашего web-приложения. Как это работает? За счет Spring фреймворка, поверх которого он и был построен, позволяющий нам читать и собирать все необходимые данные из разных мест в проектах и библиотеках, к примеру, через аннотации, они начинаются с символа “@”, вы сразу поймете. Spring Boot — это все, что необходимо для того, чтобы упаковать существующие части фреймворка в пакетик, который мы в будущем будем использовать для разработки веб-приложений и не только с минимальными заморочками для конфигурации.
Практическое применение Java библиотек во фреймворке Spring Boot
Представьте, что будто авторы Spring собрали все самые нужные утилиты, которые автоматизируют процесс настройки сервера, его развертывания и ускоряют это действие до такой степени, что разработчикам больше не надо будет тратить время и нервы на написание специального кода для всего этого. Как раз-таки, теперь у нас есть Spring Boot, а у него есть все самое необходимое для автоматической конфигурации и готовые контейнеры сервлетов. Сервлет — это такой способ/интерфейс взаимодействия с клиентами посредством такого принципа как запрос-ответ, помните слова request, response из веб программирования? Он связывает наш Java класс с ссылкой из адресной строки, проще говоря.
По сути дела, почти всегда, когда разработчик впервые сталкивается с сервлетами, для него это становится чем-то сложным для понятия: как он работает, что это такое и как он действует на сам проект.
Допустим, Вы захотели развернуть свое web-приложение:
✔ Первым делом, Вы загружаете библиотеки из интернета и настраиваете их на наш проект (servlet-api, servlet-jsp-api), которые будут нужны для разработки MVC приложения на Java, закидываете их в папку самого проекта, указываете что, мол, это библиотеки для нашего проекта.
✔ Затем, добавляем наш проект в сервер Tomcat. Не спешите паниковать: Вам просто нужно скачать сервер из интернета, распаковать его, указать путь к нему и задеплоить проект.
Пишем Java веб-приложение на современном стеке. С нуля до микросервисной архитектуры. Часть 1
Постараюсь описать шаги разработки приложения на Java, возникающие проблемы и пути их решения. Наращивать функциональность будем постепенно.
На сегодняшний день в мире разработки на Java существует огромное количество библиотек и технологий, в которых новичку очень легко запутаться. В этом руководстве я постараюсь простым языком описать все шаги, возникающие проблемы и пути их решения. Начинать будем с самого простого и постепенно наращивать функциональность.
Spring Boot
Spring Boot — один из самых популярных универсальных фреймворков для построения веб-приложений на Java. Создадим в среде разработки Gradle Project. Для облегчения работы воспользуемся сайтом https://start.spring.io, который поможет сформировать build.gradle.
Для начала нам необходимо выбрать следующие зависимости:
- Spring Web — необходим для создания веб-приложения;
- Spring Data JPA — для работы с базами данных;
- PostgreSQL Driver — драйвер для работы с PostgreSQL;
- Lombok — библиотека, позволяющая уменьшить количество повторяющегося кода.
В результате генерации build.gradle должно получиться что-то похожее:
plugins < id 'org.springframework.boot' version '2.4.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' >group 'org.example' version '1.0-SNAPSHOT' configurations < compileOnly < extendsFrom annotationProcessor >> repositories < mavenCentral() >dependencies < implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok:1.18.22' annotationProcessor 'org.projectlombok:lombok:1.18.22' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' runtimeOnly 'org.postgresql:postgresql' >test
Тот же результат можно получить и в самой IntelliJ Idea: File → New → Project → Spring Initializr.
@SpringBootApplication public class SpringDemoApplication < public static void main(String[] args) < SpringApplication.run(SpringDemoApplication.class, args); >>
Опишем самый простой контроллер, чтобы удостовериться, что проект работает:
@RestController public class HelloController < @GetMapping("/hello") public String hello(@RequestParam(required = false) String name) < return "Hello, " + name; >>
Запустим проект в среде разработки или через терминал: ./gradlew bootRun .
Результат работы можно проверить в браузере перейдя по адресу http://localhost:8080/hello?name=World или с помощью консольной утилиты curl:
curl "http://localhost:8080/hello?name=World" Hello, World
Наш сервис запускается и работает, пора переходить к следующему шагу.
Представим, что нам требуется разработать некий сервис для интернет-магазина по продаже книг. Это будет rest-сервис, который будет позволять добавлять, редактировать, получать описание книги. Хранить данные будем в БД Postgres.
Docker
Для хранения данных нам потребуется база данных. Проще всего запустить инстанс БД с помощью Docker. Docker позволяет запускать приложение в изолированной среде выполнения — контейнере. Поддерживается всеми операционными системами.
Выкачиваем образ БД и запускаем контейнер:
docker pull postgres:12-alpine docker run -d -p 5432:5432 --name db -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=password -e POSTGRES_DB=demo postgres:12-alpine
Lombok
Создадим data-класс «книга». Он будет иметь несколько полей, которые должны иметь getters, конструктор и должна быть неизменяемой (immutable). Среда разработки позволяет автоматически генерировать конструктор и методы доступа к полям, но чтобы уменьшить количество однотипного кода, будем использовать Lombok.
Аннотация @Value при компиляции исходного кода добавит в наш класс getters, конструктор, пометит все поля класса private final , добавит методы hashCode , equals и toString .
@Value public class Book
После сборки проекта можно посмотреть, как выглядит класс после компиляции. Воспользуемся стандартной утилитой, входящей в состав JDK:
javap -private build/classes/java/main/com/example/BookStore/model/Book public final class com.example.bookstore.model.Book
Lombok очень упрощает читаемость подобного рода классов и очень широко используется в современной разработке.
Spring Data JPA
Для работы с БД нам потребуется Spring Data JPA, который мы уже добавили в зависимости проекта. Дальше нам нужно описать классы Entity и Repository. Первый соответствует таблице в БД, второй необходим для загрузки и сохранения записей в эту таблицу.
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "books") public class BookEntity
Мы также используем аннотации Lombok: @Data добавляет getters и setters, @NoArgsConstructor и @AllArgsConstructor — конструкторы без параметров и со всеми параметрами, соответственно. @Entity , @Table , @Id , @GeneratedValue — аннотации относящиеся к JPA. Здесь мы указываем, что это объект БД, название таблицы, первичный ключ и стратегию его генерации (в нашем случае автоматическую).
Класс Repository будет выглядеть совсем просто — достаточно объявить интерфейс и наследоваться от CrudRepository:
public interface BookRepository extends CrudRepository
Никакой реализации не требуется. Spring всё сделает за нас. В данном случае мы сразу получим функциональность CRUD — create, read, update, delete. Функционал можно наращивать — чуть позже мы это увидим. Мы описали DAO-слой.
Теперь нам нужен некий сервис, который будет иметь примерно следующий интерфейс:
public interface BookService < Book getBookById(Long id);// получить книгу по id ListgetAllBooks();// получить список всех книг void addBook(Book book);// добавить книгу >
Это так называемый сервисный слой. Реализуем этот интерфейс:
@Service @RequiredArgsConstructor public class DefaultBookService implements BookService < private final BookRepository bookRepository; @Override public Book getBookById(Long id) < BookEntity bookEntity = bookRepository .findById(id) .orElseThrow(() ->new BookNotFoundException("Book not found: id tp-content-code__button" aria-label="Копировать код" data-v-1e871fbd> 












