web-dev-qa-db-fra.com

Choisir un Java Web Framework maintenant?)

nous en sommes au stade de la planification de la migration d’un site Web volumineux basé sur un framework mvc développé sur mesure vers un framework web basé sur Java) et fournissant un support intégré pour ajax, le contenu multimédia enrichi, mashup, etc. mise en page basée sur les modèles, validation, séparation maximale du code html/Java. Bien que Grails semble être un bon choix, nous ne souhaitons pas utiliser de langage de script. Nous souhaitons continuer à utiliser Java. La mise en page basée sur des modèles est une préoccupation majeure Utilisez cette application Web avec plusieurs sites Web dotés de fonctionnalités similaires mais d'apparence radicalement différente.

La solution basée sur le portail est-elle un bon compromis pour ce problème?

Toute idée sur l'utilisation de "Spring Roo" ou "Play" sera très utile.

J'ai trouvé des articles similaires, comme this , mais il a plus d'un an. Les choses ont sûrement changé entre-temps!

EDIT 1: Merci pour ces bonnes réponses! Ce site est en train de devenir la meilleure source unique d'informations sur les programmeurs in-the-trenches. Cependant, je m'attendais à plus d'informations sur l'utilisation d'un duo portal-cms. Jahia a l'air bien. Quelque chose de semblable?

149
cosmos

La solution basée sur le portail est-elle un bon compromis pour ce problème?

Personnellement, je resterais à l’écart des grandes solutions de portail (ce sont souvent des tueuses de la productivité). J'ai entendu de bonnes choses à propos de Gatein mais je n'ai aucune expérience réelle avec cela.

Toute idée sur l'utilisation de "Spring Roo" ou "Play" sera très utile.

À propos de Spring Roo, j'ai lu les réponses précédentes telles que Spring Roo Vs (Wicket et Spring) et d'autres choses sur Internet, mais je ne suis toujours pas convaincu (peut-être que je ne comprends pas), je Je ne suis pas sûr de sa maturité et, plus important encore, je me demande vraiment ce que SpringSource fait avec Grails et Roo (non, Grails vs Roo - pourquoi SpringSource utilise deux technologies très similaires? ne me persuadez pas qu’ils survivront tous les deux).

Je ne peux pas en dire long sur Play. J'ai vu la démo comme tout le monde, mais j'aimerais lire des retours d'expérience. En attendant, je vais attendre.

J'ai trouvé des messages similaires (...). Les choses ont sûrement changé entre-temps!

Oui et non :) Mais entrons dans les cadres de présentation: il n'y a pas de réponse unique à votre question (comme il y a un an), il y a une douzaine de cadres autour et aucun gagnant clair. Juste pour en citer quelques-uns:

  • JSF: Beaucoup de sceptiques à propos de ce framework à base de composants, y compris moi, donc je ne suis pas le mieux placé pour en parler, mais ...
  • JSF 2 (+ CDI/Weld): Les sceptiques de JSF sont encouragés ( par Gavin King ) à "jeter un second regard". En effet, je pense que JSF 2 est une grosse amélioration, surtout avec CDI, mais ... il est encore assez récent (comprenez, il manque de retour en arrière). Si vous voulez embrasser Java EE 6, vérifiez-le bien.
  • Wicket: Un autre framework basé sur des composants qui attire de plus en plus l'attention. J'entends surtout de bonnes choses à son sujet: plus simple que JSF, beau design, haute testabilité, convivialité des concepteurs HTML, etc. Vous pouvez l'aimer.
  • Tapisserie: Ne le faites pas (voir Pourquoi avez-vous cessé d'utiliser Tapestry? )
  • Struts 2, Spring MVC, Stripes: frameworks basés sur les actions. Tout à fait correct et couvrira vos besoins (personnellement, j'aime bien Stripes et sa convention sur la configuration, voir Stripes vs. Struts2 pour en avoir une idée).
  • GWT, Flex, Grails: Ce ne sont peut-être pas ce que vous cherchez. Je ne peux pas vraiment parler de (versions récentes) de Flex et de GWT mais je sais que Grails fait acertainsfans .

En fait, je suggérerais de jeter un coup d'œil aux présentations de Matt Raible, il a vraiment fait un excellent travail en comparant les cadres Web, en montrant leurs forces et leurs faiblesses, en rassemblant des faits et des chiffres, en montrant les tendances ... I recommander:

Vraiment, jetez un coup d'œil à ces présentations, elles vous aideront à trouver un cadre approprié (il n'y a pas de réponse unique mais vous pouvez limiter le choix par élimination) et pourraient changer votre point de vue.

146
Pascal Thivent

J'utilise Spring 3 et Jquery depuis un moment, mais j'ai entendu parler de Play et je me suis lancé à la tâche. Je l’aime vraiment beaucoup. Play est un excellent compromis entre quelque chose comme PHP et les environnements très lourds Java), comme Spring.

Les choses que j'aime le plus dans le jeu sont:

  • Il est très facile de lancer une application de jeu. Il faut aller assez loin avec le codage et la configuration pour obtenir une application simple à l'écran avec Spring (bien que Spring 3 l'ait rendu beaucoup plus facile).
  • Printemps La sécurité est géniale, mais au prix de la complexité. Le module de sécurité de Play est très simple et couvre les besoins de probablement 90% des applications existantes.
  • Vous pouvez modifier le code et cliquer sur Actualiser dans le navigateur pour voir le changement, comme avec PHP au lieu de devoir tout redéployer avec les frameworks basés sur Servlet.
  • Les messages d'erreur sont affichés correctement et ne sont pas si cryptés la plupart du temps. Le jeu doit encore travailler sur la gestion des erreurs
  • Il existe un mécanisme de plug-in pour Play assez simple.
  • La persistance des objets est très bien réalisée dans la mesure où une base de données en mémoire et JPA sont livrés avec le framework, il n'y a donc aucune configuration d'outils de persistance des objets externes. Passer de la base de données en mémoire à un SGBDR réel est un changement d’une ligne dans le fichier de configuration.
  • La configuration de MVC est très bien faite. La classe Model que vous étendez pour créer vos objets de domaine s'intègre au gestionnaire d'entités JPA. Ce ne sont pas que des POJO.
  • Le mappage des URL sur les contrôleurs est simple et flexible et constitue un fichier "routes".
  • Chaque fois que vous créez un projet, Play gère toutes les dépendances de jar et Play dispose d'un utilitaire permettant à Eclipse-ify (ou peu importe IDE vous le souhaitez)) le projet afin qu'il soit importé directement dans votre IDE favori.

Choses que je n'aime pas chez Play

  • La documentation n'est pas encore complète, de nombreuses fonctionnalités non documentées existent toujours.
  • La structure étant le serveur, vous devez donc dédier un port à chaque application. Je pense que quelqu'un travaille sur un plugin hôte virtuel mais je ne l'ai pas encore vu en action.
  • C'est jeune, le projet est génial et la technologie est géniale mais il a vraiment besoin de plus de développeurs. J'adorerais y consacrer un peu de temps, on verra.
41
chad

Le meilleur choix pour moi est Wicket . Séparation claire du balisage et du code Java. Très facile à écrire et à utiliser des composants. Simple à utiliser. Ajax, testabilité. Vous pouvez déboguer directement dans vos pages/composants et ne pas recevoir de messages d'erreur cryptés votre implémentation JSF;)

Il y a aussi un bon guichet de comparaison <-> JSF dans performance

17
bert

Les trois meilleurs choix pour moi sont (par ordre alphabétique):

Ils:

  • avoir un bon support ajax
  • vous permettent de créer des sites Web réels et non des applications (comme GWT)
  • stable, bien documenté, largement utilisé
  • MVC
  • java pur
  • intégration facile avec Spring en tant que middleware
13
Bozho

Le jeu est très similaire à ROR, une version de ROR en Java

11
Gerard Banasig

Contrairement aux autres réponses, je voudrais souligner les inconvénients (IMHO) des frameworks Web populaires:

JSF2 - Publié et déjà vieilli. Encore peu de nouvelles/articles/blogs/expériences. Je suis sceptique. J'attends toujours la prochaine version majeure de Richfaces/Icefaces, qui prend entièrement en charge jsf 2. Actuellement, seules les versions alpha peuvent être téléchargées.

Struts 2 - Cela ne semble être qu'une bonne chose si vous vous basez toujours sur les jambes de force et souhaitez refactoriser la majeure partie de votre code. Sinon: non.

GWT - Je n'aime pas l'approche de page unique et Java-> javascript. Je ne sais pas si une session - plusieurs vues/fenêtres peuvent être facilement réalisées. Pour moi, ce cadre devrait être utilisé pour les applications Internet riche à fenêtre unique et aux utilisateurs massifs.

Wicket - Belle approche, mais un peu verbeuse et trop peu de documentation disponible (à l'exception du bon guichet dans Action Book, mais cela ne couvre que la version 1.3). En outre, pour moi, il manque de gros projets qui sont construits sur le dessus. Et actuellement, je ne vois pas où passe la route du guichet ou s’il a déjà été conduit dans une impasse.

Spring MVC - Vous n'avez pas encore essayé, mais vous devez inclure de nombreux fichiers jars (spring mess) dans votre chemin de classe pour travailler correctement avec ce framework. Et cela repose sur JSP (dans la plupart des projets), que je considère déjà mort. Et vous obtenez uniquement un framework MVC pur - toutes les autres choses (ajax et autres) doivent être implémentées/intégrées.

Stripes - Un petit framework MVC conçu par Nice, mais trop peu de documentation, trop peu de commits/committers, trop peu de communiqués, trop peu de soutien de l'industrie, trop moins d'activité de la liste de diffusion.

Je suis également curieux de savoir si j'ai raté un cadre majeur (j'ai laissé intentionnellement Tapestry), ce qui pourrait être une option pour vous (et aussi pour moi aussi).

10
MRalwasser

J'ai eu beaucoup de succès avec JAX-RS. C'est le seul Java Web Framework qui possède une sorte de spécification JSR et plusieurs implémentations autres que les spécifications de servlet et de portlet (bien que cela puisse être une mauvaise chose).

Une chose qui est mauvaise et bonne sur Java est que vous pouvez choisir et faire correspondre les frameworks (python a aussi cette fonctionnalité/problème)). un panier.

Voici un général Java Recette de pile d'applications Web:

Javascript/Flash + Traitement des demandes/réponses + Injection de dépendances + Persistance

Javascript: JQuery, Prototype, Dojo

demande/réponse: Spring MVC, Stripes et mon JAX-RS préféré (Jersey, Apache CXF)

Injection de dépendance: Printemps, Guice

Persistence: JPA (Hibernate, stockage Google App), Hibernate, JDO et plus.

J'ai également eu beaucoup de succès en utilisant AspectJ pour créer Java "sucer moins". En utilisant @Configurable de Spring et les mixins ITD d'AspectJ, vous pouvez obtenir Rails comme Domain objets (c'est en fait ce que Roo fait mais vous n'avez pas besoin de Roo pour le faire).

8
Adam Gent

J'ai trouvé rayures vraiment efficace et étonnamment léger .... il se veut plus léger que entretoises . J'ai entendu des amis qui sont des développeurs Web à plein temps que JSF ne vaut pas la peine de se préoccuper de son travail, bien que je ne possède aucune expérience pratique et que je ne puisse pas le prouver avec des exemples (!).

6
James B

Jetez un oeil à RESThub , qui suit les mêmes principes que Play! mais implémenté en réutilisant des frameworks/outils de niveau entreprise tels que Maven 3/Spring 3/Jersey/jQuery.

RESThub est très perturbant par rapport à d’autres frameworks car c’est un toolkit complet, mais sans serveur MVC ni framworks basé sur des servlets. Au lieu de cela, il utilise une interface graphique basée sur l’interface utilisateur jQuery qui utilise les services Web JAX-RS (REST) ​​et un système de gabarit Javascript basé sur les EmbeddedJs.

Les serveurs sont sans état et nous utilisons HTML5 sessionStorage pour conserver la session côté client. Cette approche est conçue pour la RIA et l'évolutivité.

Certaines applications de démonstration sont fournies (même si elles sont en construction).

5

JSF est un cadre sympa, mais JSF 1.2 manquait de vision pendant des années après sa sortie. JSF 2.0 semble prometteur et de nombreuses nouveautés ont été ajoutées à JSF 1.2: support ajax, facelets, support des annotations et conventions par défaut (moins de XML), construction de composants plus simple que la version 1.2.

Il s’intègre bien avec Spring également, si vous êtes préoccupé par l’assistance DI.

3
user252942

Je seconderais la recommandation du printemps. Je ne suis pas un grand fan de GWT, je ne pense pas que le = compilateur croisé Javascript est encore là. Java -> Javascript est encore là. Je travaille sur un AJAX app qui utilise spring sur le serveur et jQuery sur le client Bien qu’il n’existe techniquement pas de support "prêt à l’emploi" pour jQuery, la mise en oeuvre de spring-MVC AjaxView est extrêmement simple et nécessite environ 25 lignes de code.

2
D.C.

Peut-être un peu tard pour le spectacle, mais je dois mentionner Vaadin . La programmation est effectuée dans Java exclusivement, avec une approche basée sur les composants. La communication client-serveur concerne davantage l’interaction de l’utilisateur que le transport de données; toute la logique d’entreprise réside sur le serveur.

2
KoW

LOGICIEL PORTATIF DE BACKBASE

Il y a quelques années, le logiciel de portail " Backbase " n'était pas encore très développé. Mais était bon et facile pour le développement.

1
YoK

Je pense que ce que vous recherchez est quelque chose de proche de Jahia. Il prend en charge GWT, Mashups, contenu multimédia, etc.

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

1
Syed M Shaaf

Jetez un oeil à ItsNat

ItsNat est fondamentalement un Java W3C sur un serveur, d’une simplicité étonnante (DHTML sur le serveur), promotion AJAX intensive interface à une seule page applications

1
jmarranz

Ext GWT + Spring

1
Mihir Mathuria

Les frameworks RIA basés sur les joueurs sont des solutions qui méritent plus qu'une balle. Ex. Adobe Flex + Java (Cela peut bien sûr dépendre du fait que votre "site" est vraiment un "site" ou davantage une "application", vous ne feriez pas de blog dans Flex .)

ajax,

Dans le sens d’AJAX-as-a-buzzword, Flex utilise généralement AMF (un protocole binaire qui est plus efficace que les protocoles utilisés par AJAX apps), bien que vous puissiez aussi faire strictement AJAX manipuler avec Flex aussi. Donc, Flex prend en charge AJAX, mais prend également en charge "meilleur que AJAX".

contenu multimédia enrichi, mashup,

Etant donné que Flex fonctionne sur la plate-forme Flash 'machine virtuelle', je pense qu’il ne reste que peu de choses à ajouter.

mise en page basée sur des modèles,

Vous ne savez pas exactement ce que cela veut dire, mais cela ressemble à Flex mxml.

validation,

Pris en charge, bien que vous puissiez décider de personnaliser certaines choses si vous voulez avoir du style. (Pas que vous deviez le faire.) La bonne chose est que vous pouvez être aussi sophistiqué que vous le souhaitez - ou non.

séparation maximale du code html/java

Vous ne pouvez pas obtenir plus de séparation en utilisant une approche de développement 'machine virtuelle' telle que Flex/Silverlight/JavaFX. Cela ne vous permet pas seulement de garder votre code de présentation séparé de votre couche d'accès à la logique et aux données côté serveur - cela garantit qu'ils sont séparés . La "virtualisation" de votre environnement de développement vous offre une compatibilité inter-navigateurs, une plate-forme cible cohérente, aucun souci des nouveaux navigateurs ni des nouvelles versions de navigateurs ne respectant pas votre application, des capacités de débogage haut de gamme, similaires à celles de Java, et un produit final plus professionnel/impressionnant .

0
Manius