Diario delle Lezioni - A.A. 2024/2025
Lezione 1: Il web moderno: tecnologie, sfide, problemi
25/02/2025, ore 16:30 (2 ore)
- (1-1)Presentazione del corso
- (1-2)Le origini del Web
- (1-3)L'architettura client-server
- (1-4)Web 2.0: Rich Internet Applications, Social Web
- (1-5)I problemi del web odierno: accessibilità, fruibilità cross-browser, sicurezza, usabilità, mobile first,...
- (1-6)Le tecnologie per il web: lato client (HTML5, CSS3 e responsive design, Javascript, AJAX)
- (1-7)Le tecnologie per il web: lato server (Java servlets, JDBC, Freemarker templates)
- (1-8)La realizzazione di un'applicazione web secondo il pattern MVC: il modello dei dati, la logica, la presentazione
Lezione 2: XML
27/02/2025, ore 14:30 (2 ore)
Slides XML
- (2-1)Il protocollo HTTP
- (2-2)Concetti di base URI, URL, media types...
- (2-3)Cosa è e cosa non è XML
- (2-4)Sintassi base di un documento XML: la dichiarazione XML
- (2-5)Esempio Problemi con il character encoding
- (2-6)Character encoding: cos'è veramente UTF-8? (e UTF-16? e ISO-8859-1??)
- (2-7)Esempio Character encoding: può essere anche un problema di sicurezza: l'attacco UTF-7
- (2-8)Sintassi base di un documento XML: la dichiarazione DOCTYPE
- (2-9)Esempio Dichiarare correttamente la versione di HTML un uso
- (2-10)Standards e Quirks mode per i browser
- (2-11)Sintassi base XML: Elementi e regole sintattiche
- (2-12)Esempio Problemi comuni legati alla sintassi degli elementi
- (2-13)Sintassi base XML: Attributi e regole sintattiche
- (2-14)Esempio Problemi comuni legati alla sintassi degli attributi
- (2-15)Sintassi base XML: i namespaces
- (2-16)Sintassi base XML: Testo ed entità carattere
- (2-17)Esempio Attacchi XSS e uso corretto delle entità per i caratteri riservati
Lezione 3: HTML /1
04/03/2025, ore 16:30 (2 ore)
Slides HTML
- (3-1)Sintassi base XML: le sezioni CDATA
- (3-2)Esempio Il problema degli script incorporati nelle pagine HTML
- (3-3)L'evoluzione di HTML
- (3-4)Mantenersi al passo con il living standard: siti di riferimento
link https://developer.mozilla.org/en-US/docs/Web/HTML
link https://html.spec.whatwg.org - (3-5)
- (3-6)Concetti di base URI, URL, media types...
- (3-7)Standards e Quirks mode per i browser
- (3-8)Struttura base dei documenti HTML4 e HTML5
- (3-9)HTML: elementi blocco e inline
- (3-10)La nuova classificazione degli elementi in HTML5
- (3-11)HTML: gli attributi comuni (id, class, style, title, lang, ...)
- (3-12)
- (3-13)Esempio Uso degli attributi ARIA nei layout complessi e personalizzati.
link https://www.w3.org/WAI/standards-guidelines/aria - (3-14)HTML: i paragrafi e le interruzioni (p, br)
- (3-15)Esempio Paragrafi vuoti, ritorni a capo, ecc.: tutti i modi sbagliati per aggiungere spazi verticali in un documento
- (3-16)Marcare la struttura base di un documento: gli elementi h
- (3-17)L'importanza semantica del markup corretto
- (3-18)
- (3-19)
- (3-20)HTML: i contenitori (div, span)
- (3-21)HTML: la formattazione semantica (em, code, pre, ins, q,...)
- (3-22)HTML: la formattazione di base (i, b, tt,...)
- (3-23)Esempio Nuovo comportamento di alcuni tag di formattazione in HTML5
link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i
Lezione 4: HTML /2
06/03/2025, ore 14:30 (2 ore)
Slides HTML
- (4-1)Le liste come elemento semantico nei layout complessi
- (4-2)
- (4-3)HTML: le liste (ol, ul, dl)
- (4-4)
- (4-5)Gli attributi dell'elemento table in HTML5
- (4-6)Struttura semplice di tabella: righe (tr), celle (td) e celle di intestazione (td)
- (4-7)Struttura completa di tabella: intestazione (thead), corpo (tbody), piè di tabella (tfoot)
- (4-8)Esempio Attenzione all'elemento tbody implicito...
- (4-9)Costruire tabelle complesse con colspan e rowspan
- (4-10)
- (4-11)Accessibilità delle immagini: l'attributo alt
- (4-12)Resizing delle immagini client side
- (4-13)Le mappe immagine server e client side
- (4-14)Collegamenti logici tra risorse (link)
- (4-15)L'attributo rel(azione) nei link
link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel - (4-16)Esempio Documenti alternativi
- (4-17)Esempio Collagamento di fogli di stile esterni
- (4-18)Esempio Collegare un feed RSS a una pagina
- (4-19)Esempio Collegare una shortcut icon a una pagina
- (4-20)Esempio Ottimizzare il caricamento di una pagina: i link di tipo preload e prefetch
link https://developer.mozilla.org/en-US/docs/Web/Performance/Speculative_loading
link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload
Lezione 5: HTML /3
11/03/2025, ore 16:30 (2 ore)
Slides HTML
- (5-1)I collegamenti ipertestuali (a)
- (5-2)Ancore nei documenti e fragment identifiers
- (5-3)Esempio Saltare rapidamente al contenuto di una pagina
- (5-4)Differenze tra metodo GET e POST
- (5-5)I moduli in HTML (form)
- (5-6)Attributi importanti delle form: action, method, enctype e accept-charset
link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form - (5-7)La codifica dei dati nelle form
- (5-8)Esempio Scegliere la giusta combinazione di metodo ed encoding per una form
- (5-9)Esempio Il pattern POST-Redirect-GET per la sottomissione di form
link https://en.wikipedia.org/wiki/Post/Redirect/Get
materiale Java_Example_Post_Redirect_Get - (5-10)Esempio Usare accept-charset per risolvere ulteriori problemi di encoding (stavolta tra il client e il server)
- (5-11)Gli elementi di input utente (input)
- (5-12)Esempio Confronto del rendering in vari browser per i controlli di input
materiale HTML_Examples - Forms - (5-13)Esempio I valori sottomessi da campi non testuali: file, checkbox, radio,...
- (5-14)Esempio Impedire la trasmissione di un campo di form con l'attributo disabled
Lezione 6: Java Web Applications
13/03/2025, ore 14:30 (2 ore)
Slides HTML, Servlets
- (6-1)Gli attributi di validazione in HTML4 e HTML5 (maxlength, min, max, pattern,...)
- (6-2)Esempio Come (e dove) validare i dati inviati da una form
- (6-3)Esempio Gli input hidden e i loro diversi casi d'uso
- (6-4)Esempio Gli input hidden per trasmettere CSRF token
link https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html - (6-5)Gli editor testuali (textarea)
- (6-6)I controlli a scelta multipla (select)
- (6-7)Esempio Label e value delle opzioni: quali dati è meglio trasferire al server
- (6-8)Opzioni e raggruppamento (option, optgroup)
- (6-9)
- (6-10)Esempio Uso delle select come menu nei dispositivi mobili
- (6-11)Etichette accessibili per i controlli (label)
- (6-12)Esempio Verificare (ed integrare) la propria piattaforma Java di sviluppo
- (6-13)La Java/Jakarta Enterprise Edition (JEE/JakartaEE), le sue versioni e i suoi profili
link https://www.oracle.com/java/technologies/java-ee-glance.html
link https://jakarta.ee/about/jakarta-ee/ - (6-14)Migrazione dalla JEE alla JakartaEE: problemi e soluzioni
link https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee - (6-15)Installazione (privata) di una JDK aggiornata
Lezione 7: Java Servlets /1
18/03/2025, ore 16:30 (2 ore)
Slides Servlets
Materiale JakartaEE Web Application tutorial, JavaEE (legacy) specification
- (7-1)Presentazione del Netbeans IDE
- (7-2)Presentazione e installazione del server Apache Tomcat
- (7-3)Esempio Suggerimenti utili per collegare Netbeans e Tomcat
- (7-4)Le servlet e i container
- (7-5)Introduzione alla programmazione delle servlet
- (7-6)Il contesto di una web application e l'url mapping nei servlet container
- (7-7)La struttura di base di una web application
- (7-8)Struttura (fisica) di una web application
- (7-9)
- (7-10)Esempio Compilazione, deploy ed esecuzione di una web application
- (7-11)Esempio Aggiungere risorse statiche (html, css, ecc.) a una web application
- (7-12)Esempio Il project object model (POM) di una semplice web application
- (7-13)Il file di configurazione del contesto (context.xml)
link https://tomcat.apache.org/tomcat-10.0-doc/appdev/deployment.html
Lezione 8: Java Servlets /2
20/03/2025, ore 14:30 (2 ore)
Slides Servlets
Materiale JakartaEE Servlet tutorial
- (8-1)Esempio Aggiungere una nuova servlet in una web application
- (8-2)Il deployment descriptor (web.xml)
materiale Java Servlet Specification, version 2.3, Chapter 13 - Deployment Descriptor - (8-3)Le interfacce base delle servlet: Servlet, ServletRequest, ServletResponse
- (8-4)Il ciclo di vita di una servlet: inizializzazione, servizio, finalizzazione
- (8-5)Inizializzare e finalizzare una servlet: metodi init e destroy
- (8-6)La classe HttpServlet e i metodi doGet e doPost
- (8-7)Multithreading con la classe HttpServlet: variabili per-thread e condivise
- (8-8)Scrivere informazioni verso il client: la classe HttpServletResponse
- (8-9)Output testuale e binario da una servlet
- (8-10)Esempio La servlet "Salutami"
- (8-11)Scrittura degli headers e del payload di un messaggio HTTP
- (8-12)Comunicazione tra gli strati dell'applicazione tramite gli attributi della HttpServletRequest
- (8-13)Gestire efficacemente gli errori e le eccezioni in una servlet
- (8-14)Restituire codici di errore HTTP da una servlet
Lezione 9: Java Servlets /3
25/03/2025, ore 16:30 (2 ore)
Slides Servlets
- (9-1)Gestire l'input utente: uso della classe HttpServletRequest
- (9-2)Elaborazione delle form in modalità GET: i metodi getParameter e getParameterValues
- (9-3)Validare l'input per prevenire attacchi (come la SQL Injection)
- (9-4)Sanitizzare l'output per prevenire attacchi XSS
- (9-5)
- (9-6)Incapsulare la logica di output e separare meglio gli strati dell'applicazione
- (9-7)
- (9-8)Trasmissione di dati binari dalla servlet al client
- (9-9)Considerazioni sulla sicurezza: perchè e come scrivere una download servlet
- (9-10)Alcuni header interessanti: Content-Type, Content-Disposition e Content-Length
- (9-11)
- (9-12)Incorporare in una pagina HTML immagini generate da una servlet
- (9-13)
Lezione 10: Java Servlets /4
27/03/2025, ore 14:30 (2 ore)
Slides Servlets
- (10-1)Elaborazione delle form in modalità POST con codifica url
- (10-2)Elaborazione delle form con codifica multipart con JEE versione 6+
- (10-3)L'elemento multipart-config
- (10-4)Gestione dei file caricati con getPart()
- (10-5)
- (10-6)Sanitizzazione dei nomi dei file
link https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html#filename-sanitization - (10-7)Esempio Rendere sicure le applicazioni web che accettano upload di file
link https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html - (10-8)Configurazione dell'applicazione tramite i parametri del ServletContext
- (10-9)Lo stato delle applicazioni web: il concetto di sessione
link https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html - (10-10)Esempio Le sessioni usate per il profiling dell'utente
- (10-11)Trasmissione del session identifier: cookie e URL rewriting
- (10-12)Generare e leggere le informazioni di sessione: la classe HttpSession
- (10-13)Leggere e scrivere variabili di stato: getAttribute, setAttribute
- (10-14)Chiudere una sessione: invalidate
- (10-15)
Lezione 11: Sessioni e Sicurezza
01/04/2025, ore 16:30 (2 ore)
Slides Servlets
- (11-1)Le sessioni usate per l'autenticazione
- (11-2)
- (11-3)Autenticazione utente e storage sicuro delle password
- (11-4)Esempio Hashing delle password con PBKDF2 in Java
link https://en.wikipedia.org/wiki/PBKDF2
link https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html - (11-5)La tecnica del login-con-ridirezione
- (11-6)Tecniche per la protezione delle sessioni
- (11-7)Refresh delle sessioni
- (11-8)Timeout(s) delle sessioni
- (11-9)Esempio La classe SecurityHelpers
- (11-10)I Filter nelle web application java e come usarli per semplificare la gestione delle sessioni
materiale Java_Example_Emailfilter
materiale Java_Example_Login_Middleware
Lezione 12: Web Applications e Database
03/04/2025, ore 14:30 (2 ore)
Slides Servlets
- (12-1)Java e i DBMS: richiami sulle nozioni di base del JDBC
- (12-2)Esempio JDBC: aggiungere la dipendenza del driver al POM del progetto
- (12-3)Esempio JDBC: le classi principali (Connection, (Prepared)Statement, ResultSet)
- (12-4)Esempio JDBC: aprire una connessione tramite il DriverManager (sconsigliato nelle applicazioni web!)
- (12-5)Esempio JDBC: eseguire query di inserimento, aggiornamento, cancellazione
- (12-6)Esempio JDBC: eseguire query di selezione
- (12-7)JDBC: chiudere le risorse (resultset, statement e connessioni)
- (12-8)JDBC: precompilazione di query (parametriche)
- (12-9)Esempio Le ragioni per usare un PreparedStatement in una web application: sicurezza (contro la SQL Injection)
- (12-10)Esempio Quando aprire una connessione in una web application/servlet e quando chiuderla
- (12-11)Performance nell'accesso ai dati nelle applicazioni web: il problema delle connessioni
- (12-12)Riutilizzare le connessioni JDBC: il connection pooling
- (12-13)Configurare una sorgente dati JDBC in Tomcat (context.xml)
link https://tomcat.apache.org/tomcat-10.0-doc/jdbc-pool.html - (12-14)Riferimento alle risorse nel deployment descriptor
- (12-15)Utilizzare i servizi di naming di Java per ottenere un DataSource
- (12-16)Utilizzare la resource injection di JavaEE per ottenere un DataSource
link https://jcp.org/en/jsr/detail?id=250 - (12-17)JDBC: aprire una connessione tramite il DataSource (consigliato nelle applicazioni web!)
- (12-18)
- (12-19)
- (12-20)Esempio Come calcolare il digest di un file
- (12-21)Esempio JDBC: Leggere le chiavi auto-generate dopo un inserimento
- (12-22)Presentazione dei progetti d'esame
Lezione 13: Modellazione Dati /1
08/04/2025, ore 16:30 (2 ore)
- (13-1)La realizzazione di un'applicazione web secondo il pattern MVC: il modello dei dati, la logica, la presentazione
- (13-2)Il modello a oggetti dei dati come contratto tra i livelli MVC
- (13-3)Creazione di POJO - JavaBeans per rappresentare le entità del modello dati
- (13-4)Costruire un POJO corretti: costruttore di default, getters e setters
- (13-5)Esempio Creazione degli oggetti entità: interfaccia e implementazione
- (13-6)Esempio Il modello dati newspaper: un esempio di design e implementazione di un modello dati su MySQL
materiale Java_Example_SimpleDataModel - (13-7)L'interfaccia a basso livello degli oggetti entità: i proxy
- (13-8)Esempio Marcare gli oggetti entità come modificati nei setter
- (13-9)Esempio Lazy loading delle relazioni: perchè è importante e come si realizza
- (13-10)Creazione dei metodi di accesso ai dati: i DAO
- (13-11)Esempio Factory per oggetti entità
- (13-12)Esempio Caching degli oggetti entità: perchè è importante e come si realizza
Lezione 14: Modellazione Dati /2
10/04/2025, ore 14:30 (2 ore)
Slides Servlets, CSS3
Materiale CSS_Examples
- (14-1)Cenni sulle tecniche di locking ottimistico e pessimistico per gestire la concorrenza
- (14-2)Esempio Esempio riassuntivo: un'applicazione base che mostra come realizzare e far interagire model e controller in modo efficace
materiale Java_Example_BaseApplicationMC - (14-3)Cenni sui ServletContextListener nelle web application java
- (14-4)Presentazione dei fogli di stile CSS
- (14-5)Incorporare i fogli di stile in HTML: elementi style e link
- (14-6)Fogli di stile multipli per uno stesso documento
- (14-7)Fogli di stile persistenti, preferiti e alternativi (scelta utente)
- (14-8)Fogli di stile alternativi legati ai media
- (14-9)Esempio Accorgimenti per la creazione di figli di stile per la stampa (media="print")
materiale css_inclusion_print - (14-10)Sintassi delle regole CSS
- (14-11)
- (14-12)Selettori di base
Lezione 15: CSS /1
15/04/2025, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (15-1)Selettori di attributo
- (15-2)
- (15-3)Esempio Classi come attributi speciali
- (15-4)Selettori di ID
- (15-5)Forma abbreviata dei selettori di classe e di ID
- (15-6)Esempio Identificare e formattare le strutture di base di un layout
- (15-7)Pseudo classi
- (15-8)Esempio Effetti hover sui link
- (15-9)Esempio Effetti focus sugli input
- (15-10)La pseudo classe :hover nei browser legacy
- (15-11)Esempio Inserire bordi interni in una lista di elementi
- (15-12)Pseudo elementi
- (15-13)Esempio Creare un capolettera
- (15-14)I selettori composti
- (15-15)Esempio Formattare in modo particolare due titoli adiacenti
- (15-16)Le regole di selezione delle proprietà di stile
- (15-17)Priorità di origine, specificità e ordinamento delle regole
- (15-18)Il modificatore !important
- (15-19)
- (15-20)Ereditarietà delle proprietà di stile
- (15-21)Usare il CSS inspector del browser per analizzare gli stili e la loro composizione
link https://firefox-source-docs.mozilla.org/devtools-user/page_inspector/how_to/examine_and_edit_css
link https://developer.chrome.com/docs/devtools/css
Lezione 16: CSS /2
29/04/2025, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (16-1)Unità di misura nei CSS
- (16-2)Uso delle misure relative per aumentare l'accessibilità di un sito
- (16-3)Uso delle misure percentuali nei design liquidi e responsive
- (16-4)Specifica dei colori nei CSS
- (16-5)
- (16-6)Alcune nuove proprietà CSS3 per i box: border-radius e box-shadow
- (16-7)Prefissi dei vendor sulle proprietà css e compatibilità con i browser legacy
- (16-8)
- (16-9)
- (16-10)
- (16-11)Modificare lo sfondo di un elemento
- (16-12)Uso di immagini come sfondo: ripetizione e allineamento
- (16-13)
- (16-14)Proprietà di formattazione dei caratteri
- (16-15)Specificare font multipli per assicurare compatibilità tra le piattaforme
- (16-16)Le web fonts e la at-rule @font-face
- (16-17)
- (16-18)Proprietà di formattazione dei paragrafi
- (16-19)Formattare le liste con i CSS
- (16-20)
- (16-21)Altre proprietà dei CSS: content, quotes, cursor,...
- (16-22)Esempio Esempi d'uso delle proprietà cursor, content, quotes e counter
materiale css_properties_misc - (16-23)
- (16-24)
Lezione 17: CSS /3
06/05/2024, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (17-1)
- (17-2)Cenni sulle funzioni CSS var() e calc()
- (17-3)Cambiare il sistema di display degli elementi con i CSS
- (17-4)Esempio Creare elementi popup usando la proprietà display e la pseudo class :hover
materiale css_properties_display - (17-5)Il box model dei CSS
- (17-6)Cambiare la visibilità degli elementi con CSS
- (17-7)Gestione del contenuto degli elementi: la proprietà overflow
- (17-8)
- (17-9)Esempio Clipping del contenuto di un elemento
- (17-10)Esempio Scrolling alternativo con CSS e Javascript
- (17-11)Definire margini e padding con i CSS
- (17-12)Impostare l'altezza e la larghezza (minime, massime, effettive o relative) di un elemento
- (17-13)Width, height e la proprietà box-sizing
- (17-14)I sistemi di posizionamento dei CSS
- (17-15)L'algoritmo di disposizione degli oggetti nelle pagine HTML
- (17-16)Disposizione degli elementi blocco e inline
- (17-17)Il posizionamento sulla terza dimensione: la proprietà z-index
- (17-18)Posizionamento relativo
- (17-19)
- (17-20)Posizionamento assoluto
- (17-21)
- (17-22)L'origine delle coordinate nel posizionamento assoluto
- (17-23)Esempio Realizzare layouts con il posizionamento assoluto
- (17-24)Esempio Combinare il posizionamento e le proprietà margin per creare layouts
- (17-25)Posizionamento fisso
- (17-26)
- (17-27)Esempio Realizzare menu e banner sempre visibili col posizionamento fisso
- (17-28)I floats
Lezione 18: (Responsive) Web design
08/05/2025, ore 14:30 (2 ore)
Slides CSS3
Materiale CSS_Examples, CSS_Examples: layouts
- (18-1)Esempio Uso dei floats per realizzare layout a più colonne ed altri effetti
materiale css_properties_positioning_float - (18-2)Progettare un sito web: linee guida di stile e usabilità
- (18-3)Costruire il layout di un sito web: layout fissi e liquidi
- (18-4)Esempio I layout di base: layout a colonna singola
- (18-5)Esempio I layout di base: layout due colonne
- (18-6)Esempio Uso di elementi posizionati per la realizzazione di layout molticolonna
- (18-7)Esempio Uso di floats per la realizzazione di layout molticolonna
- (18-8)Introduzione al responsive web design
- (18-9)Le CSS media queries
- (18-10)Usare l'effetto cascata dei CSS per modificare le regole di default tramite una media query
- (18-11)CSS media queries per il responsive disign: i responsive breakpoints
- (18-12)Come adattare un layout a device diversi con i CSS: spostare, ridimensionare, nascondere, sostituire
- (18-13)Esempio Realizzare un menu alternativo accessibile con il controllo SELECT (...e un bottone)
- (18-14)I layout a griglia
- (18-15)Esempio Il layout a griglia fluido responsive realizzato con i float
materiale Layout_3col_grid_float_liquid
Lezione 19: Templates /1
13/05/2025, ore 16:30 (2 ore)
Slides CSS3
Materiale Java_Example_Templates
- (19-1)
- (19-2)Esempio Un layout a griglia fluido realizzato con i flexbox
materiale Layout_3col_grid_flexbox_liquid - (19-3)
- (19-4)Introduzione ai template
- (19-5)
- (19-6)FreeMarker: componenti dei template
- (19-7)FreeMarker: il data model astratto (hash, sequenze e scalari)
link https://freemarker.apache.org/docs/dgui_datamodel_types.html - (19-8)Esempio FreeMarker: configurazione di base
- (19-9)FreeMarker: specifica dell'output format e automatic escaping
- (19-10)FreeMarker: specifica del default object wrapper
Lezione 20: Templates /2
15/05/2025, ore 14:30 (2 ore)
Materiale Java_Example_Templates
- (20-1)Esempio Compilazione e visualizzazione di un template
- (20-2)FreeMarker: il data model in Java
- (20-3)FreeMarker: le interpolations
link https://freemarker.apache.org/docs/dgui_template_valueinsertion.html - (20-4)FreeMarker: default per le interpolations
- (20-5)FreeMarker: i built-in (?cap_first, ?size, ...)
link https://freemarker.apache.org/docs/dgui_template_exp.html#dgui_template_exp_builtin - (20-6)Esempio Creazione di template semplici (con sole interpolations)
- (20-7)FreeMarker: hashes nel data model: creazione e accesso
- (20-8)FreeMarker: uso di classi java nel data model
- (20-9)FreeMarker: liste nel data model: creazione e accesso
- (20-10)
- (20-11)FreeMarker: testare la definizione di una variable
- (20-12)Esempio Creazione di template con parti condizionali
- (20-13)
- (20-14)FreeMarker: leggere la dimensione di una lista
- (20-15)FreeMarker: separatori di lista con la direttiva sep
- (20-16)FreeMarker: la clausola else in una direttiva list
- (20-17)Esempio Creazione di template con iterazione
- (20-18)
- (20-19)Esempio Inclusione di un template secondario in uno principale
- (20-20)
- (20-21)FreeMarker: macro parametriche
- (20-22)FreeMarker: macro con contenuto
- (20-23)Esempio Modularizzazione dei template
- (20-24)Esempio Ereditarietà dei template e come realizzarla in Freemarker
- (20-25)Esempio Una classe di utilità per l'uso di FreeMarker come strato di presentazione delle applicazioni web
materiale Java_Example_Templates_Fwk - (20-26)Esempio Esempio riassuntivo: un'applicazione base che mostra come realizzare e far interagire model, view e controller in modo efficace
materiale Java_Example_BaseApplicationMVC - (20-27)Esempio Il caso di studio Newspaper: un esempio di applicatione web Java completa
materiale Java_Example_Newspaper_DAO
Lezione 21: Javascript /1
20/05/2025, ore 16:30 (2 ore)
Slides Javascript
- (21-1)Introduzione a Javascript
- (21-2)Javascript: le origini e gli usi odierni
- (21-3)Javascript, ECMAScript, TypeScript... cosa sono veramente?
link https://developer.mozilla.org/en-US/docs/Web/javascript
link https://262.ecma-international.org
link https://www.typescriptlang.org - (21-4)ECMAScript 5 e 6: le principali novità
- (21-5)Inserire script nelle pagine HTML
- (21-6)Accorgimenti per l'incorporazione corretta ed efficiente di script nelle pagine HTML
- (21-7)Separare la logica dal contenuto: come NON usare javascript nelle pagine HTML
- (21-8)Il modello di esecuzione (single-threaded) di Javascript
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop - (21-9)I tipi di dato di Javascript e i sistemi di conversione
- (21-10)Variabili e dichiarazione di variabili
- (21-11)Esempio Dichiarazione implicita e variabili globali
- (21-12)Esempio Variabili con scope globale e di funzione
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var - (21-13)ES6: variabili con scope di blocco (finalmente!)
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let - (21-14)ES5: la modalità strict
- (21-15)Costanti
- (21-16)Operatori aritmetici e logici
- (21-17)Gli operatori VOID ed EVAL
- (21-18)L'operatore TYPEOF
- (21-19)I costrutti condizionali
- (21-20)I loop
- (21-21)Esempio Il loop FOR...IN (su array e oggetti)
- (21-22)Esempio Il loop FOR...OF (su array e oggetti iterabili)
- (21-23)Esempio Le funzioni Javascript sono valori (oggetti Function)
- (21-24)Dichiarazione di funzioni: dirette, anonime, freccia e il costruttore Function
- (21-25)Esempio Riferimento alle funzioni e uso delle funzioni come valori
- (21-26)Chiamata di funzioni
- (21-27)Esempio Passaggio di una funzione come parametro
- (21-28)Esempio Applicare l'operatore di chiamata ad espressioni che ritornano funzioni
- (21-29)Modalità di passaggio dei parametri. Omissione di parametri e valori di default
- (21-30)ES6: funzioni variadiche e rest parameter
- (21-31)Ritorno di valori dalle funzioni
- (21-32)Esempio Tipi di ritorno misti, ritorno di valori undefined
- (21-33)Le closures
- (21-34)Esempio Creare un generatore di funzioni
- (21-35)Regole di scope nella creazione di valori di tipo Function con riferimenti esterni
- (21-36)Introduzione agli oggetti di Javascript
- (21-37)La gerarchia degli oggetti: l'oggetto-base Object
- (21-38)Esempio La sintassi abbreviata per la creazione di oggetti
- (21-39)Accesso alle proprietà degli oggetti
- (21-40)Esempio Dinamicità degli oggetti Javascript
- (21-41)Esempio Creazione e inizializzazione di proprietà
- (21-42)Esempio Usare gli oggetti come strutture dati generiche
- (21-43)Esempio Usare gli oggetti come array associativi
- (21-44)Creazione di metodi
- (21-45)Accesso e chiamata di metodi negli oggetti
- (21-46)La parola chiave THIS all'interno dei metodi
Lezione 22: Javascript /2
22/05/2025, ore 14:30 (2 ore)
Slides Javascript
- (22-1)Generare dinamicamente il nome della proprietà da assegnare
- (22-2)Le funzioni costruttore
- (22-3)L'operatore NEW e le funzioni costruttore
- (22-4)La proprietà constructor degli oggetti
- (22-5)La proprietà prototype delle funzioni costruttore (e la proprietà __proto__ degli oggetti)
- (22-6)Esempio Estensione di oggetti tramite il prototipo del loro construttore
- (22-7)Funzioni getter e setter
- (22-8)ES5: il metodo Object.defineProperty
- (22-9)Coding standards: dichiarare proprietà e metodi pubblici nella maniera più leggebile
- (22-10)Metodi privati negli oggetti Javascript: un workaround per crearli, anche se con qualche limitazione
- (22-11)Esempio L'effetto closure usato per fornire ai metodi privati l'accesso ai membri pubblici di un oggetto
- (22-12)Esempio Metodi privilegiati negli oggetti Javascript: sfruttare le closure per fornire ai metodi pubblici l'accesso a quelli privati
- (22-13)ES6: il costrutto CLASS
- (22-14)Esempio Definizione di oggetti con classi o prototipi
- (22-15)L'operatore spread (...)
- (22-16)Il destructuring assignment
- (22-17)Esempio Destructuring assignment con array e oggetti
- (22-18)Cenni sulla definizione degli iteratori
- (22-19)Cenni sulle funzioni generatore
- (22-20)Gestione delle eccezioni in Javascript
- (22-21)Oggetti predefiniti Javascript: le stringhe
- (22-22)ES6: Interpolazione di stringhe
- (22-23)Oggetti predefiniti Javascript: le espressioni regolari
- (22-24)Oggetti predefiniti Javascript: gli array
- (22-25)Esempio Ordinare un array con il metodo sort e una funzione freccia
- (22-26)Oggetti predefiniti Javascript: le date
- (22-27)Oggetti predefiniti Javascript: Set e Map in ES6
- (22-28)
- (22-29)Esempio Incorporare un algoritmo (asincrono) in una Promise
- (22-30)Handler di una Promise: then e catch
- (22-31)Esempio Restituzione ed uso del risultato finale di una Promise
- (22-32)Concatenazione di handler su una Promise
- (22-33)Funzioni ASYNC come generatori di Promise
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function - (22-34)La parola chiave AWAIT nelle funzioni ASYNC
Lezione 23: DOM (XML, HTML, CSS, Events)
27/05/2025, ore 16:30 (2 ore)
Slides Javascript, DOMHTML
- (23-1)Javascript nei browser: l'oggetto di default window
- (23-2)I metodi setTimer e setInterval
- (23-3)Esempio Prevenire l'event flooding derivante da un uso scorretto dei timer
- (23-4)Esempio Come sfruttare setTimer per creare una buona interfaccia utente
- (23-5)Il Document Object Model di XML
- (23-6)Struttura ad albero di un documento XML
- (23-7)Le classi fondamentali del DOM: Node
- (23-8)Attributi base dei nodi
- (23-9)Attributi per la navigazione tra i nodi
- (23-10)Esempio Raggiungere un nodo generico all'interno del documento
- (23-11)Metodi per la modifica dei nodi
- (23-12)Uso dell'attributo textContent per leggere e scrivere il contenuto testuale di un nodo
- (23-13)Esempio Spostare frammenti di un documento HTML in posizioni diverse
- (23-14)Le classi fondamentali del DOM: Document
- (23-15)Metodi per la ricerca rapida di nodi (per id e tag): getElementById e getElementsByTagName
- (23-16)Metodi per la creazione di nodi
- (23-17)Esempio Creare un frammento di HTML ed inserirlo in un documento preesistente
- (23-18)Le classi fondamentali del DOM: Element
- (23-19)Leggere e scrivere i valori degli attributi
- (23-20)I metodi querySelector e querySelectorAll per selezionare nodi con selettori CSS3
- (23-21)Il DOM di HTML
- (23-22)La classe HTMLDocument
- (23-23)La classe HTMLElement
- (23-24)Impostare gli attributi degli elementi attraverso le proprietà dell'oggetto HTMLElement
- (23-25)La proprietà innerHTML per cambiare rapidamente il contenuto degli elementi
- (23-26)La classe HTMLFormElement
- (23-27)Il DOM di CSS
- (23-28)Leggere e scrivere lo stile specifico di un elemento: l'attributo style
- (23-29)Le dichiarazioni di stile: l'oggetto CSSStyleDeclaration
- (23-30)Lettura/scrittura dei valori degli attributi di stile tramite la CSSStyleDeclaration
- (23-31)Accesso rapido alle proprietà di stile: l'interfaccia CSS2Properties
- (23-32)Leggere gli stili dedotti dalla cascata: getComputedStyle
- (23-33)Il modello a eventi del DOM
- (23-34)Event Bubbling
- (23-35)Delegare un evento a un elemento superiore della gerarchia
- (23-36)Event Capturing
- (23-37)Esempio Il percorso completo di un evento
- (23-38)Associazione di handlers agli eventi: addEventListener
- (23-39)Rimuovere handlers: removeEventListener
- (23-40)Esempio Le funzioni EventListener
- (23-41)Struttura di base di un oggetto Event
- (23-42)Gli attributi target e currentTarget negli oggetti Event
- (23-43)I metodi stopPropagation e preventDefault
- (23-44)Gli eventi del mouse
- (23-45)Struttura degli eventi del mouse
- (23-46)L'attributo relatedTarget negli eventi mouse
- (23-47)Gli eventi della tastiera
- (23-48)Struttura degli eventi della tastiera: code, key, charCode, ecc.
- (23-49)Altri eventi del DOM
- (23-50)Eventi delle form: change, reset, submit
- (23-51)Esempio L'evento submit e la validazione della form
Lezione 24: Javascript: Esempi Avanzati
29/05/2025, ore 14:30 (2 ore)
Slides Javascript
- (24-1)Usare javascript in modo degradante: prime idee
- (24-2)
- (24-3)Esempio Realizzare un sistema di paginazione lato client (degradante) con Javascript
materiale JS_Example_simplepager - (24-4)L'oggetto base delle tecniche AJAX: XMLHttpRequest
- (24-5)Chiamate AJAX sincrone e asincrone
- (24-6)Procedura per chiamate AJAX sincrone
- (24-7)Procedura per chiamate AJAX asincrone
- (24-8)Passaggio di dati con codifica JSON su richieste AJAX
- (24-9)
- (24-10)Esempio Implementazione AJAX della paginazione degradante e del corrispondente supporto server in Java
materiale Java_Example_Ajax_Pager_Async