Per i non addetti ai lavori, o anche per chi si è avvicinato da poco al mondo web, la dicitura applicazione web java spesso suona come qualcosa di misterioso, incontrollabile ed incomprensibile.
In questo articolo, proverò a fornirvi le nozioni di base utili per capire e dipanare l’alone di mistero …

ACCENDIAMO UNA LUCE

Io stesso qualche anno fa, da neofita dello sviluppo su Web, ero contemporaneamente affascinato ed intimorito dall’idea di navigare in acque buie e a me ignote.

Tuttavia tenendo presenti pochi semplici concetti tutto risulta più chiaro:

  • Una applicazione web è a tutti gli effetti un’applicazione client-server: le sue componenti risiedono quindi sia sul client che sul server.
  • Il browser, che utilizziamo per accedere all’applicazione, gira sul client: utilizza le informazioni restituite dal server per mostrare l’interfaccia utente.
  • L’applicazione vera e propria risiede sul server: qui risponde un Web Server (o meglio un Application Server) responsabile dell’invio delle pagine web al browser.

IL CLIENT

Può essere un qualunque dispositivo (PC, dispositivo mobile, ecc.) che si connette ad internet. Nel client è sufficiente che sia presente un software per la visualizzazione dei documenti del formato che il server restituisce. Come accennato prima, questo compito è svolto dal browser (attenzione i browser sono  differenti. I vari Chrome, Explorer, Firefox ecc. possono avere comportamenti differenti).

Il client, attraverso il browser, può visualizzare pagine HTML, utilizzare funzionalità (in certi casi veri e propri programmi) tramite Javascript (o altri linguaggi client-side), mostrare contenuti multimediali: immagini, suoni, filmati, ecc.

IL SERVER

Ha il compito più complesso: deve attendere le richieste dei client ed inviare le relative risposte dopo le opportune elaborazioni. Più sono complicate queste elaborazioni (calcoli da fare, database da interrogare, xml da interpretare ecc.) più complicata sarà la realizzazione della logica del server.

Assolvere a queste mansioni è compito dell’Application Server: una tipologia di server che fornisce sia l’infrastruttura sia le funzionalità di supporto, sviluppo ed esecuzione di applicazioni web. In altre parole su di esso gira la logica di business delle nostre applicazioni.

Un Application Server è normalmente composto da moduli, realizzati secondo standard ben definiti ed accettati dalla comunità mondiale dei programmatori. Al suo interno dispone di componenti che consentono alle applicazioni, in esso installate, di svolgere le più variate funzioni.
In un Application Server è sempre presente un modulo che funge da Web Server, cioè un modulo che si occupa di generare e inviare al client le pagine HTML  e rispondere ad ogni altra richiesta.

Il protocollo standard più diffuso, utilizzato dal sopra citato modulo, è HTTP.

Ci sono numerose implementazioni di Application Server, sia commerciali sia Open Source, basate su tecnologie differenti. Le più diffuse sono basate su .NET e Java.

In Sme.UP tipicamente utilizziamo Glassfish/Payara come Application Server e la parte server della nostra applicazione web (Web.UP) è scritta in Java.

 

L’APPLICAZIONE WEB

Se avete avuto la costanza di continuare a leggere fino a qui, vi meritate di sapere anche come realizzare una applicazione web.

Lo scopo di questo articolo, ovviamente, non è quello di entrare nei dettagli tecnici o insegnarvi come realizzare la vostra applicazione o ancora di insegnarvi come decidere con quale tecnologia realizzarla (ma attenzione che la scelta dell’Application Server pone dei vincoli tecnologici circa il linguaggio con cui implementarla), ma di fornirvi qualche spunto di partenza. Quindi, se non conoscete nomi e tecnologie di quanto scritto poche righe più sotto, non preoccupatevi ora. In internet è presente una “montagna” di documentazione più o meno tecnica e più o meno dettagliata sotto ogni aspetto, quindi se vi interesserà approfondire potrete sempre farlo in seguito.

Quando avrete chiaro cosa deve fare la vostra applicazione, allora troverete utile applicare un pattern di sviluppo per realizzarla. Quello che ho scelto di spiegarvi è uno dei pattern di sviluppo più diffusi (o forse IL più diffuso) ed è lo stesso con cui abbiamo realizzato Web.UP.

Ed ecco che entra in gioco il Model-View-Controller (MVC).

Come si intuisce facilmente dal nome, tale pattern è costituito da 3 strati, il Model, la View ed il Controller:

  • Il Model: Rappresenta lo strato di business dell’applicazione, ovvero gli oggetti che vogliamo rappresentare  e con cui potrà interagire l’utente. Ad esempio i clienti, gli articoli, le fatture ecc.  Questo strato, parlando di tecnologie basate su Java è, solitamente, implementato attraverso l’uso dei JavaBeans.
  • La View: Rappresenta l’interfaccia utente, ovvero le pagine web con cui l’utente per cui è pensata l’applicazione, si trova ad interagire. Spesso la view viene definita anche strato di presentazione. Ad esempio la rappresentazione di un elenco di articoli o di un elenco di clienti in formato tabellare. Ma anche l’acquisto degli articoli da parte dei clienti in un grafico a barre. La creazione delle interfacce grafiche è totalmente delegata alle pagine HTML e/o JSP ed è ricavata attraverso servlet (nel caso di Web.UP si parla di JSF.. così solo per darvi un dettaglio in più).
  • Il Controller: Si occupa di gestire il flusso dell’applicazione, sincronizzando il contenuto della View con quello del Model. Per capirci, se l’utente sceglie di visualizzare i prodotti che hanno un determinato prezzo, è la logica contenuta nel controller che selezionerà dalla tabella dei prodotti quelli scelti e li passerà alle View corrispondenti. Viceversa se l’utente decide di acquistare un articolo visualizzato, manderà le informazioni al Model.
    Anche in questo caso è la servlet il componente web più indicato a svolgere questo compito, dato che può interagire direttamente con il Model e aggiornare facilmente le View.

A mio parere, lo strato più significativo nello sviluppo di una Applicazione web è il Controller. E’ il motore dell’applicazione. Essendo separato dalla visualizzazione e dal modello dei dati, rende la sua progettazione più semplice, permettendo di concentrarsi sulla logica di funzionamento applicativo.

LA MESSA IN OPERA

Qualcuno ha pronunciato la parola deployment?? Ebbene sì!
Ora che abbiamo capito come realizzare una applicazione web, come la rendiamo disponibile? Come la pubblichiamo?

Una volta che l’application server è funzionante e correttamente configurato (per le operazioni di installazione e configurazione è sufficiente riferirsi ad un sistemista competente, anche se, di norma, seguendo le guide delle versioni Open Source di Payara o Glassfish non è difficile arrangiarsi), è necessario impacchettare e fare il deploy dell’applicazione per renderla disponibile ed utilizzabile dal proprio sito.


Nella fase di impacchettamento ci aiuta l’ambiente di sviluppo scelto (ad esempio Eclipse o NetBeans) , in grado di generare autonomamente il file pacchetto da installare sull’application server. Nel nostro caso viene creato un archivio .WAR (Web Archive, praticamente un file zippato), che contiene l’applicazione Web, servlet ed eventuali file .JAR (Java Archive) necessari al funzionamento.

L’archivio .WAR una volta preparato può essere, spostato, copiato ecc. come qualsiasi altro file zippato.

Per la fase di installazione/deploy dell’applicatione sul server, ci aiuta l’application server stesso.
Ad esempio Payara mette a disposizione, oltre alla riga comando per i veri addetti ai lavori, anche una comoda interfaccia web di gestione, tramite cui installare e caricare l’applicazione.

In parole povere, per installare rendere disponibile la propria applicazione web, una volta che si ha un application server funzionante è sufficiente fare l’upload dell’archivio preparato precedentemente e premere il tasto deploy (tra l’altro, nello ShowCase di Web.UP è possibile scaricare il file .war dell’ultima versione, se volete provare).

Come ultima nota, voglio richiamare l’attenzione sul concetto di Context Root.
Dato che un singolo application server può pubblicare diverse applicazioni, tramite la definizione di Context Root è possibile specificare quale indirizzo (URL) è associato alla singola applicazione web.

Il Context Root è importante perchè permette di chiamare la vostra applicazione in questo modo:

http://www.miodominio.it/miaapp.

In questo caso il Context Root è “miaapp”

Due esempi, sotto i nostri occhi ogni giorno, sono le versioni di Web.UP test giornaliera e quella in sviluppo continuo, che hanno come Context Root rispettivamente WebUPNightly e WebUPContinuum, quindi

http://webuptest.smeup.com/WebUPNightly 

 http://webuptest.smeup.com/WebUPContinuum

E adesso??

Adesso tocca a voi.. non esitate a commentare se avete dubbi, critiche (costruttive mi raccomando) o anche solo lasciare un saluto.