Wybierasz teraz Java Web Framework? [Zamknięte]


149

jesteśmy na etapie planowania migracji dużej witryny internetowej, która jest zbudowana na niestandardowym frameworku mvc, do platformy internetowej opartej na Javie, która zapewnia wbudowaną obsługę Ajax, treści multimedialne, mashup, układ oparty na szablonach, walidację, maksymalny html / separacja kodu java. Grails wyglądał na dobry wybór, jednak nie chcemy używać języka skryptowego. Chcemy nadal używać java. Układ oparty na szablonach jest głównym problemem, ponieważ zamierzamy używać tej aplikacji internetowej z wieloma witrynami o podobnej funkcjonalności, ale radykalnie różnym wyglądzie i działaniu.

Czy rozwiązanie oparte na portalu dobrze pasuje do tego problemu?

Wszelkie spostrzeżenia dotyczące używania „Spring Roo” lub „Play” będą bardzo pomocne.

Znalazłem podobne posty, takie jak ten , ale ma ponad rok. W międzyczasie sytuacja na pewno się zmieniła!

EDYCJA 1: Dzięki za świetne odpowiedzi! Ta strona staje się najlepszym pojedynczym źródłem informacji dla programistów w okopach. Spodziewałem się jednak więcej informacji na temat korzystania z duetu portal-cms. Jahia wygląda dobrze. Coś podobnego?


1
„nie chcemy używać języka skryptowego”, szkoda, dlaczego mogę zapytać? jeśli podoba Ci się framework Play, powinieneś wypróbować JRuby z Railsami. To nie jest zwykła Java, ale bardzo łatwo jest wywołać klasy Java z JRuby.
Łukasz

2
Grails (czyli Groovy) gra bardzo dobrze w Javie, nie ma się czego bać.
Erich Kitzmueller

4
@hbagchi: Po prostu ciekawy; 4 miesiące później, z którego frameworka skorzystałeś? Zadowolony z tego?
Jonik

1
czy to nie jest pytanie typu „wiki społeczności”?
mickthompson,

11
„ale ma więcej niż rok. Rzeczy na pewno się zmieniły w międzyczasie!” ... O tak, broń Boże, abyś używał technologii, która ma więcej niż 12 miesięcy! W międzyczasie z pewnością wynaleziono Silver Bullet ... :-)
ObiWanKenobi

Odpowiedzi:


146

Czy rozwiązanie oparte na portalu dobrze pasuje do tego problemu?

Osobiście trzymałbym się z daleka od dużych, grubych rozwiązań portalowych (często zabijają one produktywność). Słyszałem dobre rzeczy o Gatein, ale nie mam z tym żadnego doświadczenia.

Wszelkie spostrzeżenia dotyczące używania „Spring Roo” lub „Play” będą bardzo pomocne.

O Spring Roo czytałem poprzednie odpowiedzi, takie jak Spring roo Vs (Wicket and Spring) i inne rzeczy w Internecie, ale nadal nie jestem przekonany (może nie rozumiem), nie jestem pewien jego dojrzałości i, co ważniejsze, naprawdę zastanawiam się, co robi SpringSource z Grails i Roo (nie, Grails vs Roo - dlaczego SpringSource promuje dwie bardzo podobne technologie? nie przekonuje mnie, że obie przetrwają).

Nie mogę wiele powiedzieć o Play. Widziałem demo jak wszyscy, ale chciałbym przeczytać opinie z życia. Do tego czasu poczekam.

Znalazłem podobne posty (...). W międzyczasie sytuacja na pewno się zmieniła!

Tak i nie :) Ale wejdźmy w ramy prezentacji, do diabła: nie ma jednej odpowiedzi na Twoje pytanie (jak rok temu), są tam dziesiątki frameworków i nie ma wyraźnego zwycięzcy. Wystarczy przytoczyć kilka:

  • JSF: Wielu sceptyków na temat tego frameworka opartego na komponentach, w tym ja, więc nie jestem najlepszy, aby o tym mówić, ale ...
  • JSF 2 (+ CDI / Weld): Sceptycy JSF są zachęcani ( przez Gavina Kinga ) do „ponownego spojrzenia”. Rzeczywiście, uważam, że JSF 2 to duże ulepszenie, szczególnie jeśli chodzi o CDI, ale ... wciąż jest całkiem nowy (rozumiem, brakuje mu informacji zwrotnych). Jeśli chcesz korzystać z Java EE 6, sprawdź to.
  • Wicket: Kolejna platforma oparta na komponentach, której poświęca się więcej uwagi. Słyszę głównie dobre rzeczy: prostsze niż JSF, ładny projekt, wysoka testowalność, przyjazny dla projektantów HTML, itp. Może ci się spodobać.
  • Tapestry: Po prostu nie (zobacz Dlaczego przestałeś używać Tapestry? )
  • Struts 2, Spring MVC, Stripes: frameworki oparte na działaniu. Wszystko przyzwoite i zaspokoi twoje potrzeby (osobiście lubię Stripes i jego konwencję nad podejściem konfiguracyjnym, zobacz Stripes vs. Struts2, aby się zorientować ).
  • GWT, Flex, Grails: To może nie jest to, czego szukasz. Naprawdę nie mogę mówić o (ostatnich wersjach) Flex i GWT, ale wiem, że Grails ma kilku fanów .

Właściwie proponuję przyjrzeć się prezentacjom Matta Raible'a , naprawdę wykonał świetną robotę porównując frameworki internetowe, pokazując ich mocne i słabe strony, gromadząc fakty i liczby, pokazując trendy ... Polecam:

Naprawdę, spójrz na te prezentacje, pomogą ci znaleźć odpowiednią strukturę (nie ma unikalnej odpowiedzi, ale możesz ograniczyć wybór przez eliminację) i mogą zmienić twój punkt widzenia.


Dobra robota, wycofałem się :). +1
Adeel Ansari

Ostatnia sesja Matta z java web f / ws była okropna. Jeśli pamiętam, kolumny miały praktycznie ten sam wynik, znacznie bogatszy, mocniejszy f / ws. Nie ma mowy, żeby ktokolwiek mógł uznać coś tak prostego jak rozpórki, godne wyniku, który jest tylko kilka punktów za GWT lub Wicket.
mP.

3
Tak, zdaję sobie sprawę, że wielu osobom nie podobała się moja „matryca” lub moja logika oceniania. Ostatecznie chciałem po prostu podkreślić technikę wyboru frameworka internetowego. Możesz przeczytać o logice stojącej
Matt Raible

Prezentacja Matta Raible o porównaniu JSF, Spring MVC, Stripes, Struts 2, Tapestry and Wicket jest rzeczywiście dość stara ...
Nerrve

1
@iberck, ostatnio eksperymentowałem z AngularJS. Szczerze mówiąc, uważam, że bez przesady będzie to cień większości, jeśli nie WSZYSTKICH obecnych frameworków internetowych. Jest to po prostu framework JS po stronie klienta, dzięki czemu możesz łatwo i „wydajnie” pobierać dane z serwera za pomocą REST. Wypróbuj, to wstrząśnie
Muhammad Gelbana

41

Używam Spring 3 i Jquery przez jakiś czas, ale usłyszałem o Play i spróbowałem. Naprawdę mi się podoba, Play świetnie łączy coś takiego jak PHP i ciężkie frameworki Java, takie jak Spring.

W zabawie najbardziej lubię:

  • Bardzo łatwo jest uruchomić aplikację do zabawy, musisz zajść dość daleko w kodowaniu i konfiguracji, aby uzyskać prostą aplikację crud na ekranie za pomocą Spring (chociaż Spring 3 znacznie to ułatwił).
  • Spring Security jest niesamowity, ale kosztem złożoności. Moduł bezpieczeństwa Play jest bardzo prosty i pokrywa potrzeby prawdopodobnie 90% dostępnych aplikacji.
  • Możesz dokonać zmiany kodu i nacisnąć przycisk odświeżania w przeglądarce, aby zobaczyć zmianę tak jak w przypadku PHP, zamiast wykonywać całą procedurę ponownego wdrażania za pomocą struktur opartych na serwletach.
  • Komunikaty o błędach są wyświetlane ładnie i niezbyt tajemniczo przez większość czasu. Play nadal musi popracować nad obsługą błędów
  • Jest dość prosty mechanizm wtyczek dla Play.
  • Trwałość obiektów jest wykonywana bardzo dobrze, ponieważ baza danych w pamięci i JPA są dostarczane z ramą, więc nie ma konfiguracji zewnętrznych narzędzi do utrwalania obiektów. Przejście z bazy danych w pamięci do rzeczywistego RDBMS to zmiana o jeden wiersz w pliku konfiguracyjnym.
  • Konfiguracja MVC jest wykonana bardzo dobrze. Klasa Model, którą rozszerzasz w celu tworzenia obiektów domeny, integruje się z menedżerem encji JPA. To nie tylko POJO.
  • Mapowanie adresów URL do kontrolerów jest proste i elastyczne, a wszystko to w jednym pliku „tras”.
  • Za każdym razem, gdy tworzysz projekt, Play obsługuje wszystkie zależności jar, a Play ma narzędzie do zaćmienia-ify (lub dowolnego IDE, które lubisz), aby importować go bezpośrednio do Twojego ulubionego IDE.

Czego nie lubię w Play

  • Dokumentacja nie jest jeszcze dostępna, nadal istnieje wiele nieudokumentowanych funkcji.
  • Framework jest serwerem, więc musisz przeznaczyć port dla każdej aplikacji. Myślę, że ktoś pracuje nad wtyczką wirtualnego hosta, ale jeszcze nie widziałem jej w akcji.
  • Jest młody, projekt jest niesamowity, a technologia niesamowita, ale naprawdę potrzebuje więcej programistów. Bardzo chciałbym poświęcić temu trochę czasu, zobaczymy.

17

Dla mnie najlepszym wyborem jest Wicket . Wyraźne oddzielenie znaczników i kodu Java. Bardzo łatwe w pisaniu i obsłudze komponenty. Prosty w użyciu Ajax, testowalność. Możesz debugować bezpośrednio na swoich stronach / komponentach i nie otrzymywać zaszyfrowanych komunikatów o błędach z implementacji JSF;)

Istnieje również dobra furtka porównawcza <--> JSF pod względem wydajności


4
+1 Nie wspominając o czystej orientacji OOP z dziedziczeniem, polimorfizmem i kompozycją. Ponadto pliki XML-config za darmo!
Xavi López

3
Ciekawe, że ludzie tutaj głosują, ponieważ nie podoba im się sugerowany schemat. Nie tylko moja odpowiedź Wicketa, prawie wszyscy mają głosy
negatywne

13

Trzy najlepsze wybory dla mnie to (alfabetycznie):

One:

  • mają dobre wsparcie dla AJAX
  • pozwalają tworzyć rzeczywiste witryny internetowe, a nie aplikacje (takie jak GWT)
  • stabilny, dobrze udokumentowany, szeroko stosowany
  • MVC
  • czysta Java
  • łatwa integracja ze Springiem jako oprogramowaniem pośrednim

17
Nie mam pojęcia, jak można twierdzić, że JSF można wykorzystać do „tworzenia rzeczywistych witryn internetowych”. Wszelkie ramy, które wymuszają użycie POST, natychmiast tracą na tym względzie.
Stefan Tilkov

3
Stworzyłem „rzeczywiste strony internetowe” za pomocą JSF i korzystałem z takich bez żadnych problemów. Ponadto używanie POST jest wymuszane tylko wtedy, gdy coś publikujesz. Zawsze możesz korzystać z prostej nawigacji GET. Teoretycznie używanie GET podczas modyfikowania zasobu jest błędne, prawda?
Bozho

plus, musielibyście również zlekceważyć Pascala za sugerowanie JSF;)
Bozho

3
Bez obrazy, ale brzmi to jak lista „rzeczy”, które widziałeś lata temu, więc jestem po prostu zaskoczony, że ją widzę. Z mojego doświadczenia wynika, że ​​od tamtego czasu większość odeszła od tych błędów. Przypuszczam, że jeśli jesteś już ekspertem w tym zakresie, byłby to doskonały wybór, ale martwiłbym się o programistów O&M, którzy będą musieli przejąć kontrolę po opuszczeniu projektu przez ekspertów. Nikt już tak naprawdę nie uczy się tych rzeczy IMO.
Manius

1
Ta linia komentarzy jest rzeczywiście trochę zabawna. JSF może być oczywiście doskonale używany w witrynach internetowych i ma pierwszorzędną obsługę zarówno GET, jak i POST. Skorzystaj z tego, co jest najbardziej odpowiednie w danej sytuacji. Rzeczywiście, jak wskazuje Bozho, jeśli modyfikuje zasób, nie używaj GET, w przeciwnym razie możesz to zrobić.
Arjan Tijms


10

W przeciwieństwie do innych odpowiedzi, chciałbym zwrócić uwagę na wady (IMHO) popularnych frameworków internetowych:

JSF2 - wydany i już w wieku. Wciąż tylko kilka wiadomości / artykułów / postów na blogach / doświadczeń. Jestem sceptyczny. Wciąż czekam na kolejną główną wersję Richfaces / Icefaces, która w pełni obsługuje jsf 2 - obecnie można pobierać tylko wersje alfa.

Struts 2 - wydaje się być dobrą rzeczą tylko wtedy, gdy nadal polegasz na Struts i chcesz zrefaktoryzować większość swojego kodu. W przeciwnym razie: nie.

GWT - nie podoba mi się podejście single-page i java-> javascript. Nie jestem pewien, czy jedna sesja - wiele widoków / okien można łatwo osiągnąć. Dla mnie ten framework powinien być używany dla ogromnych użytkowników, bogatych w jedno okno aplikacji internetowych.

Furtka - Niezłe podejście, ale trochę rozwlekłe i za mało dostępnej dokumentacji (z wyjątkiem dobrej furtki w książce akcji, ale obejmuje tylko 1.3). Brakuje mi też dużych projektów, które są na nim zbudowane. I obecnie nie widzę, dokąd zmierza droga furtki lub czy została już doprowadzona do ślepego zaułka.

Spring MVC - jeszcze tego nie próbowałem, ale musisz uwzględnić wiele słoików (wiosenny bałagan) w swojej ścieżce klas, aby poprawnie działać z tym frameworkiem. Opiera się na JSP (w większości projektów), które uważam za martwe. Otrzymujesz tylko czysty framework MVC - wszystkie inne rzeczy (ajax i inne) muszą być zaimplementowane / zintegrowane.

Stripes - Mały i ładnie zaprojektowany framework MVC, ale za mało dokumentacji, za mało zatwierdzeń / zatwierdzających, za mało wydań, za mniej wsparcia branżowego, za mniej aktywności na listach mailingowych.

Ciekawi mnie też, czy przegapiłem jakiś ważny framework (celowo zostawiłem Tapestry), który może być opcją dla Ciebie (a także dla mnie).


Odkryłem, że najlepszy sposób radzenia sobie z tym jest podobny do tego, co zrobiły frameworki internetowe Pythona: Wybierz i wybierz spośród najlepszych. Na przykład: Wiosna + JAX-RS
Adam Gent

Twoje komentarze na temat GWT są błędne. Dość łatwo jest mieć wiele oddzielnych stron, a nie jedną wielką rzecz. Wstaw link do innej strony, aby rozpocząć kolejną „akcję” i wszystko dobrze.
mP.

Mówię też o wielu oknach (lub kartach). Czy naprawdę możliwe jest jednoczesne korzystanie z więcej niż jednego okna przy użyciu tej samej sesji?
MRalwasser

1
+1 Dlaczego ten post otrzymał 2 negatywne głosy? Takie sceptyczne opinie są równie ważne (jeśli nie bardziej) niż pozytywne! A te wydają mi się konstruktywne.
Piotr Sobczyk

8

Z JAX-RS odniosłem wielki sukces . Jest to jedyna platforma WWW w języku Java, która ma jakąś specyfikację JSR i wiele implementacji innych niż specyfikacja serwletu i portletu (chociaż może to być złe).

Jedną z wad i zalet Javy jest to, że można wybierać i dopasowywać frameworki (python również ma tę funkcję / problem). To miłe, ponieważ nie musisz wkładać wszystkich jajek do jednego koszyka.

Oto ogólny przepis dotyczący stosu aplikacji internetowych w języku Java:

Javascript / Flash + obsługa żądań / odpowiedzi + wstrzykiwanie zależności + trwałość

Javascript: JQuery, Prototype, Dojo

Żądanie / odpowiedź: Spring MVC, Stripes i mój ulubiony JAX-RS (Jersey, Apache CXF)

Dependency Injection: Spring, Guice

Trwałość: JPA (hibernacja, przechowywanie aplikacji Google), hibernacja, JDO i więcej.

Odniosłem również wielki sukces, używając AspectJ do sprawiania, że ​​Java nie jest do niczego. Używając miksów @Configurable Springa i ITD AspectJ, możesz uzyskać Railsy, ​​takie jak obiekty Domain (to jest w rzeczywistości to, co robi Roo, ale nie potrzebujesz do tego Roo).


4
Zgadzam się. Ustawienie własnego stosu zajmuje więcej czasu, ale wtedy dostajesz dokładnie to, czego chcesz. Obecnie używam jQuery, Jersey, Spring i JPA2. JAX-RS jest świetny, ponieważ masz pełną kontrolę nad odpowiedzią.
Brian DiCasa

6

Przekonałem się, że paski są naprawdę skuteczne i zaskakująco lekkie ... ma być lżejsze niż rozpórki . Słyszałem od znajomych, którzy są pełnoetatowymi programistami internetowymi, że JSF nie jest wart zawracania sobie głowy, chociaż nie mam doświadczenia z pierwszej ręki i nie mogę tego poprzeć przykładami (!).


5

Spójrz na RESThub , który kieruje się tymi samymi zasadami, co Play! ale zaimplementowane przez ponowne użycie niektórych frameworków / narzędzi klasy korporacyjnej, takich jak Maven 3 / Spring 3 / Jersey / jQuery.

RESThub jest bardzo destrukcyjny w porównaniu do innych frameworków, ponieważ jest to zestaw narzędzi z pełnym stosem, ale bez żadnych ramek opartych na MVC lub serwletach po stronie serwera. Zamiast tego używa GUI opartego na interfejsie użytkownika jQuery, który wykorzystuje usługi sieciowe JAX-RS (REST) ​​i system szablonów JavaScript oparty na embeddedJs.

Serwery są bezstanowe i używamy HTML5 sessionStorage do utrzymywania sesji po stronie klienta. To podejście jest zaprojektowane pod kątem RIA i skalowalności.

Niektóre aplikacje demonstracyjne są dostarczane (nawet jeśli są w trakcie tworzenia).


3

JSF to fajny framewrok, ale JSF 1.2 brakowało wizji przez wiele lat po jego wydaniu. JSF 2.0 wygląda obiecująco i ma wiele nowych rzeczy dodanych do JSF 1.2, takich jak obsługa Ajax, fasety, obsługa adnotacji i domyślne konwencje (mniej XML), łatwe budowanie komponentów niż 1.2.

Dobrze integruje się również ze Springem, jeśli obawiasz się o obsługę DI.


2

Poparłbym zalecenie wiosenne. Nie jestem wielkim fanem GWT, nie sądzę, że crosscompiler Java -> Javascript jest jeszcze dostępny. Pracuję nad aplikacją AJAX, która wykorzystuje spring na serwerze i jQuery na kliencie. Chociaż technicznie nie ma wsparcia dla jQuery „po wyjęciu z pudełka”, zaimplementowanie wiosennego MVC AjaxView jest banalnie proste i zajęło około 25 linii kodu.


2

Może trochę późno na show, ale mają wspomnieć Vaadin . Programowanie odbywa się wyłącznie w języku Java, z podejściem opartym na komponentach. Komunikacja klient-serwer polega bardziej na interakcji użytkownika niż na transporcie danych, cała logika biznesowa znajduje się na serwerze.


1
Używam vaadin, po prostu nie nadaje się do budowania złożonej aplikacji.
Radan


1

Myślę, że to, czego szukasz, jest bliskie Jahii. Obsługuje GWT, Mashup, treści multimedialne itp.

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


Wygląda dobrze! Czy to oprogramowanie typu open source / bezpłatne dla przedsiębiorstw? Czy jest to szeroko stosowane?
kosmos

Ma wersję społecznościową ze wszystkimi podstawowymi rzeczami oraz wersję korporacyjną z kilkoma dodatkami itp. Sprawdź to miejsce jahia.com/jahia/Jahia
Syed M Shaaf



0

Coś, co zasługuje na więcej niż tylko pocisk, to frameworki RIA oparte na graczach. Dawny. Adobe Flex + Java (oczywiście może to w pewnym stopniu zależeć od tego, czy Twoja „witryna” jest naprawdę „witryną”, czy bardziej „aplikacją”, nie tworzyłbyś witryny bloga w Flex).

Ajax,

W sensie AJAX-as-modularne, Flex zazwyczaj używa AMF (binarny protokół, który jest bardziej wydajny niż protokoły używane w aplikacjach AJAX), chociaż możesz również robić rzeczy ściśle AJAX z Flex. Tak więc Flex obsługuje AJAX, ale także obsługuje „lepiej niż AJAX”.

treści multimedialne, mashup,

Ponieważ Flex działa na platformie „maszyny wirtualnej” Flash, myślę, że niewiele trzeba dodawać.

układ oparty na szablonach,

Nie jestem pewien, do czego dokładnie to prowadzi, ale brzmi to jak Flex mxml.

uprawomocnienie,

Obsługiwane oczywiście, chociaż możesz zdecydować się na zrobienie niestandardowych rzeczy, jeśli chcesz uzyskać fantazję. (Nie żebyś musiał). Fajną rzeczą jest to, że możesz uzyskać tak wyrafinowany, jak chcesz - lub nie.

maksymalna separacja kodu html / java

Nie można uzyskać większej separacji, używając podejścia programistycznego „maszyny wirtualnej”, takiego jak Flex / Silverlight / JavaFX. Pozwala to nie tylko na oddzielenie kodu prezentacji od warstwy logiki po stronie serwera i warstwy dostępu do danych - zapewnia to również ich oddzielenie. `` Wirtualizacja '' środowiska programistycznego zapewnia zgodność z różnymi przeglądarkami, spójną platformę docelową, brak obaw o nowe przeglądarki lub nowe wersje przeglądarek, które psują aplikację, najlepsze funkcje debugowania podobne do java oraz bardziej profesjonalny / imponujący produkt końcowy .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.