Как дружат UI на JS и Java EE server-side?

Всем привет.
Подскажите, что на данный момент является best practice по созданию взаимодействия UI, который написан на JS и сервера, написанного на Java?
К примеру, для соединения Flex (aka ActionScript) и Java, есть 2 основных фреймворка:
1. BlazeDS.
2. GraniteDS.
Которые позволяют обмениваться DTO между собой, через "поднятие" RemoteObject. Внутри, как я понимаю происходит сериализация\десериализация и через свои каналы (e.g. AMFChannel) происходит передача этих DTO.
Какие техники или фреймворки применяются для UI, написанного на JS?
Как я вижу, есть несколько вариантов:
1. Вызов java кода из JS: www.sitepoint.com/connect-java-to-javascript-with-...
2. Написание Rest API и вызов сервисов оттуда. (мне лично не нравится, полагаю, что будут серьезные проблемы с перфомансом, да и как то криво это будет выглядеть)
3. Какой то фреймворк, который обменивает DTO между JS и Java? Если такой существует.
4. Иметь JSF\JSP страницы, которые бы содержали вставки JS кода. (но это прям из пушки по воробьям)

Для наглядного примера: к примеру, есть задача, в которой один из модулей должен использовать d3js библиотеку (d3js.org), а данные получать от сервера, написанного на Java (к примеру, с использованием Spring)
  • Вопрос задан
  • 839 просмотров
Решения вопроса 1
@bobzer
Java EE Developer
2. Написание Rest API
Данный подход сейчас - мэйнстрим в разработке веб-проектов. Производительность высокая, механизм универсален и поддерживается практически всеми языками/фреймворками. Для примера: доводилось переходить со встроенных механизмов обмена данными с сервером GWT, на передачу тех же данных с помощью REST - при тех же объемах данных время возврата ответа значительно снижалось.
Кроме производительности, удобство использования также на высоте - в большинстве случаев код лаконичен и ясен. Обращения к серверу можно осуществлять практически из любого места в вашем JS-клиенте. Главное - не забывать о асинхронности, и строить логику с учетом этого: код, зависящий от результатов запроса обрабатывать в callback-ах, переданных в вызов REST.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bromzh
Drugs-driven development
3) GWT, например. Ты пишешь код на java, а он компилируется в JS. Таким образом, можно использовать многие java-классы (DTO тем более). Однако технология довольно своеобразна, подойдёт не всегда. И GWT компилятор поддерживает не всё из JavaCore и не дружит (пока) с Java8.
PS из похожего ещё есть Vaadin
Ответ написан
Vityarik
@Vityarik
2) Rest api. Плюс Web Socket для отправки сообщении с сервер на клиент, это даст больше вариантов взаимодействия клиента с сервером, а не только работать в режиме запрос ответ, как это подразумевает Rest
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы