Какой web framework для java выбрать?

Добрый день. Сразу извиняюсь за избитый и провокационный вопрос в заголовке.

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

Для лучшего понимания рассмотрю 3 задачи.

Задача №1. Сайт визитка/интернет магазин. Для построения такого сайта я бы взял django (3 последних года пишу на питоне). Что из java лучше подойдет для решения данной задачи? И вообще имеет ли смысл решать такую задачу на java? Требования к инструменту следующие:
- Наличие адекватного шаблонизатора для генерации html с возможностью структурирования шаблонов (как например в djaongo или Jinja2)
- Возможность быстрого построения админки для сайта
- ORM для CRUD операций
- Валидация форм
- поддержка AJAX

Задача №2. Бекэнд реализующий некий API (REST, SOAP, RPC). Для решения этой задачи на python я бы взял flask и sqlalchemy. Какой инструмент java лучше подойдет в этом случае. Требования к инструменту следующие:
- ORM позволяющий реализовывать боле-менее интересные агрегации
- Поддержка в реализации API (REST, SOAP, RPC)

Задача №3. Веб приложение с насыщенным (толстым) веб-клиентом. Например это может быть какая-то CRM работающая в ЛВС. Для решения этой задачи на python я бы взял flask, sqlalchemy и ExtJS. Правильно ли я понимаю что на java для этого хорошо подойдет GWT? Что еще можно использовать? Примерные требования к инструменту следующие:
- ORM позволяющий реализовывать боле-менее интересные агрегации
- Автоматизация построения веб-клиента
- web сокеты (для обновления и уведомление о событиях с сервера)

Хотелось бы получить развернутые ответы. Как я понимаю в данное время бОльшей популярностью пользуются следующие фреймворки: spring, GWT и Grails - так ли это? На что еще стоит обратить внимание? Какие ограничения есть у этих технологий?

Заранее всех благодарю. Буду благодарен если дадите ссылку на хорошую обзорно-сравнительную статью.
  • Вопрос задан
  • 10446 просмотров
Решения вопроса 1
Adam_Ether
@Adam_Ether
Java Developer
Вообще хороший вопрос вы задали.

Задача №1.
Можно ли Java? А почему бы и нет? Я бы для такого просто приложения использовал Play ибо он:
- прост в обучении и вообще действительно все делается "играючи"
- приятный, простой шаблонизатор, можно иметь базовые шаблоны, которые расширяются другими
- hot-reload в dev режиме сэкономит время на отладку
- под капотом netty, поэтому работает быстро
- интегрирован hibernate
- более менее можно протестировать все (не самая сильная сторона)
- есть встроенная in-memory база (h2) данных и фикстуры для тестирования

Стоит заметить это все о Play 1*, на мой взгляд, субъективно второй сложнее.

Задача №2
Опять же, можно использовать Play или Spring (стоит попробовать сразу 4, все через аннотации можно сделать, также можно в методе контроллера сразу возвращать объект -- он будет непрозрачно сериализован (настраивается как))

Насчет Spring, это достаточно громосткая технология, зачастую требует намного больше времени, чтобы решить туже задачу (например в Play), больше читать, больше вникать. Но это окупится большей гибкостью.

Задача №3 Если честно, не совсем понял что здесь нужно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@bobzer
Java EE Developer
Не ответ, а комментарий ко всем ответам - достали уже с этим Spring. По сути, Spring - это контейнер, в котором разворачивается приложение, и которому Spring предоставляет различные сервисы, в основном: управление транзакциями, развертывание веб-сервисов, Depedency Injection. При этом, сам Spring обычно работает под управлением внешнего контейнера - сервера приложений. Проблема в том, что современные сервера приложений (бесплатные - JBoss/WildFly, TomEE) предоставляют ТЕ ЖЕ САМЫЕ сервисы из коробки. Получается контейнер в контейнере, и попробуй разберись из какого из них ты получаешь тот или иной сервис. Во многих случаях ресурсы просто дублируются - те же бины JBoss находит в jar-ах сам и без каких-либо указаний сразу их деплоит. Плюс вы в Spring-е их же конфигурируете и деплоите второй раз. А если вы в аннотациях указали @Singleton, как себя поведет ваша Система?

Spring - отличная штука, была, лет 5 назад, когда была спецификация J2EE. Сейчас все самое нужное, из того что он давал, уже есть в спецификациях JEE 6, и в серверах приложений, реализующих эти спецификации. Опытные люди говорят так: если у вас есть проект на Spring, работайте и дальше на Spring, если вы создаете проект с нуля - берите JEE 6, про Spring забудьте. Да, у Spring все еще появляются уникальные обертки над различными сервисами, за счет которых они еще пытаются доказать свою востребованность. Но, во-первых, то же, что дает Spring, практически всегда можно сделать другими способами. Во-вторых, в большинстве реальных проектов используется 3-5% сервисов Spring-а, и как я уже сказал, эти сервисы уже есть в серверах приложений.

Если что, погуглите "Spring vs JEE 6" прежде чем холиварить...
Ответ написан
anyd3v
@anyd3v
Смотрите в сторону spring (mvc, data, rest), вам хватит точно. В качестве шаблонизатора thymeleaf.

Не советую GWT, Grails.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы