Jsf Vs Structs

Per lo sviluppo di applicazioni java per il web spesso ci si chiede quale tecnologia scegliere, un mio collega ha fatto questo breve riassunto di pro e contro di queste tecnologie e dato che mi è piaciuto molto ho deciso di pubblicarlo sul mio wiki. Grazie a Salvatore

Breve descrizione:

Struts e JavaServer Faces (JSF) sono due framework Java basati sul design pattern architetturale Model-View-Controller (MVC). Struts è il framework più usato nelle architetture J2EE per implementare l'MVC, questo sia per un fattore cronologico (è nato prima di JSF), sia perché, come vedremo, ci permette di rendere più efficace l'applicazione, di avere meno bug e di risparmiare tempo in fase di sviluppo.

Ogni applicazione realizzata con Struts o con JSF ha, come colonne portanti, l'insieme delle classi e delle interfacce che compongono i framework.

Considerazioni su Struts

Con Struts, la configurazione dell'applicazione è contenuta in un file XML letto allo start-up dell'applicazione. Attraverso il controller questo framework è capace di reindirizzare qualsiasi richiesta alla servlet di servizio e di rispondere attraverso una JSP.

I componenti fondamentali di una applicazione sono:

* Action: sono delle servlet e vengono chiamate per fornire dei risultatiun risultato
* JSP: che ci permettono di visualizzare i risultati ottenuti e di fare nuove richieste
* JavaBeans: che ci forniscono i modelli dell'applicazione
* Logica di Business: cioè tutte le regole e le funzionalità della nostra applicazione

Considerazioni su JSF

La tecnologia JSF, nasce come completamento della Java Enterprise Edition (J2EE). Se J2EE è noto essere una piattaforma matura, solida e affidabile, per applicazioni enterprise, una delle critiche più comuni che le si rivolgono è sempre stata la mancanza di un modello di riferimento per lo sviluppo dell'interfaccia utente.

Con JSF questa lacuna viene colmata, infatti JSF introduce, rispetto agli altri framework, un sistema di componenti e di librerie pronte per l'uso che rendono la vita dello sviluppatore molto più semplice nello sviluppo di interfacce utente per le applicazioni Web.

I componenti che ci mette a disposizione JSF sono molto simili ai componenti in AWT/Swing, infatti abbiamo:

* Gestione degli eventi: che servono a gestire le azioni e i comportamenti dell'applicazione
* Componenti predefiniti: che possono essere richiamati nelle pagine Web dell'applicazione
* Componenti di validazione: che ci permettono di validare i dati nei form

Sviluppare con JSF oggi, con gli IDE a disposizione che lo supportano, è molto simile a quanto si può fare in ambiente .NET.

È interessante osservare che uno dei principali artefici di questa tecnologia è Craig R. McClanahan, dipendente Sun e creatore di Struts, secondo alcuni infatti il framework JSF non è altro che la "versione ufficiale SUN" di Struts. In base a queste definizioni date di Struts e JSF, è lecito chiedersi quali vantaggi e svantaggi ci siano nell'uso dell'uno o dell'altro.

Vantaggi di Struts rispetto a JSF:

Validazione:

Mentre Struts ha molti validatori di default per gli indirizzi email, carte di credito, espressioni regolari e molto altro, JSF ha solo dei validatori su valori mancanti, lunghezza dell'input e numeri di un certo range.
In più mentre con JSF la validazione può essere effettuata solo lato server con Struts può avvenire anche lato client.

Tool di sviluppo:

Mentre Struts è supportato dalla maggior parte degli IDE (NetBeans, Eclipse, JCreator, ecc.), JSF ancora non lo è.

Url-pattern:

In Struts le pagine chiamate da browser terminano tutte con .jsp se sono JSP e con .do se passano da una servlet. Tutto questo semplifica la visione del cammino di un processo.
In JSF form (.jsp) e servlet (.do) hanno gli stessi URL. Questo può causare problemi: ad esempio diventa difficile proteggere le pagine JSP dall'accesso, è difficile riferirsi a pagine "non JSF" nel faces-config.xml e, inoltre, non è possibile effettuare il browsing di directory e cliccare sui link.

Installazione:

Struts è molto facile da installare, grazie all'applicazione struts-blank, che crea tutti i file di configurazione e di test, da utilizzare come punto di partenza.

Internazionalizzazione:

Sia con Struts che con JSF è molto semplice internazionalizzare un'applicazione, però con Struts basta creare i message della lingua in un file .properties, con JSF, oltre ai file, dobbiamo dichiarare le lingue nel file di configurazione.

Vantaggi di JSF rispetto a Struts

Configurazione:

Il faces-config.xml ha una struttura molto più semplice rispetto allo struts-config.xml.

Controller e bean:

Con la tecnologia JSF è più semplice definire il controller e i bean infatti non è necessario che estendano particolari classi e che usino particolari metodi mentre con Struts sì. Inoltre, per quanto riguarda i bean, JSF permette di assegnare un nome, per referenziarli nelle form. Struts invece ha un processo complesso, per esempio è necessario ricordarsi quale form è l'input per quale azione.

Interfaccia Web:

Struts non fornisce un modello per la rappresentazione lato server degli elementi dell'interfaccia Web e non ha un modello di sviluppo a eventi. JSF introduce questi concetti svincolando lo sviluppatore dalla gestione tramite codice di oggetti quali request e response, gestione che è invece ora totalmente a carico del framework.

Conclusioni

Nelle applicazioni attuali Struts resta ancora il framework più diffuso per età e facilità d'uso (è conosciuto dalla maggior parte dei programmatori Java), inoltre supporta altri framework come Spring, Hibernate e JSF stesso, ma soprattutto implementa nel migliore dei modi il model-view-controller.
Non esiste un framework perfetto e la scelta deve essere ponderata sulla base delle caratteristiche del progetto da affrontare, ma usando JSF lo sviluppatore avrà sicuramente i seguenti vantaggi:
* standardizzazione: a differenza di tutti gli altri framework, JSF fa parte della specifica Java EE ed è quindi oggi il framework standard per lo sviluppo dello strato web in ambito Java;
* indipendenza dal markup language: ogni modello di interazione lato server viene realizzato lato client tramite Renderer diversificati, che producono un'interfaccia utente in grado di soddisfare i requisiti funzionali del server al meglio delle possibilità della piattaforma utilizzata dall'utente;
* supporto negli ambienti di sviluppo: JSF è standard ed è supportato da tutti gli ambienti di sviluppo Java EE. Ciò precedentemente non avveniva, fatta eccezione per Struts, che costituiva uno standard de facto;
* esistenza di componenti predefiniti, che avvicinano la programmazione web a quella degli ambienti RAD, consentendo allo sviluppatore di realizzare, in breve tempo, interfacce web con la stessa semplicità offerta da ambienti come .NET, semplicemente "collegando" elementi di business logic lato server tramite catene di eventi;
* definizione di un nuovo paradigma di Event Handling, che avvicina la programmazione in ambito web alla tipologia di gestione asincrona degli eventi utilizzata nelle applicazioni client-server.

Con Struts:
* modularità e riusabilità: i diversi ruoli dell'applicazione sono affidati a diversi componenti. Ciò consente di sviluppare codice modulare e più facilmente riutilizzabile;
* manutenibilità: l'applicazione è costituita da livelli logici ben distinti. Una modifica in uno dei livelli non comporta modifiche negli altri;
* rapidità di sviluppo: è possibile sviluppare in parallelo le varie parti dell'applicazione, logica, di business e di view;
* file di configurazione centralizzato: è possibile utilizzare una serie di file XML atti a codificare il comportamento della web application ( vedi struts-config.xml, web.xml…);
* FormBean: un oggetto è automaticamente popolato con i dati provenienti da un form HTML, accessibile da servlet e JSP;
* Bean Tag: Struts mette a disposizione un insieme di custom tag per accedere alle componenti JavaBean;
* validazione dati di un form: è possibile effettuare diversi tipi di controlli per dati provenienti da un form tramite due file XML, il validation-rules.xml e il validator.xml.

Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License