Spring MVC, frontend+backend шаблонизация. Какое решение посоветуете?
Хочу сделать на сайте отдачу первой страницы обычным хтмлом, все дальнейшие действия, при поддержке клиентом, тянуть json-ом. По хорошему, большинство ссылок хотелось бы оставить рабочими без js, что бы все генерилось на бекенде.
Сейчас вариант все делать через mustache, так как есть шаблонизатор для java. Из минусов видится много ручной работы, необходимость дублирования контрол-методов для отдачи json-ом и html-ом (или отказа от стандартного роутинга спринга, какая-то его кастомизация, отдельный фильтр).
Решение, вроде, кажется вполне стандартным, но пока идей больше нет. К технологиям особой привязки у меня нет, проект на стадии проектирования. Единственное, не хотелось бы разворачивать какой-нибудь JBOSS для этого... )))
Когда страница рендерится в первый раз, то рендерится она целиком на сервере. После этого можно уже перерисовывать только части страницы. Например, оставить на месте навигацию и перерисовать только основное содержимое страницы.
Вот чрезвычайно простой пример, чтобы понять как оно работает.
Для одностраничного приложения, мне кажется, шаблонизатор вообще не нужен. Можно всегда отдавать один и тот же (пустой) HTML-документ, а JavaScript, в зависимости от URL страницы, уже добавит на нёго всё, что нужно.
В противном случае дублирования кода на клиенте и на сервере не избежать.
О таких подходах я в курсе, но мне интересно, что бы мой сайт индексировался получше, работал в случае какой то незамеченной js ошибки, и т.д. Я знаю, как реализовать тупо шаблонизацию на фронте.
И даже в приведенном мной примере уже никакого дублирования на клиенте и сервере нет. Разве что, считать дублированием отдачу библиотеке шаблона и данных. )
Да дублирование всё равно возникнет. Как только потребуется что-то посложнее просто шаблонизации. В самых неожиданных местах. Я это к тому, что лучше не париться и определиться: либо рендерить на сервере, либо на клиенте. То, чего хотите вы - это дополнительные сложности и проблемы ради непонятных целей. Вам это не нужно (YAGNI).