Alternativen zu JSP für Spring MVC-Ansichtsebene

77

Ich möchte eine neue App von Grund auf neu erstellen und werde wahrscheinlich Spring MVC und möglicherweise Spring Web Flow verwenden. Die von Spring Roo erstellten Projekte verwenden Spring MVC und optional Web Flow. Was sind einige gute Alternativen für die Ansichtstechnologie, oder ist JSP mit Spring- und JSTL-Taglibs und jQuery der richtige Weg?

digitaljoel
quelle
14
Für alle, die interessiert sind, habe ich mich am Ende für JSP entschieden und es hat sehr gut geklappt. Mit der Wiederverwendbarkeit von JSP-Tag-Dateien und den netten Taglibs, die im Frühjahr und in JSTL verfügbar sind, ist es nicht die schreckliche JSP, an die ich mich aus dem Jahr 2004 mit Tonnen von Scriptlets und all dem erinnere.
Digitaljoel
Bitte schlagen Sie die Alternative vor.
Praveenpds
1
Hier ist der zugehörige Abschnitt in der offiziellen Spring MVC-Dokumentation: View Technologies .
informatik01

Antworten:

50

In der Standard-Java EE-API ist Facelets die einzige Alternative zu JSP . Bisher (2010) ist JSF das einzige MVC-Framework, das Facelets nativ unterstützt.

Spring MVC unterstützt standardmäßig nur JSP, verfügt jedoch über einen konfigurierbaren Ansichtsauflöser , mit dem Sie Facelets trotzdem verwenden können. Andere candiates sind 3rd - Party - Templat - Frameworks wie Geschwindigkeit , Freemarker und Thymeleaf die als View - Technologie für Spring MVC konfiguriert werden können. Die Spring-Dokumentation enthält Integrationsbeispiele für Velocity und Freemarker.

BalusC
quelle
"Bis jetzt (2010) ist JSF das einzige MVC-Framework, das Facelets nativ unterstützt." Meinten Sie "Bisher (2010) ist Facelets die einzige Ansichtstechnologie, die das JSF MVC-Framework nativ unterstützt."? Soll Facelets (eine View-Technologie) nicht ein MVC-Framework wie JSF unterstützen? (Entschuldigung, wenn das, was ich sage, keinen Sinn ergibt, bin ich sehr neu in JSF-Sachen).
Utku
Facelets ist seit JSF 2.0 in JSF selbst enthalten. Sie müssen es also nicht separat installieren. Facelets selbst können mit jedem anderen MVC-Framework wie Spring MVC verwendet werden, müssen jedoch manuell installiert und konfiguriert werden.
BalusC
53

Ich habe kürzlich Thymeleaf entdeckt .

Es scheint ein vollständiger Ersatz für JSPs zu sein und ist in Spring MVC integriert. Der Vorlagenansatz ähnelt eher HTML und ist für Ihre UI-Designer möglicherweise schmackhafter. Sie haben eine kleine Beschreibung, in der die beiden Lösungen nebeneinander verglichen werden .

Shawn Sherwood
quelle
3
Thymeleaf an sich ist großartig, aber zusammen mit Layout-Dialekt Layout-Dialekt liebe ich es!
Filip Spiridonov
Warum sollte ich Thymeleaf während Facelets verwenden? Außerdem sieht der Template-Ansatz von facelet wie HTML und mehr aus. Warum sollten wir ihn verwenden? Was macht es laut Facelets gut? für mich "Nichts". Vielleicht ist das Blatt größer als jsp.So java ee die zuletzt entwickelten 'Facelets' für die Vorlagensprache. Und so ist JSP alte Technologie. Warum würden Sie mit ihm vergleichen? Es ist eine alte Technologie? Tut mir leid, mein schlechtes Englisch.
Erginduran
17

Ich habe vor kurzem angefangen, mit einfachem HTML und jQuery für die Präsentation mit Spring MVC zu arbeiten, wobei nur eine JSON-Ansicht erstellt wurde.

Bisher läuft es recht gut und obwohl ich die Javascript-Arbeit erledigen muss, erleichtert es die Interaktion mit meinem Designer und beschleunigt die Bearbeitungszeit, wenn er Änderungen hat, da ich sein HTML nicht in meine JSP konvertieren muss. Die Jury ist immer noch nicht über die allgemeine Wartbarkeit der Website informiert.

digitaljoel
quelle
Kann die generierte restful API die Paginierung verarbeiten?
Yazan Jaber
Ihre erholsame API kann tun, was Sie wollen. Fügen Sie für die Paginierung einfach einen Anfang und ein Ende oder einen Versatz und eine Seitengröße hinzu oder was auch immer Sie benötigen, um die entsprechenden Ergebnisse zu erzielen.
Digitaljoel
Hallo, ich weiß, dass dies spät ist, aber nur ein Hinweis: Thymeleaf versucht, das genaue Problem anzugehen, das Sie in Ihrer Antwort erwähnt haben (Interaktion zwischen Entwickler und Designer). Dann ist es wahrscheinlich einen Blick wert.
Acdcjunior
danke @acdcjunior. Ich habe bei SpringOne eine Präsentation über Thymeleaf besucht und es sah ziemlich interessant und natürlich aus, bis der Moderator in seinen Tests sagte, Thymeleaf sei 8x - 10x langsamer als JSP.
Digitaljoel
Ja, tatsächlich ist es langsamer. Überprüfen Sie diesen Thread: forum.thymeleaf.org/Performance-issue-td3722763.html . Für mich war das der Grund, warum ich nicht blind darauf eingegangen bin (weil ich normalerweise für Internetportale entwickle), aber für "Intranet" -Apps, bei denen JSF akzeptabel wäre, denke ich, dass dies auch der Fall wäre. Hoffentlich verbessert sich ihre Leistung in Zukunft. Prost!
Acdcjunior
16

In Spring MVC können Sie so viele Ansichtstechnologien verwenden, wie Sie möchten. Ich habe FreeMarker- und JSP-Ansichtsauflöser. Wenn ich auf eine Ansicht stoße, die in FreeMarker zu kompliziert ist (oder in JSP einfach praktischer ist), erstelle ich eine JSP-Ansicht. Zum Beispiel eignet sich Spring mit JSTL hervorragend für die Bearbeitung von Formularen. Dafür verwende ich JSP-Ansichten, aber für so ziemlich alles andere habe ich FreeMarker-Ansichten.

In der Spring MVC-Dokumentation erfahren Sie, wie Sie mehrere Ansichtsauflöser konfigurieren.

<bean name="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
   <property name="cache" value="true"/>
   <property name="prefix" value=""/>
   <property name="suffix" value=".ftl"/>
   <property name="order" value="1"/> <!--NOTICE THE ORDER-->
</bean>

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
    <property name="order" value="2"/> <!--NOTICE THE ORDER-->
</bean>
monzonj
quelle
8

Obwohl dies eine alte Frage ist, dachte ich, ich würde eine aufstrebende Alternative anbieten, nämlich Scalate .

Scalate ist ein Kraftpaket für Vorlagenoptionen. Das einzige Problem ist, dass Scalate viele Abhängigkeiten erfordert (während es Scala erfordert, müssen Sie nicht in Scala schreiben).

Mein aktueller Favorit ist Handlebars.java mit Spring-Integration.

Adam Gent
quelle
Interessant, dass keine Spring-Kompatibilität aufgeführt ist. Haben Sie es erfolgreich in Spring MVC integriert?
Digitaljoel
stackoverflow.com/questions/5913373/scala-spring-and-scalate und github.com/scalate/scalate/tree/master/scalate-spring-mvc . Ich habe etwas Ähnliches gemacht. Der Frühling ist ziemlich einfach, andere Dinge mit zu integrieren.
Adam Gent
@digitaljoel Siehe auch Verwenden von Scalate mit Spring MVC
arashi01
5

(Meine vorherige Antwort wurde hier schlecht datiert.) Freemarker ist mindestens so gut wie Velocity. Aber Thymeleaf sieht noch überzeugender aus. Zusammen mit dem Layout-Dialekt können Vorlagen-Frameworks wie Sitemesh und Kacheln unnötig werden. Für JSF scheint die Kritik von Thoughtworks gültig zu sein:

Wir sehen weiterhin, dass Teams Probleme mit JSF - JavaServer Faces - haben, und empfehlen Ihnen, diese Technologie zu vermeiden. Teams scheinen sich für JSF zu entscheiden, da es sich um einen Java EE-Standard handelt, ohne wirklich zu bewerten, ob das Programmiermodell zu ihnen passt. Wir glauben, dass JSF fehlerhaft ist, weil sein Programmiermodell die Verwendung eigener Abstraktionen fördert, anstatt das zugrunde liegende Webmodell vollständig zu berücksichtigen. JSF versucht wie ASP.NET-Webformulare, statusbehaftete Komponentenbäume auf dem obersten HTML-Markup und dem zustandslosen HTTP-Protokoll zu erstellen. Die Verbesserungen in JSF 2.0 und 2.2, wie die Einführung zustandsloser Ansichten und die Förderung von GET, sind Schritte in die richtige Richtung, vielleicht sogar eine Bestätigung, dass das ursprüngliche Modell fehlerhaft war, aber wir halten dies für etwas zu spät.

Nathan Hughes
quelle
Warum ist es die beste Alternative? Die Fehlerprüfung der Geschwindigkeit ist ziemlich schlecht. Warum ist es besser?
Adam Gent
@Adam: Es ist viel einfacher und erlaubt keine Scriptlets. Ich zähle diese als Verbesserungen gegenüber JSP. Ich erinnere mich, dass das Schreiben von Tests für meine Geschwindigkeitsvorlagen auch ziemlich einfach war.
Nathan Hughes
3

Ich benutze Stripes und Spring zusammen. Streifen bleiben dir die meiste Zeit aus dem Weg, aber Augments sind schön, wenn du sie brauchst, finde ich.

Quotidian
quelle
3

Ich benutze Geschwindigkeit und Feder MVC. Außerdem hoste ich meine Anwendung auf der Googles App Engine und habe keine Probleme.

Athen Holloway
quelle
3

Sie können Angular (clientseitiges Framework) auch für Ihre Ansichtsebene in Spring MVC verwenden.

ddsultan
quelle
Können Sie das serverseitig rendern?
Protoevangelion
Wenn ich Sie richtig verstehe, möchten Sie fragen, ob Angular serverseitiges Redering durchführt. Ab Angular 2.x bietet es diese Funktionalität. Sie können einen Blick auf diese Referenz werfen: Serverseitiges Rendern
ddsultan
Entschuldigung, ich hätte genauer sein sollen. Ich meinte, gibt es eine Möglichkeit, eine Angular-App in Java ohne einen nodejs-Server serverseitig zu rendern?
ProtoEvangelion
1
Es gibt ein Community-Projekt, das Sie möglicherweise auf Java überprüfen möchten: Angular UniversalJ . Ich denke, es nutzt Node im Hintergrund.
Ddsultan
2

Mein Vorschlag ist, nicht das Ansichts-Framework zu betrachten, wie es in den meisten der oben genannten beschrieben wurde, die nicht über Spring MVC geschrieben wurden, da Sie Probleme wie Postbacks haben, was bedeutet, dass Sie die Daten dieser Ansichtstechnologie nicht übermitteln können und bekomme die Antwort von Sever zurück. Beispiel wie Validierung: Bearbeiten Sie die Datenübermittlung, die mit Daten vom Server aktualisiert wird.

Dies liegt daran, dass Java-Beans in einigen der oben genannten Technologien den Spring-Container-Lebenszyklus nicht verwenden. Sie können sie nur für zustandslose reine Ansichtsbeispiele verwenden. Beispiel: Mit JSF können Sie keine Postbacks verwenden, da jsf-Postbacks nur funktionieren, wenn Sie den jsf-Lebenszyklus verwenden. Wenn Sie den JSF-View-Resolver von Spring Framework mit spring mvc verwenden, können Sie kein Postback durchführen, sodass Sie jsf ersetzen müssen Servlet-Controller anstelle von Feder-MVC-Controller.

Da Ihre vollständige Projektanforderung nicht klar ist und Sie keine Postback-Anforderung wünschen, können Sie einige der oben genannten Optionen verwenden.

Eine beispielhafte Ansichtstechnologie, die oben auf Spring MVC geschrieben ist, ist ZK Framework-basiertes ZK MVC, in dem Sie Ihre Spring MVC-Controller von ZK GenericForwardComposer aus erweitern können, um Ereignisse zu verarbeiten. Sie können Spring jederzeit verwenden, um den Lebenszyklus dieser Controller mithilfe des Spring-Frameworks zu verwalten.

Sie können googeln, um ähnliche andere Produkte zu finden.

Diese Überprüfung basiert auf der allgemeinen Gestaltung des Framework-Lebenszyklus.

Alles Gute !!!

Agassis
quelle
2

Ich denke, Tiles könnte dir helfen.
Sie können Vorlagen definieren und JSTL verwenden.

Amanas
quelle
1

Sie können Facelets auf Spring Webflow ausführen

Tommy B.
quelle
1

Was ist mit phpj ?

Es kann als Ansichtsvorlage verwendet werden oder Sie können Ihr Webserversystem von Grund auf neu erstellen

Ich habe phpj erstellt, weil ich meine Anwendung nicht ständig aktualisieren und mit Tomcat laden muss, damit ich statische Speicherorte für meine Webanwendung mit apacheähnlichen Konfigurationen verwenden kann

larsig
quelle
1

Apache Velocity ist eine gute Alternative zu Java Server Pages.

Harshana
quelle