Was sind die Vor- und Nachteile der verschiedenen Java-Webframeworks? [geschlossen]


85

Ich denke darüber nach, meine eigene Website mit Java zu erstellen, und versuche zu entscheiden, welches Framework verwendet werden soll. Bei einer schnellen Suche nach Java-Frameworks stehen jedoch mehr als 50 zur Auswahl!

Meine Website wird nur zu meinem eigenen Vergnügen am Anfang erstellt, aber wenn sie populär wird, wäre es gut, wenn sie skalierbar wäre oder zumindest in der Lage wäre, sie neu zu gestalten.

Was sind die Hauptunterschiede zwischen den populäreren Frameworks? Gibt es Fälle, in denen einer die anderen deutlich übertrifft? Zum Beispiel Unternehmensanwendungen mit hohem Datenverkehr im Vergleich zu kleinen Anwendungen mit geringem Datenverkehr. Ich frage mich auch, ob einige viel einfacher zu lernen und zu verwenden sind als andere.

Gibt es jemanden, der Erfahrung mit einigen dieser Frameworks hat und eine Empfehlung aussprechen kann? Dient die bloße Auswahl nur als Frühwarnung, um eine Java-basierte Webentwicklung nach Möglichkeit zu vermeiden?


Bis zu einem gewissen Grad ist dies so, als würde man sagen: "Wenn Sie schnell nach Werkzeugen suchen, erhalten Sie mehr als 50 zur Auswahl. Soll ich einen Hammer, einen Schraubendreher oder eine Zange auswählen?" Bei den Unterfragen ist dies jedoch eine anständige "gute subjektive" Frage.
Pops

"Lustig" wie immer, äußerst nützliche Fragen und Antworten (ich habe gerade ein Buch über Wicket bestellt, danke an alle), aber der gesamte Beitrag ist als nicht konstruktiv geschlossen. "Diese Frage wird wahrscheinlich" - und diese trockene Tatsache, nichts Spekulatives, oh Ironie ...
Greenoldman

Antworten:


58

Ich habe Tapestry 3 , Wicket , Echo und JSF ziemlich ausgiebig verwendet. Ich würde wirklich empfehlen, dass Sie sich diese ansehen und diejenige auswählen, die für Sie am einfachsten erscheint und die Ihrer Arbeitsweise am ehesten entspricht.

Von diesen war Wicket für mich aufgrund der Leichtigkeit der Komponentenerstellung und der Einfachheit der Seitenvorlagen am bequemsten zu bearbeiten . Das geht doppelt, wenn Sie Ihren eigenen Datenbankcode anstelle von Hibernate oder einem anderen Framework verwenden (ich war mit Wicket Hibernate oder Spring Integration nie ganz zufrieden).

Echo ist großartig, wenn es Ihnen nichts ausmacht, Ihr gesamtes Layout in Java zu schreiben. Ich weiß, dass das jetzt anders ist, aber ich denke immer noch, dass das Produkt eine ziemlich enge Nische bedient. Sie ändern das Entwicklungsmodell anscheinend auch mit jeder Hauptversion.

Tapisserie ist ein großartiges Produkt, aber es unterscheidet sich offensichtlich stark von den anderen in Bezug auf das Entwicklungsmodell, da es hauptsächlich von einem Typen geführt wird. Howard Lewis Ship ist zweifellos ziemlich schlau, aber ich bin enttäuscht von ihrer Entscheidung, die Abwärtskompatibilität mit jeder Veröffentlichung grundsätzlich zu vergessen. Für Ihre Bedürfnisse spielt dies jedoch möglicherweise keine Rolle, und ich fand es immer angenehm, gegen die Tapestry-Produkte zu arbeiten.

JSF ist seit Jahren unterwegs und fühlt sich immer noch wie etwas an, das ein Struts- Typ gebaut hat, um alle Probleme von Struts zu beheben. Ohne alle Probleme mit Struts wirklich zu verstehen. Es fühlt sich immer noch unvollendet an, obwohl das Produkt offensichtlich sehr flexibel ist. Ich benutze es und habe eine gewisse Vorliebe dafür, mit großen Hoffnungen auf seine Zukunft. Ich denke, die nächste Version (2.0), die in JEE6 ausgeliefert wird, wird sie mit einer neuen Vorlagensyntax (ähnlich wie Facelets) und einem vereinfachten Komponentenmodell (benutzerdefinierte Komponenten in nur einer Datei ... endlich) wirklich zur Geltung bringen.

Und natürlich gibt es eine Million kleinerer Frameworks und Tools, die ihre eigene Anhängerschaft haben ( Geschwindigkeit für Grundbedürfnisse, rohe JSPs , Struts usw.). Generell bevorzuge ich jedoch komponentenorientierte Frameworks.

Am Ende würde ich empfehlen, nur einen Blick auf Tapestry, Wicket und JSF zu werfen und nur den auszuwählen, der sich für Sie am besten anfühlt. Sie werden wahrscheinlich eine finden, die genau zu Ihrer Arbeitsweise passt.


Wenn Ihre Web-App wie ein Forensystem auf Inhalten basiert, empfehle ich Ihnen, GWT und Ext-js zu verwenden. Wenn Ihre Web-App eher einer Desk-App wie einem ERP-Terminal ähnelt, empfehlen wir Ihnen, ZK, Echo3, Vaddin und GWT zu verwenden. Ich werde keine JSF-Lösung vorschlagen, da ich ohne die Tatsache "It's JEE Standard" keinen Vorteil gefunden habe, sie zu verwenden.
Zanyking

1
@Zanyking - Wenn Ihr Forum SEO benötigt, werden Sie GWT schwierig finden, imo.
Jsight

3
JSF ist wahrscheinlich übertrieben für eine Website, stattdessen würde ich mich für produktivere Frameworks entscheiden, ... das Entwickeln sollte Spaß machen, und JSF wurde nicht mit dem Gedanken an "Spaß" erstellt :)
HeDinges

1
Tapisserie, Wicket, JSF und Echo sind alle komponentenorientiert und GWT, Ext-js und Vaadin sind Javascript-orientiert. Vergessen Sie nicht, sich all die wunderbaren "klassischen" MVC-Frameworks wie Spring MVC, Play Framework, Grails and Stripes anzusehen. Sie haben ein ganz anderes Programmiermodell als die früheren, aber andere Sweet Spots (deshalb gibt es so viele Frameworks - unterschiedliche Zwecke, Bedürfnisse und Geschmack erfordern unterschiedliche Werkzeuge).
DaGGeRRz

38

Mein Favorit ist das Spring Framework. Mit 2.5 Spring ist MVC soooo umwerfend, mit neuen Anmerkungen, Konventionen über Konfigurationsfunktionen usw.

Wenn Sie nur etwas sehr Einfaches tun, können Sie auch versuchen, die reguläre Servlet-API zu verwenden, ohne sich um ein Framework zu kümmern.


Stimmen Sie ab, wenn Sie die Verwendung der regulären Servlet-API für etwas Einfaches erwähnen.
lsiu

1
Ich würde aus den im (kostenlosen) ersten Kapitel von Wicket In Action genannten Gründen jegliches "Web-MVC" -Framework vermeiden. Außerdem würde ich es vermeiden, die Servlet-API direkt zu verwenden, es sei denn, Sie haben eine Einzelseitenanwendung oder möchten Ihr eigenes Framework von Grund auf neu schreiben.
Eelco

3
Ich mag Spring auch, aber ich fand, dass sich die gesamte Konfiguration nur auszahlt, wenn Sie eine Mahoosive-Anwendung schreiben.
Leonard Ehrenfried

1
Es gibt kaum eine Konfiguration mit Anmerkungen.
Papa

1
@bpapa Die Anmerkungen platzieren lediglich die Konfiguration in Ihren Java-Klassen anstelle von XML.
Steven

25

Ich empfehle das komponentenorientierte Wicket- Framework. Sie können Ihre Webanwendung in einfachem alten Java-Code schreiben, POJOs als Modell für alle Komponenten verwenden und müssen nicht mit riesigen XML-Konfigurationsdateien herumspielen.

Ich hatte erfolgreich eine Online-Banking-Anwendung mit Struts entwickelt, als ich Wicket entdeckte und sah, wie einfach die Entwicklung von Webanwendungen sein kann!


17

Ich habe vor kurzem begonnen, das Stripes Framework zu verwenden . Wenn Sie nach einem anforderungsbasierten Framework suchen, das wirklich einfach zu verwenden ist, aber Ihrer Arbeit keine Grenzen setzt, kann ich es nur empfehlen.

Es ist ähnlich wie Streben, aber es geht weit darüber hinaus. Es gibt sogar einige Plugin-Projekte, mit denen Sie den Ruhezustand oder jpa mit sehr wenig Konfiguration verwenden können.

Es gibt viele gute Frameworks, obwohl ich gehört habe, dass Wicket auch gut ist, aber ich habe es nicht verwendet.


16

Ich habe es nicht selbst versucht, aber ich denke

http://www.playframework.org/

hat viel Potenzial ...

Es kommt von PHP und Classic Asp und ist das erste Java-Webframework, das für mich vielversprechend klingt.


2
Es ist lustig, dass ich heute zum fünften Mal gesehen habe, dass ich es nicht benutzt habe, aber ich empfehle Play hier auf stackoverflow.
Marko

11

UPDATE: Tapestry 5.2 ist erschienen, daher wird es nicht aufgegeben, wie es zuvor schien. Meine Erfahrung ist mit Tapisserie 4, nicht mit 5, daher kann Ihr Kilometerstand variieren. Meine Meinung zu Tapisserie hat sich im Laufe der Jahre geändert. Ich habe diesen Beitrag geändert, um ihn wiederzugeben.

Ich kann Tapisserie nicht mehr wie zuvor empfehlen. Tapisserie 5 scheint eine signifikante Verbesserung zu sein, aber mein Hauptproblem bei Tapisserie ist nicht die Plattform selbst; Es ist mit den Menschen dahinter.

In der Vergangenheit hat jedes größere Versionsupdate von Tapestry die Abwärtskompatibilität mit extremen Vorurteilen gebrochen, weit mehr als man erwarten könnte. Dies scheint auf die Integration neuer Codierungstechniken oder -technologien zurückzuführen zu sein, die erhebliche Umschreibungen erfordern.

Howard Lewis Ship (der Hauptautor von Tapestry) ist sicherlich ein brillanter Entwickler, aber ich kann nicht sagen, dass mir sein Management des Tapestry-Projekts am Herzen liegt. Die Entwicklung von Tapestry 5 begann fast unmittelbar nach dem Versand von Tapestry 4. Nach allem, was ich sagen kann, hat sich Ship so ziemlich dem gewidmet und Tapestry 4 in den Händen anderer Mitwirkender gelassen, die meiner Meinung nach bei weitem nicht so fähig sind wie Ship. Nachdem ich den schmerzhaften Wechsel von Tapisserie 3 zu Tapisserie 4 vollzogen hatte, fühlte ich mich fast sofort verlassen.

Mit der Veröffentlichung von Tapestry 5 wurde Tapestry 4 natürlich zu einem Legacy-Produkt. Ich würde kein Problem damit haben , wenn der Upgrade - Pfad nicht so brutal war wieder . Jetzt ist unser Entwicklungsteam in einer nicht beneidenswerten Position: Wir könnten weiterhin eine im Wesentlichen verlassene Webplattform (Tapestry 4) verwenden, das abscheuliche Upgrade auf Tapestry 5 durchführen oder Tapestry ganz aufgeben und unsere Anwendung auf einer anderen Plattform neu schreiben. Keine dieser Optionen ist sehr attraktiv.

Tapisserie 5 soll so geschrieben sein, dass die Wahrscheinlichkeit eines Aktualisierungsbruchs von diesem Punkt an verringert wird. Ein gutes Beispiel sind die Seitenklassen: In früheren Inkarnationen stammten Seitenklassen von einer von Tapestry bereitgestellten Basisklasse ab. Inkompatible API-Änderungen in dieser Klasse waren die Ursache für eine große Anzahl von Abwärtskompatibilitätsproblemen. In Tapestry 5 sind Seiten POJOs, die zur Laufzeit mit dem "Magic Tapestry Fairy Dust" über Anmerkungen erweitert werden. Solange der Vertrag für die Anmerkungen beibehalten wird, wirken sich Änderungen an Tapisserie nicht auf Ihre Seitenklassen aus.

Wenn dies richtig ist, könnte sich das Schreiben einer neuen Anwendung mit Tapestry 5 als gut herausstellen. Aber ich persönlich habe keine Lust, meine Hand wieder auf den Brenner zu legen.


Update: Im Laufe der Zeit scheint das Tapisserie-Projekt aufgegeben worden zu sein. Seit April '09 gab es keine Tapestry 5-Veröffentlichungen mehr, und Tapestry 4, das immer noch eine Reihe ausstehender Fehler in seiner JIRA enthält, hat seit '08 kein Update mehr erhalten. Aus diesem Grund kann ich Tapestry nicht mehr als praktikable Wahl für ein Webanwendungsframework empfehlen.
Robert J. Walker

Tapisserie wurde nicht aufgegeben. Der Zweig Tapestry 5 ist ziemlich aktiv, 5.1 als stabile Option und 5.2 in Kürze.
Timo Westkämper

Du hast recht. Tatsächlich wurde Tapestry 5.2 inzwischen veröffentlicht. Ich habe den Beitrag aktualisiert, um meine aktualisierte Meinung zu Tapisserie widerzuspiegeln.
Robert J. Walker

9

Disclamer: Ich arbeite bei Vaadin (früher IT Mill)

Wenn Sie etwas RIAish machen, sollten Sie sich Vaadin ansehen . Es ist ein Open-Source-UI-orientiertes AJAX-Framework, das für mich gut zu verwenden ist (ich komme selbst aus einem PHP-Hintergrund).

Es gibt eine Fallstudie , in der die gleiche Anwendung (dh zwei Anwendungen mit denselben Funktionen) in Icefaces und Vaadin verglichen wird. Kurz gesagt heißt es, dass die Entwicklung der Benutzeroberfläche erheblich schneller war.

Obwohl die Studie im Wiki des Unternehmens gehostet wird, kann ich versichern, dass sie objektiv, echt und wahrheitsgemäß ist, obwohl ich Sie nicht zwingen kann, mir zu glauben.


+1 Das Framework wird als Vaadin (zuvor ITMill) umbenannt. Ich muss sagen, Vaadin ist ein sehr gut aussehendes Webframework und alles Java nichts anderes. Ich finde es sehr produktiv.
Fmucar

7

Nach einer langen Zeit des Testens verschiedener Lösungen stellte sich für mich heraus:

  • Spring MVC für die Präsentations- und Controller-Ebene (KEIN Spring Webflow, da meine Flows auf Ajax basieren)

  • jQuery für alle clientseitigen Inhalte

  • Frühlingssicherheit für den Sicherheitsaspekt

  • Ruhezustand / JPA2

  • Anlegestelle für Fortsetzungen (Komet)

Ein Monat mit einer außerordentlich steilen Lernkurve, aber jetzt bin ich glücklich.

Ich möchte auch erwähnen, dass ich nur einen kleinen Schritt davon entfernt war, all das Java-Zeug zu überspringen und stattdessen Scala / LIFT zu lernen. Für mich ist alles in Java, was mit modernster Webentwicklung zu tun hat (Komet, asynchrone Kommunikation, Sicherheit (ja, sogar mit Spring Security!)), Immer noch ein Hack (beweisen Sie mich durch Beweise falsch, bitte !). Für mich scheint Scala / LIFT eine Out-of-the-Box- und All-in-One-Lösung zu sein.

Der Grund, warum ich mich schließlich entschieden habe, nicht mit Scala zu gehen, ist

  • Als Projektleiter muss ich die Personalabteilung berücksichtigen und Java-Entwickler sind viel einfacher zu finden als Scala-Entwickler

  • Für die meisten Entwickler in meinem Team ist das funktionale Konzept von Scala, so hervorragend es auch ist, schwer zu verstehen

Prost Er


Das ist alles gutes Zeug. Gute Wahl Feder MVC, bleiben Sie auf der sicheren (und weisen) Seite.
Victor Ionescu

5

Ich habe auch gute Dinge über das Spring Framework gehört. Im Allgemeinen war ich jedoch von den meisten Java-Webframeworks, die ich mir angesehen habe (insbesondere Struts), überwältigt.

Für eine einfache App würde ich definitiv in Betracht ziehen, "rohe" Servlets und JSPs zu verwenden und mir keine Sorgen über die Einführung eines Frameworks zu machen. Wenn die Servlets gut geschrieben sind, sollte es in Zukunft unkompliziert sein, bei Bedarf auf ein Framework zu portieren, wenn die Komplexität der App zunimmt.


1
+1 für "Wenn die Servlets gut geschrieben sind ..."
Chris


4

Alle - das ist das Problem ;-)


3

Ich denke, für Ihre bescheidenen Anforderungen müssen Sie nur Servlets oder einfache JSP-Seiten codieren, die Sie vom Tomcat-Server aus bedienen können. Ich glaube nicht, dass Sie irgendeine Art von Web-Framework (wie Streben) für persönliche Website-Daten benötigen


3

"JSF verwenden" zu sagen ist etwas zu einfach. Wenn Sie sich für JSF entscheiden, müssen Sie darüber eine Komponentenbibliothek auswählen. Verwenden Sie MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ )? Oder vielleicht ICEfaces ( http://www.icefaces.org/ )? Oh, und wenn Sie ICEfaces verwenden, werden Sie JSPs oder Facelets für Ihre Ansichten verwenden?

Meiner Meinung nach ist es zu schwer zu sagen. Niemand hat die Zeit, alle vielversprechenden Alternativen zu evaluieren, zumindest in den Projekten, an denen ich arbeite, weil sie nicht groß genug sind, um dreimonatige Evaluierungsphasen durchzuführen. Sie sollten sich jedoch nach einigen umsehen, die eine große und aktive Community haben und seit einem Jahr nicht mehr weg sind. JSF gibt es schon seit einiger Zeit, und da es von der Sonne geschoben wird, wird es noch einige Zeit da sein. Ich kann nicht sagen, ob es die beste Wahl ist, aber es wird eine gute sein.


Jsp war ein Schmerz für mich, wenn ich eine Web-App mache, die wir verkaufen. Bei einem Update werden stattdessen Facelets berücksichtigt.
Thorbjørn Ravn Andersen

Ja, zu diesem Zeitpunkt bin ich mir ziemlich sicher: Verwenden Sie Facelets anstelle von JSP. Es ist viel besser und ich sehe keine (großen) Nachteile.
Tim Büthe


3

Für Websites mit hohem Datenverkehr würde ich ein Framework verwenden, das den Clientstatus auf dem Server nicht verwaltet. Wicket, JSF und Tapestry verwalten den Clientstatus auf dem Server. Ich würde diese Frameworks nur verwenden (Wicket ist mein Favorit), wenn die Anwendung eher einer Desktop-Anwendung ähneln sollte. Ich würde jedoch versuchen, einen skalierbareren und einfacheren REST + AJAX-Ansatz zu verwenden.

Spring MVC wäre ein Kandidat, aber seit Spring MVC 3 gibt es ein seltsames, mit Anmerkungen überladenes Programmiermodell, das die Vorteile der statischen Typisierung nicht nutzt. Es gibt andere hässliche Dinge wie Ausgabeparameter in Methoden, die mit einer üblichen Rückgabe kombiniert werden. Es gibt also zwei Ausgabekanäle einer Methode. Spring MVC neigt auch dazu, das Rad neu zu erfinden, und Sie müssen im Vergleich zu anderen Frameworks mehr konfigurieren. Ich kann Spring MVC nicht wirklich empfehlen, obwohl es einige nette Ideen hat.

Grails ist eine bequeme Möglichkeit, Spring MVC und andere etablierte Frameworks wie Hibernate zu verwenden. Das Codieren macht Spaß und Sie werden schnell Ergebnisse sehen.

Und vergessen Sie nicht, dass die Servlet-API mit einigen kleinen Helfern wie FreeMarker für Vorlagen sehr leistungsfähig ist.



2

Meine Wahl wäre Wicket (für große Projekte und eine vorhersehbare Benutzerbasis), GWT (für große Projekte, die größtenteils öffentlich zugänglich sind) oder nur ein Service-Framework (wie Jersey / JAXRS) zusammen mit einem JavaScript-Toolkit (für kleine bis mittlere Projekte). .


2

Ich empfehle Seam, besonders wenn Sie Ausdauer brauchen.



1

Für eine schnelle und ausgefallene Benutzeroberfläche können Sie JSF mit der Richfaces- Bibliothek verwenden. Richfaces-UI-Komponenten sind einfach zu verwenden und praktische Referenzen mit Code-Demonstration auf der Demo-Site verfügbar. Wahrscheinlich später, wenn Ihre Site mehr Daten zu verarbeiten hat und viele Informationen in der Datenbank verarbeitet werden müssen, können Sie jedes Datenbankzugriffsframework (ORM) damit verbinden.


0

Ich kann nicht glauben, dass niemand GWT erwähnt hat


Ich würde GWT nicht wirklich als Webanwendungs-Framework betrachten (es ist eher wie ein Web-Toolkit, daher der Name). GWT ist jedoch großartig und passt zum Beispiel gut zum Frühling.
Stian

Framework oder Toolkit, was ist der konkrete Unterschied wirklich? Das Codieren mit GWT fühlt sich genauso an, mit einem Framework zu arbeiten wie mit den anderen Optionen.
Eelco



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.