Какой фреймворк выбрать - Seam, Wicket, JSF или GWT?

Я обсуждаю, использовать ли Seam, Wicket, JSF или GWT в качестве основы для моего уровня представления в проекте Java.

Я сузил свой выбор веб-фреймворков Java до этого подмножества, исходя из соображений рынка труда, новизны технологии и рекомендаций других S.O. пользователей.

Какие факторы мне следует учитывать при выборе среди них?


person karl    schedule 13.04.2009    source источник


Ответы (11)


Единственный из тех, что я использовал, - это JSF, поэтому я не смогу дать вам отзыв о других, но вот мой взгляд на JSF. По моему опыту, в ту минуту, когда мы преобразовали JSF в JSP в JSF в фэйслетах, жизнь стала НАМНОГО проще, поэтому я сосредоточусь на фэйслетах. Кроме того, похоже, что Seam и JSF не исключают друг друга.

Плюсы:

  • Создание Facelets xhtml-компонентов очень просто, что способствует их повторному использованию.
  • Достойные возможности создания шаблонов с использованием встроенных тегов, таких как ui: insert, ui: include и ui: decorate.
  • Простой доступ к Spring beans через faces-config
  • На основе XHTML, поэтому веб-разработчики, незнакомые с java, по-прежнему могут быть эффективными
  • Хорошая библиотека виджетов доступна в томагавке / тринидаде

Минусы:

  • Публикация только запросов. Это может затруднить создание закладок.
  • Не такой встроенный ajax-y, как GWT, но это можно исправить, если использовать с Seam.

Я ни в коем случае не эксперт в JSF / Facelets, поэтому уверен, что есть другие, которые я пропустил. Надеюсь, кто-то еще уточнит.

Обновление для JSF 2.0:

  • Имеет еще лучшие возможности повторного использования композитных компонентов
  • Библиотеки виджетов для 2.0 включают простые шрифты и шкалы мохарры.
  • Позволяет получать запросы и делать закладки
  • Встроенная поддержка Ajax
  • См. http://andyschwartz.wordpress.com/2009/07/31/whats-new-in-jsf-2/, чтобы узнать больше о JSF 2.
person digitaljoel    schedule 13.04.2009
comment
томагавк / тринидад - хороший совет. Спасибо. - person karl; 14.04.2009
comment
Seam упрощает использование запросов GET и создание закладок для URL-адресов с помощью JSF. - person Peter Hilton; 16.04.2009
comment
Спасибо, Питер, мне нужно разобраться в этом. - person digitaljoel; 16.04.2009
comment
Если вы будете искать «калитку» в stackoverflow, вы найдете множество обсуждений в этих веб-фреймворках, которые могут вам помочь. В частности, stackoverflow.com / questions / 24596 / и stackoverflow.com/questions/538550/ - person digitaljoel; 20.04.2009
comment
Добавляя к этому вопросу о фреймворках, что было бы предпочтительнее, если поисковая оптимизация важна? - person Nick; 26.08.2009
comment
Я мало что знаю о поисковой оптимизации (я предполагаю, что вы имеете в виду оптимизацию поисковых систем), но предполагаю, что ajax / javascript может этому помешать. Все дело в том, как вы распространяете контент, поэтому я подозреваю, что вы могли бы успешно использовать любой из них в зависимости от того, как вы структурируете свое приложение и презентацию. Исходя из моего ограниченного опыта, я думаю, что полноценное приложение GWT может оказаться самым сложным для SEO. - person digitaljoel; 27.08.2009
comment
@digitaljoel JSF2 включает поддержку запросов GET аналогично тому, как JSF1.2 + Seam 2 поддерживает запросы GET. Идея использования Seam 2 без JSF немного странная (я использую Seam с тех пор, как он появился). ИМО, Шов залатывает большинство важных дыр в JSF 1.x. JSF2 / CDI уже рассмотрел большую часть этого вопроса, как я уверен, вы знаете. - person Joshua Davis; 12.09.2013
comment
@JoshuaDavis Обратите внимание, что в моем редактировании 3 года назад я упоминал, что JSF 2 поддерживает запросы GET. Я не уверен, что использование JSF без Seam было таким странным еще в 2009 году, когда я отвечал на вопрос, но, возможно, мы просто делали это неправильно. В любом случае я настоятельно рекомендую взглянуть на что-нибудь, кроме JSF, для работы с новым веб-интерфейсом. - person digitaljoel; 13.09.2013
comment
Да, использование JSF 1.x без Seam довольно болезненно. Я использовал JSF2 / CDI для некоторых новых вещей, и мне было легко работать с ним. - person Joshua Davis; 15.09.2013

Я использовал GWT с версии 1.4 и JSF с момента выхода спецификации 2.0.

GWT - это клиентский фреймворк, он генерирует JavaScript из Java. Ваша архитектура будет чистой клиент-серверной, что означает:

  • Лучше всего использовать грубые сервисы
  • Все объекты, которые перемещаются на сторону клиента, должны быть полностью сериализуемыми (это означает, что нет ленивой загрузки или шаблона OpenSessionInView).
  • Начиная с GWT 2.0, вы можете создавать свой графический интерфейс с помощью xhtml, что намного проще с точки зрения стилизации и структурирования HTML.
  • GWT предпочитает хорошую архитектуру, если вы ее испортите, рефакторинг будет плохим.
  • Идеальная поддержка истории (кнопка "Назад" в браузере, URL-адреса для закладок) сложна, вам, вероятно, придется накатить собственную, хотя легко взломать что-то сразу

JSF - это компонентная структура с дизайном, ориентированным на просмотр (программный код, если хотите):

  • Проще создавать какие-то веб-приложения (с отслеживанием состояния, например, корзину)
  • JSF + Seam поддерживает разговоры (подумайте о страницах, подобных мастеру, которые поддерживают состояние на нескольких страницах)
  • Вы можете реализовать OpenSessionInView в зависимости от вашего стека. Вероятно, это не рекомендуется, если вы используете EJB для сервисного / бизнес-уровня.
  • JSF2 has superb support for AJAX, and with a component suite like RichFaces you can build nice webapps
    • But if you want exquisite javascript behaviour, you'll have to write some javascript
  • JSF отслеживает текущее состояние пользовательского интерфейса на стороне клиента или на стороне сервера. Это компромисс между сетевым трафиком или памятью сервера.

Продолжить:

  • GWT больше подходит для веб-приложений (например, Gmail), которым требуется максимальная производительность на стороне клиента. Писать собственные компоненты легко (вы пишете на Java), а поскольку ваша серверная часть - это просто уровень обслуживания, вы можете полностью не иметь состояния на стороне сервера.
  • JSF больше подходит для большинства приложений CRUD, которые лучше подходят для компонентно-ориентированных вещей: подумайте о системе бронирования отелей / авиабилетов, интернет-магазине с тележкой для покупок и т. д.
person Miguel Ping    schedule 31.08.2010
comment
Вы забыли посоветовать ему никогда не использовать GWT или любой другой фреймворк на стороне клиента для Java, поскольку эти фреймворки, как правило, очень болезненны для разработчиков, я очень предпочитаю использовать свой собственный HTML / CSS / Javascript вместо создания моей html-страницы с кодом Java. а затем компилируем все в Html / Js. - person Yassir Khaldi; 25.09.2019

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

  1. Это компонентный каркас. Мне нравится работать с компонентами, а не с полными страницами.
  2. Я могу позволить дизайнерам работать над шаблонами и страницами, пока я работаю над частями java.

  3. Нет ничего нового для изучения. Это "просто java и только HTML"

  4. Мне нравится его механизм резервирования ajax. Там, где в браузере нет поддержки javascript, особенно на мобильных устройствах, он возвращается к обычному HTML, и все работает.
  5. Отсутствие конфигурации xml - плюс
  6. Он поддерживает все, что мне нужно от веб-приложения. например, проверка, интернационализация, поддержка кнопки возврата и спокойные URL-адреса среди прочего

Мой предыдущий опыт - GWT и JSF 1.0.

person joshua    schedule 10.08.2010

Шов - это каркас приложения, а не уровень представления. Первоначально он был разработан, чтобы сделать JSF менее болезненным, но превратился в более универсальный фреймворк для внедрения зависимостей.

Я считаю, что вы можете использовать Seam с JSF, Wicket и GWT. Поддержка JSF первична и превосходна; Я не уверен, насколько хорошо поддерживаются два других.

Поскольку в центре внимания ваших критериев, похоже, является конкурентоспособность ваших навыков, я бы посоветовал попробовать Seam и JSF через Facelets. JSF является общепринятым стандартом, и его действительно приятно использовать, если вы используете Facelets. У вас может быть отличная функциональность AJAX через Richfaces и Ajax4jsf. Шов более или менее стандартизируется через JCP.

person recampbell    schedule 13.04.2009
comment
Интересный. Привязывает ли вас Richfaces к JBoss? Вы также рекомендуете маршрут Facelets - я не вижу никаких объявлений о вакансиях, в которых он упоминается - это потому, что он относительно новый, или потому, что в объявлениях о вакансиях с большей вероятностью просто упоминается JSF? - person karl; 14.04.2009
comment
JSF сначала использовался в JSP, а затем в фейсклетах, но я считаю, что группа JSF отдает предпочтение фэйслетам. Это очевидно в спецификации JSF 2.0, в которой есть таблица, показывающая преимущества фейслетов перед JSP. - person digitaljoel; 14.04.2009
comment
Карл - Richfaces можно использовать в любом контейнере, поддерживающем JSF, мне известно о каких-либо зависимостях JBoss. Что касается объявлений о вакансиях, я бы лично избегал любой работы, требующей JSP; Facelets - это то, что вам нужно. ;-) - person recampbell; 14.04.2009
comment
Забудьте о JSP. Facelets - это технология просмотра по умолчанию в Seam (и JSF 2.0), поэтому Seam обычно подразумевает Facelets, хотя есть некоторая поддержка Wicket. - person Peter Hilton; 16.04.2009
comment
Мне не нравилось использовать richfaces. Если бы я мог использовать XCSS без какого-либо встроенного базового XCSS, используемого в контрольном пакете, это было бы здорово, иначе его происхождение в образовательном учреждении очевидно. Это мешает вам свободно использовать имеющийся у вас опыт в HTML и CSS. В противном случае +1 за хороший ответ. Seam Remoting просто работает и рекомендуется для AJAX. - person Simon Gibbs; 29.04.2009

По моему опыту, в хронологическом порядке:

Сырые сервлеты - (да, много тяжелой работы, но это были первые дни, и мы были нетерпеливыми бобрами!)

JSP - я думал, что это был beez neez, когда он вышел (если бы мы только знали;))

Echo - отличный фреймворк, но не для страниц, которые должны быть дружественными к поисковым системам (та же проблема с GWT)

Wicket - Потрясающий фреймворк - разработчики полностью понимают концепцию объектно-ориентированного программирования (в отличие от JSP и многих других) и применили к нему все обычные тонкости объектно-ориентированного программирования. Если вы цените «возможность повторного использования», если цените инкапсуляцию, цените разделение проблем и если вам нравится привязать свою модель к коду пользовательского интерфейса, не беспокоясь о маршалинге объектов и других подобных уродствах, тогда эта структура для вас!

person Volksman    schedule 10.02.2011
comment
Я никогда не использовал простой путь сервлета (не для рендеринга html), поэтому не могу похвалить его. Но у меня есть некоторый опыт в создании приложений Wicket, и теперь я (должен сейчас) использовать JSF. Черт возьми, как я хочу вернуться в Уикет. Некоторым людям может быть проще использовать JSF, но я предпочитаю чистые и простые принципы, лежащие в основе Wicket. Простые вещи легко сделать, и более сложные задачи тоже не сложны, поскольку API предоставляет хуки для переопределения поведения по умолчанию. - person bert; 11.02.2011

В долгосрочном сценарии я бы рекомендовал использовать технологии, поддерживаемые спецификацией Sun. Пока что доказано, что это дает несколько реализаций, приводящих к выбору (часто также реализации с открытым исходным кодом), плюс поведение имеет тенденцию быть очень хорошо определенным.

Это поможет вам в сценарии сопровождения, который, надеюсь, ваш код тоже со временем закончится. Хорошо написанный код живет вечно :)

В этом конкретном сценарии я бы предложил JSF. Я пробовал только Apache версии 1.1, но мне было больно работать поверх JSP. Вскоре мы его пересмотрим - я ожидаю рассмотреть возможность использования JSF в фэйслетах.

person Thorbjørn Ravn Andersen    schedule 17.04.2009
comment
Я бы сказал, что выбор спецификации Sun не так важен, поскольку многие стандарты де-факто (Struts, Hibernate, Spring, Log4j и т. Д.) Были спецификациями Sun, но получили широкое распространение благодаря своей мощности и полезности. Во всяком случае, эти успешные проекты позже привели к созданию стандартов, когда-то проверенных, что явно не относится к JSF. - person Brian Laframboise; 18.08.2009
comment
Изменить: ... были НЕ спецификации Sun ... - person Brian Laframboise; 18.08.2009
comment
Я говорил долго. Какую из упомянутых вами фреймворков вы ожидаете получить через 10 или 20 лет? Код имеет свойство жить вечно. - person Thorbjørn Ravn Andersen; 18.08.2009
comment
Голос против? Сказать, что долгосрочное обслуживание важно? И JSF сделал это в JEE 6 ... Ну да ладно. - person Thorbjørn Ravn Andersen; 08.09.2010
comment
Проголосуйте за меня. Я выбрал Seam 2 / JSF 1.x, потому что считал, что в конечном итоге Seam приведет к переходу на JSF. Это произошло с JSF2 / CDI. - person Joshua Davis; 12.09.2013
comment
Вы бы порекомендовали ограничиться использованием технологий, поддерживаемых спецификацией Sun? - Не поймите меня неправильно, я любил Sun (когда она была рядом), но я предполагаю, что ваша политика означала, что вы маршировали по обрыву со всеми другими леммингами с Sun, выпустив (развязав) самую нелепую технологию, которую когда-либо видели в мире Java : EJBs - EJB-компоненты - это причина, по которой вы должны подвергать сомнению все и ничего не предполагать, независимо от того, кто это создает. - person Volksman; 12.10.2016
comment
@Volksman, это плохой мастер винит инструмент. Проблема с Java EE заключается в том, что она изначально была разработана для обеспечения относительно прозрачной работы на нескольких JVM. К сожалению, для Java EE это не типичный вариант использования. - person Thorbjørn Ravn Andersen; 12.10.2016
comment
@ ThorbjørnRavnAndersen Я потерял дар речи после вашего оскорбления в униформе ... ну, не совсем: очевидно, что вы человек, который делает серьезные предположения, не задействуя в первую очередь свой мозг - я люблю Java EE - потратил последние 20 лет на создание систем, которые принесли клиентам миллионы $ с ним. Внимательно прочтите то, что я сказал: я считаю, что прислушиваюсь к вашему совету слепо использовать все, что поддерживается спецификацией Sun, используя EJB 1 как пример, возможно, худшей технологии Java КОГДА-ЛИБО. Вам не нужно было быть плохим мастером, чтобы ненавидеть EJB - вам просто нужно было не иметь лоботомии, чтобы ненавидеть его. - person Volksman; 13.10.2016
comment
@Volksman Давайте сначала вернемся к фактической формулировке моего ответа, потому что, похоже, вы, возможно, не поняли ее, прежде чем комментировать: В долгосрочной перспективе я бы рекомендовал .... Другими словами, когда вы имеете дело с проектами, которые, как ожидается, будут иметь долгую жизнь. Я предполагаю, что вы все еще можете найти поставщика СЕГОДНЯ, продающего и поддерживающего контейнер Java EE, который можно было бы использовать для ваших решений EJB1. Для некоторых это очень важно. Тем не менее, называть других леммингов прямо на ровном месте не очень вежливо, в первую очередь: - / - person Thorbjørn Ravn Andersen; 14.10.2016
comment
@ ThorbjørnRavnAndersen, честно говоря, вы действительно думаете, что кто-нибудь, кроме лемминга, выберет EJB1? У многих людей не было выбора, но это не их вина - лица, принимающие решения, которые понимали эту технологию (хотя я боюсь, что часто лица, принимающие решения, технологически невежественны), а затем все же выбирали ее для своей организации только потому, что она имела какое-то `` официальное '' одобрение - лемминги ! :) - person Volksman; 14.10.2016
comment
@Volksman Вы все еще не поняли сути. Даже если данная технология абсолютно фантастична, архитектор может выбрать что-то другое, гораздо менее фантастическое, потому что проблемы шире, чем то, что может представить себе один ограниченный разработчик в своем маленьком мире. Но, я укусил, что вы порекомендуете для сценария, когда желаемый срок службы решения составляет десятилетия? Что бы вы порекомендовали 10 лет назад? 20? - person Thorbjørn Ravn Andersen; 14.10.2016

Я довольно часто использовал Wicket и GWT. Так и не научился любить Уикета.

Мое эго писало об этом в блоге http://salk31.blogspot.com/2009/07/wicket-ajax.html

Взгляд на GWT 2.0 uiBinder сегодня напомнил мне, как раздражало в Wicket сопоставлять дерево компонентов XML с деревом, созданным в Java. Мне кажется, что GWT по этому поводу выглядит намного лучше.

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

person salk31    schedule 28.10.2009
comment
Это зависит от того, насколько вы цените свой IP. С Wicket ваш код / ​​IP остается в безопасности и на стороне сервера. Если вы не очень цените свой IP-адрес, тогда, конечно, напишите большую часть своего кода пользовательского интерфейса на JS, чтобы ваши конкуренты могли его скопировать, отправив все это в браузер на некомпилированном, легко реверсивном JavaScript. Не поймите меня неправильно, Wicket широко использует JS для создания высокоэффективных и отзывчивых интерактивных пользовательских интерфейсов, но при этом не раскрывает ваши модели или алгоритмы предметной области. - person Volksman; 12.10.2016

Если вы рассматриваете только рынок труда, вам следует выбрать JSF. Но я верю, что будущее RIA принадлежит GWT и gwt-подобным клиентским технологиям.

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

person Gursel Koca    schedule 21.05.2010
comment
Прошло 6 с лишним лет спустя, вы все еще думаете, что GWT владела этим будущим? - person Mike Braun; 26.11.2016
comment
Нет, не знаю ... JavaScript доминировал на рынке ... Но часть моего предвидения оказалась верной; на рынке доминировали клиентские технологии. Сложность GWT напугала большую часть разработчиков. - person Gursel Koca; 06.12.2016

Я знаю, что это немного поздно, но по Framewrok уже есть много сравнений, особенно это, которое произошло во время Devox 2010 conf:

http://www.devoxx.com/display/Devoxx2K10/Comparing+JVM+Web+Frameworks

Это должно помочь вам сделать выбор :)

person Jean-Rémy Revy    schedule 13.09.2012

Я начал с JSF (1.1 и 1.2), и это было настолько болезненно, что я решил изменить в следующих проектах. Я немного поработал и решил попробовать Wicket, и это было очень приятно. Также я пробовал JSF 2, но все равно.

Обе они являются компонентными фреймворками, но с Wicket все просто, а с JSF - полная неразбериха.

Калитка над JSF:

  • В Wicket HTML есть HTML. JSF имеет свои собственные теги разметки. Таблица h: dataTable (для таблиц) - это ерунда. Поверьте, Sun Engineers приходилось напиваться, когда это проектировали.
  • В Wicket такие вещи, как безопасность,
  • При использовании JSF на панели навигации отображается предыдущий URL-адрес. Действительно странно.
  • JSF кажется мне очень тяжелым, а с библиотеками вроде Rich или Prime еще больше.
  • Иногда кажется невозможным узнать, что происходит. Вы всегда в конечном итоге кричите на свой компьютер, потому что не знаете, почему работает JSF.

JSF через Wicket:

  • В Wicket вы собираетесь написать больше Java (привязка с HTML). По крайней мере, ваша IDE будет обеспечивать поддержку рефакторинга и проверки.
  • Управление ресурсами в Wicket немного сложно.
  • Для JSF гораздо больше документации и поддержки.

Один из распространенных недостатков заключается в том, что размер сеанса является проблемой (потому что там хранятся графические компоненты).

В общем, если вам нужно выбирать только между Wicket и JSF, у меня нет сомнений, Wicket.

person polypiel    schedule 13.09.2012
comment
HTML == HTML в калитке? Да, но не забывайте, что вам нужно отразить все дерево компонентов в Java и убедиться, что оно синхронизировано. Это большая цена, которую нужно заплатить, и, следовательно, выгода, которая вводит в заблуждение. В JSF вы определяете дерево один раз и только один раз в шаблоне представления. Facelets также имеют режим HTML (см. Страницу википедии Facelets), а JSF 2.2 имеет сквозные элементы. - person Mike Braun; 03.11.2012
comment
Панель навигации показывает предыдущий URL ?! Это только если вы используете правила навигации без перенаправления. Но 1. Вам не нужно использовать правила навигации и 2. Вы должны использовать шаблон PRG (получение после перенаправления) или простые ссылки на основе получения. Кажется, ваш опыт основан на старой версии JSF. - person Mike Braun; 03.11.2012
comment
Тяжеловес JSF по сравнению с Wicket ??? Да, верно ... JSF использует меньше ресурсов (меньше процессора и меньше памяти), чем Wicket. Проверяйте тесты, например, ждите по всему миру. Опять же, ваш опыт, похоже, связан с древними версиями JSF, в которых еще не было частичного сохранения состояния. - person Mike Braun; 03.11.2012
comment
@MikeBraun Я никогда не считал, что зеркалирование дерева компонентов в Java является серьезным бременем для Wicket. Существует интерфейс ComponentResolver, который можно переопределить. Мы используем это, чтобы позволить разметке виртуально управлять сборкой компонентов. Мы предоставляем список всех доступных компонентов, а затем разметку можно изменять по желанию, и соответствующие компоненты добавляются в соответствии с указаниями разметки, поэтому предоставление графа компонентов Java, соответствующего разметке, происходит полностью автоматически. Также Wicket 7 теперь добавляет очередь компонентов, которая упрощает управление Java. - person Volksman; 13.10.2016

JSF устарел (JSF даже не указан как фреймворк для сравнения, когда евангелисты сравнивают или говорят о веб-фреймворках в 2010 году).

Теперь полноценные крупномасштабные приложения создаются с использованием GWT, YUI, JQuery и т. Д.

Прочитать несколько статей через гугл и выше будет очевидно.

(ВСЕ ЗАДАНИЯ на JSF предназначены для поддержки устаревших приложений).

person daud    schedule 04.05.2010
comment
Интересный. ИМХО все они устареют через 2 года. - person Victor Ionescu; 14.01.2011
comment
Хотите указать ссылку на источник этой информации? - person rustyx; 26.02.2011
comment
Насколько мне известно, это неточно. - person Danny C; 08.05.2011
comment
Это просто неправда. JSF2 сейчас отсутствует и определяет Facelets как технологию просмотра, а JSP как технологию просмотра не поддерживает. - person Joshua Davis; 12.09.2013
comment
И 8 лет спустя JSF все еще жив, обновляется, запрашивается и развивается. - person magallanes; 30.06.2018