Quels sont les avantages et les inconvénients des différents frameworks Web Java? [fermé]


85

J'envisage de créer mon propre site Web en utilisant Java et j'essaie de décider quel framework utiliser. Cependant, faire une recherche rapide de frameworks Java en retourne plus de 50!

Mon site Web sera juste pour mon propre plaisir de le construire au début, mais s'il devient populaire, il serait bon qu'il ait une certaine évolutivité, ou au moins puisse être en mesure de le redessiner pour cela.

Quelles sont les principales différences entre les frameworks les plus populaires? Y a-t-il des cas où l'un surpasse considérablement les autres? Par exemple, les applications d'entreprise à fort trafic par rapport aux petites applications à faible trafic. Je me demande également si certains sont beaucoup plus faciles à apprendre et à utiliser que d'autres.

Y a-t-il quelqu'un qui a l'expérience de certains de ces cadres et qui peut faire une recommandation? Le grand nombre de choix sert-il simplement d'avertissement précoce pour éviter le développement Web basé sur Java lorsque cela est possible?


Dans une certaine mesure, c'est comme dire "faire une recherche rapide d'outils renvoie plus de 50 au choix; devrais-je choisir un marteau, un tournevis ou une pince?" Pourtant, avec les sous-questions, c'est une question "bonne subjective" décente.
Pops

"Drôle" comme d'habitude, questions et réponses extrêmement utiles (je viens de commander un livre sur Wicket, merci à tous), mais tout le message est fermé car non constructif. "cette question sera PROBABLE" - et ce fait sec, rien de spéculatif, oh ironie ...
greenoldman

Réponses:


59

J'ai beaucoup utilisé Tapestry 3 , Wicket , Echo et JSF . Je vous recommande vraiment de regarder ces derniers et de choisir celui qui vous semble le plus simple et qui correspond le mieux à la façon dont vous préférez travailler.

Parmi eux, le plus confortable pour moi de travailler était Wicket , en raison de la nature légère de la création de composants et de la simplicité de la création de modèles de page. Cela va doublement si vous utilisez votre propre code db au lieu d'Hibernate ou d'un autre framework (je n'ai jamais été complètement satisfait de Wicket Hibernate ou de Spring Integration).

Echo est génial si cela ne vous dérange pas d'écrire toute votre mise en page en Java. Je sais que c'est différent maintenant, mais je pense toujours que ce produit sert un créneau assez restreint. Ils modifient également le modèle de développement à chaque version majeure.

Tapestry est un excellent produit, mais il est évidemment très différent des autres en termes de modèle de développement car il est principalement dirigé par un mec. Howard Lewis Ship est sans aucun doute assez intelligent, mais je suis déçu de leur décision d'oublier fondamentalement la rétrocompatibilité avec chaque version. Encore une fois, cependant, pour vos besoins, cela n'a peut-être pas d'importance, et j'ai toujours trouvé que les produits Tapestry étaient agréables à utiliser.

JSF est sorti depuis des années et se sent toujours comme quelque chose qu'un gars de Struts a construit pour résoudre tous les problèmes de Struts. Sans vraiment comprendre tous les problèmes avec Struts. Il a toujours une sensation inachevée, bien que le produit soit évidemment très flexible. Je l'utilise et ai un penchant pour lui, avec de grands espoirs pour son avenir. Je pense que la prochaine version (2.0) qui sera livrée en JEE6 le fera vraiment prendre son envol, avec une nouvelle syntaxe de modèle (similaire à Facelets) et un modèle de composant simplifié (composants personnalisés dans un seul fichier ... enfin).

Et, bien sûr, il existe un million de frameworks et d'outils plus petits qui ont leur propre suivi ( Velocity pour les besoins de base, JSP brutes , Struts, etc.). Cependant, je préfère généralement les frameworks orientés composants.

En fin de compte, je vous recommande de jeter un coup d'œil à Tapestry, Wicket et JSF et de choisir celui qui vous convient le mieux. Vous en trouverez probablement un qui correspond parfaitement à votre façon de travailler très rapidement.


Si votre application Web est basée sur le contenu comme un système de forum, je vous suggère d'utiliser GWT et Ext-js. Si votre application Web ressemble plus à une application de bureau comme un terminal ERP, je vous suggère d'utiliser ZK, Echo3, Vaddin et GWT. Je ne suggérerai aucune solution JSF car sans le fait "C'est la norme JEE", je n'ai trouvé aucun avantage à les utiliser.
Zanyking

1
@Zanyking - Si votre forum a besoin de SEO, vous trouverez GWT difficile, imo.
jsight

3
JSF est probablement exagéré pour un site Web, au lieu de cela, j'opterais pour des cadres plus productifs, ... le développement devrait rester amusant, et JSF n'a pas été construit avec `` Fun '' à l'esprit :)
HeDinges

1
Tapestry, Wicket, JSF et Echo sont tous orientés composants et GWT, Ext-js et Vaadin sont orientés Javascript. N'oubliez pas de jeter un œil à tous les merveilleux frameworks MVC "classiques" tels que Spring MVC, Play framework, Grails et Stripes. Ils ont un modèle de programmation très différent des précédents, mais ont d'autres points forts (c'est pourquoi il y a tant de frameworks - des objectifs, des besoins et des goûts différents nécessitent des outils différents).
DaGGeRRz

39

Mon préféré est le Spring Framework. Avec 2.5 Spring, MVC est vraiment génial, avec de nouvelles annotations, une convention sur les fonctionnalités de configuration, etc.

Si vous faites juste quelque chose de très simple, vous pouvez également essayer d'utiliser l'API Servlet standard et ne pas vous soucier d'un framework.


1
Votez pour mentionner l'utilisation de l'API Servlet standard pour quelque chose de simple.
lsiu

1
J'éviterais tout framework 'web mvc', pour les raisons exposées dans le premier chapitre (gratuit) de Wicket In Action. De plus, j'éviterais d'utiliser directement l'API Servlet, sauf si vous avez une application d'une seule page ou si vous cherchez à écrire votre propre framework à partir de zéro.
Eelco

3
J'aime aussi Spring, mais j'ai trouvé que toute la configuration ne rapporte que si vous écrivez une application mahoosive.
Leonard Ehrenfried

1
Il n'y a pratiquement aucune configuration utilisant des annotations.
bpapa

1
@bpapa Les annotations placent simplement la configuration dans vos classes java au lieu de xml.
Steven le

25

Je recommande le framework Wicket orienté composants . Il vous permet d'écrire votre application Web dans un ancien code Java, vous pouvez utiliser des POJO comme modèle pour tous les composants et vous n'avez pas besoin de vous amuser avec d'énormes fichiers de configuration XML.

J'avais développé avec succès une application bancaire en ligne avec Struts lorsque j'ai découvert Wicket et vu à quel point le développement d'applications Web peut être facile!


17

J'ai récemment commencé à utiliser le Framework Stripes . Si vous recherchez un cadre basé sur des requêtes qui est vraiment facile à utiliser, mais n'impose aucune limite à ce que vous faites, je le recommande vivement.

C'est similaire aux entretoises, mais cela va bien au-delà. Il existe même des projets de plugins qui vous permettent d'utiliser hibernate ou jpa avec très peu de configuration.

Il y a beaucoup de bons cadres là-bas même si j'ai entendu dire que wicket est également un bon, mais je ne l'ai pas utilisé.


16

Je n'ai pas essayé moi-même, mais je pense

http://www.playframework.org/

a beaucoup de potentiel ...

venant de php et d'asp classique, c'est le premier framework web java qui me semble prometteur ....


2
C'est drôle que c'est la cinquième fois aujourd'hui que j'ai vu "Je ne l'ai pas utilisé, mais je recommande Play" ici sur stackoverflow.
Marko

11

MISE À JOUR: Tapestry 5.2 est sorti, il n'est donc pas abandonné, comme cela semblait l'être auparavant. Mon expérience est avec Tapestry 4, pas 5, donc votre kilométrage peut varier. Mon opinion sur Tapestry a changé au fil des ans; J'ai modifié ce message pour le refléter.

Je ne peux plus recommander Tapestry comme je le faisais auparavant. Tapestry 5 semble être une amélioration significative, mais mon principal problème avec Tapestry n'est pas avec la plate-forme elle-même; c'est avec les gens derrière.

Historiquement, chaque mise à jour majeure de la version de Tapestry a rompu la compatibilité avec les préjugés extrêmes, bien plus que ce à quoi on pourrait s'attendre. Cela semble être dû à l'incorporation de nouvelles techniques ou technologies de codage qui nécessitent des réécritures importantes.

Howard Lewis Ship (l'auteur principal de Tapestry) est certainement un brillant développeur, mais je ne peux pas dire que je me soucie de sa gestion du projet Tapestry. Le développement de Tapestry 5 a commencé presque immédiatement après l'expédition de Tapestry 4. D'après ce que je peux dire, Ship s'est à peu près dévoué à cela, laissant Tapestry 4 entre les mains d'autres contributeurs, qui, à mon avis, ne sont pas aussi capables que Ship. Après avoir fait le douloureux passage de Tapestry 3 à Tapestry 4, j'ai senti que j'avais été abandonné presque immédiatement.

Bien sûr, avec la sortie de Tapestry 5, Tapestry 4 est devenu un produit hérité. Je ne voudrais pas de problème avec cela si le chemin de mise à niveau n'a pas été si brutal à nouveau . Alors maintenant, notre équipe de développement est dans une position plutôt peu enviable: nous pourrions continuer à utiliser une plate-forme Web essentiellement abandonnée (Tapestry 4), faire la mise à niveau odieuse vers Tapestry 5, ou abandonner complètement Tapestry et réécrire notre application en utilisant une autre plate-forme. Aucune de ces options n'est très intéressante.

Tapestry 5 est censé être écrit de manière à réduire la probabilité de rupture de la mise à jour à partir de ce point. Un bon exemple est dans les classes de page: dans les incarnations précédentes, les classes de page descendant d'une classe de base fournie par Tapestry; les changements d'API incompatibles dans cette classe étaient à l'origine d'un grand nombre de problèmes de compatibilité descendante. Dans Tapestry 5, les pages sont des POJO qui sont améliorés au moment de l'exécution avec la "poussière de fée magique de la Tapisserie" via des annotations. Ainsi, tant que le contrat pour les annotations est maintenu, les modifications apportées à Tapestry n'affecteront pas vos classes de page.

Si tel est le cas, l'écriture d'une nouvelle application à l'aide de Tapestry 5 pourrait bien se révéler. Mais personnellement, je n'ai pas envie de remettre ma main sur le brûleur.


Mise à jour: Avec le temps, le projet Tapestry semble avoir été abandonné. Il n'y a pas eu de versions de Tapestry 5 depuis avril '09, et Tapestry 4, toujours avec un tas de bugs en suspens dans leur JIRA, n'a pas eu de mise à jour depuis '08. Pour cette raison, je ne peux plus recommander Tapestry comme un choix viable pour un cadre d'application Web.
Robert

La tapisserie n'a pas été abandonnée. La branche Tapestry 5 est assez active avec 5.1 comme option stable et 5.2 à venir.
Timo Westkämper

Tu as raison. En fait, Tapestry 5.2 a depuis été publié. J'ai mis à jour le message pour refléter mon opinion mise à jour sur Tapestry.
Robert J. Walker

9

Disclamer: je travaille chez Vaadin (anciennement IT Mill)

Si vous faites quelque chose de RIAish, vous voudrez peut-être jeter un coup d'œil à Vaadin . C'est un framework AJAX open source orienté UI qui, pour moi, est agréable à utiliser (je viens moi-même d'un background PHP).

Il y a une étude de cas qui compare faire la même application (c'est-à-dire deux applications avec le même ensemble de fonctionnalités) dans Icefaces et Vaadin. En un mot, il indique que le développement de l'interface utilisateur a été considérablement plus rapide.

Même si l'étude est hébergée sur le wiki de l'entreprise, je peux vous assurer qu'elle est objective, authentique et véridique, même si je ne peux pas vous forcer à me croire.


+1 Le framework est rebaptisé vaadin (anciennement ITMill). Je dois dire que vaadin est un très joli framework web et tout java rien d'autre. Je trouve cela très productif.
fmucar

7

Après un long moment à tester diverses solutions, pour moi, cela s'est avéré être:

  • Spring MVC pour la couche de présentation et de contrôleur (PAS de Spring Webflow cependant, car mes flux sont basés sur ajax)

  • jQuery pour tous les trucs côté client

  • Spring Security pour l'aspect sécurité

  • Hibernation / JPA2

  • Jetée pour le plaisir des suites (comète)

Un mois d'une courbe d'apprentissage extrêmement raide, mais maintenant je suis heureux.

Je voudrais également mentionner que j'étais juste un petit pas loin de sauter tout ce truc Java et d'apprendre à la place Scala / LIFT. En ce qui me concerne, tout en Java qui est lié au développement Web de pointe (comète, communication asynchrone, sécurité (oui, même avec Spring Security!)) Est toujours un peu un hack (prouvez-moi tort par des preuves, s'il vous plaît !). Pour moi, Scala / LIFT semble être une solution plus prête à l'emploi et tout-en-un.

La raison pour laquelle j'ai finalement décidé de ne pas aller avec Scala est

  • en tant que chef de projet, je dois considérer les ressources humaines et les développeurs Java sont beaucoup plus faciles à trouver que les développeurs Scala

  • pour la plupart des développeurs de mon équipe, le concept fonctionnel de Scala, aussi excellent soit-il, est difficile à comprendre

Cheers Er


C'est une bonne chose. Bon choix de ressort MVC, restez du côté sûr (et sage).
Victor Ionescu le

5

J'ai également entendu de bonnes choses sur Spring Framework. En général, cependant, j'ai été déçu par la plupart des frameworks Web Java que j'ai examinés (en particulier Struts).

Pour une application simple, j'envisagerais certainement d'utiliser des servlets et des JSP "bruts" et je ne me soucierais pas d'adopter un framework. Si les servlets sont bien écrits, il devrait être simple à l'avenir de porter vers un framework si nécessaire lorsque l'application devient plus complexe.


1
+1 pour "Si les servlets sont bien écrits ..."
Chris


4

Tous - c'est le problème ;-)


3

Je pense que pour vos modestes besoins, il vous suffit de coder des servlets ou de simples pages jsp que vous pouvez servir à partir du serveur Tomcat. Je ne pense pas que vous ayez besoin de tout type de cadre Web (comme des struts) pour les données personnelles de sites Web


3

Dire "utiliser JSF" est un peu trop simple. Lorsque vous décidez d'utiliser JSF, vous devez choisir une bibliothèque de composants en plus. Utiliserez-vous MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ )? Ou peut-être ICEfaces ( http://www.icefaces.org/ )? Oh, et si vous utilisez ICEfaces, utiliserez-vous des JSP ou des Facelets pour vos vues?

À mon avis, c'est trop difficile à dire. Personne n'a le temps d'évaluer toutes les alternatives prometteuses, du moins dans les projets sur lesquels je travaille, car elles ne sont pas assez grandes pour faire des phases d'évaluation de trois mois. Cependant, vous devriez rechercher certains d'entre eux qui ont une communauté nombreuse et active et qui ne sont pas partis depuis un an. JSF existe depuis un certain temps, et comme il est poussé par le soleil, il le restera encore. Je ne peux pas dire si c'est le meilleur choix, mais ce sera un bon choix.


Jsp a été pénible pour moi lors de la création d'une application Web que nous vendons. Une mise à jour considérera plutôt les facelets.
Thorbjørn Ravn Andersen

Oui, à ce moment-là, je suis presque sûr: utilisez des facelets au lieu de JSP. C'est beaucoup mieux et je ne vois aucun (gros) inconvénient.
Tim Büthe


3

Pour les sites à fort trafic, j'utiliserais un cadre qui ne gère pas l'état du client sur le serveur - Wicket, JSF et Tapestry gèrent l'état du client sur le serveur. Je n'utiliserais ces frameworks (Wicket est mon préféré) que si l'application devait ressembler davantage à une application de bureau. Mais j'essaierais d'utiliser une approche REST + AJAX plus évolutive et plus simple.

Spring MVC serait un candidat, mais depuis Spring MVC 3, il a un étrange modèle de programmation surchargé d'annotations qui n'utilise pas les avantages du typage statique. Il y a d'autres choses horribles comme les paramètres de sortie dans les méthodes combinées avec un retour habituel, il y a donc deux canaux de sortie d'une méthode. Spring MVC a également tendance à réinventer la roue et vous aurez plus à configurer par rapport aux autres frameworks. Je ne peux pas vraiment recommander Spring MVC bien qu'il ait de bonnes idées.

Grails est un moyen pratique d'utiliser Spring MVC et d'autres frameworks établis comme Hibernate. Le codage est amusant et vous verrez rapidement les résultats.

Et n'oubliez pas que l'API Servlet avec quelques petits assistants comme FreeMarker pour la création de modèles est très puissante.


3

J'ai évalué pas mal de frameworks et Vaadin ( http://vaadin.com/home ) a percolé jusqu'au sommet.

Vous devriez au moins lui donner une courte évaluation.

À votre santé!


2

Mon choix serait Wicket (pour les grands projets et une base d'utilisateurs prévisible), GWT (pour les grands projets qui sont principalement destinés au public) ou juste un cadre de service (comme Jersey / JAXRS) avec une boîte à outils JavaScript (pour les petits et moyens projets) .


2

Je recommande Seam, surtout si vous avez besoin de persévérance.



1

Pour une interface graphique rapide et sophistiquée, vous pouvez utiliser JSF avec la bibliothèque Richfaces . Les composants d'interface utilisateur Richfaces sont faciles à utiliser et des références pratiques sont disponibles avec une démonstration de code dans le site de démonstration. Probablement plus tard, lorsque votre site aura plus de données à gérer et que beaucoup d'informations devront être traitées dans la base de données, vous pourrez y brancher n'importe quel framework d'accès à la base de données (ORM).


0

Je ne peux pas croire que personne n'ait mentionné GWT


Je ne considérerais pas vraiment GWT comme un framework d'application Web (c'est plutôt une boîte à outils Web, d'où son nom). GWT est excellent cependant et va bien avec Spring par exemple.
stian

cadre ou boîte à outils, quelle est la différence concrète vraiment? Le codage avec GWT donne autant l'impression de travailler avec un framework que les autres options.
Eelco



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.