Diario delle Lezioni - A.A. 2023/2024
Lezione 1: Il web moderno: tecnologie, sfide, problemi
27/02/2024, 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
- (1-9)Il protocollo HTTP
Lezione 2: XML
29/02/2024, ore 09:30 (2 ore)
Slides XML
- (2-1)Cosa è e cosa non è XML
- (2-2)Sintassi base di un documento XML: la dichiarazione XML
- (2-3)Esempio Problemi con il character encoding
- (2-4)Character encoding: cos'è veramente UTF-8? (e UTF-16? e ISO-8859-1??)
- (2-5)Esempio Character encoding: può essere anche un problema di sicurezza: l'attacco UTF-7
- (2-6)Sintassi base di un documento XML: la dichiarazione DOCTYPE
- (2-7)Esempio Dichiarare correttamente la versione di HTML un uso
- (2-8)Standards e Quirks mode per i browser
- (2-9)Sintassi base XML: Elementi e regole sintattiche
- (2-10)Esempio Problemi comuni legati alla sintassi degli elementi
- (2-11)Sintassi base XML: Attributi e regole sintattiche
- (2-12)Esempio Problemi comuni legati alla sintassi degli attributi
- (2-13)Sintassi base XML: i namespaces
- (2-14)Sintassi base XML: Testo ed entità carattere
- (2-15)Esempio Attacchi XSS e uso corretto delle entità per i caratteri riservati
- (2-16)Sintassi base XML: le sezioni CDATA
- (2-17)Esempio Il problema degli script incorporati nelle pagine HTML
- (2-18)Sintassi base XML: le processing instruction
- (2-19)Sintassi base XML: i commenti
Lezione 3: HTML /1
05/03/2024, ore 16:30 (2 ore)
Slides HTML
- (3-1)L'evoluzione di HTML
- (3-2)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-3)
- (3-4)Concetti di base URI, URL, media types...
- (3-5)Standards e Quirks mode per i browser
- (3-6)Struttura base dei documenti HTML4 e HTML5
- (3-7)HTML: elementi blocco e inline
- (3-8)La nuova classificazione degli elementi in HTML5
- (3-9)HTML: gli attributi comuni (id, class, style, title, lang, ...)
- (3-10)
- (3-11)Esempio Uso degli attributi ARIA nei layout complessi e personalizzati.
link https://www.w3.org/WAI/standards-guidelines/aria - (3-12)HTML: i paragrafi e le interruzioni (p, br)
- (3-13)Esempio Paragrafi vuoti, ritorni a capo, ecc.: tutti i modi sbagliati per aggiungere spazi verticali in un documento
- (3-14)Marcare la struttura base di un documento: gli elementi h
- (3-15)L'importanza semantica del markup corretto
- (3-16)
- (3-17)
- (3-18)HTML: i contenitori (div, span)
- (3-19)HTML: la formattazione semantica (em, code, pre, ins, q,...)
- (3-20)HTML: la formattazione di base (i, b, tt,...)
- (3-21)Esempio Nuovo comportamento di alcuni tag di formattazione in HTML5
link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i - (3-22)Le liste come elemento semantico nei layout complessi
- (3-23)
Lezione 4: HTML /2
07/03/2024, ore 09:30 (2 ore)
Slides HTML
- (4-1)HTML: le liste (ol, ul, dl)
- (4-2)
- (4-3)Gli attributi dell'elemento table in HTML5
- (4-4)Struttura semplice di tabella: righe (tr), celle (td) e celle di intestazione (td)
- (4-5)Struttura completa di tabella: intestazione (thead), corpo (tbody), piè di tabella (tfoot)
- (4-6)Esempio Attenzione all'elemento tbody implicito...
- (4-7)Costruire tabelle complesse con colspan e rowspan
- (4-8)Dichiarare le colonne (col) e i gruppi di colonne (colgroup)
- (4-9)
- (4-10)Accessibilità delle immagini: l'attributo alt
- (4-11)Resizing delle immagini client side
- (4-12)Le mappe immagine server e client side
- (4-13)I nuovi elementi HTML5 video, audio e canvas
- (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://caniuse.com/link-rel-prefetch
link https://caniuse.com/link-rel-preload
Lezione 5: HTML /3
12/03/2024, 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)La codifica dei dati nelle form
- (5-6)I moduli in HTML (form)
- (5-7)Attributi importanti delle form: action, method, enctype e accept-charset
link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/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
- (5-15)Gli attributi di validazione in HTML4 e HTML5 (maxlength, min, max, pattern,...)
- (5-16)Esempio Come (e dove) validare i dati inviati da una form
Lezione 6: Java Web Applications
14/03/2024, ore 09:30 (2 ore)
Slides HTML, Servlets
- (6-1)Gli editor testuali (textarea)
- (6-2)I controlli a scelta multipla (select)
- (6-3)Esempio Label e value delle opzioni: quali dati è meglio trasferire al server
- (6-4)Opzioni e raggruppamento (option, optgroup)
- (6-5)
- (6-6)Esempio Uso delle select come menu nei dispositivi mobili
- (6-7)Etichette accessibili per i controlli (label)
- (6-8)Esempio Gli input hidden e i loro diversi casi d'uso
- (6-9)Esempio Gli input hidden per trasmettere CSRF token
link https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html - (6-10)Esempio Verificare (ed integrare) la propria piattaforma Java di sviluppo
- (6-11)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-12)Migrazione dalla JEE alla JakartaEE: problemi e soluzioni
link https://blogs.oracle.com/javamagazine/post/transition-from-java-ee-to-jakarta-ee - (6-13)Installazione (privata) di una JDK aggiornata
- (6-14)Presentazione del Netbeans IDE
- (6-15)Presentazione e installazione del server Apache Tomcat
- (6-16)Esempio Suggerimenti utili per collegare Netbeans e Tomcat
Lezione 7: Java Servlets /1
19/03/2024, ore 16:30 (2 ore)
Slides Servlets
Materiale JakartaEE Web Application tutorial, JavaEE (legacy) specification
- (7-1)Le servlet e i container
- (7-2)Introduzione alla programmazione delle servlet
- (7-3)Il contesto di una web application e l'url mapping nei servlet container
- (7-4)La struttura di base di una web application
- (7-5)Struttura (fisica) di una web application
- (7-6)
- (7-7)Esempio Il project object model (POM) di una semplice web application
- (7-8)Esempio Compilazione, deploy ed esecuzione di una web application
- (7-9)Il file di configurazione del contesto (context.xml)
link https://tomcat.apache.org/tomcat-10.0-doc/appdev/deployment.html - (7-10)Esempio Aggiungere risorse statiche (html, css, ecc.) a una web application
- (7-11)Il deployment descriptor (web.xml)
materiale Java Servlet Specification, version 2.3, Chapter 13 - Deployment Descriptor - (7-12)
- (7-13)Esempio Adattare il progetto di base per eseguirlo su JakartaEE/Tomcat 10
materiale Java_WebApp_Base_T10
Lezione 8: Java Servlets /2
21/03/2024, ore 09:30 (2 ore)
Slides Servlets
Materiale JakartaEE Servlet tutorial, JavaEE Servlet specification
- (8-1)Esempio Aggiungere una nuova servlet in una web application
- (8-2)Le interfacce base delle servlet: Servlet, ServletRequest, ServletResponse
- (8-3)Il ciclo di vita di una servlet: inizializzazione, servizio, finalizzazione
- (8-4)Inizializzare e finalizzare una servlet: metodi init e destroy
- (8-5)La classe HttpServlet e i metodi doGet e doPost
- (8-6)Multithreading con la classe HttpServlet: variabili per-thread e condivise
- (8-7)Scrivere informazioni verso il client: la classe HttpServletResponse
- (8-8)Output testuale e binario da una servlet
- (8-9)Esempio La servlet "Salutami"
- (8-10)Scrittura degli headers e del payload di un messaggio HTTP
- (8-11)Comunicazione tra gli strati dell'applicazione tramite gli attributi della HttpServletRequest
- (8-12)Gestire efficacemente gli errori e le eccezioni in una servlet
- (8-13)Restituire codici di errore HTTP da una servlet
Lezione 9: Java Servlets /3
26/03/2024, 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
04/04/2024, ore 09: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)Configurazione dell'applicazione tramite i parametri del ServletContext
- (10-6)Sanitizzazione dei nomi dei file
link https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html#filename-sanitization - (10-7)
- (10-8)Esempio Rendere sicure le applicazioni web che accettano upload di file
link https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html - (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
09/04/2024, ore 16:30 (2 ore)
Slides Servlets
- (11-1)Le sessioni usate per l'autenticazione
- (11-2)
- (11-3)La tecnica del login-con-ridirezione
- (11-4)Autenticazione utente e storage sicuro delle password
- (11-5)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-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_Login_Middleware
Lezione 12: Web Applications e Database
11/04/2024, ore 09: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-9.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: Creare un ResultSet non FORWARD_ONLY e contare il numero di resultati
- (12-22)Esempio JDBC: Leggere le chiavi auto-generate dopo un inserimento
- (12-23)Presentazione dei progetti d'esame
Lezione 13: Modellazione Dati
16/04/2024, 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)L'interfaccia a basso livello degli oggetti entità: i proxy
- (13-7)Esempio Marcare gli oggetti entità come modificati nei setter
- (13-8)Esempio Lazy loading delle relazioni: perchè è importante e come si realizza
- (13-9)Creazione dei metodi di accesso ai dati: i DAO
- (13-10)Esempio Factory per oggetti entità
- (13-11)Esempio Caching degli oggetti entità: perchè è importante e come si realizza
- (13-12)Esempio Il modello dati newspaper: un esempio di design e implementazione di un modello dati su MySQL
materiale Java_Example_SimpleDataModel - (13-13)Esempio Esempio riassuntivo: un'applicazione base che mostra come realizzare e far interagire model e controller in modo efficace
materiale Java_Example_BaseApplicationMC
Lezione 14: CSS /1
18/04/2024, ore 09: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)Cenni sui ServletContextListener nelle web application java
- (14-3)
- (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
- (14-13)Selettori di attributo
Lezione 15: CSS /2
23/04/2024, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (15-1)
- (15-2)Esempio Classi come attributi speciali
- (15-3)Selettori di ID
- (15-4)Forma abbreviata dei selettori di classe e di ID
- (15-5)Esempio Identificare e formattare le strutture di base di un layout
- (15-6)Pseudo classi
- (15-7)Esempio Effetti hover sui link
- (15-8)Esempio Effetti focus sugli input
- (15-9)La pseudo classe :hover nei browser legacy
- (15-10)Esempio Inserire bordi interni in una lista di elementi
- (15-11)Pseudo elementi
- (15-12)Esempio Creare un capolettera
- (15-13)I selettori composti
- (15-14)Esempio Formattare in modo particolare due titoli adiacenti
- (15-15)Le regole di selezione delle proprietà di stile
- (15-16)Priorità di origine, specificità e ordinamento delle regole
- (15-17)Il modificatore !important
- (15-18)
- (15-19)Ereditarietà delle proprietà di stile
- (15-20)Unità di misura nei CSS
- (15-21)Uso delle misure relative per aumentare l'accessibilità di un sito
- (15-22)Uso delle misure percentuali nei design liquidi e responsive
- (15-23)Specifica dei colori nei CSS
- (15-24)
Lezione 16: CSS /3
30/04/2024, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (16-1)Alcune nuove proprietà CSS3 per i box: border-radius e box-shadow
- (16-2)Prefissi dei vendor sulle proprietà css e compatibilità con i browser legacy
- (16-3)
- (16-4)
- (16-5)
- (16-6)Modificare lo sfondo di un elemento
- (16-7)Uso di immagini come sfondo: ripetizione e allineamento
- (16-8)
- (16-9)
- (16-10)
- (16-11)Proprietà di formattazione dei caratteri
- (16-12)Specificare font multipli per assicurare compatibilità tra le piattaforme
- (16-13)Le web fonts e la at-rule @font-face
- (16-14)
- (16-15)Proprietà di formattazione dei paragrafi
- (16-16)Formattare le liste con i CSS
- (16-17)
- (16-18)Altre proprietà dei CSS: content, quotes, cursor,...
- (16-19)Esempio Esempi d'uso delle proprietà cursor, content, quotes e counter
materiale css_properties_misc - (16-20)Cambiare il sistema di display degli elementi con i CSS
- (16-21)Esempio Creare elementi popup usando la proprietà display e la pseudo class :hover
materiale css_properties_display - (16-22)Il box model dei CSS
- (16-23)Cambiare la visibilità degli elementi con CSS
Lezione 17: CSS /4
02/05/2024, ore 09:30 (2 ore)
Slides CSS3
Materiale CSS_Examples
- (17-1)
- (17-2)Cenni sulle funzioni CSS var() e calc()
- (17-3)Gestione del contenuto degli elementi: la proprietà overflow
- (17-4)
- (17-5)Esempio Clipping del contenuto di un elemento
- (17-6)Esempio Scrolling alternativo con CSS e Javascript
- (17-7)Definire margini e padding con i CSS
- (17-8)Impostare l'altezza e la larghezza (minime, massime, effettive o relative) di un elemento
- (17-9)Width, height e la proprietà box-sizing
- (17-10)I sistemi di posizionamento dei CSS
- (17-11)L'algoritmo di disposizione degli oggetti nelle pagine HTML
- (17-12)Disposizione degli elementi blocco e inline
- (17-13)Il posizionamento sulla terza dimensione: la proprietà z-index
- (17-14)Posizionamento relativo
- (17-15)
- (17-16)Posizionamento assoluto
- (17-17)
- (17-18)L'origine delle coordinate nel posizionamento assoluto
- (17-19)Esempio Realizzare layouts con il posizionamento assoluto
- (17-20)Esempio Combinare il posizionamento e le proprietà margin per creare layouts
- (17-21)Posizionamento fisso
- (17-22)
- (17-23)Esempio Realizzare menu e banner sempre visibili col posizionamento fisso
- (17-24)I floats
- (17-25)Esempio Uso dei floats per realizzare layout a più colonne ed altri effetti
materiale css_properties_positioning_float - (17-26)
Lezione 18: (Responsive) Web design
07/05/2024, ore 16:30 (2 ore)
Slides CSS3
Materiale CSS_Examples, CSS_Examples: layouts
- (18-1)Progettare un sito web: linee guida di stile e usabilità
- (18-2)Costruire il layout di un sito web: layout fissi e liquidi
- (18-3)Esempio I layout di base: layout a colonna singola
- (18-4)Esempio I layout di base: layout due colonne
- (18-5)Esempio Uso di elementi posizionati per la realizzazione di layout molticolonna
- (18-6)Esempio Uso di floats per la realizzazione di layout molticolonna
- (18-7)I layout a griglia
- (18-8)Esempio Un layout a griglia fluido realizzato con i float
- (18-9)Introduzione al responsive web design
- (18-10)Le CSS media queries
- (18-11)Usare l'effetto cascata dei CSS per modificare le regole di default tramite una media query
- (18-12)CSS media queries per il responsive disign: i responsive breakpoints
- (18-13)
- (18-14)Come adattare un layout a device diversi con i CSS: spostare, ridimensionare, nascondere, sostituire
- (18-15)Esempio Realizzare un menu alternativo accessibile con il controllo SELECT (...e un bottone)
- (18-16)
- (18-17)Esempio Un layout a griglia fluido realizzato con i flexbox
materiale Layout_3col_grid_flexbox_liquid
Lezione 19: Templates
09/05/2024, ore 09:30 (2 ore)
Slides CSS3
Materiale Java_Example_Templates
- (19-1)
- (19-2)Introduzione ai template
- (19-3)
- (19-4)FreeMarker: componenti dei template
- (19-5)FreeMarker: il data model astratto (hash, sequenze e scalari)
link https://freemarker.apache.org/docs/dgui_datamodel_types.html - (19-6)Esempio FreeMarker: configurazione di base
- (19-7)FreeMarker: specifica dell'output format e automatic escaping
- (19-8)FreeMarker: specifica del default object wrapper
- (19-9)Esempio Compilazione e visualizzazione di un template
- (19-10)FreeMarker: il data model in Java
- (19-11)FreeMarker: le interpolations
link https://freemarker.apache.org/docs/dgui_template_valueinsertion.html - (19-12)FreeMarker: default per le interpolations
- (19-13)FreeMarker: i built-in (?cap_first, ?size, ...)
link https://freemarker.apache.org/docs/dgui_template_exp.html#dgui_template_exp_builtin - (19-14)Esempio Creazione di template semplici (con sole interpolations)
- (19-15)FreeMarker: hashes nel data model: creazione e accesso
- (19-16)FreeMarker: uso di classi java nel data model
- (19-17)FreeMarker: liste nel data model: creazione e accesso
- (19-18)
- (19-19)FreeMarker: testare la definizione di una variable
- (19-20)Esempio Creazione di template con parti condizionali
- (19-21)
- (19-22)FreeMarker: leggere la dimensione di una lista
- (19-23)FreeMarker: separatori di lista con la direttiva sep
- (19-24)FreeMarker: la clausola else in una direttiva list
- (19-25)Esempio Creazione di template con iterazione
- (19-26)
- (19-27)Esempio Inclusione di un template secondario in uno principale
- (19-28)
- (19-29)FreeMarker: macro parametriche
- (19-30)FreeMarker: macro con contenuto
Lezione 20: Javascript /1
14/05/2024, ore 16:30 (2 ore)
Slides Javascript
- (20-1)Esempio Modularizzazione dei template
- (20-2)Esempio Ereditarietà dei template e come realizzarla in Freemarker
- (20-3)Esempio Una classe di utilità per l'uso di FreeMarker come strato di presentazione delle applicazioni web
materiale Java_Example_Templates_Fwk - (20-4)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-5)Esempio Il caso di studio Newspaper: un esempio di applicatione web Java completa
materiale Java_Example_Newspaper_DAO - (20-6)Introduzione a Javascript
- (20-7)Javascript: le origini e gli usi odierni
- (20-8)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 - (20-9)ECMAScript 5 e 6: le principali novità
- (20-10)Inserire script nelle pagine HTML
- (20-11)Accorgimenti per l'incorporazione corretta ed efficiente di script nelle pagine HTML
- (20-12)Separare la logica dal contenuto: come NON usare javascript nelle pagine HTML
- (20-13)Il modello di esecuzione (single-threaded) di Javascript
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop - (20-14)I tipi di dato di Javascript e i sistemi di conversione
- (20-15)Variabili e dichiarazione di variabili
- (20-16)Esempio Dichiarazione implicita e variabili globali
- (20-17)Esempio Variabili con scope globale e di funzione
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var - (20-18)ES6: variabili con scope di blocco (finalmente!)
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let - (20-19)ES5: la modalità strict
Lezione 21: Javascript /2
16/05/2024, ore 09:30 (2 ore)
Slides Javascript
- (21-1)Costanti
- (21-2)Operatori aritmetici e logici
- (21-3)Gli operatori VOID ed EVAL
- (21-4)L'operatore TYPEOF
- (21-5)Esempio TYPEOF usato per verificare l'esistenza di una funzione o di una variabile
- (21-6)I costrutti condizionali
- (21-7)I loop
- (21-8)Esempio Il loop FOR...IN (su array e oggetti)
- (21-9)Esempio Il loop FOR...OF (su array e oggetti iterabili)
- (21-10)Esempio Le funzioni Javascript sono valori (oggetti Function)
- (21-11)Dichiarazione di funzioni: dirette, anonime, freccia e il costruttore Function
- (21-12)Esempio Riferimento alle funzioni e uso delle funzioni come valori
- (21-13)Chiamata di funzioni
- (21-14)Esempio Passaggio di una funzione come parametro
- (21-15)Esempio Applicare l'operatore di chiamata ad espressioni che ritornano funzioni
- (21-16)Modalità di passaggio dei parametri. Omissione di parametri e valori di default
- (21-17)ES6: funzioni variadiche e rest parameter
- (21-18)Ritorno di valori dalle funzioni
- (21-19)Esempio Tipi di ritorno misti, ritorno di valori undefined
- (21-20)Le closures
- (21-21)Esempio Creare un generatore di funzioni
- (21-22)Regole di scope nella creazione di valori di tipo Function con riferimenti esterni
- (21-23)Introduzione agli oggetti di Javascript
- (21-24)La gerarchia degli oggetti: l'oggetto-base Object
- (21-25)Esempio La sintassi abbreviata per la creazione di oggetti
- (21-26)Accesso alle proprietà degli oggetti
- (21-27)Esempio Dinamicità degli oggetti Javascript
- (21-28)Esempio Creazione e inizializzazione di proprietà
- (21-29)Esempio Usare gli oggetti come strutture dati generiche
- (21-30)Esempio Usare gli oggetti come array associativi
- (21-31)Creazione di metodi
- (21-32)Accesso e chiamata di metodi negli oggetti
- (21-33)La parola chiave this all'interno dei metodi
- (21-34)ES6: sintassi estesa per definizione di proprietà e metodi
- (21-35)Generare dinamicamente il nome della proprietà da assegnare
Lezione 22: Javascript /3
21/05/2024, ore 16:30 (2 ore)
Slides Javascript
- (22-1)Le funzioni costruttore
- (22-2)L'operatore NEW e le funzioni costruttore
- (22-3)La proprietà constructor degli oggetti
- (22-4)La proprietà prototype delle funzioni costruttore (e la proprietà __proto__ degli oggetti)
- (22-5)Esempio Estensione di oggetti tramite il prototipo del loro construttore
- (22-6)Funzioni getter e setter
- (22-7)ES5: il metodo Object.defineProperty
- (22-8)Coding standards: dichiarare proprietà e metodi pubblici nella maniera più leggebile
- (22-9)Metodi privati negli oggetti Javascript: un workaround per crearli, anche se con qualche limitazione
- (22-10)Esempio L'effetto closure usato per fornire ai metodi privati l'accesso ai membri pubblici di un oggetto
- (22-11)Esempio Metodi privilegiati negli oggetti Javascript: sfruttare le closure per fornire ai metodi pubblici l'accesso a quelli privati
- (22-12)ES6: il costrutto CLASS
- (22-13)Esempio Definizione di oggetti con classi o prototipi
- (22-14)L'operatore spread (...)
- (22-15)Il destructuring assignment
- (22-16)Esempio Destructuring assignment con array e oggetti
- (22-17)Cenni sulla definizione degli iteratori
- (22-18)Cenni sulle funzioni generatore
- (22-19)Gestione delle eccezioni in Javascript
- (22-20)Oggetti predefiniti Javascript: le stringhe
- (22-21)ES6: Interpolazione di stringhe
- (22-22)Oggetti predefiniti Javascript: le espressioni regolari
- (22-23)Oggetti predefiniti Javascript: gli array
- (22-24)Esempio Ordinare un array con il metodo sort e una funzione freccia
- (22-25)Oggetti predefiniti Javascript: le date
- (22-26)Oggetti predefiniti Javascript: Set e Map in ES6
- (22-27)
- (22-28)Esempio Incorporare un algoritmo (asincrono) in una Promise
- (22-29)Handler di una Promise: then e catch
- (22-30)Esempio Restituzione ed uso del risultato finale di una Promise
- (22-31)Concatenazione di handler su una Promise
- (22-32)Funzioni ASYNC come generatori di Promise
link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function - (22-33)La parola chiave AWAIT nelle funzioni ASYNC
Lezione 23: DOM (XML, HTML, CSS, Events)
23/05/2024, ore 09: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 classe HTMLFormElement
- (23-26)Il DOM di CSS
- (23-27)Leggere e scrivere lo stile specifico di un elemento: l'attributo style
- (23-28)Le dichiarazioni di stile: l'oggetto CSSStyleDeclaration
- (23-29)Lettura/scrittura dei valori degli attributi di stile tramite la CSSStyleDeclaration
- (23-30)Accesso rapido alle proprietà di stile: l'interfaccia CSS2Properties
- (23-31)Leggere gli stili dedotti dalla cascata: getComputedStyle
- (23-32)Il modello a eventi del DOM
- (23-33)Event Bubbling
- (23-34)Delegare un evento a un elemento superiore della gerarchia
- (23-35)Event Capturing
- (23-36)Esempio Il percorso completo di un evento
- (23-37)Associazione di handlers agli eventi: addEventListener
- (23-38)Rimuovere handlers: removeEventListener
- (23-39)Esempio Le funzioni EventListener
- (23-40)Struttura di base di un oggetto Event
- (23-41)Gli attributi target e currentTarget negli oggetti Event
- (23-42)I metodi stopPropagation e preventDefault
- (23-43)Gli eventi del mouse
- (23-44)Struttura degli eventi del mouse
- (23-45)L'attributo relatedTarget negli eventi mouse
- (23-46)Gli eventi della tastiera
- (23-47)Struttura degli eventi della tastiera: code, key, charCode, ecc.
- (23-48)Altri eventi del DOM
- (23-49)Eventi delle form: change, reset, submit
- (23-50)Esempio L'evento submit e la validazione della form
Lezione 24: Javascript: Esempi Avanzati
28/05/2024, ore 16: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)Esempio Implementazione AJAX della paginazione degradante e del corrispondente supporto server in Java
materiale Java_Example_Ajax_Pager_Async - (24-10)