Quali sono i pro e i contro dei vari framework web Java? [chiuso]


85

Sto valutando la possibilità di creare il mio sito Web utilizzando Java e sto cercando di decidere quale framework utilizzare. Tuttavia, una rapida ricerca di framework Java restituisce più di 50 tra cui scegliere!

Il mio sito web sarà solo per il mio divertimento di costruirlo all'inizio, ma se diventasse popolare, sarebbe bene che avesse una certa scalabilità, o almeno essere in grado di riprogettarlo per quello.

Quali sono le principali differenze tra i framework più popolari? Ci sono casi in cui uno supera in modo significativo gli altri? Ad esempio, applicazioni aziendali ad alto traffico rispetto a piccole applicazioni a basso traffico. Mi chiedo anche se alcuni siano molto più facili da imparare e da usare rispetto ad altri.

C'è qualcuno che ha esperienza con alcuni di questi framework e può fare una raccomandazione? L'enorme numero di scelte serve solo come avvertimento precoce per evitare lo sviluppo web basato su Java, ove possibile?


In una certa misura, questo è come dire "fare una rapida ricerca di strumenti restituisce più di 50 tra cui scegliere; dovrei scegliere un martello, un cacciavite o una pinza?" Tuttavia, con le domande secondarie, questa è una discreta domanda "soggettiva".
apre il

"Divertente" come al solito, domande e risposte estremamente utili (ho appena ordinato un libro su Wicket, grazie a tutti), ma l'intero post è chiuso perché non costruttivo. "questa domanda sarà PROBABILE" - e questo fatto secco, niente di speculativo, oh ironia ...
greenoldman

Risposte:


59

Ho usato Tapestry 3 , Wicket , Echo e JSF abbastanza ampiamente. Ti consiglio vivamente di esaminarli e scegliere quello che ti sembra più facile e che si adatti meglio al modo in cui preferisci lavorare.

Di questi, il più comodo per me con cui lavorare è stato Wicket , a causa della natura leggera della costruzione dei componenti e della semplicità del modello di pagina. Ciò è doppiamente così se stai usando il tuo codice db invece di Hibernate o qualche altro framework (non sono mai stato completamente soddisfatto di Wicket Hibernate o Spring Integration).

Echo è fantastico se non ti dispiace scrivere tutto il tuo layout in Java. So che ora è diverso, ma penso ancora che quel prodotto serva una nicchia piuttosto ristretta. Inoltre, a quanto pare, cambiano il modello di sviluppo con ogni versione principale.

Tapestry è un ottimo prodotto, ma ovviamente è molto diverso dagli altri in termini di modello di sviluppo in quanto è guidato principalmente da un tizio. Howard Lewis Ship è senza dubbio abbastanza intelligente, ma sono deluso dalla loro decisione di dimenticare sostanzialmente la retrocompatibilità con ogni versione. Di nuovo, però, per le tue esigenze questo potrebbe non avere importanza e ho sempre trovato piacevole lavorare contro i prodotti Tapestry.

JSF è uscito da anni e sembra ancora qualcosa che un ragazzo di Struts ha costruito per risolvere tutti i problemi di Struts. Senza comprendere veramente tutti i problemi con Struts. Ha ancora un aspetto incompiuto, sebbene il prodotto sia ovviamente molto flessibile. Lo uso e ne ho un po 'affetto, con grandi speranze per il suo futuro. Penso che la prossima versione (2.0) che verrà fornita in JEE6 lo porterà davvero nel suo, con una nuova sintassi del modello (simile a Facelets) e un modello di componenti semplificato (componenti personalizzati in un solo file ... finalmente).

E, naturalmente, ci sono un milione di framework e strumenti più piccoli che ottengono il proprio seguito ( Velocità per esigenze di base, JSP non elaborati , Struts, ecc.). In genere preferisco io stesso i framework orientati ai componenti.

Alla fine, consiglierei di dare un'occhiata a Tapestry, Wicket e JSF e di scegliere quello che ti sembra il migliore. Probabilmente ne troverai uno che si adatta perfettamente al modo in cui ti piace lavorare molto rapidamente.


Se la tua Web App è basata sui contenuti come un sistema di forum, ti suggerirò di usare GWT ed Ext-js. Se la tua Web App è più simile a un'app da scrivania come un terminale ERP, ti suggerisco di utilizzare ZK, Echo3, Vaddin e GWT. Non suggerisco alcuna soluzione JSF perché senza il fatto che "è standard JEE" non ho trovato alcun vantaggio nell'usarli.
Zanyking

1
@Zanyking - Se il tuo forum ha bisogno di SEO, troverai GWT difficile, imo.
jsight

3
JSF è probabilmente eccessivo per un sito Web, invece preferirei framework più produttivi, ... lo sviluppo dovrebbe rimanere divertente, e JSF non è stato creato pensando a "Fun" :)
HeDinges

1
Tapestry, Wicket, JSF ed Echo sono tutti orientati ai componenti e GWT, Ext-js e Vaadin sono orientati a Javascript. Non dimenticare di dare un'occhiata a tutti i meravigliosi framework MVC "classici" come Spring MVC, Play framework, Grails e Stripes. Hanno un modello di programmazione molto diverso dai precedenti, ma hanno altri punti deboli (questo è il motivo per cui ci sono così tanti framework: scopi, esigenze e gusti diversi richiedono strumenti diversi).
DaGGeRRz

39

Il mio preferito è lo Spring Framework. Con 2.5 Spring MVC è davvero incredibile, con nuove annotazioni, convenzioni sulle funzionalità di configurazione, ecc.

Se stai solo facendo qualcosa di super semplice, potresti anche provare a utilizzare la normale API Servlet e non preoccuparti di un framework.


1
Un voto positivo per aver menzionato l'utilizzo della normale API Servlet per qualcosa di semplice.
lsiu

1
Eviterei qualsiasi framework 'web mvc', per i motivi delineati nel primo capitolo (gratuito) di Wicket In Action. Inoltre, eviterei di utilizzare direttamente l'API Servlet a meno che tu non abbia un'applicazione a pagina singola o stia cercando di scrivere il tuo framework da zero.
Eelco

3
Anche a me piace la primavera, ma ho scoperto che tutta la configurazione ripaga solo se stai scrivendo un'applicazione mahoosive.
Leonard Ehrenfried,

1
Non c'è quasi nessuna configurazione che utilizzi le annotazioni.
bpapa

1
@bpapa Le annotazioni posizionano semplicemente la configurazione nelle classi java invece che in xml.
Steven

25

Raccomando il framework Wicket orientato ai componenti . Ti consente di scrivere la tua applicazione web in un semplice vecchio codice Java, puoi utilizzare POJO come modello per tutti i componenti e non è necessario scherzare con enormi file di configurazione XML.

Avevo sviluppato con successo un'applicazione di online banking con Struts quando ho scoperto Wicket e ho visto quanto può essere facile lo sviluppo di applicazioni web!


17

Recentemente ho iniziato a utilizzare Stripes Framework . Se stai cercando un framework basato su richiesta che sia davvero facile da usare, ma che non imponga limiti a ciò che stai facendo, lo consiglio vivamente.

È simile ai montanti, ma va ben oltre. Ci sono anche alcuni progetti di plugin che ti consentono di usare hibernate o jpa con una configurazione minima.

Ci sono molti buoni framework là fuori anche se ho sentito che anche il wicket è buono, ma non l'ho usato.


16

Non l'ho provato da solo, ma credo

http://www.playframework.org/

ha molto potenziale ...

proveniente da php e asp classico, è il primo framework web java che mi sembra promettente ...


2
è divertente che sia la quinta volta oggi che ho visto "Non l'ho usato, ma consiglio di giocare" qui su stackoverflow.
Marko

11

AGGIORNAMENTO: Tapestry 5.2 è uscito, quindi non è stato abbandonato, come sembrava in precedenza. La mia esperienza riguarda Tapestry 4, non 5, quindi il tuo chilometraggio potrebbe variare. La mia opinione su Tapestry è cambiata negli anni; Ho modificato questo post per rispecchiarlo.

Non posso più raccomandare Tapestry come facevo in precedenza. Tapestry 5 sembra essere un miglioramento significativo, ma il mio problema principale con Tapestry non è con la piattaforma stessa; è con le persone dietro.

Storicamente, ogni aggiornamento delle versioni principali di Tapestry ha rotto la retrocompatibilità con estremo pregiudizio, molto più di quanto ci si potrebbe aspettare. Ciò sembra essere dovuto all'incorporazione di nuove tecniche o tecnologie di codifica che richiedono significative riscritture.

Howard Lewis Ship (l'autore principale di Tapestry) è certamente uno sviluppatore brillante, ma non posso dire che mi interessi della sua gestione del progetto Tapestry. Lo sviluppo di Tapestry 5 è iniziato quasi immediatamente dopo la spedizione di Tapestry 4. Da quello che posso dire, Ship si è praticamente dedicato a questo, lasciando Tapestry 4 nelle mani di altri collaboratori, che secondo me non sono capaci quanto Ship. Dopo aver fatto il doloroso passaggio da Tapestry 3 a Tapestry 4, ho sentito di essere stato abbandonato quasi immediatamente.

Ovviamente, con il rilascio di Tapestry 5, Tapestry 4 è diventato un prodotto legacy. Non avrei problemi con questo se il percorso di aggiornamento non fosse di nuovo così brutale . Quindi ora il nostro team di sviluppo si trova in una posizione piuttosto poco invidiabile: potremmo continuare a utilizzare una piattaforma web essenzialmente abbandonata (Tapestry 4), fare l'aggiornamento atroce a Tapestry 5, o rinunciare completamente a Tapestry e riscrivere la nostra applicazione usando un'altra piattaforma. Nessuna di queste opzioni è molto attraente.

Tapestry 5 è presumibilmente scritto in modo da ridurre la probabilità di interruzioni dell'aggiornamento da questo punto in avanti. Un buon esempio è nelle classi di pagina: nelle incarnazioni precedenti, le classi di pagina discendevano da una classe base fornita da Tapestry; le modifiche alle API incompatibili in questa classe sono state la causa di un gran numero di problemi di compatibilità con le versioni precedenti. In Tapestry 5, le pagine sono POJO che vengono migliorate in fase di esecuzione con la "polvere magica di Tapestry" tramite annotazioni. Quindi, finché il contratto per le annotazioni viene mantenuto, le modifiche a Tapestry non influiranno sulle classi di pagina.

Se è corretto, scrivere una nuova applicazione utilizzando Tapestry 5 potrebbe andare bene. Ma personalmente non ho voglia di mettere di nuovo la mano sul fornello.


Aggiornamento: con il passare del tempo, il progetto Tapestry sembra essere stato abbandonato. Non ci sono state versioni di Tapestry 5 dall'aprile '09 e Tapestry 4, ancora con un mucchio di bug in sospeso nel loro JIRA, non ha avuto un aggiornamento dal '08. Per questo motivo, non posso più raccomandare Tapestry come una valida scelta per un framework per applicazioni web.
Robert J. Walker,

Tapestry non è stato abbandonato. Il ramo di Tapestry 5 è abbastanza attivo con 5.1 come opzione stabile e 5.2 in arrivo.
Timo Westkämper

Hai ragione. In effetti, Tapestry 5.2 è stato rilasciato da allora. Ho aggiornato il post per riflettere la mia opinione aggiornata su Tapestry.
Robert J. Walker

9

Disclamer: lavoro presso Vaadin (in precedenza IT Mill)

Se stai facendo qualcosa di RIAish, potresti dare un'occhiata a Vaadin . È un framework AJAX open source orientato all'interfaccia utente che, per me, è bello da usare (provengo da uno sfondo PHP io stesso).

C'è un caso di studio che confronta l'esecuzione della stessa applicazione (cioè due applicazioni con lo stesso insieme di funzionalità) in Icefaces e Vaadin. In poche parole, afferma che lo sviluppo dell'interfaccia utente è stato notevolmente più veloce.

Anche se lo studio è ospitato sul wiki dell'azienda, posso assicurare che è obiettivo, genuino e veritiero, anche se non posso costringerti a credermi.


+1 Il framework viene rinominato come vaadin (in precedenza ITMill). Devo dire che vaadin è un framework web dall'aspetto molto carino e tutto java nient'altro. Lo trovo molto produttivo.
fmucar

7

Dopo un lungo periodo di test di varie soluzioni, per me si è rivelato essere:

  • Spring MVC per la presentazione e il livello del controller (NO Spring Webflow, perché i miei flussi sono basati su ajax)

  • jQuery per tutte le cose lato client

  • Spring Security per, beh, l'aspetto della sicurezza

  • Hibernate / JPA2

  • Pontile per motivi di continuazione (cometa)

Un mese di una curva di apprendimento straordinariamente ripida, ma ora sono felice.

Vorrei anche menzionare che ero solo a un passo dal saltare tutta quella roba di Java e invece imparare Scala / LIFT. Per quanto mi riguarda, tutto ciò che in Java è correlato allo sviluppo web all'avanguardia (cometa, comunicazione asincrona, sicurezza (sì, anche con Spring Security!)) È ancora un po 'un hack (dimostrami che mi sbaglio con le prove, per favore !). Per me Scala / LIFT sembra essere una soluzione più pronta all'uso e all-in-one.

Il motivo per cui alla fine ho deciso di non andare con Scala è

  • come capo progetto devo considerare le risorse umane e gli sviluppatori Java sono molto più facili da trovare rispetto agli sviluppatori Scala

  • per la maggior parte degli sviluppatori del mio team, il concetto di funzionalità di Scala, per quanto eccellente, è difficile da capire

Saluti Er


Questa è tutta roba buona. Buona scelta primavera MVC, rimani sul lato sicuro (e saggio).
Victor Ionescu

5

Ho anche sentito parlare bene dello Spring Framework. In generale, però, sono rimasto deluso dalla maggior parte dei framework web Java che ho visto (specialmente Struts).

Per un'app semplice, prenderei sicuramente in considerazione l'utilizzo di servlet e JSP "grezzi" e non mi preoccuperei di adottare un framework. Se i servlet sono scritti bene, dovrebbe essere semplice in futuro portare su un framework se necessario quando l'app cresce in complessità.


1
+1 per "Se i servlet sono scritti bene ..."
Chris


4

Tutti loro - questo è il problema ;-)


3

Penso che per le tue modeste esigenze, devi solo codificare servlet o semplici pagine jsp che puoi servire dal server Tomcat. Non penso che tu abbia bisogno di alcun tipo di framework web (come i montanti) per i dati del sito web personale


3

Dire "usa JSF" è un po 'semplice. Quando decidi di utilizzare JSF, devi scegliere una libreria di componenti sopra di essa. Utilizzerai MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ )? O forse ICEfaces ( http://www.icefaces.org/ )? Oh, e se usi ICEfaces, utilizzerai JSP o Facelets per le tue visualizzazioni?

Secondo me è difficile da dire. Nessuno ha il tempo di valutare tutte le alternative promettenti, almeno nei progetti su cui lavoro, perché non sono abbastanza grandi per fare fasi di valutazione di tre mesi. Tuttavia, dovresti cercare alcuni che hanno una comunità grande e attiva e non se ne vanno da un anno. JSF è in circolazione da un po 'di tempo e, poiché viene spinto dal sole, sarà in giro ancora per un po'. Non posso dire se sia la scelta migliore, ma sarà una buona scelta.


Jsp è stato un problema per me quando facevo un'app Web che vendiamo. Un aggiornamento prenderà invece in considerazione i facelets.
Thorbjørn Ravn Andersen

Sì, a questo punto sono abbastanza sicuro: usa facelets invece di JSP. È molto meglio e non vedo alcun (grande) svantaggio.
Tim Büthe


3

Per i siti ad alto traffico utilizzerei un framework che non gestisce lo stato del client sul server: Wicket, JSF e Tapestry gestiscono lo stato del client sul server. Userei questi framework solo (Wicket è il mio preferito) se l'applicazione dovesse essere più simile a un'applicazione desktop. Ma proverei a utilizzare un approccio REST + AJAX più scalabile e semplice.

Spring MVC sarebbe un candidato, ma a partire da Spring MVC 3 ha uno strano modello di programmazione con sovraccarico di annotazioni che non utilizza i vantaggi della digitazione statica. Ci sono anche altre brutte cose come i parametri di output nei metodi combinati con un normale ritorno, quindi ci sono due canali di output di un metodo. Spring MVC tende anche a reinventare la ruota e avrai più da configurare rispetto ad altri framework. Non posso davvero raccomandare Spring MVC anche se ha alcune belle idee.

Grails è un modo conveniente per utilizzare Spring MVC e altri framework consolidati come Hibernate. La programmazione è divertente e vedrai rapidamente i risultati.

E non dimenticare che l'API Servlet con alcuni piccoli aiutanti come FreeMarker per la creazione di modelli è molto potente.



2

La mia scelta sarebbe Wicket (per grandi progetti e una base di utenti prevedibile), GWT (per grandi progetti che sono per lo più rivolti al pubblico) o solo un framework di servizi (come Jersey / JAXRS) insieme a un toolkit JavaScript (per progetti medio-piccoli) .


2

Consiglio Seam, soprattutto se hai bisogno di perseveranza.



1

Per una GUI veloce e di fantasia puoi usare JSF con la libreria Richfaces . I componenti dell'interfaccia utente Richfaces sono riferimenti facili da usare e pratici disponibili con la dimostrazione del codice nel sito demo. Probabilmente più tardi, quando il tuo sito ha più dati da gestire e molte informazioni devono essere trasferite nel database, puoi collegare qualsiasi framework di accesso al database (ORM) con esso.


0

Non riesco a credere che nessuno abbia menzionato GWT


Non considererei davvero GWT un framework per applicazioni web (è più simile a un toolkit web, da cui il nome). Tuttavia, GWT è fantastico e si sposa bene con la primavera, ad esempio.
stian

framework o toolkit, qual è davvero la differenza concreta? La codifica con GWT sembra lavorare con un framework tanto quanto le altre opzioni.
Eelco



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.