Risorse
XML
Tomcat
Javascript e DOM
- Javascript - Guida di riferimento, creata da Michele Arcadipane; viene inoltre resa disponibile una copia di tale guida anche su questo sito (qui), per la consultazione dalle postazioni del lab4
- Javascript Kit DOM reference with samples and browser support indication
- Gecko DOM reference (PDF)
Pattern DAO
Descrizione approfondita del pattern DAO:
ANT
- Manuale Ant (navigabile nella intranet universitaria)
JUnit
- Sito ufficiale
- Unit testing with JUnit 4.x and EasyMock in Eclipse- Tutorial (capitoli iniziali generici: Eclipse e/o riga di comando; capitolo finale relativo a uno specifico plugin di Eclipse)
- JUnit 4.0 in 10 Minutes: A Quick Reference
Altro
- JavaEE 5 SDK Api (navigabile nella intranet universitaria)
- Sun's J2EE 1.4 Tutorial - version 7, navigabile online (solo html) o scaricabile (con sorgenti ed esempi)
- Cascading Style Sheets, level 2 CSS2 Specification
- HTML 4.01 Specification
- Mozilla Developer Center
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
- 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
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.
Java Server Faces
In aggiunta alle specifiche relative a Servlet e pagine JSP, la piattaforma Java Enterprise Edition definisce un ulteriore framework, detto Java Server Faces (JSF). Tale framework introduce la possibilità di un vero e proprio sviluppo a componenti sia per quanto riguarda l'interfaccia utente che il back-end delle applicazioni web. JSF offre inoltre supporto per il mantenimento della sessione, l'internazionalizzazione, la validazione e conversione dell'input fornito dall'utente e la gestione del ciclo di vita dei componenti.
Sono disponibili alcuni progetti di esempio e relative slideshow descrittive che illustrano le caratteristiche di JSF mediante semplici applicazioni web. Tali progetti possono essere importati in Eclipse, gestiti attraverso ANT e deployabili sul web server Tomcat in maniera del tutto analoga ai progetti visti durante le esercitazioni in laboratorio.
- Creare applicazioni web basate su JSF in Eclipse e loro utilizzo in Tomcat; uso del pattern DAO e prove con HSQLDB. Progetto e slideshow.
- Progetto di un'applicazione web basata sul framework JSF ed il pattern DAO. Progetto e slideshow.
- Esempio di applicazione web per la gestione di un database di studenti e professori e per l'upload e la visualizzazione di immagini. Progetto e slideshow.
Ulteriori riferimenti:
- JavaServer Faces Technology
- Apache MyFaces Project
- librerie myfaces (jsf 1.1)
- reference guide jsf tag 1
- reference guide jsf tag 2
- Unified Expression Language
RichFaces e Facelets
E' possibile integrare la tecnologia JSF con componenti forniti da terze parti e fare uso di templating sia per quanto riguarda le pagine HTML che gli stessi componenti JSF utilizzati.
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
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
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
- 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
Materiale esercitazioni
- Introduzione ad Eclipse
-
Slideshow degli argomenti presentati.
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) e integrazione con Ant.
- Introduzione al web server Tomcat
-
Slideshow degli argomenti presentati.
Archivio TemplateWebapp.zip contenente un prototipo di struttura di progetto (privo di codice) per lo sviluppo di un'applicazione web deployabile su web server (ad esempio: Tomcat, scaricabile anche da qui - intranet universitaria, accessibile dal laboratorio).
- Validazione di documenti XML
-
Il progetto di esempio TemplateXMLValidation.zip affronta la creazione di file XML e la loro validazione basata su DTD o XSD mediante differenti strumenti (si legga il relativo file di build di Ant come una sorta di menu):
- Funzionalità integrate in Eclipse (sebbene non in tutte le versioni presenti in laboratorio)
- Plugin di Firefox (XML Developer Toolbar, basato tuttavia su servizi online per alcune funzionalità, pertanto non fruibile in laboratorio)
- Task di ANT (aggiornati e resi parametrici, rispetto alla versione vista in laboratorio!)
- Codice Java (basato sui sorgenti disponibili qui, qui e qui).
Ulteriori note:- L'implementazione del tunnel TCP/IP, vista a lezione nell'ambito del progetto su XML (per problemi di distribuzione del materiale causati dal guasto del server), è stata più correttamente spostata nel progetto TemplateWebapp.zip, aggiungendo ulteriori informazioni al termine del relativo slideshow
- E' disponibile una nuova versione del progetto relativo alla validazione XML, TemplateXMLValidationPlus.zip, che implementa validatori Java anche per DTD e permette la creazione di un archivio jar di cui richiamare le classi fornendo parametri a riga di comando (...de gustibus) o mediante una intuitiva GUI
- Siti web basati su risorse statiche e scripting
-
Slideshow degli argomenti presentati.
Archivio TemplateHTML.zip contenente il progetto analizzato.
Ulteriori note:-
Sono online gli archivi dei plugin Firebug per (Firefox 2 e Firebug 3), da esplodere con nome omonimo nel direttorio linux...
$USER_HOME/.mozilla/firefox/$SOME_STRANGE_ID_HERE.default/extensions
...oppure nel direttorio windows...
C:\Documents and Settings\$USER/Dati applicazioni\Mozilla\Firefox\Profiles\$SOME_STRANGE_ID_HERE.default\extensions
...per effettuare l'installazione offline in laboratorio (i primi esperimenti sembrano funzionare sotto linux!) - Una versione PDF della DOM reference utilizzata da Firefox (e da tutti gli altri browser basati su Gecko) è scaricabile qui.
- Per sopperire alla mancanza di tempo sperimanta a lezione (causa ennesimi problemi tecnici in laboratorio) viene reso disponibile uno slideshow aggiuntivo sull'utilizzo di Firebug (contenente, tra l'altro, link a due ottimi tutorial online).
-
Sono online gli archivi dei plugin Firebug per (Firefox 2 e Firebug 3), da esplodere con nome omonimo nel direttorio linux...
- Tecniche AJAX
-
Slideshow degli argomenti presentati (modificato in data: 19/03/2009).
Archivio TemplateAJAX.zip contenente il progetto analizzato.
Archivio TecnologieWeb0809.zip contenente un progetto che riporta una copia delle pagine HTML e degli script presenti nel sito del corso, su cui sperimentare le tecniche apprese.
Ulteriori note:- Date le crescenti e irrisolte difficoltà ad attivare Firebug in laboratorio come plugin di Firefox, si segnala l'esistenza di una versione lite e cross-browser di tale plugin, nota come Firebug lite.
- Una breve presentazione di Firebug Lite è disponibile in questo slideshow.
-
Firebug Lite può essere attivato su ciascuna pagina in cui si lavora...
-
dichiarando nel codice HTML il seguente script (reso disponibile sul sito del corso per aggirare le limitazioni del firewall in laboratorio):
<script src="http://www.lia.deis.unibo.it/Courses/TecnologieWeb0809/materiale/laboratorio/risorse/firebug-lite/firebug-lite-compressed.js"> </script>
-
oppure utilizzando la seguente bookmarklet:
Launch firebug lite!
(cliccando sul link qui sopra, Firebug lite si attiva sulla pagina corrente; bookmarkando tale link e richiamandolo mentre si visualizzano altre pagine si attiverà su queste ultime)
- oppure (metodo consigliato) aggiungendo il relativo codice e foglio di stile all'interno dei propri progetti e richiamandone lo script in ogni pagina, come mostrato nella nuova versione del progetto su AJAX, TemplateAJAXFirebugLite.zip.
-
dichiarando nel codice HTML il seguente script (reso disponibile sul sito del corso per aggirare le limitazioni del firewall in laboratorio):
-
Allo stato attuale, Firebug lite...
- non supporta il debug, purtroppo;
- supporta l'inspect del DOM run-time, utile per capire come navigare la struttura della pagina che si sta manipolando;
- supporta l'utilizzo della console, che riporta non solo i log esplicitamente inseriti nel codice, come visto a lezione [ if ( window.console ) console.log("my message"); ], ma anche tutti i messaggi di errore sollevati in genere dagli script! fornendo quindi preziosi indizi su cosa non sta funzionando nel codice Javascript che si scrive (come ad esempio nello script che viene lanciato cliccando qui);
- supporta il monitoraggio delle XmlHttpRequest se esplicitamente assegnate nel codice [ if ( window.firebug ) firebug.watchXHR( theXhr ); ] .
- Servlet
-
Slideshow degli argomenti presentati.
Archivio TemplateServlet.zip contenente il progetto analizzato.
Archivio TemplateLib.zip contenente il progetto che genera la libreria utilizzata durante l'esercitazione.
Archivio ValentineServlet.zip contenente una possibile soluzione dell'esercitazione proposta.
- Esercizi con gli strumenti appresi
-
Data la necessità di fare il punto della situazione e verificare la validità e le modalità di utilizzo degli strumenti e dei modelli forniti, la lezione prevede l'elaborazione di un progetto di esempio contenente alcune semplici pagine, web da modificare secondo le istruzioni riportate nelle pagine stesse.
Per valutare la fattibilità di simili esercizi anche in sede d'esame, il progetto è concepito per essere svolto senza l'ausilio della rete Internet (non completamente accessibile dal laboratorio), ma solamente con il materiale ed i riferimenti disponibili sul sito del corso.
Archivio DoItYourSelf.zip contenente il progetto assegnato.
Archivio DoItYourSelfSolved.zip contenente una possibile soluzione del progetto assegnato.
Slideshow che evidenzia i punti salienti della soluzione.
- JSP e accesso al database
-
Slideshow degli argomenti presentati.
Archivio TemplateJSPandDAO.zip del progetto di prova che dimostra le tecnologie oggetto della lezione.
- Modello di progetto vuoto
-
Archivio TemplateAll.zip (modificato in data: 19/03/2009) contenente un modello di progetto 'vuoto' che predispone per l'uso tutto gli strumenti visti durante il corso (Firebug lite, script di utilità Javascript, Tunnel TCP, database, librerie JUnit, ecc...).
Sono graditi feedback in merito a eventuali bug o funzioni mancanti; molto apprezzato è anche l'eventuale invio tramite posta elettronica di proposte relative a correzioni e/o aggiunte, direttamente sotto forma di target di ANT, librerie da incorporare, script Javascript da accludere, ecc... .