Wählen Sie jetzt ein Java Web Framework? [geschlossen]


149

Wir befinden uns in der Planungsphase der Migration einer großen Website, die auf einem speziell entwickelten MVC-Framework basiert, auf ein Java-basiertes Webframework, das integrierte Unterstützung für Ajax, Rich Media-Inhalte, Mashup, vorlagenbasiertes Layout, Validierung und maximales HTML / bietet. Java-Code-Trennung. Grails sah nach einer guten Wahl aus, wir möchten jedoch keine Skriptsprache verwenden. Wir wollen weiterhin Java verwenden. Das vorlagenbasierte Layout ist ein Hauptanliegen, da wir beabsichtigen, diese Webanwendung mit mehreren Websites mit ähnlichen Funktionen, aber radikal unterschiedlichem Erscheinungsbild zu verwenden.

Passt eine portalbasierte Lösung gut zu diesem Problem?

Alle Einblicke in die Verwendung von "Spring Roo" oder "Play" sind sehr hilfreich.

Ich habe ähnliche Beiträge wie diesen gefunden , aber es ist mehr als ein Jahr alt. In der Zwischenzeit haben sich die Dinge sicherlich geändert!

EDIT 1: Danke für die tollen Antworten! Diese Seite wird zur besten Quelle für Programmiererinformationen. Ich hatte jedoch mehr Informationen über die Verwendung eines Portal-CMS-Duos erwartet. Jahia sieht gut aus. Etwas ähnliches?


1
"Wir wollen keine Skriptsprache verwenden", ist es eine Schande, warum, wenn ich fragen kann? Wenn Ihnen das Play Framework gefällt, sollten Sie JRuby with Rails ausprobieren. Es ist kein einfaches Java, aber es ist super einfach, Java-Klassen von JRuby aus aufzurufen.
Luke

2
Grails (dh Groovy) spielt sehr gut mit Java, es besteht kein Grund zur Angst.
Erich Kitzmüller

4
@hbagchi: Nur neugierig; 4 Monate später, mit welchem ​​Framework haben Sie sich entschieden? Zufrieden damit?
Jonik

1
Ist das nicht eine Community-Wiki-Frage?
Mickthompson

11
"Aber es ist mehr als ein Jahr alt. In der Zwischenzeit haben sich die Dinge sicherlich geändert!" ... Oh ja, Gott bewahre, dass Sie Technologien verwenden sollten, die älter als 12 Monate sind! Die Silberkugel wurde sicherlich in der Zwischenzeit erfunden ... :-)
ObiWanKenobi

Antworten:


146

Passt eine portalbasierte Lösung gut zu diesem Problem?

Persönlich würde ich mich von großen, fetten Portallösungen fernhalten (sie sind oft Produktivitätskiller). Ich habe zwar gute Dinge über Gatein gehört, aber ich habe keine wirklichen Erfahrungen damit.

Alle Einblicke in die Verwendung von "Spring Roo" oder "Play" sind sehr hilfreich.

Über Spring Roo habe ich frühere Antworten wie Spring Roo Vs (Wicket und Spring) und andere Dinge über das Internet gelesen, aber ich bin immer noch nicht überzeugt (vielleicht verstehe ich es nicht), ich bin mir nicht sicher, ob es ausgereift ist Und, was noch wichtiger ist, ich frage mich wirklich, was SpringSource mit Grails und Roo macht (nein, Grails vs Roo - warum SpringSource zwei sehr ähnliche Technologien vorantreibt? Überzeugt mich nicht, dass beide überleben werden).

Ich kann nicht viel über Play sagen. Ich habe die Demo wie jeder andere gesehen, aber ich würde gerne Feedback aus dem wirklichen Leben lesen. Bis dahin werde ich warten.

Ich habe ähnliche Beiträge gefunden (...). In der Zwischenzeit haben sich die Dinge sicherlich geändert!

Ja und nein :) Aber lasst uns die Hölle der Präsentations-Frameworks betreten: Es gibt keine einzige Antwort auf Ihre Frage (wie vor einem Jahr), es gibt Dutzende von Frameworks und keinen klaren Gewinner. Um nur einige zu nennen:

  • JSF: Viele Skeptiker über dieses komponentenbasierte Framework, einschließlich mir, daher bin ich nicht der Beste, der darüber spricht, aber ...
  • JSF 2 (+ CDI / Weld): JSF-Skeptiker werden ( von Gavin King ) aufgefordert, "einen zweiten Blick darauf zu werfen". In der Tat denke ich, dass JSF 2 eine große Verbesserung ist, insbesondere bei CDI, aber ... es ist noch ziemlich neu (verstehen Sie, es fehlt an Rückvergütung). Wenn Sie Java EE 6 nutzen möchten, probieren Sie es aus.
  • Wicket: Ein weiteres komponentenbasiertes Framework, das immer mehr Aufmerksamkeit erhält. Ich höre meistens gute Dinge darüber: einfacher als JSF, schönes Design, hohe Testbarkeit, HTML-Designer-freundlich usw. Es könnte Ihnen gefallen.
  • Tapisserie: Nur nicht (siehe Warum haben Sie die Verwendung von Tapisserie eingestellt? )
  • Struts 2, Spring MVC, Stripes: Aktionsbasierte Frameworks. Alles anständig und wird Ihre Bedürfnisse abdecken (persönlich mag ich Stripes und seine Konvention über den Konfigurationsansatz, siehe Stripes vs. Struts2 , um eine Vorstellung davon zu bekommen).
  • GWT, Flex, Grails: Diese sind vielleicht nicht das, wonach Sie suchen. Ich kann über (neuere Versionen) von Flex und GWT nicht wirklich sprechen , aber ich weiß , dass Grails tut haben einige Fans .

Eigentlich würde ich vorschlagen, einen Blick auf die Präsentationen von Matt Raible zu werfen. Er hat wirklich großartige Arbeit geleistet, um Web-Frameworks zu vergleichen, ihre Stärken und Schwächen aufzuzeigen, Fakten und Zahlen zu sammeln, Trends aufzuzeigen ... Ich empfehle:

Schauen Sie sich diese Präsentationen an, sie helfen Ihnen dabei, einen geeigneten Rahmen zu finden (es gibt keine eindeutige Antwort, aber Sie können die Auswahl durch Eliminierung einschränken) und können Ihre Sichtweise ändern.


Ein guter Job, ich habe mich zurückgezogen :). +1
Adeel Ansari

Matts kürzliches Shooting aus Java Web F / Ws war schrecklich. Wenn ich mich recht erinnere, hatten Streben praktisch die gleiche Punktzahl von viel viel reicheren, leistungsstärkeren F / Ws. Es gibt keine Möglichkeit, etwas so einfaches Jane wie Streben zu betrachten, die einer Punktzahl würdig sind, die nur wenige Punkte hinter GWT oder Wicket liegt.
mP.

3
Ja, mir ist klar, dass einige Leute meine "Matrix" oder meine Logik für ihre Bewertungen nicht mochten. Am Ende hatte ich gehofft, mit dieser Matrix einfach eine Technik zur Auswahl eines Webframeworks hervorzuheben. Sie können über die Logik hinter meinen Bewertungen in dem folgenden Blog-Beitrag lesen
Matt Raible

Matt Raibles Präsentation über den Vergleich von JSF, Spring MVC, Stripes, Struts 2, Tapestry und Wicket ist in der Tat ziemlich alt ...
Nerrve

1
@iberck, ich habe kürzlich mit AngularJS experimentiert. Ehrlich gesagt glaube ich, dass es die meisten, wenn nicht ALLE aktuellen Web-Frameworks ohne Übertreibung beschatten wird. Es ist einfach ein JS-Framework für die Client-Seite, dann können Sie Ihre Daten mithilfe von REST einfach und "effizient" vom Server abrufen. Probieren Sie es aus, es wird Ihre Welt rocken
Muhammad Gelbana

41

Ich benutze Spring 3 und Jquery schon eine Weile, habe aber von Play gehört und es ausprobiert. Ich mag es wirklich, Play passt hervorragend zwischen PHP und den leistungsstarken Java-Frameworks wie Spring.

Die Dinge, die ich am meisten am Spiel mag, sind:

  • Es ist sehr einfach, eine Spielanwendung auf den Weg zu bringen. Sie müssen mit Codierung und Konfiguration ziemlich weit gehen, um mit Spring eine einfache Rohanwendung auf dem Bildschirm zu erhalten (obwohl Spring 3 es viel einfacher gemacht hat).
  • Spring Security ist fantastisch, geht aber zu Lasten der Komplexität. Das Sicherheitsmodul von Play ist sehr, sehr einfach und deckt die Anforderungen von wahrscheinlich 90% der Anwendungen ab.
  • Sie können eine Codeänderung vornehmen und im Browser auf Aktualisieren klicken, um die Änderung wie bei PHP anzuzeigen, anstatt die gesamte Neubereitstellung mit Servlet-basierten Frameworks durchführen zu müssen.
  • Fehlermeldungen werden die meiste Zeit schön und nicht so kryptisch angezeigt. Play muss noch an der Fehlerbehandlung arbeiten
  • Es gibt einen Plugin-Mechanismus für Play, der ziemlich einfach ist.
  • Die Objektpersistenz ist sehr gut gelungen, da eine In-Memory-Datenbank und JPA mit dem Framework geliefert werden, sodass keine externen Objektpersistenz-Tools konfiguriert werden können. Der Wechsel von der In-Memory-Datenbank zu einem tatsächlichen RDBMS ist eine einzeilige Änderung in der Konfigurationsdatei.
  • Das MVC-Setup ist sehr gut gemacht. Die Modellklasse, die Sie zum Erstellen Ihrer Domänenobjekte erweitern, wird in den JPA-Entitätsmanager integriert. Sie sind nicht nur POJOs.
  • Das Zuordnen von URLs zu Controllern ist einfach und flexibel und alles in einer "Routendatei".
  • Wenn Sie ein Projekt erstellen, behandelt Play alle JAR-Abhängigkeiten und Play verfügt über ein Dienstprogramm, mit dem Sie das Projekt (oder eine beliebige IDE) verdunkeln können, sodass es direkt in Ihre bevorzugte IDE importiert wird.

Dinge, die ich an Play nicht mag

  • Die Dokumentation ist noch nicht vollständig vorhanden, es gibt noch viele undokumentierte Funktionen.
  • Das Framework ist der Server, daher müssen Sie jeder Anwendung einen Port zuweisen. Ich denke, jemand arbeitet an einem virtuellen Host-Plugin, aber ich habe es noch nicht in Aktion gesehen.
  • Es ist jung, das Projekt ist großartig und die Technologie ist großartig, aber es braucht wirklich mehr Entwickler. Ich würde gerne etwas Zeit darauf verwenden, wir werden sehen.

17

Die beste Wahl für mich ist Wicket . Klare Trennung von Markup und Java-Code. Sehr einfach zu schreibende und zu verwendende Komponenten. Einfach zu bedienendes Ajax, Testbarkeit. Sie können direkt in Ihre Seiten / Komponenten debuggen und erhalten keine kryptischen Fehlermeldungen von Ihrer JSF-Implementierung;)

Es gibt auch einen guten Vergleich Wicket <-> JSF in Bezug auf die Leistung


4
+1 Ganz zu schweigen von der reinen OOP-Orientierung mit Vererbung, Polymorphismus und Zusammensetzung. Auch XML-Konfigurationsdateien kostenlos!
Xavi López

3
Interessant, dass die Leute hier ablehnen, weil ihnen der vorgeschlagene Rahmen nicht gefällt. Nicht nur meine Wicket-Antwort, fast alle haben einige Abstimmungen.
Bert

13

Die drei wichtigsten Optionen für mich sind (alphabetisch):

Sie:

  • habe gute Ajax-Unterstützung
  • ermöglichen es Ihnen, tatsächliche Websites zu erstellen, keine Anwendungen (wie GWT)
  • stabil, gut dokumentiert, weit verbreitet
  • MVC
  • reines Java
  • einfache Integration mit Spring als Middleware

17
Ich habe keine Ahnung, wie man behaupten kann, dass JSF verwendet werden kann, um "tatsächliche Websites zu erstellen". Jedes Framework, das die Verwendung von POST erzwingt, verliert diesbezüglich sofort.
Stefan Tilkov

3
Ich habe mit JSF "aktuelle Websites" entwickelt und diese ohne Probleme verwendet. Darüber hinaus wird die Verwendung von POST nur erzwungen, wenn Sie etwas veröffentlichen. Sie können jederzeit die einfache GET-Navigation verwenden. Theoretisch ist es falsch, GET zu verwenden, wenn Sie eine Ressource ändern, nicht wahr?
Bozho

Außerdem müsstest du Pascal ablehnen, weil du JSF vorgeschlagen
hast

3
Nichts für ungut, aber das klingt nach einer Liste von 'Sachen', die Sie vor Jahren gesehen haben, also bin ich nur überrascht, sie zu sehen. Nach meiner Erfahrung haben sich die meisten seitdem von diesen Fehltritten entfernt. Ich nehme an, wenn Sie bereits ein Experte in diesen Bereichen sind, wären sie eine ausgezeichnete Wahl, aber ich würde mir Sorgen um O & M-Programmierer machen, die übernehmen müssen, nachdem die Experten das Projekt verlassen haben. Niemand lernt dieses Zeug mehr wirklich IMO.
Manius

1
Diese Reihe von Kommentaren ist in der Tat ein wenig komisch. JSF kann natürlich sehr gut für Websites verwendet werden und bietet erstklassige Unterstützung für GET und POST. Verwenden Sie das, was für die jeweilige Situation am besten geeignet ist. Wie Bozho angibt, verwenden Sie GET nicht, wenn eine Ressource geändert wird. Andernfalls können Sie dies gerne tun.
Arjan Tijms


10

Im Gegensatz zu anderen Antworten möchte ich die Nachteile (IMHO) beliebter Web-Frameworks hervorheben:

JSF2 - Freigegeben und bereits gealtert. Immer noch nur ein paar News / Artikel / Blogposts / Erlebnisse raus. Ich bin skeptisch. Ich warte immer noch auf die nächste Hauptversion von Richfaces / Icefaces, die jsf 2 vollständig unterstützt - derzeit können nur Alpha-Builds heruntergeladen werden.

Struts 2 - Scheint nur dann eine gute Sache zu sein, wenn Sie sich immer noch auf Struts verlassen und den größten Teil Ihres Codes umgestalten möchten. Sonst: Nicht.

GWT - Ich mag den Single-Page- und den Java-> Javascript-Ansatz nicht. Ich bin nicht sicher, ob eine Sitzung - mehrere Ansichten / Fenster leicht erreicht werden können. Für mich sollte dieses Framework für Single-Window-Rich-Internet-Anwendungen für Großbenutzer verwendet werden.

Wicket - Netter Ansatz, aber ein bisschen ausführlich und zu wenig Dokumentation verfügbar (außer dem guten Wicket im Aktionsbuch, aber dies deckt nur 1,3 ab). Außerdem fehlen mir große Projekte, die darauf aufbauen. Und ich kann derzeit nicht sehen, wohin die Straße des Wickets führt oder ob sie bereits in eine Sackgasse gefahren wurde.

Feder MVC - Ich habe dies noch nicht versucht, aber Sie müssen viele Gläser (Spring Mess) in Ihren Klassenpfad aufnehmen, um mit diesem Framework richtig arbeiten zu können. Und es basiert auf JSP (in den meisten Projekten), die ich bereits für tot halte. Und Sie erhalten nur ein reines MVC-Framework - alle anderen Dinge (Ajax und andere) müssen implementiert / integriert werden.

Streifen - Ein kleines und gut gestaltetes MVC-Framework, aber zu wenig Dokumentation, zu wenig Commits / Committer, zu wenige Releases, zu wenig Branchenunterstützung, zu weniger Mailinglistenaktivität.

Ich bin auch neugierig, ob ich da draußen ein wichtiges Framework verpasst habe (ich habe Tapestry absichtlich weggelassen), das eine Option für Sie (und auch für mich) sein könnte.


Ich habe festgestellt, dass der beste Weg, dies zu handhaben, dem ähnelt, was die Python-Webframeworks getan haben: Wählen Sie aus den Besten aus. Zum Beispiel: Spring + JAX-RS
Adam Gent

Ihre Kommentare zu GWT sind falsch. Es ist ziemlich einfach, viele separate Seiten zu haben, anstatt nur eine große Sache. Fügen Sie einen Link zu einer anderen Seite ein, um eine weitere "Aktion" zu starten.
mP.

Ich spreche auch über mehrere Fenster (oder Registerkarten). Ist es wirklich möglich, mehr als ein Fenster mit derselben Sitzung gleichzeitig zu verwenden?
MRalwasser

1
+1 Warum hat dieser Beitrag 2 negative Stimmen bekommen? Skeptische Meinungen wie diese sind ebenso wichtig (wenn nicht mehr) wie positive! Und diese scheinen mir konstruktive zu sein.
Piotr Sobczyk

8

Ich habe mit JAX-RS großen Erfolg gehabt . Es ist das einzige Java Web Framework, das über eine andere JSR-Spezifikation und mehrere Implementierungen als die Servlet- und Portlet-Spezifikation verfügt (obwohl dies eine schlechte Sache sein kann).

Eine schlechte und gute Sache bei Java ist, dass Sie Frameworks auswählen und anpassen können (Python hat auch diese Funktion / dieses Problem). Es ist schön, weil Sie nicht alle Eier in einen Korb legen müssen.

Hier ist ein allgemeines Java Web Application Stack-Rezept:

Javascript / Flash + Bearbeitung von Anfragen / Antworten + Abhängigkeitsinjektion + Persistenz

Javascript: JQuery, Prototyp, Dojo

Anfrage / Antwort: Spring MVC, Stripes und mein Lieblings-JAX-RS (Jersey, Apache CXF)

Abhängigkeitsinjektion: Frühling, Guice

Beharrlichkeit: JPA (Ruhezustand, Google App-Speicher), Ruhezustand, JDO und mehr.

Ich hatte auch großen Erfolg bei der Verwendung von AspectJ, um Java "weniger saugen" zu lassen. Wenn Sie die @ Configable- und AspectJ-ITD-Mixins von Spring verwenden, können Sie Rails wie Domain-Objekte erhalten (dies ist genau das, was Roo tut, aber Sie brauchen Roo nicht, um dies zu tun).


4
Genau. Das Einrichten eines eigenen Stacks dauert länger, aber dann erhalten Sie genau das, was Sie möchten. Ich verwende derzeit jQuery, Jersey, Spring und JPA2. JAX-RS ist großartig, weil Sie die vollständige Kontrolle über Ihre Antwort haben.
Brian DiCasa

6

Ich habe festgestellt, dass Streifen sehr effektiv und überraschend leicht sind. Sie sollen leichter sein als Streben . Ich habe von Freunden, die Vollzeit-Webentwickler sind, gehört, dass es sich nicht lohnt, sich mit JSF zu beschäftigen, obwohl ich keine Erfahrung aus erster Hand habe und dies nicht mit Beispielen (!) Unterstützen kann.


5

Schauen Sie sich RESThub an , das den gleichen Prinzipien folgt wie Play! Dies wird jedoch durch die Wiederverwendung einiger Frameworks / Tools für Unternehmen wie Maven 3 / Spring 3 / Jersey / jQuery implementiert.

RESThub ist im Vergleich zu anderen Frameworks sehr störend, da es sich um ein Full-Stack-Toolkit handelt, jedoch ohne serverseitige MVC- oder Servlet-basierte Framworks. Stattdessen wird eine auf der jQuery-Benutzeroberfläche basierende GUI verwendet, die JAX-RS (REST) ​​-Webdienste und ein auf eingebetteten Js basierendes Javascript-Template-System verwendet.

Server sind zustandslos und wir verwenden HTML5 sessionStorage, um die Sitzung auf der Clientseite zu halten. Dieser Ansatz ist auf RIA und Skalierbarkeit ausgelegt.

Einige Demo-Anwendungen werden bereitgestellt (auch wenn sie sich im Aufbau befinden).


3

JSF ist ein netter Rahmen, aber JSF 1.2 hatte jahrelang keine Vision von seiner Veröffentlichung. JSF 2.0 sieht vielversprechend aus und enthält viele neue Funktionen aus JSF 1.2, wie Ajax-Unterstützung, Facelets, Annotation-Unterstützung und Standardkonventionen (weniger XML), einfache Komponentenerstellung als 1.2.

Es lässt sich auch gut in Spring integrieren, wenn Sie DI-Unterstützung benötigen.


2

Ich würde die Frühlingsempfehlung unterstützen. Ich bin kein großer Fan von GWT, ich glaube nicht, dass der Java -> Javascript Crosscompiler noch ganz da ist. Ich arbeite an einer AJAX-App, die Spring auf dem Server und jQuery auf dem Client verwendet. Obwohl jQuery technisch nicht sofort einsatzbereit ist, ist die Implementierung eines Spring-MVC AjaxView kinderleicht und erfordert etwa 25 Codezeilen.


2

Vielleicht ein bisschen spät zur Show, aber ich muss Vaadin erwähnen . Die Programmierung erfolgt ausschließlich in Java mit einem komponentenbasierten Ansatz. Bei der Client-Server-Kommunikation geht es mehr um Benutzerinteraktion als um Datentransport. Die gesamte Geschäftslogik befindet sich auf dem Server.


1
Ich benutze Vaadin, es ist einfach nicht gut, um eine komplexe Anwendung zu erstellen.
Radan


1

Ich denke, was Sie suchen, ist etwas in der Nähe von Jahia. Es unterstützt GWT, Mashups, Medieninhalte usw.

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


Sieht gut aus! Ist das Open Source / kostenlos für Unternehmen? Ist das weit verbreitet?
Kosmos

Es hat eine Community-Version mit allen grundlegenden Sachen und eine Enterprise-Version mit einigen Ergänzungen usw. Überprüfen Sie diesen Ort jahia.com/jahia/Jahia
Syed M Shaaf

1

BACKBASE PORTAL SOFTWARE

Vor ein paar Jahren haben Portalsoftware " Backbase " verwendet, die damals noch nicht sehr ausgereift war. War aber gut und einfach für die Entwicklung.



0

Etwas, das mehr als nur eine Kugel verdient, sind spielerbasierte RIA-Frameworks. Ex. Adobe Flex + Java (Dies kann natürlich etwas davon abhängen, ob Ihre "Site" wirklich eine "Site" oder eher eine "Anwendung" ist. Sie würden in Flex keine Blog-Site erstellen.)

Ajax,

Im Sinne von AJAX als Schlagwort verwendet Flex normalerweise AMF (ein Binärprotokoll, das effizienter ist als die von AJAX-Apps verwendeten Protokolle), obwohl Sie auch mit Flex streng AJAX-Aufgaben ausführen können. Flex unterstützt also AJAX, aber auch "besser als AJAX".

Rich Media-Inhalte, Mashup,

Da Flex auf der Flash-Plattform für virtuelle Maschinen ausgeführt wird, muss meiner Meinung nach wenig hinzugefügt werden.

vorlagenbasiertes Layout,

Ich bin mir nicht sicher, worauf es genau ankommt, aber es klingt wie Flex mxml.

Validierung,

Wird natürlich unterstützt, obwohl Sie sich vielleicht dazu entschließen, einige benutzerdefinierte Dinge zu tun, wenn Sie Lust haben. (Nicht, dass Sie müssen.) Das Schöne ist, dass Sie so raffiniert werden können, wie Sie wollen - oder nicht.

maximale HTML / Java-Code-Trennung

Mit einem Entwicklungsansatz für virtuelle Maschinen wie Flex / Silverlight / JavaFX können Sie nicht mehr getrennt werden. Auf diese Weise können Sie Ihren Präsentationscode nicht nur von Ihrer serverseitigen Logik- und Datenzugriffsschicht getrennt halten, sondern auch sicherstellen, dass sie getrennt sind. Durch die Virtualisierung Ihrer Entwicklungsumgebung erhalten Sie browserübergreifende Kompatibilität, eine konsistente Zielplattform, keine Sorgen über neue Browser oder neue Browserversionen, die Ihre Anwendung beschädigen, erstklassige Java-ähnliche Debugging-Funktionen und ein professionelleres / beeindruckenderes Endprodukt .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.