Diario delle Lezioni - A.A. 2025/2026
Lezione 1: Il web moderno: tecnologie, sfide, problemi
24/02/2026, ore 14: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à,...
- (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
26/02/2026, 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
- (2-18)Sintassi base XML: le sezioni CDATA
- (2-19)Esempio Il problema degli script incorporati nelle pagine HTML
Lezione 3: HTML /1
03/03/2026, ore 14: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)Standards e Quirks mode per i browser
- (3-5)Struttura base dei documenti HTML4 e HTML5
- (3-6)HTML: elementi blocco e inline
- (3-7)La nuova classificazione degli elementi in HTML5
- (3-8)HTML: gli attributi comuni (id, class, style, title, lang, ...)
- (3-9)
- (3-10)Esempio Uso degli attributi ARIA nei layout complessi e personalizzati.
link https://www.w3.org/WAI/standards-guidelines/aria
link https://www.w3.org/WAI/ARIA/apg/patterns/ - (3-11)HTML: i paragrafi e le interruzioni (p, br)
- (3-12)Esempio Paragrafi vuoti, ritorni a capo, ecc.: tutti i modi sbagliati per aggiungere spazi verticali in un documento
- (3-13)Marcare la struttura base di un documento: gli elementi h
- (3-14)L'importanza semantica del markup corretto
- (3-15)
- (3-16)
- (3-17)HTML: i contenitori (div, span)
- (3-18)HTML: la formattazione semantica (em, code, pre, ins, q,...)
Lezione 4: HTML /2
05/03/2026, ore 14:30 (2 ore)
Slides HTML
- (4-1)HTML: la formattazione di base (i, b, tt,...)
- (4-2)Esempio Nuovo comportamento di alcuni tag di formattazione in HTML5
link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i - (4-3)Le liste come elemento semantico nei layout complessi
- (4-4)
- (4-5)HTML: le liste (ol, ul, dl)
- (4-6)
- (4-7)Gli attributi dell'elemento table in HTML5
- (4-8)Struttura semplice di tabella: righe (tr), celle (td) e celle di intestazione (td)
- (4-9)Struttura completa di tabella: intestazione (thead), corpo (tbody), piè di tabella (tfoot)
- (4-10)Esempio Attenzione all'elemento tbody implicito...
- (4-11)Costruire tabelle complesse con colspan e rowspan
- (4-12)
- (4-13)Accessibilità delle immagini: l'attributo alt
- (4-14)Resizing delle immagini client side
- (4-15)Le mappe immagine server e client side
- (4-16)Collegamenti logici tra risorse (link)
- (4-17)L'attributo rel(azione) nei link
link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel - (4-18)Esempio Documenti alternativi
- (4-19)Esempio Collagamento di fogli di stile esterni
- (4-20)Esempio Collegare un feed RSS a una pagina
- (4-21)Esempio Collegare una shortcut icon a una pagina
Lezione 5: HTML /3
10/03/2026, ore 14:30 (2 ore)
Slides HTML
- (5-1)Esempio Ottimizzare il caricamento di una pagina (speculative loading): i link di tipo preload e prefetch
link https://developer.mozilla.org/en-US/docs/Web/Performance/Guides/Speculative_loading
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 - (5-2)I collegamenti ipertestuali (a)
- (5-3)Ancore nei documenti e fragment identifiers
- (5-4)Esempio Saltare rapidamente al contenuto di una pagina
- (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)Esempio Usare accept-charset per risolvere ulteriori problemi di encoding (stavolta tra il client e il server)
- (5-8)Differenze tra metodo GET e POST
- (5-9)La codifica dei dati nelle form
- (5-10)Esempio Scegliere la giusta combinazione di metodo ed encoding per una form
- (5-11)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-12)Gli elementi di input utente (input)
- (5-13)Esempio Confronto del rendering in vari browser per i controlli di input
materiale HTML_Examples - Forms - (5-14)Esempio I valori sottomessi da campi non testuali: file, checkbox, radio,...
Lezione 6: Java Web Applications
12/03/2026, ore 14:30 (2 ore)
Slides HTML
- (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)Gli editor testuali (textarea)
- (6-4)I controlli a scelta multipla (select)
- (6-5)Esempio Label e value delle opzioni: quali dati è meglio trasferire al server
- (6-6)Opzioni e raggruppamento (option, optgroup)
- (6-7)
- (6-8)Esempio Uso delle select come menu nei dispositivi mobili
- (6-9)Etichette accessibili per i controlli (label)
- (6-10)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-11)Installazione (privata) di un ambiente di sviluppo completo (JDK, IDE, server) per applicazioni Java web
- (6-12)Deployment delle Java web application: dall'IDE al server
- (6-13)Una nuova modalità di deployment per le Java web application: JAR con server embedded
Lezione 7: Java Servlets /1
17/03/2026, ore 14:30 (2 ore)
Slides Servlets
Materiale JakartaEE Web Application tutorial
- (7-1)Esempio Gli input hidden e i loro diversi casi d'uso
- (7-2)
- (7-3)Esempio Gli input hidden per trasmettere CSRF token
link https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html - (7-4)Presentazione e installazione del server Apache Tomcat
- (7-5)Presentazione del Netbeans IDE
- (7-6)Esempio Suggerimenti utili per collegare Netbeans e Tomcat
- (7-7)Le servlet e i container
- (7-8)Introduzione alla programmazione delle servlet
- (7-9)Il contesto di una web application e l'url mapping nei servlet container
- (7-10)La struttura di base di una web application
- (7-11)Struttura (fisica) di una web application
- (7-12)
- (7-13)Esempio Compilazione, deploy ed esecuzione di una web application
- (7-14)Il file di configurazione del contesto (context.xml)
link https://tomcat.apache.org/tomcat-11.0-doc/appdev/deployment.html - (7-15)Esempio Aggiungere risorse statiche (html, css, ecc.) a una web application
Lezione 8: Java Servlets /2
19/03/2026, 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
Lezione 9: Java Servlets /3
24/03/2026, ore 14:30 (2 ore)
Slides Servlets
- (9-1)Esempio Il project object model (POM) di una semplice web application
- (9-2)Comunicazione tra gli strati dell'applicazione tramite gli attributi della HttpServletRequest
- (9-3)Gestire efficacemente gli errori e le eccezioni in una servlet
- (9-4)Restituire codici di errore HTTP da una servlet
- (9-5)Gestire l'input utente: uso della classe HttpServletRequest
- (9-6)Elaborazione delle form in modalità GET: i metodi getParameter e getParameterValues
- (9-7)Validare l'input per prevenire attacchi (come la SQL Injection)
- (9-8)Sanitizzare l'output per prevenire attacchi XSS
- (9-9)
- (9-10)Incapsulare la logica di output e separare meglio gli strati dell'applicazione
- (9-11)
- (9-12)Trasmissione di dati binari dalla servlet al client
- (9-13)Considerazioni sulla sicurezza: perchè e come scrivere una download servlet
Lezione 10: Java Servlets /4
26/03/2026, ore 14:30 (2 ore)
Slides Servlets
- (10-1)Alcuni header interessanti: Content-Type, Content-Disposition e Content-Length
- (10-2)
- (10-3)Incorporare in una pagina HTML immagini generate da una servlet
- (10-4)
- (10-5)Elaborazione delle form in modalità POST con codifica url
- (10-6)Elaborazione delle form con codifica multipart
- (10-7)L'elemento multipart-config
- (10-8)Gestione dei file caricati con getPart()
- (10-9)
- (10-10)Esempio Rendere sicure le applicazioni web che accettano upload di file
link https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html - (10-11)Sanitizzazione dei nomi dei file