Выбор Java фреймворка для веб-разработки?

Никогда себя веб-разработчиком не считал, но настал час исправить это дело. Подскажите пожалуйста, под каким фрейворком легче, удобнее, быстрее работается? Смотрелся на tapestry5, play framework, Grails. Из этих трёх tapestry выглядит по-моему лучше всех. Но брожение по интернетам показало, что он почему-то не пользуется огромной популярностью.
  • Вопрос задан
  • 22578 просмотров
Решения вопроса 1
malexejev
@malexejev
Зависит от приложения и архитектурных требований.

Во-первых, компонентный или action-based?

Компонентные — легко писать (i.e. «разрабатывать большие сложные гуи») но долго разрабатывать кастомные компоненты, приложение будет в среднем тяжелее (медленнее) и будет жрать больше памяти (особенно JSF имплементации с conversation state сохраненным в HttpSession) на одного юзера. Кроме того, их нередко сложно кластеризовать из-за плохого использования сессии библиотеками.
Из компонентных: JSF (XxxFaces), Tapestry 5, GWT. Тапестри 5 не советую — имел опыт разработки большого публичного сайта на нем. Посоветовал бы попробовать GWT — слышал максимум положительных отзывов от людей, кто что-либо на нем делал. Опять-таки, лично я не советую JSF — сразу потеряете контроль за тем, что находится у вас в сессии, приложение станет «тяжелым».

Action-based фреймворки: чуть медленнее разработка, легко сделать приложение stateless и получить простую кластеризацию, приложение получается легковесным и быстрым.
Посоветую такие комбинации: Spring MVC + FreeMarker, Spring MVC + Velocity, Spring MVC + JSP 2 (EL-based). Слышал положительные вещи про Stripes (но он очевидно менее популярен, чем Spring MVC) и Play (всем хорош, кроме странных архитектурных закидонов — например, предлагается пихать бизнес-логику в модели, а не в выделенный сервис-леер. одно это скорее всего будет для вас критично).

Потом, что еще надо учесть —
1) HTML это не XML. Если движок шаблонов использует XML — это уже не очень хорошо. DOCTYPE, browser-specific комменты придется вставлять через хаки.
2) streaming, not buffering. Правильная работа с вебом — писать в outputStream по ходу, а не копить строчку и потом выбрасывать ее целиком. Почти все компонентные фреймворки грешат лишней буферизацией, многие action-based тоже. Отсюда завышенные требования к памяти, OOME при генерации тяжелых страниц, etc.
3) Обратите особое внимание на то, как в выбранном фреймворке сделаны Layouts — они должны быть удобные (ie. ближе к Django-style) и имплеменчены без буферинга (см. п. 2)
4) Если ваш фреймворк диктует вам одну конкретную прошитую javascript-библиотеку — подумайте дважды. Для intranet приложения это может сработать. Для публичного — я бы взял другой фреймворк. GWT вроде используют в паблике, но я лично с ним не работал.
5) Если к сервису понадобится REST Api, возьмите сразу фреймворк, в котором это есть, а не надейтесь на авось.

В целом так. Дадите больше требований к приложению — могу посоветовать что-то более конкретное.
Ответ написан
Пригласить эксперта
Ответы на вопрос 10
@isden
Имхо, Hibernate+Spring для серверной части. По желанию — GWT для клиентской.
Ответ написан
Комментировать
@Jamon
Java разработчик
Посмотрите в сторону PrimeFaces
Ответ написан
Комментировать
inheaven
@inheaven
Wicket wicket.apache.org
Wicket + jQuery code.google.com/p/wiquery/
Ответ написан
@Zamorozka
Если хотите профессионально погрузиться тогда советую:
data level — hibernate
business — spring 3.x (mvc, security etc...)
view — freemarker + jquery

Ну а если для пробы пера, тогда — spring roo!
Ответ написан
Комментировать
@bald2b
Может я отсталый, но я пишу в в посконной связке Servlet+JSP+JSTL
Плюсы — полный контроль над всем, никаких аннотаций, связок и правил, тучи xml и .properties, на выходе именно то что хочешь, а не то что сгенерит фреймворк.
Минусы — надо много писать руками рутинного кода, а на выходе получится свой фреймворк с блекджеком и хибернейтом.

Но для маленьких сайтов я считаю подход оправдан
Ответ написан
Комментировать
mhspace
@mhspace
Может быть Google Web Toolkit.
Ответ написан
Комментировать
stas_agarkov
@stas_agarkov
Я программист
Насколько я знаю, лучший фреймворк для Java — Stripes. Если интересует, могу рассказать.
Ответ написан
Комментировать
Foror
@Foror
Графоман
grails, а лучше вообще python+django или ror, если нужно быстро что-нибудь сделать, что-нибудь шаблонное.

tapestry5 — если разобраться, то у вас в руках окажется очень мощный и гибкий инструмент для разработки веб-сайтов и веб-приложений любой сложности. Но нужно многое самому пилить. Хотя с плагинами там сейчас получше стало. Есть уже стандартные наборы библиотек, можно на сайте найти.

Еще как вариант wicket+spring посмотрите
Ответ написан
Комментировать
@VSZ
Имел опыт работы начиная от Struts 1.1 и могу с уверенностью заявить, что Wicket является одним из самых элегантных веб фреймворков. В свое время как-то конкурировал с Tapestry, но что задолбало в Tapestry, так это постоянное изобретение велосипедов, глючность и долгие релизы

В Wicket все динамичнее и куда проще:
1) не нужно иметь дело с HTTP вообще
2) нет необходимости работать с http сессией
3) начать работать с Wicket одно удовольствие, не нужно никаких конфигураций — вся конфигурация — это Java код
4) забыть, что такое thread safety requirement для реализуемых страниц
5) один из самых простых шаблонных механизмов (в Wicket это чистый html)
6) хороший уровень секьюрности
7) неплохая интеграция с spring security
8) высокий уровень реиспользования компонент. Писать компоненты на нем очень просто, взять, как пример, создание панели с контролами и хтмл шаблоном и затем полное реиспользование во всех необходимых страницах

Я точно не противник action based подходов и других фреймворков, но для командной разработки веб приложений он куда лучше того же Struts, Spring MVC и еже с ними.

P.S.: да, и не забудьте использовать maven для инфраструктурного управления проектами
Ответ написан
Комментировать
@endymion
GWT/Vaadin + Spring/Guice + MyBatis(к чёрту Hibernate!).
Ответ написан
Ваш ответ на вопрос

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

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