Progetto completo
A differenza che in precedenza, il progetto è ora reso disponibile sotto forma di un progetto Eclipse ben formato, pronto per essere importato nel workspace secondo le usuali modalità viste durante le esercitazioni (File > Import > Existing project into workspace > select archive...).
Una volta configurato correttamente il file environment.properties dovrebbe essere possibile mettere in funzione il progetto stesso mediante l'invocazione dei seguenti 3 target di ANT, in successione...
- launch.database
- init.database (ignorare i messaggi di errori se le tabelle non sono presenti, la prima volta)
- deploy.as.dir
...ed accedere ad esso digitando nel browser l'URI
http://localhost:8080/TecnologieWeb.
Attenzione!!! all'interno della vecchia versione del progetto, non più scaricabile, NON ERA IMPLEMENTATO IL PATTERN DAO CANONICO, nonostante l'uso di tale acronimo come nome di una classe.
Durante la lezione di Giovedì 13 marzo 2008 è stata analizzata e discussa la seguente versione riveduta e corretta del progetto di esempio: TemplateProjectRefactored.zip.
Tale versione applica ora correttamente il pattern DAO per l'accesso agli oggetti memorizzati su database e corregge alcuni bachi e imprecisioni presenti nella precedente versione.
La traccia della lezione è contenuta nel seguente slideshow.
La versione estesa del progetto, contenente le modifiche illustrate nell'ultima parte delle slide, è disponibile qui.
Risorse
Java Server Faces
Tomcat
Pattern DAO
Hypersonic
JUnit
Documentazione
Varie
Suggerimenti
Manuali consigliati
- HTML & XHTML: The Definitive Guide, Sixth Edition - Chuck Musciano, Bill Kenned - O'Reilly
- CSS: The Definitive Guide, Third Edition - Eric Meyer - O'Reilly
- Java Server Pages, Third Edition - Hans Bergsten - O'Reilly
- Java Server Faces The Complete Reference - Ed Burns, Chris Schalk, James Holmes - McGraw-Hill
- JavaServer Faces in Action, Kito D. Mann - Manning
- Professional Eclipse 3 for Java Developers - Daum, Berthold. - Wrox
- Guida ai CSS - Rachel Andrew - Hoepli
Basi di Java
- Fondamenti di Informatica - corso prof.Lodolo
- Beginning Programming with Java for dummies - Wiley
- Java in a Nutshell, 5th Edition - David Flanagan - O'Reilly
- Java 1.5 Tiger: A Developer's Notebook - David Flanagan - O'Reilly
- Professional Java, Jdk 5 Edition - Richardso, Avondolio, Vitale, Schrager, Mitchell, Scanlon - Wrox
Case editrici
Riferimenti in rete
Materiale laboratorio
- Lezione 29 / 01 / 2008
-
Slideshow degli argomenti presentati: sviluppo di un semplice progetto in Eclipse e cenni sul web server Tomcat.
Archivio TemplateApp.zip del progetto di prova che dimostra le funzionalità di Eclipse IDE: viste, prospettive, strumenti di aiuto alla scrittura del codice, risoluzione automatica degli errori, test-driven development (JUnit), creazione documentazione (JavaDoc) e integrazione con Ant.
Archivio TemplateWebapp.zip aggiornato contenente un prototipo di struttura di progetto (no codice) per lo sviluppo di un'applicazione web deployabile su web server (ad esempio: Tomcat, scaricabile da qui).
- Lezione 05 / 02 / 2008
-
Slideshow degli argomenti presentati: modello di programmazione ed esecuzione di un'applicazione web, sviluppo di applicazioni web in Eclipse e loro esecuzione mediante Tomcat.
Archivio TemplateHTML.zip del progetto di prova che mostra alcune semplici pagine HTML di benvenuto ed errore, il corrispondente deployment descriptor e un esempio di uso dei frame e di una form.
Nota: le slide riportano consigli per risolvere alcune delle tipiche situazioni di errore che si sono presentate a lezione in fase di set up dell'ambiente di lavoro.
- Lezione 12 / 02 / 2008
-
Slideshow degli argomenti presentati: utilizzo di fogli di stile e Javascript.
Archivio CSSandJavascript.zip delle pagine di esempio mostrate.
Firebug plugin per Firefox 1.5 - 2.0.0.*
Archivio TW0708.zip contenente una copia del sito del corso (escluse le risorse scaricabili) in forma di progetto di un'applicazione web basata su HTML, CSS e Javascript, importabile in eclipse.
- Lezione 19 / 02 / 2008
-
Slideshow degli argomenti presentati: creare progetti di applicazioni web basate su servlet in Eclipse e loro utilizzo in Tomcat.
Archivio TemplateLib.zip contenente un progetto eclipse utilizzabile come modello per la creazione di librerie da utilizzare in altri progetti. Sono inoltre disponibili due nuove versioni di questo progetto che incorporano al proprio interno le librerie di JUnit necessarie per l'esecuzione dei test, sia secondo le convenzioni di nomi di JUnit3 (viste in laboratorio) TemplateLib_with_JUnit3.zip che mediante l'uso di annotazioni di JUnit4 (maggiormente intuitivo) TemplateLib_with_JUnit4.zip.
Archivio ValentineServlet.zip contenente un progetto eclipse utilizzabile come modello per la creazione di una semplice applicazione web basata su servlet.
Archivio TemplateServlet.zip contenente un progetto eclipse utilizzabile come modello per lo sviluppo di servlet.
Archivio DeclarationServlet.zip contenente un progetto eclipse con la soluzione dell'esercitazione proposta in laboratorio.
Nota (1): i progetti relativi allo sviluppo di servlet fanno tutti riferimento alla libreria utente 'J2EE 1.4 API', da definire nel proprio workspace in Eclipse facendo riferimento alle librerie della versione di Tomcat in uso, come spiegato nella sezione domande e risposte
Nota (2): il file environment.properties contenuto nei progetti utilizza solo riferimenti alla macchina su cui si sviluppa e non al singolo progetto in cui si trova. Per tale motivo è non solo possibile, ma anche consigliabile sovrascrivere la versione di questo file che è presente nei progetti scaricabili con una già correttamente configurata, usata ad esempio per precedenti progetti analoghi!!
- Lezione 26 / 02 / 2008
-
Slideshow degli argomenti presentati: creare applicazioni web basate su JSP in Eclipse e loro utilizzo in Tomcat.
Archivio TemplateJSP.zip contenente il progetto eclipse di esempio utilizzato durante l'esercitazione.
- Lezione 04 / 03 / 2008
-
Slideshow degli argomenti presentati: creare applicazioni web basate su JSF in Eclipse e loro utilizzo in Tomcat; uso del pattern DAO e prove con HSQLDB.
Archivio TemplateJSF.zip contenente il progetto eclipse di esempio utilizzato durante l'esercitazione.
- Lezione 11 / 03 / 2008
-
Slideshow degli argomenti presentati: progetto di un'applicazione web basata sul framework JSF ed il pattern DAO.
Archivio CdCollectionManager.zip contenente il progetto eclipse di esempio utilizzato durante l'esercitazione.
- Lezione 13 marzo 2008
-
Durante la lezione di Giovedì 13 marzo 2008 è stata analizzata e discussa la seguente versione riveduta e corretta del progetto di esempio: TemplateProjectRefactored.zip.
Tale versione applica ora correttamente il pattern DAO per l'accesso agli oggetti memorizzati su database e corregge alcuni bachi e imprecisioni presenti nella versione dell'A.A. precedente.
La traccia della lezione è contenuta nel seguente slideshow.
La versione estesa del progetto, contenente le modifiche illustrate nell'ultima parte delle slide, è disponibile qui.
Ulteriori approfondimenti
Nota bene: gli argomenti citati nel seguito NON fanno parte del progetto del corso e la loro conoscenza NON rientra, pertanto, tra i requisiti per il superamento dell'esame.
Essi rappresentano piuttosto validi spunti di approfondimento personale od occasioni di lavoro in vista della tesi
di laurea.
RichFaces e Facelets
Il naturale proseguimento delle tecnologie viste al corso consiste nell'integrazione di componenti JSF forniti da terze parti e nel ricorso al templating di componenti JSF e pagine HTML.
Per quanto riguarda il primo aspetto, la libreria probabilmente attualmente più diffusa ed utilizzata è quella fornita dal progetto RichFaces.
Un semplice tutorial che dimostra le potenzialità dei componenti di tale libreria è disponibile a questo indirizzo, mentre una dimostrazione 'live' delle loro potenzialità può essere visualizzata a partire da questo link.
Un progetto di esempio che sfrutta tale tecnologia può essere scaricato da qui.
La tecnologia probabilmente più interessante per quanto riguarda il secondo aspetto è invece quella fornita dal progetto Facelets.
Un semplice tutorial che dimostra le potenzialità di tale tecnologia è disponibile a questo indirizzo.
Un progetto di esempio che sfrutta tale tecnologia può essere scaricato da qui.
Nota bene: entrambi i progetti sono stati testati su Tomcat 6.0.16, scaricabile da qui.
Infine, entrambe le tecnologie possono essere utilizzate all'interno dello stesso progetto, come mostrato qui.
Hibernate
In alternativa all'impiego delle api JDBC è possibile affidare la lettura e scrittura su tabelle di database degli oggetti Java da rendere persistenti a tool forniti da terze parti ed in grado di procedere in automatico al cosiddetto mapping object-relational (ORM).
All'interno di tale tipologia di strumenti, quello open source certamente più diffuso è rappresentato da Hibernate. Alcuni semplici progetti di esempio delle potenzialità di Hibernate sono disponibili on-line all'interno del primo capitolo del tutorial HIBERNATE - Relational Persistence for Idiomatic Java e del secondo capitolo (disponibile gratuitamente) del libro Java Persistence with Hibernate.
Infine, attraverso l'impiego di Hibernate e delle annotazioni introdotte dalla Java Persistence API (JPA), i seguenti due articoli [1] e [2] disponibili presso IBM developerWorks illustrano alcune best practices e pattern avanzati (es: generic DAO) che è possibile adottare nello sviluppo dello strato di persistenza di un'applicazione web.
Spring
Un ulteriore passo qualitativo nello sviluppo di applicazioni web e, in particolare, di applicazioni basate su piattaforma J2EE, consiste nel potersi avvalere di framework che semplifichino le operazioni organizzazione, testing, logging dei propri componenti software, di accesso a basi di dati e, in genere, la separazione delle responsabilità tra diversi oggetti e diversi tier dell'applicazione stessa.
Uno dei framework maggiormente 'outstanding' ed apprezzato da questo punto di vista è certamente Spring, che si pone l'obiettivo di semplificare le usuali operazioni dello sviluppatore di applicazioni web/enterprise, permettendo
la codifica di componenti semplici, riusabili, facilmente testabili e caratterizzati dal minor numero possibile
di dipendenze tra loro stessi e con l'infrastruttura in cui i componenti stessi sono destinati a eseguire.
Secondo Spring, ogni componente deve potersi concentrare esclusivamente sul proprio core-business ed il suo codice
deve mantenersi libero da operazioni quali istanziazione/recupero/lookup di altri componenti con i quali interagire, creazione e terminazione di connessioni verso le basi di dati che interroga, dipendenze ecc...
Mediante il concetto di inversione del controllo, Spring si propone di farsi carico di queste operazioni, configurando e componenendo opportunamente gli oggetti (bean) che costituiscono l'applicazione stessa, gestendone il ciclo di vita e risolvendone le mutue dipendenze in modo trasparente.
Infine, mediante il concetto di programmazione orientata agli aspetti, Spring permette di associare all'esecuzione dei metodi ulteriori funzionalità diverse dal core-business dei metodi stessi (quali ad esempio logging, tracing, gestione delle transazioni, operazioni di setup e teardown, ecc..).
Infine, Spring non vuole essere invasivo e quindi imporre, a sua volta, le proprie libere e i propri componenti e permette di descrivere il proprio intervento in modo completamente dichiarativo mediante descrittori XML o annotazioni Java 5. Parimenti, Spring non vuole sostituirsi ad altri framework esistenti, ma integrarsi con loro e supportarli dove possibile.
Coerentemente con quanto detto (e meglio esposto qui), il progetto che scaricabile da qui
mantiene una struttura simile a quella tipicamente vista nei progetti discussi in laboratorio durante il corso ed illustra alcune tipiche capacità di Spring in merito a:
- separazione della logica strettamente web dal resto dell'applicazione
- iniezione delle dipendenze dei componenti
- aggiunta di funzionalità non-core-business mediante aspetti
All'interno di questo progetto, tuttavia, non viene per semplicità gestito l'accesso ad un vero e proprio database, ma si utilizza il pattern DAO solamente per 'mascherare' un insieme di strutture dati mantenute in memoria.
Il progetto dimostra come integrare Spring con applicazioni web tradizionali (senza cioè fare ricorso al modulo SpringMVC espressamente dedicato allo sviluppo di progetti web) e, in particolare,
dimostra come utilizzare bean configurati via Spring...
- ...all'interno di pagine JSP
- ...all'interno di componenti Servlet
- ...all'interno di pagine JSF e come veri e propri bean equivalenti ai bean JSF tradizionali
- ...all'interno del pattern DAO
La libreria SpringMVC è presente al solo fine di dimostrare la gestione dei bundle di messaggi mediante Spring, ma la gestione tradizionale offerta da JSP e JSF rimane comunque disponibile.
Un secondo progetto, scaricabile da
qui, riprende i componenti
non web del primo e li sviluppa al fine di illustrare:
- utilizzo del framework Spring in applicazioni tradizionali (con metodo
main()
)
- configurazione per scenari di testing
- integrazione con altri framework esistenti
Il progetto esemplifica, in particolare, l'utilizzo di Spring insieme ai framework...
- log4j per la gestione dei messaggi di log durante le fasi di sviluppo e produzione
- junit per la scrittura di suite di test in grado di eseguire anche fuori dal web server
- hibernate per la gestione automatica del mapping object-relational tra classi Java e tabelle su database
E' ovviamente possibile combinare le funzionalità dei due progetti, ad esempio utilizzando nella
parte web l'implementazione degli oggetti DAO basata su
hibernate.