Каковы плюсы и минусы различных веб-фреймворков Java?

Я подумываю о создании собственного веб-сайта на Java и пытаюсь решить, какую структуру использовать. Однако быстрый поиск фреймворков Java возвращает более 50 на выбор!

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

В чем основные различия между наиболее популярными фреймворками? Есть ли случаи, когда один из них значительно превосходит другие? Например, корпоративные приложения с высоким трафиком по сравнению с небольшими приложениями с низким трафиком. Мне также интересно, намного ли легче выучить и использовать одни, чем другие.

Есть ли кто-нибудь, кто имеет опыт работы с некоторыми из этих фреймворков и может порекомендовать? Является ли огромное количество вариантов лишь ранним предупреждением о необходимости избегать веб-разработки на основе Java там, где это возможно?


person Aaron    schedule 23.08.2008    source источник
comment
В некоторой степени это все равно, что сказать, что быстрый поиск инструментов возвращает более 50 инструментов на выбор; выбрать молоток, отвертку или плоскогубцы? Тем не менее, с подвопросами, это неплохой субъективный вопрос.   -  person Pops    schedule 31.08.2011
comment
Как всегда забавные, чрезвычайно полезные вопросы и ответы (я только что заказал книгу о Wicket, спасибо всем), но весь пост закрыт как неконструктивный. ВЕРОЯТНО будет этот вопрос - а это сухой факт, ничего умозрительного, о ирония ...   -  person greenoldman    schedule 09.03.2012


Ответы (24)


Я использовал Tapestry 3, Wicket, Echo и JSF довольно широко. Я действительно рекомендую вам просмотреть их и выбрать тот, который кажется вам самым легким и наиболее подходящим для вашего стиля работы.

Из них наиболее удобной для меня была Wicket из-за легкости сборки компонентов и простоты шаблонов страниц. Это вдвойне, если вы используете свой собственный код db вместо Hibernate или какой-либо другой структуры (я никогда не был полностью доволен Wicket Hibernate или Spring Integration).

Echo отлично подойдет, если вы не против написать весь макет на Java. Я знаю, что сейчас все по-другому, но я по-прежнему считаю, что этот продукт обслуживает довольно узкую нишу. Кажется, они меняют модель разработки с каждым основным выпуском.

Tapestry - отличный продукт, но он, очевидно, сильно отличается от других с точки зрения модели разработки, поскольку он руководит в основном один чувак. Говард Льюис Шип, без сомнения, довольно умен, но я разочарован их решением в основном забыть об обратной совместимости с каждым выпуском. Опять же, для ваших нужд это может не иметь значения, и я всегда находил продукты Tapestry приятными, чтобы противостоять им.

JSF отсутствует в течение многих лет, и до сих пор кажется специалист по Struts, созданный для решения всех проблем Struts. Не понимая всех проблем со Struts. У него все еще есть ощущение незавершенности, хотя продукт, очевидно, очень гибкий. Я использую его и испытываю к нему некоторую нежность, с большими надеждами на его будущее. Я думаю, что следующий выпуск (2.0), который будет доставлен в JEE6, действительно внесет его в свой собственный, с новым синтаксисом шаблона (похожим на Facelets) и упрощенной компонентной моделью (пользовательские компоненты только в 1 файле ... наконец).

И, конечно же, есть миллион более мелких фреймворков и инструментов, у которых есть свои собственные (Velocity для базовых нужд, сырые JSP, Struts и т. д.). Однако я обычно предпочитаю компонентно-ориентированные фреймворки.

В конце концов, я бы порекомендовал просто взглянуть на Tapestry, Wicket и JSF и просто выбрать тот, который вам больше всего нравится. Вы, вероятно, очень быстро найдете тот, который подходит именно вам.

person jsight    schedule 23.08.2008
comment
Если ваше веб-приложение основано на содержании, как система форумов, я предлагаю вам использовать GWT и Ext-js. Если ваше веб-приложение больше похоже на настольное приложение, такое как терминал ERP, я предлагаю вам использовать ZK, Echo3, Vaddin и GWT. Я не буду предлагать какое-либо решение JSF, потому что без факта, что это стандарт JEE, я не нашел преимуществ в их использовании. - person Zanyking; 09.11.2009
comment
@Zanyking - Если вашему форуму нужна SEO, вам будет сложно использовать GWT, имо. - person jsight; 09.11.2009
comment
JSF, вероятно, излишек для веб-сайта, вместо этого я бы выбрал более производительные фреймворки, ... разработка должна оставаться увлекательной, а JSF не создавался с учетом `` развлечения '' :) - person HeDinges; 30.12.2009
comment
Tapestry, Wicket, JSF и Echo ориентированы на компоненты, а GWT, Ext-js и Vaadin ориентированы на Javascript. Не забудьте взглянуть на все замечательные классические фреймворки MVC, такие как Spring MVC, Play framework, Grails и Stripes. У них совсем другая модель программирования, чем у предыдущих, но есть и другие слабые стороны (вот почему существует так много фреймворков - разные цели, потребности и вкусы требуют разных инструментов). - person DaGGeRRz; 12.11.2010

Мне больше всего нравится Spring Framework. С 2.5 Spring MVC оооочень крутой, с новыми аннотациями, соглашениями по функциям конфигурации и т. Д.

Если вы просто делаете что-то очень простое, вы можете просто попробовать использовать обычный API сервлетов и не беспокоиться о фреймворке.

person bpapa    schedule 23.08.2008
comment
Проголосуйте за упоминание об использовании обычного Servlet API для чего-то простого. - person lsiu; 27.10.2009
comment
Я бы не стал использовать фреймворк «web mvc» по причинам, изложенным в (бесплатной) первой главе Wicket In Action. Кроме того, я бы избегал использования Servlet API напрямую, если у вас нет одностраничного приложения или если вы не хотите написать свою собственную структуру с нуля. - person Eelco; 01.02.2010
comment
Мне тоже нравится Spring, но я обнаружил, что вся конфигурация окупается, только если вы пишете красочное приложение. - person Leonard Ehrenfried; 16.02.2010
comment
Практически нет конфигурации с использованием аннотаций. - person bpapa; 17.02.2010
comment
@bpapa Аннотации просто помещают конфигурацию в ваши классы java вместо xml. - person Steven; 04.01.2012

Я рекомендую компонентно-ориентированную структуру Wicket. Он позволяет вам писать ваше веб-приложение в простом старом коде Java, вы можете использовать POJO в качестве модели для всех компонентов и вам не нужно возиться с огромными файлами конфигурации XML.

Я успешно разработал приложение для онлайн-банкинга с помощью Struts, когда обнаружил Wicket и увидел, насколько простой может быть разработка веб-приложений!

person Johannes K. Lehnert    schedule 25.08.2008

Недавно я начал использовать Stripes Framework. Если вы ищете платформу на основе запросов, которая действительно проста в использовании, но не накладывает никаких ограничений на то, что вы делаете, я настоятельно рекомендую ее.

Это похоже на распорки, но выходит далеко за рамки. Есть даже несколько проектов плагинов, которые позволяют использовать hibernate или jpa с очень небольшой конфигурацией.

Есть много хороших фреймворков, хотя я слышал, что калитка тоже хорошая, но я ее не использовал.

person ScArcher2    schedule 25.08.2008

Сам не пробовал, но думаю

http://www.playframework.org/

имеет большой потенциал ...

исходящий от php и классического asp, это первый веб-фреймворк java, который звучит многообещающе для меня ...

person opensas    schedule 25.10.2009
comment
Забавно, что это пятый раз за сегодня, что я не использовал его, но я рекомендую играть здесь на stackoverflow. - person Marko; 02.11.2012

ОБНОВЛЕНИЕ: Гобелен 5.2 вышел, поэтому он не заброшен, как раньше. По моему опыту, Tapestry 4, а не 5, поэтому ваш опыт может отличаться. Мое мнение о Tapestry изменилось с годами; Я изменил этот пост, чтобы отразить это.

Я больше не могу рекомендовать Tapestry, как раньше. Tapestry 5 кажется значительным улучшением, но моя главная проблема с Tapestry не в самой платформе; это с людьми, стоящими за этим.

Исторически сложилось так, что каждое крупное обновление версии Tapestry нарушало обратную совместимость с крайними предубеждениями, намного больше, чем можно было ожидать. По всей видимости, это связано с внедрением новых методов или технологий кодирования, которые требуют значительных изменений.

Говард Льюис Шип (главный автор Tapestry), безусловно, блестящий разработчик, но я не могу сказать, что мне небезразлично его руководство проектом Tapestry. Разработка Tapestry 5 началась почти сразу после выхода Tapestry 4. Насколько я могу судить, Корабль в значительной степени посвятил себя этому, оставив Tapestry 4 в руках других участников, которые, как мне кажется, не так хороши, как Ship. После болезненного перехода с Tapestry 3 на Tapestry 4 я почти сразу почувствовал, что меня бросили.

Конечно, с выпуском Tapestry 5, Tapestry 4 стала устаревшим продуктом. У меня не было бы проблем с этим, если бы путь обновления не был таким жестким снова. Итак, теперь наша команда разработчиков находится в довольно незавидном положении: мы могли бы продолжать использовать практически заброшенную веб-платформу (Tapestry 4), сделать ужасное обновление до Tapestry 5 или полностью отказаться от Tapestry и переписать наше приложение, используя другую платформу. Ни один из этих вариантов не очень привлекателен.

Гобелен 5 якобы написан так, чтобы с этого момента снизить вероятность поломки обновления. Хороший пример - классы страниц: в предыдущих воплощениях классы страниц происходили от базового класса, предоставленного Tapestry; Несовместимые изменения API в этом классе стали причиной большого количества проблем с обратной совместимостью. В Tapestry 5 страницы - это объекты POJO, которые во время выполнения дополняются «волшебной волшебной пылью Tapestry» с помощью аннотаций. Таким образом, пока сохраняется контракт на аннотации, изменения Tapestry не повлияют на классы ваших страниц.

Если это так, то написание нового приложения с использованием Tapestry 5 может оказаться удачным. Но лично мне не хочется снова класть руку на конфорку.

person Robert J. Walker    schedule 02.09.2008
comment
Обновление: по прошествии времени проект Tapestry, похоже, был заброшен. Релизов Tapestry 5 не было с апреля '09, а Tapestry 4, в JIRA все еще содержавшей кучу нерешенных ошибок, не обновлялась с '08. Из-за этого я больше не могу рекомендовать Tapestry как жизнеспособный выбор для фреймворка веб-приложений. - person Robert J. Walker; 16.02.2010
comment
Гобелен не заброшен. Ветка Tapestry 5 довольно активна: стабильная версия 5.1 и скоро появится версия 5.2. - person Timo Westkämper; 27.07.2010
comment
Ты прав. Фактически, с тех пор была выпущена Tapestry 5.2. Я обновил сообщение, чтобы отразить мое обновленное мнение о Tapestry. - person Robert J. Walker; 01.09.2010

Предупреждение: я работаю в Vaadin (ранее IT Mill)

Если вы делаете что-то RIAish, вы можете взглянуть на Vaadin. Это AJAX-фреймворк с открытым исходным кодом, ориентированный на пользовательский интерфейс, который мне приятно использовать (я сам из PHP).

Существует пример использования, в котором сравнивается выполнение одного и того же приложения. (т.е. два приложения с одинаковым набором функций) в Icefaces и Vaadin. Вкратце, в нем говорится, что разработка пользовательского интерфейса была значительно быстрее.

Несмотря на то, что исследование размещено на вики-сайте компании, я могу заверить, что оно объективное, искреннее и правдивое, хотя я не могу заставить вас поверить мне.

person Henrik Paul    schedule 23.08.2008
comment
+1 Фреймворк переименован в vaadin (ранее ITMill). Я должен сказать, что vaadin - это очень красивый веб-фреймворк, а вся java - больше ничего. Я считаю это очень продуктивным. - person fmucar; 08.02.2011

После долгого тестирования различных решений для меня это оказалось:

  • Spring MVC для уровня представления и контроллера (НЕТ Spring Webflow, потому что мои потоки основаны на ajax)

  • jQuery для всех вещей на стороне клиента

  • Spring Security для аспекта безопасности

  • Гибернация / JPA2

  • Причал для продолжения (комета)

Один месяц необычайно крутой кривой обучения, но теперь я счастлив.

Я также хотел бы упомянуть, что я был всего в небольшом шаге от того, чтобы отказаться от всего этого Java и вместо этого изучать Scala / LIFT. Насколько мне известно, все в Java, что связано с передовой веб-разработкой (комета, асинхронная связь, безопасность (да, даже с Spring Security!)), Все еще является чем-то вроде взлома ( Докажите, что я ошибаюсь, доказательствами, пожалуйста!). Мне Scala / LIFT кажется более готовым и универсальным решением.

Причина, по которой я наконец решил не использовать Scala, заключается в

  • как руководитель проекта я должен учитывать человеческие ресурсы, а Java-разработчиков гораздо проще найти, чем Scala-разработчиков.

  • для большинства разработчиков в моей команде функциональную концепцию Scala, сколь бы прекрасной она ни была, трудно понять.

Ура Эр

person Ta Sas    schedule 03.08.2010
comment
Это все хорошо. Хороший выбор Spring MVC, будьте осторожны (и мудры). - person Victor Ionescu; 14.01.2011

Я тоже слышал хорошие отзывы о Spring Framework. Однако в целом большинство веб-фреймворков Java, на которые я смотрел (особенно Struts), меня не впечатлили.

Для простого приложения я бы определенно рассмотрел возможность использования «сырых» сервлетов и JSP и не беспокоился о принятии фреймворка. Если сервлеты хорошо написаны, в будущем будет проще переносить на фреймворк, если это необходимо, когда приложение становится все сложнее.

person Russell Mayor    schedule 23.08.2008
comment
+1 за Если сервлеты хорошо написаны ... - person Chris; 18.08.2009

Мой выбор - Wicket !!

person Franklin    schedule 24.02.2009

Все они - вот и проблема ;-)

person Community    schedule 26.09.2008

Я думаю, что для ваших скромных требований вам просто нужно закодировать сервлеты или простые страницы jsp, которые вы можете обслуживать с сервера Tomcat. Я не думаю, что вам нужен какой-либо веб-фреймворк (например, распорки) для личных данных веб-сайта

person Community    schedule 23.08.2008

Сказать «использовать JSF» - это немного просто. Когда вы решите использовать JSF, вы должны выбрать библиотеку компонентов поверх него. Будете ли вы использовать MyFaces Tomahawk, Тринидад, Тобаго (http://myfaces.apache.org/)? Или, может быть, ICEfaces (http://www.icefaces.org/)? О, и если вы используете ICEfaces, будете ли вы использовать JSP или Facelets для своих представлений?

На мой взгляд, это сложно сказать. Ни у кого нет времени оценить все многообещающие альтернативы, по крайней мере, в проектах, над которыми я работаю, потому что они недостаточно велики, чтобы провести трехмесячные этапы оценки. Тем не менее, вы должны поискать тех, у кого есть большое и активное сообщество, и которые не исчезнут через год. JSF существует уже некоторое время, и, поскольку его подталкивает солнце, он будет существовать еще некоторое время. Не могу сказать, лучший ли это выбор, но он будет хорошим.

person Tim Büthe    schedule 24.02.2009
comment
Jsp был для меня головной болью, когда я делал продаваемое нами веб-приложение. Вместо этого при обновлении будут учитываться фейсы. - person Thorbjørn Ravn Andersen; 24.12.2009
comment
Да, к этому моменту я почти уверен: используйте фейсклеты вместо JSP. Это намного лучше, и я не вижу (больших) минусов. - person Tim Büthe; 07.01.2010

http://zkoss.org - хороший

person ziftech    schedule 09.09.2009

Для сайтов с высоким трафиком я бы использовал структуру, которая не управляет состоянием клиента на сервере - Wicket, JSF и Tapestry управляют состоянием клиента на сервере. Я бы использовал эти фреймворки (мой любимый Wicket) только в том случае, если приложение должно быть больше похоже на настольное приложение. Но я бы попытался использовать более масштабируемый и простой подход REST + AJAX.

Spring MVC был бы кандидатом, но, начиная с Spring MVC 3, он имеет странную модель программирования, перегруженную аннотациями, которая не использует преимущества статической типизации. Существуют и другие уродливые вещи, такие как выходные параметры в методах в сочетании с обычным возвратом, поэтому существует два выходных канала одного метода. Spring MVC также имеет тенденцию заново изобретать колесо, и вам придется больше настраивать по сравнению с другими фреймворками. Я не могу рекомендовать Spring MVC, хотя у него есть несколько хороших идей.

Grails - это удобный способ использования Spring MVC и других установленных фреймворков, таких как Hibernate. Кодировать - это весело, и вы быстро увидите результаты.

И не забывайте, что Servlet API с несколькими небольшими помощниками, такими как FreeMarker для создания шаблонов, очень мощный.

person deamon    schedule 30.12.2009

Я оценил довольно много фреймворков, и Vaadin (http://vaadin.com/home) проанализировал все путь к вершине.

Вы должны дать ему хотя бы краткую оценку.

Ваше здоровье!

person Gilles    schedule 27.07.2010

Я бы выбрал Wicket (для крупных проектов и предсказуемой базы пользователей), GWT (для крупных проектов, которые в основном общедоступны) или просто сервисный фреймворк (например, Jersey / JAXRS) вместе с инструментарием JavaScript (для малых и средних проектов) .

person Eelco    schedule 31.01.2010

Я рекомендую Шов, особенно если вам нужна настойчивость.

person Navi    schedule 06.03.2010

См. Несколько комментариев к некоторым фреймворкам приложений Java (второй абзац):

http://swiss-knife.blogspot.com/2009/11/some-java-application-servers.html

person Bob Yoplait    schedule 02.08.2010

Для быстрого и красивого графического интерфейса вы можете использовать JSF с Richfaces библиотека. Компоненты пользовательского интерфейса Richfaces просты в использовании, а удобные ссылки доступны с демонстрацией кода на демонстрационном сайте. Возможно, позже, когда на вашем сайте будет больше данных для обработки и в базе данных необходимо будет передать много информации, вы сможете подключить к ней любую структуру доступа к базе данных (ORM).

person user709798    schedule 15.04.2011

Не могу поверить, что никто не упомянул GWT

person Kevin Wong    schedule 11.09.2008
comment
На самом деле я бы не стал рассматривать GWT как фреймворк для веб-приложений (это больше похоже на набор веб-инструментов, отсюда и название). Однако GWT великолепен и хорошо сочетается, например, со Spring. - person stian; 22.09.2008
comment
фреймворк или инструментарий, в чем на самом деле конкретная разница? Кодирование с помощью GWT ощущается как работа с фреймворком, как и другие варианты. - person Eelco; 01.02.2010

Мой любимый способ создания действительно простых приложений - это Apache VelocityTools (VelocityLayoutServlet) с Velosurf (http://velosurf.sourceforge.net < / а>).

Для более сложных приложений Spring MVC или Struts 2.

person Nathan Bubna    schedule 15.09.2008

Попробуйте HybridJava - это намного проще, чем что-либо другое.

person Alex    schedule 28.07.2010
comment
hybridserverpages.com - person opensas; 30.07.2010

Я бы сказал vaadin или калитка

person fmucar    schedule 08.02.2011