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

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

 Зависит от приложения и архитектурных требований.  

  

Во-первых, компонентный или 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)  

5) Если к сервису понадобится REST Api, возьмите сразу фреймворк, в котором это есть, а не надейтесь на авось.  

  

В целом так. Дадите больше требований к приложению — могу посоветовать что-то более конкретное. 

 Имхо, Hibernate+Spring для серверной части. По желанию — GWT для клиентской. 

 Посмотрите в сторону PrimeFaces 

 Wicket wicket.apache.org  

Wicket + jQuery [code.google.com/p/wiquery/](http://code.google.com/p/wiquery/) 

 Если хотите профессионально погрузиться тогда советую:  

data level — hibernate  

business — spring 3.x (mvc, security etc...)  

view — freemarker + jquery  

  

Ну а если для пробы пера, тогда — spring roo! 

 Может я отсталый, но я пишу в в посконной связке Servlet+JSP+JSTL  

Плюсы — полный контроль над всем, никаких аннотаций, связок и правил, тучи xml и .properties, на выходе именно то что хочешь, а не то что сгенерит фреймворк.  

Минусы — надо много писать руками рутинного кода, а на выходе получится свой фреймворк с блекджеком и хибернейтом.  

  

Но для маленьких сайтов я считаю подход оправдан 

 Может быть Google Web Toolkit. 

 Насколько я знаю, лучший фреймворк для Java — Stripes. Если интересует, могу рассказать. 

 grails, а лучше вообще python+django или ror, если нужно быстро что-нибудь сделать, что-нибудь шаблонное.  

  

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

  

Еще как вариант wicket+spring посмотрите 

 Имел опыт работы начиная от 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 для инфраструктурного управления проектами 

 GWT/Vaadin + Spring/Guice + MyBatis(к чёрту Hibernate!).