capitolo 1
LO SCENARIO DI RIFERIMENTO
Giorno 1 â Ore 9:00
Lo sviluppo delle applicazioni per il Web, incrementatosi esponenzialmente negli ultimi anni, nasce da unâesigenza organizzativa di informatizzare procedure, salvare dati e condividere, in internet o nella intranet aziendale, informazioni accedibili da diversi dispositivi connessi in rete. Lo strato sottostante è solitamente costituito da un Server per lâelaborazione e da un DataBase per il salvataggio dei dati. Conseguentemente, prima di entrare nel dettaglio del testo, risulta utile fornire alcune basi teoriche e funzionali atte alla migliore comprensione delle scelte effettuate nel seguito del testo. Infatti, lâobiettivo è implementare un applicazione passo-passo senza sovrastrutture, in maniera chiara, intuitiva e comprensibile da tutti coloro che si avvicinano, anche per la prima volta, al mondo della programmazione per il web. Il seguente capitolo introduce le principali tecnologie terminando con lâanalisi funzionale del caso studio che si andrĂ ad implementare.
1.1. Programmazione ad Oggetti e linguaggio Java
La programmazione orientata agli oggetti introduce il concetto di âoggetto softwareâ e definisce le modalitĂ di interazione tra i diversi oggetti software, attraverso lo scambio di messaggi. Attualmente risulta come uno dei paradigmi piĂš utilizzati e studiati, tanto che gran parte dei linguaggi di programmazione, anche se non risulta orientata agli oggetti, ne eredita alcune caratteristiche o presenta una estensione in tale direzione. Un âoggettoâ è un software dotato di attributi (le proprietĂ astraendo i dati) e metodi (le azioni che può compiere e/o subire), unico e separato da altri oggetti con i quali può âcomunicareâ tramite lâuso di messaggi. Il programma viene realizzato progettando e scrivendo il codice sotto forma di âclassiâ che durante lâesecuzione vengono invocate per creare lâoggetto relativo che si andrĂ ad usare. La Classe rappresenta, di conseguenza, una categoria di oggetti (con metodi ed attributi) ed un particolare oggetto, che appartiene ad una Classe, costituisce unâistanza della Classe stessa. Le tre proprietĂ basilari di un linguaggio ad oggetti sono: incapsulamento (che permette di impacchettare i dati proteggendoli da interferenze esterne e si basa sul principio di information hiding), ereditarietĂ (che consente di creare nuovi oggetti che siano basati su altri giĂ definiti, derivando una Classe da una preesistente) e polimorfismo (che rappresenta lâattitudine di un oggetto a presentare diversi comportamenti per una singola funzionalitĂ in base al modo in cui viene chiamato). Lâastrazione viene usata per decomporre sistemi software complessi in componenti piĂš semplici dove la âClasse astrattaâ rappresenta un modello per ottenere classi derivate piĂš specifiche, caratterizzato da metodi implementati e da altri che presentano solo la definizione (implementati nelle classi dipendenti). La visibilitĂ rappresenta la possibilitĂ (o meno) di richiamare una variabile da un punto del programma. Si possono individuare le tre principali tipologie di visibilitĂ per proprietĂ e metodi: public (accedibile, utilizzabile e richiamabile dallâinterno della Classe stessa e dallâesterno ove presente una sua istanza), protected (accedibile, utilizzabile e richiamabile dallâinterno della Classe stessa e dallâesterno solo dalle classi del package di appartenenza o dalle classi che la estendono), private (accedibile, utilizzabile e richiamabile solo dallâinterno della Classe dichiarante). In conclusione, la programmazione ad oggetti facilita la gestione e la manutenzione, supporta gli sviluppi incrementali e la costruzione cooperativa del software, permette la modularitĂ e conseguentemente lâimplementazione e lâorganizzazione anche di progetti di grandi dimensioni e consente, in ultimo, il facile riuso del codice.
Nato negli anni novanta nei laboratori della Sun Microsystem, Java rappresenta il linguaggio di punta per lo sviluppo di applicativi per il web essendo strutturalmente solido e sicuro, oltre ad essere il riferimento principale per una programmazione efficace ed efficiente orientata agli oggetti. Ă infatti gradito sia agli sviluppatori che agli utenti finali, grazie alla sua proprietĂ di essere indipendente dalla piattaforma e, quindi, di poter essere eseguito su un qualunque supporto (un personal computer, uno smartphone, o un robot) che presenti un interprete virtuale (Java Virtual Machine). Il linguaggio Java è sintatticamente simile al C (da cui deriva) ed è basato su un sistema di gestione della memoria assegnata e rilasciata automaticamente ed in maniera indipendente dal controllo del programmatore (garbage collection). Per lavorare con Java è necessario installare la JDK (Java Development Kit) che contiene gli strumenti di compilazione e debugging. I sorgenti presentano lâestensione .java. Negli anni sono state distribuite diverse ed aggiornate versioni di JDK, e sono stati creati molti IDE (Integrated Development Environment) gratuiti, quali Eclipse, per facilitare e migliorare il compito degli sviluppatori. Contestualmente si sono evoluti gli Application Server (quali JBoss e Tomcat) dove far âgirareâ gli applicativi Java in un contesto distribuito e i DataBase (quali MySQL) con i relativi connettori per lo sviluppo in diversi linguaggi.
1.2. Programmazione per il Web
La programmazione per il Web richiede strumenti differenti rispetto alla programmazione standard. Ă possibile, infatti, considerare il Web una collezione di risorse fisicamente sparse nel mondo e accedibili attraverso un particolare sistema di indirizzamento (principalmente URL - Uniform Resource Locator) e mediante opportuni protocolli (principalmente HTTP - HyperText Transfer Protocol). Lâinterazione tra i vari componenti si basa sullâarchitettura Client-Server dove il Server fornisce un servizio (eseguendo le elaborazioni, reindirizzando le richieste dellâutente e generando le risposte) e il Client richiede un servizio (individuando lâinterfaccia dellâapplicazione con lâutente finale). Un browser può ricevere da un Server qualunque tipo di documento la cui forma è individuata dalla specifica MIME (Multipurpose Internet Mail Extensions) che permette di comprendere come trattare un documento (testo, immagine o video). Il âWeb Serverâ (ad esempio Apache) o lo âApplication Serverâ (ad esempio IIS, JBoss, Tomcat) è uno strato software che risponde alle richieste di un Client fornendo le risorse e comunicando mediante il protocollo HTTP. La progettazione di un applicativo per il Web si basa sul modello MVC (Model-View-Controller) in cui è presente la separazione concettuale in tre componenti, ovvero il Model (legato alla logica applicativa di persistenza e manipolazione dei dati), il View (legato alla presentazione, ossia alla modalitĂ con cui interfacciare i dati con lâutente finale), infine il Controller per la elaborazione delle richieste e lega il Model con il View. Questo livello di separazione è fondamentale per motivi di stabilitĂ e coerenza dellâapplicazione e comporta una maggiore sicurezza in quanto consente la distribuzione delle componenti su differenti Server, con differenti policy di accesso. Nellâambito che si sta per affrontare lo strato view è rappresentato da pagine HTML (Hyper Text Markup Language) e JSP (Java Server Pages), lo strato controller dalle Java Servlet, mentre lo strato Model è implementato nella logica di business attraverso lâuso dei JavaBean: tutti componenti che si andranno a studiare ed usare nel seguito del testo.
1.3. Web Application e Application Server
Una Web Application è costituita da un insieme di componenti che sinteticamente si possono elencare nelle seguenti: pagine HTML e JSP, Java Servlet, JavaBean, Classi Java e altre componenti che possono essere installate ed eseguite allâinterno di un container (Application Server) il quale lavora su unâassegnata JVM (Java Virtual Machine).
Lo HTML (Hyper Text Markup Language) non è un linguaggio di programmazione, ma un linguaggio di contrassegno che permette di indicare come disporre gli elementi allâinterno di una pagina web ed interpretabile da un browser. Le JSP (Java Server Page) individuano la tecnologia per la creazione di pagine HTML dinamiche lato Server: rappresentano unâestensione delle Servlet e sono caratterizzate da un misto di codice statico (HTML) e dinamico (Java). Questâultimo è contenuto nei tag â<%%>â e viene precompilato prima di inviare la risposta al Client. Lo Application Server è una piattaforma software su cui deployare unâapplicazione web e che mette a disposizione funzionalitĂ per eseguire la stessa in un ambiente distribuito. Nel seguito sarĂ usato Tomcat, capace di gestire le Servlet (dalle 2.5 alle 3.x) e le pagine JSP (ma anche altri componenti quali EJB - Enterprise Java Bean, o framework quali Struts, o Web Services quali Axis). Un JavaBean è un componente software riusabile e serializzabile, caratterizzato da proprietĂ il cui stato è definito da metodi set (per valorizzare gli attributi) e get (per ottenere il valore di un attributo).
Le Servlet sono classi Java che vengono eseguite in Servlet Container ed esposte come risorse web allâesterno. Queste speciali classi principalmente elaborano le richieste generate dai Client (quali il salvataggio su DataBase) agendo in modalitĂ request/response. La versione attuale della specifica Servlet è la 3.X (corrispondente alla JSR 315). Tale standard rientra allâinterno di un insieme piĂš vasto di specifiche definito come âJava EEâ. Una Servlet ha molteplici funzionalitĂ e, solitamente, corrisponde al Controller del pattern MVC. Essendo scritte in Java possono avvalersi delle Java API (Application Programming Interface) che consentono di implementare funzionalitĂ fondamentali quali lâaccesso ad un DataBase o lâinterfaccia standard per gestire la comunicazione col Client. Può essere usata una sola Servlet che gestisca differenti comportamenti o possono essere presenti piĂš Servlet allâinterno di unâapplicazione. Volendo illustrare semplicemente il funzionamento di una Web Application: un Client invia una richiesta (request) ad una Servlet (su un Application Server), il Server istanzia e carica la Servlet chiamata avviando un thread per gestire la comunicazione; se la Servlet, invece, è giĂ stata caricata in precedenza (ipotizzando differenti chiamate al Server) verrĂ creato semplicemente un ulteriore thread associato al nuovo Client (senza ricaricare la Servlet). Il Server invia la richiesta del Client alla Servlet e questâultima costruisce la risposta (response) e la inoltra al Server che, in ultimo, la invia al Client. Si noti che la Servlet non presenta quasi mai codice algoritmico allâinterno, ma questo viene demandato alle classi con cui la stessa si interfaccia. Request e Response sono gestiti dalle relative interfacce (HttpServletRequest e HttpServletResponse). Lâinterfaccia javax.Servlet.ServletContext permette invece di trovare un riferimento al contesto di una Web Application, quindi una serie di informazioni condivise a livello globale tra i componenti dellâapplicazione stessa. Tra le innovazioni apportate dalle Servlet 3.X si introduce lâuso delle annotations, utili per le classi Java ed interpretate correttamente dai recenti Servlet Container. Nel progetto seguente verrĂ creata una sola Servlet che individuerĂ differenti azioni a seguito della valutazione di un parametro proveniente dal Client. Le azioni saranno conseguenze di chiamate al metodo doGet (tramite link diretti, ovvero richieste di tipo GET) o al metodo doPost (tramite submit di form, quindi richieste di tipo POST).
Una Web Application, in ultimo, è sempre mappata attraverso una gerarchia di directory memorizzabili su file system ed è solitamente esportabile come file compresso di estensione .war. Una volta definita la root (directory principale) di progetto questa, terminato lo sviluppo dellâapplicativo, sarĂ deployata sotto la directory webapps di Tomcat (ovvero installata nello Application Server). Sotto la root potranno essere presenti altre directory, tra cui la cartella WEB-INF accessibile, in ottica di sicurezza, solo dallo Application Server. Il front-end è quindi a livello della root, mentre il back-end (che, ad esempio, contiene la Classe che permette la connessione al DataBase) è sotto la directory WEB-INF. Tra le principali componenti di questâultima directory è possibile individuare la cartella classes, che contiene i compilati di classi e Servlet, e la cartella lib che contiene tutte le librerie usate dallâapplicativo che si sta per sviluppare.
1.4. DataBase
La gestione integrata dei dati e delle informazioni è requisito fondamentale nella realizzazione delle moderne applicazioni. Ă importante accedere costantemente ad informazioni corrette ed aggiornate, conseguentemente si ha la necessitĂ di lavorare su un sistema di archiviazione di dati e di informazioni che possa soddisfare le richieste piĂš stringenti di integritĂ , di non ridondanza, di sicurezza e di disponibilitĂ dei dati: questo viene ottenuto attraverso lâuso dei DataBase e dei sistemi di gestione degli stessi, ovvero i DBMS (Data Base Management System), che permettono di trattare grandi quantitĂ di dati con tempestivitĂ , affidabilitĂ e sicurezza. Un DataBase è, quindi, una raccolta di dati, opportunamente strutturati e collegati tra loro in un insieme di archivi, a disposizione di utenti e applicazioni. In particolare, i DataBase relazionali sono particolari strutture di una banca dati in cui i dati sono disposti in maniera bidimensionale in una tabella (similmente ad un foglio di calcolo) dove in ogni riga vi è una struttura dati di tipo record e in ogni colonna sono presenti i campi del record definiti per quella tabella. La progettazione di un DataBase rappresenta un punto focale nello sviluppo di una Web Application: è individuata da tre fasi (rispettivamente progettazione concettuale, logica e fisica) ed è conclusa da una fase finale di normalizzazione. Inoltre, per poter impartire comandi e istruzioni ad un DataBase si utilizza il linguaggio SQL (Structured Query Language) il quale opera sui dati tramite frasi che fanno uso di âparole chiaveâ tipiche del linguaggio corrente. Nella seguente dissertazione verrĂ usato MySQL che è un DataBase relazionale (Relational DBMS) professionale, gratuito, versatile e potente per creare e gestire la base di dati dellâapplicativo che si vuole implementare.
1.5. Analisi Funzionale del Caso Studio
I requisiti funzionali rappresentano il âcosaâ, ovvero il comportamento dellâapplicazione, e possono essere individuati schematicamente attraverso un elenco o tramite lâausilio di tabelle. La Web Application che si vuole realizzare deve permettere lâinserimento, la modifica, la cancellazione, la visualizzazione e la ricerca di una serie di imprese e dei relativi impiegati. Lâesigenza nasce dal fabbisogno interno alla struttura organizzativa di riferimento di unâimpresa di servizi e si rivolge ai suoi funzionari quale applicativo esposto nella intranet aziendale. Di seguito, vengono indicati tabellarmente i requisiti funzionali che verranno soddisfatti dalla Web Application. Una volta soddisfatti, a fine testo, verrĂ anche approfondito il layout dellâapplicativo.
Ă possibile notare come unâorganizzazione schematica dei requisiti consenta unâadeguata gestione degli stessi funzionalmente e in ottica implementativa (ma anche per effettuare una stima economica del lavoro). Lâanalisi dei requisiti porta alla quindi necessitĂ di implementare un applicativo per poter gestire imprese e dipendenti, il cui nome è: âCompany Managementâ.
Tab. 1.1 - Requisiti funzionali della Web Application
capitolo 2
INSTALLARE E CONFIGURARE LE COMPONENTI
Giorno 1 â Ore 10:00
Il primo passo si configura nello scarico e nellâinstallazione delle componenti che serviranno allâapplicazione. Si farĂ riferimento alle versioni presenti al momento della scrittura del testo, ma si potranno scaricare anche le versioni piĂš recenti, se il lavoro dovesse iniziare in momenti successivi (in quanto, oltre ad essere retro-compatibili, solitamente risolvono bug ed ottimizzano le librerie). Potranno anche essere scaricate versioni precedenti (purchĂŠ tra loro compatibili) se, ad esempio, si volesse lav...