web-dev-qa-db-fra.com

Alternatives à JSP pour la couche de vue Spring MVC

Je cherche à créer une nouvelle application à partir de zéro et j'utiliserai probablement Spring MVC et peut-être Spring Web Flow. Les projets créés par Spring Roo utilisent Spring MVC et éventuellement Web Flow. Quelles sont les bonnes alternatives pour la technologie d'affichage, ou est-ce que JSP avec Spring et JSTL taglibs et jQuery sont la voie à suivre?

76
digitaljoel

Dans l'API standard Java EE EE, la seule alternative à JSP est Facelets . Jusqu'à présent (2010) [~ # ~] jsf [~ # ~] est le seul framework MVC qui supporte nativement Facelets.

Spring MVC ne prend en charge que JSP, mais il a un résolveur de vue configurable qui vous permet d'utiliser Facelets de toute façon. D'autres candidats sont des cadres de modèles tiers tels que Velocity , Freemarker , et Thymeleaf qui peut être configuré comme une technologie de vue pour Spring MVC. La documentation de Spring a des exemples d'intégration avec Velocity et Freemarker.

50
BalusC

J'ai récemment découvert Thymeleaf .

Il semble être un remplacement complet des JSP et a une intégration avec Spring MVC. L'approche du modèle ressemble plus au HTML et peut être plus acceptable pour vos concepteurs d'interface utilisateur. Ils ont une petite écriture qui compare les deux solutions côte à côte.

52
Shawn Sherwood

J'ai récemment commencé à utiliser du HTML simple et jQuery pour la présentation avec Spring MVC en créant uniquement une vue JSON.

Jusqu'à présent, cela se passe très bien et même si je dois faire le travail javascript, cela facilite l'interaction avec mon concepteur et les délais d'exécution plus rapides lorsqu'il a des modifications, car je n'ai pas à convertir son code HTML en JSP. Le jury est toujours sur la maintenabilité globale du site.

17
digitaljoel

Vous pouvez avoir autant de technologies d'affichage que vous le souhaitez sur Spring MVC. J'ai FreeMarker et les résolveurs de vues JSP. Lorsque je rencontre une vue trop compliquée dans FreeMarker (ou tout simplement plus pratique dans JSP), je crée une vue JSP. Par exemple, Spring avec JSTL constitue un excellent formulaire de gestion des tâches. Pour cela, j'utilise des vues JSP, mais pour à peu près tout le reste, j'ai des vues FreeMarker.

Jetez un œil à la documentation Spring MVC pour voir comment configurer plusieurs résolveurs de vue, essentiellement:

<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>
16
monzonj

Documentation de Springs suggère également FreeMarker . Freemarker est (pour autant que je sache) rapide et a une certaine intégration des fonctionnalités de Spring comme la liaison.

16
rompetroll

Spring MVC fournit une intégration avec de nombreux différents voir les technologies . Je recommanderais d'utiliser FreeMarker ou Velocity .

9
yfrangi

Bien que ce soit une vieille question, j'ai pensé offrir une alternative prometteuse qui est Scalate .

Scalate est la centrale des options de modèles. Le seul problème est que Scalate nécessite beaucoup de dépendances (alors qu'il nécessite Scala il ne nécessite pas que vous écriviez en Scala).

Mon préféré actuel est cependant Handlebars.Java qui a une intégration Spring.

8
Adam Gent

(Ma réponse précédente devenait mal datée ici.) Freemarker est au moins aussi bon que Velocity. Mais Thymeleaf semble encore plus convaincant, avec le dialecte de mise en page, il peut rendre inutiles les cadres de modèles tels que les sitemesh et les tuiles. Pour JSF, critique de Thoughtworks semble valide:

Nous continuons de voir des équipes rencontrer des problèmes avec JSF - JavaServer Faces - et nous vous recommandons d'éviter cette technologie. Les équipes semblent choisir JSF car il s'agit d'une norme Java EE sans vraiment évaluer si le modèle de programmation leur convient. Nous pensons que JSF est défectueux car son modèle de programmation encourage l'utilisation de ses propres abstractions plutôt que de les intégrer pleinement le modèle Web sous-jacent. JSF, comme les formulaires Web ASP.NET, tente de créer des arborescences de composants avec état sur le balisage HTML supérieur et le protocole HTTP sans état. Les améliorations de JSF 2.0 et 2.2, telles que l'introduction de vues sans état et la promotion de GET, sont des pas dans la bonne direction, peut-être même une reconnaissance que le modèle d'origine était défectueux, mais nous pensons que c'est trop peu trop tard. Plutôt que de traiter de la complexité de JSF, nous recommandons aux équipes d'utiliser des cadres simples et de travailler en étroite collaboration avec les technologies Web, y compris HTTP, HTML et CSS.

5
Nathan Hughes

J'utilise Stripes et Spring ensemble. Les rayures restent hors de votre chemin la plupart du temps, mais augmentent le printemps bien quand vous en avez besoin, je trouve.

3
Quotidian

J'utilise vitesse et Spring MVC. De plus, j'héberge mon application sur Google App Engine et je n'ai aucun problème.

3
Athens Holloway

Vous pouvez également utiliser Angular (framework côté client) pour votre couche View dans Spring MVC.

3
ddsultan

Je pense que Tuiles pourrait vous aider.
Vous pouvez définir des modèles et utiliser JSTL à l'intérieur.

2
amanas

Ma suggestion est de ne pas regarder le cadre de vue tel que décrit dans la plupart des éléments ci-dessus qui n'a pas été écrit au-dessus du MVC du printemps, car vous vous retrouverez dans des problèmes tels que les publications, ce qui signifie que vous ne pourrez pas soumettre les données de cette technologie de vue et récupérer la réponse du serveur. par exemple, comme la validation, modifier la soumission des données qui est actualisée avec les données du serveur NE FONCTIONNERA PAS.

Cela est dû au fait que Java dans certaines technologies de vue ci-dessus n'utilisent pas le cycle de vie du conteneur Spring. Vous ne pourrez les utiliser que pour la vue pure exemple de demande sans état. Exemple avec JSF vous ne le ferez pas être en mesure d'utiliser les publications car les publications jsf ne fonctionnent que si vous utilisez le cycle de vie jsf et si vous utilisez le cadre de ressort JSF view resolver avec spring mvc vous ne pourrez pas faire de publication, vous devez donc remplacer le contrôleur de servlet jsf au lieu du contrôleur mvc à ressort .

Encore une fois, car l'exigence de votre projet complet n'est pas claire et si vous ne souhaitez pas d'exigence de publication, vous pouvez utiliser certains des choix ci-dessus.

un exemple de technologie de vue qui est écrite sur le dessus et le ressort mvc est zk mvc basé sur le framework zk dans lequel vous pouvez étendre vos contrôleurs spring mvc à partir de ZK GenericForwardComposer pour gérer les événements. Vous pouvez toujours utiliser Spring pour gérer le cycle de vie de ces contrôleurs à l'aide du framework Spring.

vous pouvez google pour trouver d'autres produits similaires.

Cet examen est basé sur une conception de haut niveau du cycle de vie du cadre.

Bonne chance !!!

2
Agassis

Apache Velocity est une bonne alternative à Java Server Pages.

1
Harshana

Qu'en est-il de phpj ?

Il peut être utilisé comme modèles de vue ou vous pouvez créer votre système de serveur Web à partir de zéro

J'ai fait phpj parce que je n'aime pas devoir mettre à jour mon application et la charger avec Tomcat tout le temps, donc avec cela je peux utiliser des emplacements statiques pour mon application web en utilisant des configurations de type Apache

1
larsig

Vous pouvez exécuter Facelets au-dessus de Spring Webflow

1
Tommy B