Front end и Spring Boot
До этого момента, я весь фронт делал с помощью стандартных JSP, HTML, CSS. Но теперь решил посмотреть в сторону JavaScript-фреймворков.
И вот тут у меня ступор. Я не понимаю в какую сторону смотреть, с чего начать? Не в плане изучения JavaScript, а как скрестить весь этот back на Spring, который возвращает JSON объекты, и фронт, который, как пример, принимает эти JSON и сделает что-нибудь банальное с ними. Есть варианты полностью избавиться от стандартных view (JSP, Thymeleaf) и использовать полностью независимые JavaScript-фреймворки (Vue, React)? А не смесь JSP, в котором вызывается функция JavaScript, которая лежит в какой-нибудь папке, на мой взгляд, это какой-то неправильный подход. Если ошибаюсь — поправьте.
Ответы (1 шт):
Есть варианты полносью избавиться от стандартных view(jsp,thymeleaf)и использовать полностью независимые js фреймворки(vue,react)?
Всё, конечно же, реально. Разрабатываем api в виде обычного spring boot приложения, без какого-либо фронта (без jsp и подобного, просто эндпоинты, отдающие json). После, разрабатываем фронтовое приложение на любом javascript фрейморке, который вам нравится. Фронтовое приложение будет обращаться к api за информацией и рендерить статику.
Теперь у нас есть отдельно фронт и отдельно бек, и, есть два подхода, как заставить их работать вместе.
Первый подход: единый сервер
- создаём внутри
spring bootпроекта какой-то каталог, к примеруreact, - копируем туда весь свой фронт-проект вместе с
npmиwebpackконфигами (либо любыми другими сборщиками, которые вы используете) - на этапе компиляции и сборки spring-boot приложения, добавляем отдельную стадию, которая собирает зависимости и компилирует ваш фронт-энд (существуют готовые maven-плагины)
- получившиеся статические файлы (
.js,.cssи т.п.) во время сборки копируем в папкуresourcesspringприложения - настраиваем
springна раздачу получившейся статики, по запросам, которые не начинаются с/api
У этого подхода есть существенный минус: настройка всего процесса сборки и запуска довольно муторная и таит много подводных камней.
Второй подход: отдельные сервера
- поднимаем отдельно
spring bootсервер, обслуживающий только api запросы - поднимаем отдельно разработанное
react/angular/vueприложение раздающее статику и делающее запросы к апи (на отдельном порту одной физической машины, или на отдельной машине). Используем родной для javascript-аnodeсервер.
Этот подход требует поддержки двух отдельных серверов, а также грамотной настройки канала общения между ними.
P.S.если всё вышеперечисленное выглядит сложным, есть замечательный проект Jhipster, который умеет генерировать готовые Spring Boot + React/Angular/Vue/многочегоещё приложения. Можно сгененировать парочку приложений и черпать вдохновение оттуда.