Вибір Java Web Framework зараз? [зачинено]


149

ми перебуваємо на етапі планування міграції великого веб-сайту, який побудований на спеціально розробленій платформі mvc, на веб-базу на базі Java, яка забезпечує вбудовану підтримку для ajax, мультимедійного контенту, мешанку, макетів на основі шаблонів, валідація, максимальний html / розділення коду Java. Грааль виглядав як хороший вибір, проте ми не хочемо використовувати мову сценаріїв. Ми хочемо продовжити використання Java. Макет на основі шаблонів є головною проблемою, оскільки ми маємо намір використовувати цей веб-додаток на кількох веб-сайтах з подібною функціональністю, але кардинально відрізняються зовнішнім виглядом.

Чи добре рішення на базі порталу підходить до цієї проблеми?

Будь-яка інформація про використання "Spring Roo" або "Play" буде дуже корисною.

Я знайшов подібні повідомлення, як цей , але це вже більше року. Речі напевно змінилися в середній час!

EDIT 1: Дякую за чудові відповіді! Цей сайт стає найкращим єдиним джерелом для інформації про програміста. Однак я очікував додаткової інформації про використання порталу cms duo. Jahia виглядає товарами. Щось подібне?


1
"ми не хочемо використовувати мову сценаріїв", прикро, чому, якщо я можу запитати? якщо вам подобається рамка Play, спробуйте JRuby з Rails. Це не звичайна Java, але зате легко зателефонувати до класів Java від JRuby.
Лука

2
Грааль (тобто Groovy) дуже добре грає з java, боятися не потрібно.
Еріх Кітцмюллер

4
@hbagchi: Просто цікаво; Через 4 місяці, в яку рамку ви пішли? Задоволений цим?
Джонік

1
це не питання про вікі спільноти?
mickthompson

11
"але це більше року. Поки що, звичайно, змінилися в середньому часі!" ... О так, не дай Бог, щоб ви використовували технології, яким більше 12 місяців! Срібна куля, безумовно, була вигадана тим часом ... :-)
ObiWanKenobi

Відповіді:


146

Чи добре рішення на базі порталу підходить до цієї проблеми?

Особисто я б тримався осторонь великих рішень порталу (вони часто є вбивцями продуктивності). Хоча я чув про Гатейн хороші речі, але реального досвіду з цим не маю.

Будь-яка інформація про використання "Spring Roo" або "Play" буде дуже корисною.

Про Spring Roo я читав попередні відповіді, такі як Spring roo Vs (Wicket and Spring) та інші речі в Інтернеті, але я все ще не переконаний (можливо, я не розумію цього), я не впевнений у його зрілості. І, що ще важливіше, мені дуже цікаво, що SpringSource робить з Grails та Roo (ні, Grails vs Roo - чому SpringSource підштовхує дві дуже схожі технології? Не переконує мене, що вони обидва виживуть).

Я не можу сказати багато про Play. Я бачив демонстрацію, як усі, але хотів би прочитати відгуки в реальному житті. До тих пір я зачекаю.

Я знайшов подібні дописи (...). Речі напевно змінилися в середній час!

Так і ні :) Але давайте ввійдемо в рамки презентації пекло: на ваше запитання немає однозначної відповіді (як рік тому), навколо є десяток кадрів і чіткого переможця. Просто навести декілька:

  • JSF: Дуже багато скептиків щодо цього компонента, що базується на компонентах, включаючи мене, тому я не найкращий, щоб про це говорити, але ...
  • JSF 2 (+ CDI / Weld): скептики JSF рекомендують ( Гевін Кінг ) "по-другому подивитися". Дійсно, я вважаю, що JSF 2 - це велике вдосконалення, особливо з CDI, але ... він все ще досить новий (зрозумійте, йому не вистачає компенсації). Якщо ви хочете прийняти Java EE 6, перевірте це.
  • Хвіртка: ще одна складова на основі компонентів, яка привертає все більше уваги. Я чую з цього приводу в основному хороші речі: простіший за JSF, приємний дизайн, висока перевіреність, зручність для дизайнера HTML тощо. Можливо, вам сподобається.
  • Гобелен: просто не (див. Чому ви перестали використовувати гобелен? )
  • Struts 2, Spring MVC, Stripes: Рамки, засновані на дії. Все пристойно і покриє ваші потреби (особисто мені подобається Stripes та його умовність щодо підходу до налаштування, див. Stripes vs. Struts2, щоб зрозуміти це).
  • GWT, Flex, Grails: Це, можливо, не те, що ви шукаєте. Я не можу реально говорити про (останні версії) Flex та GWT, але я знаю, що у Grails є кілька фанів .

Власне, я б запропонував поглянути на презентації Метта Рейблі , він справді зробив чудову роботу, порівнюючи веб-рамки, показуючи їх сильні та слабкі сторони, збираючи факти та цифри, показуючи тенденції ... Я рекомендую:

Дійсно, ознайомтеся з цими презентаціями, вони допоможуть вам знайти відповідну структуру (єдиної відповіді немає, але ви можете обмежити вибір шляхом усунення) і може змінити вашу точку зору.


Хороша робота, я зняв :). +1
Адель Ансарі

Нещодавній вистріл Метта з веб-жанрів Java був жахливим. Якщо я пригадую, підказки мали практично однаковий бал набагато багатших потужніших ж / с. Ні в якому разі ніхто не міг би розглянути щось настільки ж джейн, як стовпи, гідні балу, що лише на кілька очок позаду GWT або Wicket.
мП.

3
Так, я розумію, що небагато людей не сподобалось моїй "матриці" чи моїй логіці щодо її оцінок. Зрештою, те, що я сподівався зробити з цією матрицею, було просто виділити техніку вибору веб-рамки. Про логіку моїх оцінок ви можете прочитати в наступному дописі в блозі: raibledesigns.com/rd/entry/how_i_calculated_ratings_for
Метт Рейвіл

Презентація Метта Рейбіла про порівняння JSF, Spring MVC, Stripes, Struts 2, Tapestry і Wicket дійсно досить стара ...
Nerrve

1
@iberck, я нещодавно експериментував з AngularJS. Чесно кажучи, я вважаю, що це затінить більшість, якщо не ВСІ поточні веб-рамки без перебільшення. Це просто JS-рамка для клієнтської сторони, тоді ви можете легко і ефективно "отримати" свої дані з сервера за допомогою REST. Спробуйте, це заграє
Мухаммед Гельбана

41

Я деякий час використовував Spring 3 та Jquery, але почув про Play і пострілив. Мені дуже подобається, Play прекрасно вписується між чимось на зразок PHP та важкими рамками Java, такими як Spring.

Найбільше мені подобається грати:

  • Дуже легко дістати програму для відтворення на землі, вам доведеться пройти досить далеко з кодуванням та конфігурацією, щоб отримати простий сирий додаток на екрані з Spring (хоча Spring 3 зробила це набагато простіше).
  • Весняна безпека є приголомшливою, але вона приходить ціною складності. Модуль захисту Play дуже простий і охоплює потреби, ймовірно, 90% програм там.
  • Ви можете зробити зміну коду та натиснути оновити у браузері, щоб побачити зміни, як у PHP, замість того, щоб робити все, що потрібно перепланувати за допомогою серверт-каркасів.
  • Повідомлення про помилки відображаються чудово та не так виразно у більшості випадків. Гра все ще повинна працювати над їх обробкою помилок
  • Існує плагін-механізм для Play, який досить простий.
  • Наполегливість об'єкта робиться дуже чудово тим, що база даних пам'яті та JPA поставляється з рамкою, тому немає конфігурації інструментів збереження зовнішніх об'єктів. Перехід від бази даних пам'яті до власне RDBMS - це зміна конфігураційного файлу в одному рядку.
  • Установка MVC зроблена дуже добре. Клас Model, який ви розширюєте для створення об’єктів домену, інтегрується з менеджером об'єктів JPA. Вони не просто POJO.
  • Зіставлення URL-адрес контролерам є простим і гнучким, і все це в одному файлі "маршрутів".
  • Щоразу, коли ви створюєте проект, Play обробляє всі залежності від jar, і Play має утиліту для затемнення ify (або будь-якого IDE, який вам подобається), щоб він імпортував безпосередньо у ваш улюблений IDE.

Те, що мені не подобається в Play

  • Документація поки ще не існує, багато незадокументованих функцій все ще існує.
  • Рамка - це сервер, тому вам потрібно присвятити порт кожній програмі. Я думаю, що хтось працює над віртуальним плагіном хоста, але я його ще не бачив у дії.
  • Він молодий, проект приголомшливий, а технології приголомшливі, але йому справді потрібні ще кілька розробників. Я хотів би присвятити це деякому часу, побачимо.

17

Кращим вибором для мене є вікет . Чітке розділення розмітки та коду Java. Дуже легко писати та використовувати компоненти. Простий у використанні Ajax, тестабельність. Ви можете налагоджувати безпосередньо на своїх сторінках / компонентах і не отримувати критичних повідомлень про помилки від вашої реалізації JSF;)

Також є хороша хвіртка порівняння <--> JSF з точки зору продуктивності


4
+1 Не кажучи вже про чисту орієнтацію ООП із спадщиною, поліморфізмом та складом. Також XML-конфігураційні файли безкоштовно!
Xavi López

3
Цікаво, що люди тут беруть участь у тому, що їм не подобаються запропоновані рамки. Не тільки моя відповідь на Вікет, майже всі мають голоси, які були вниз.
Берт,

13

Три найкращі варіанти для мене (в алфавітному порядку):

Вони:

  • мати хорошу підтримку Ajax
  • дозволяють робити фактичні веб-сайти, а не програми (наприклад, GWT)
  • стабільний, добре задокументований, широко використовується
  • MVC
  • чиста Java
  • проста інтеграція з Spring як середнім програмним забезпеченням

17
Я поняття не маю, як можна стверджувати, що JSF можна використовувати для "створення фактичних веб-сайтів". Будь-яка основа, яка змушує використовувати POST, негайно втрачає в цьому плані.
Стефан Тілков

3
Я розробив "фактичні веб-сайти" з JSF, і використовував такі, без проблем. Крім того, використання POST примусове лише тоді, коли ви щось публікуєте. Ви завжди можете користуватися простою навігацією GET. Теоретично неправильно використовувати GET, якщо ви змінюєте ресурс, чи не так?
Божо

плюс, вам доведеться зняти Паскаль, а також запропонувати JSF;)
Божо

3
Без образи, але це звучить як список "речей", які ви бачили б років тому, тому я просто здивований, коли бачу це. На мій досвід, більшість з тих пір перейшли з цих помилок. Я вважаю, що якщо ви вже є експертом у цій галузі, вони будуть чудовим вибором, але я б переймався програмістами O&M, які повинні взяти на себе посаду після того, як експерти покинуть проект. Ніхто вже не вивчає цього матеріалу IMO.
Маній

1
Цей рядок коментарів дійсно трохи веселий. Зрозуміло, JSF прекрасно може використовуватися для веб-сайтів, і він має першокласну підтримку як для GET, так і для пошти. Використовуйте те, що найбільше підходить для ситуації. Дійсно, як вказує Божо, якщо він модифікує ресурс, не використовуйте GET, інакше сміливо це робіть.
Арджан Тіджмс


10

На відміну від інших відповідей, я хотів би виділити недоліки (IMHO) популярних веб-рамок:

JSF2 - Випущений та вже постарілий. Ще лише кілька новин / статей / публікацій блогу / досвіду. Я скептично. Ще чекаю наступного великого випуску Richfaces / Icefaces, який повністю підтримує jsf 2 - наразі можна завантажити лише альфа-версії.

Struts 2 - здається, що це лише добре, якщо ви все ще покладаєтесь на стійки і хочете переробити більшу частину коду. Інакше: Не варто.

GWT - Мені не подобається односторінковий і підхід java-> javascript. Я не впевнений, чи можна легко досягти одного сеансу - кілька переглядів / вікон. Для мене цей фреймворк слід використовувати для Інтернет-додатків, що мають багато вікон, що мають величезну кількість користувачів.

Хвіртка - приємний підхід, але трохи деталізованого та занадто мало доступної документації (за винятком хорошого калитки в книзі дій, але це стосується лише 1,3). Крім того, для мене не вистачає великих проектів, які будуються на цьому. І я наразі не бачу, куди їде дорога калитки чи вона вже загнана в глухий кут.

Spring MVC - Ще не пробували цього, але вам потрібно включити багато банок (весняний безлад) у ваш класний шлях, щоб правильно працювати з цією рамкою. І він покладається на JSP (у більшості проектів), який я вважаю вже мертвим. І ви отримуєте лише чисту рамку MVC - всі інші речі (ajax та інші) повинні бути впроваджені / інтегровані.

Stripes - Невеликий і приємно розроблений MVC-фреймворк, але занадто менше документації, занадто менше коммітетів / комітетів, занадто мало випусків, занадто менша підтримка галузі, занадто менше активності списку розсилки.

Мені також цікаво, якби я пропустив там основні рамки (навмисне я покинув Гобелен), який може бути варіантом для вас (а також і для мене).


Я знайшов найкращий спосіб впоратися з цим схожим з тим, що зробили веб-рамки Python: Виберіть і виберіть найкраще. Наприклад: Весна + JAX-RS
Адам Гент

Ваші коментарі щодо GWT неправильні. Досить просто мати багато окремих сторінок, а не одну велику річ. Вставте посилання на іншу сторінку, щоб розпочати чергову "дію" і все добре.
мП.

Я також говорю про кілька вікон (або вкладок). Чи дійсно можливо використовувати більше одного вікна, використовуючи один і той же сеанс одночасно?
MRalwasser

1
+1 Чому цей пост отримав 2 негативних голоси? Такі скептичні думки не менш важливі (якщо не більше), ніж позитивні! І ці мені здаються конструктивними.
Пьотр Собчик

8

Я мав великий успіх з JAX-RS . Це єдиний Java Web Framework, який має якусь специфікацію JSR та кілька реалізацій, окрім специфікації сервлетів та портлетів (хоча це може бути погано).

Єдина річ, яка погана і хороша в Java - це те, що ви можете вибирати і узгоджувати рамки (python також має цю особливість / проблему). Це приємно, бо не потрібно складати всі яйця в один кошик.

Ось загальний рецепт стека веб-додатків Java:

Javascript / Flash + запит / обробка відповідей + введення залежностей + стійкість

Javascript: JQuery, Prototype, Dojo

Запит / відповідь: Spring MVC, Stripes та мій улюблений JAX-RS (Джерсі, Apache CXF)

Впорскування в залежність: Весна, Гіс

Наполегливість: JPA (Hibernate, Google App storage), Hibernate, JDO та багато іншого.

Я також мав великий успіх у використанні AspectJ, щоб зробити Java «менше смоктати». Використовуючи мікс-файли Spring @Configurable та ITD AspectJ, ви можете отримати Rails як доменні об’єкти (це фактично те, що робить Роо, але для цього вам не потрібно Роо).


4
Я згоден. Для налаштування власного стека потрібно більше часу, але тоді ви отримуєте саме те, що хочете. Зараз я використовую jQuery, Jersey, Spring та JPA2. JAX-RS чудовий тим, що ви маєте повний контроль над тим, яка ваша відповідь.
Брайан Дікаса

6

Я знайшов смужки дійсно ефективними та дивно легкими .... вона має на меті бути більш легкою, ніж стійки . Я чув від друзів, які є штатними веб-розробниками, про те, що JSF не варто перейматися, хоча я не маю досвіду з перших вуст, і не можу підкріпити це прикладами (!).


5

Погляньте на RESThub , який дотримується тих же принципів, що і Play! але реалізовано шляхом повторного використання деяких корпоративних рамок / інструментів, таких як Maven 3 / Spring 3 / Jersey / jQuery.

RESThub дуже руйнівний порівняно з іншими фреймворками, оскільки це повний набір інструментів стека, але без будь-яких серверів MVC або фреймворків на основі сервлетів. Натомість він використовує інтерфейс інтерфейсу jQuery, що використовує веб-сервіси JAX-RS (REST) ​​та систему шаблонів Javascript на основі вбудованих Дж.

Сервери без стану, і ми використовуємо HTML5 sessionStorage для підтримки сеансу на стороні клієнта. Цей підхід є дизайном для RIA та масштабованості.

Деякі демонстраційні програми надаються (навіть якщо вони будуються).


3

JSF - це приємний кадр, але JSF 1.2 не вистачало бачення протягом багатьох років з моменту виходу. JSF 2.0 виглядає багатообіцяючим та має багато нових речей, доданих JSF 1.2, як підтримка ajax, фасети, підтримка анотацій та конвенції за замовчуванням (менше XML), просте складання компонентів, ніж 1.2.

Він також добре поєднується з Spring, якщо ви турбуєтеся про підтримку DI.


2

Я би другий весняний рекомендації. Я не є великим шанувальником GWT, я не думаю, що Java -> перехресний компілятор Javascript ще не існує. Я працюю над програмою AJAX, яка використовує spring на сервері та jQuery на клієнті. Незважаючи на технічну підтримку jQuery з технічної точки зору, технічна нестандартність, впровадження Spring-MVC AjaxView є мертвим простим і займає близько 25 рядків коду.


2

Може трохи запізнитися на шоу, але я мушу згадати Ваадіна . Програмування виконується виключно на Java, із підходом до компонентів. Зв'язок клієнт-сервер більше стосується взаємодії з користувачем, ніж транспортування даних, вся бізнес-логіка знаходиться на сервері.


1
Я використовую ваадін, це просто не добре для створення складного додатку.
Радан


1

Я думаю, що ти шукаєш щось близьке до Джахії. Він підтримує GWT, Mashups, Media Content і т.д.

http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html


Виглядає добре! Це відкритий код / ​​безкоштовний для підприємства? Це широко використовується?
космос

У ньому є версія для спільноти з усіма основними матеріалами та корпоративна версія з деякими доповненнями тощо. Перевірте це місце jahia.com/jahia/Jahia
Syed M Shaaf



0

Те, що заслуговує більше, ніж просто куля, - це рамки RIA на основі гравців. Вих. Adobe Flex + Java (Звичайно, це може дещо залежати від того, чи справді ваш "веб-сайт" є "сайтом" чи більше схожим на "додаток", ви б не робили веб-сайт блогу у Flex.)

ajax,

У сенсі AJAX як казкового слова, Flex зазвичай використовує AMF (двійковий протокол, який є більш ефективним, ніж протоколи, що використовуються програмами AJAX), хоча ви також можете робити AJAX суворо з Flex. Тож Flex підтримує AJAX, але також підтримує "краще, ніж AJAX".

багатий медіа-контент, мешуп,

Оскільки Flex працює на платформі Flash "віртуальна машина", я думаю, що мало чого додати.

макет на основі шаблонів,

Не впевнений, що саме це отримує, але це звучить як Flex mxml.

перевірка,

Підтримується звичайно, хоча ви можете вирішити зробити якісь спеціальні речі, якщо хочете пофантазувати. (Не те, що потрібно.) Приємне, що ви можете отримати настільки витончене, як хочете - чи ні.

максимальне розділення коду html / java

Ви не можете розлучитися, використовуючи підхід до розробки "віртуальної машини", як Flex / Silverlight / JavaFX. Це не просто дозволяє тримати ваш презентаційний код відокремленим від логіки та рівня доступу до даних на сервері - це забезпечує їх розділення. "Віртуалізуючи" ваше середовище розробки, ви отримуєте сумісність між веб-браузерами, стійку цільову платформу, не турбуєтесь про нові браузери чи нові версії браузера, що порушують вашу програму, вершина лінійки, що нагадує java-функції налагодження, та більш професійний / вражаючий вигляд кінцевого продукту .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.