Main menu: Homepage | Publications Publications Courses (in italian) Courses (in italian)

Corso di laboratorio di reti

Questa pagina è relativa al corso di Laboratorio di Reti (anni accademici dal 2007-2008 al 2010-2011) del corso di laurea in Informatica e Teoria dell'Informazione dell'Università degli studi di Siena, tenuto da Stefano Brocchi dal 2007 al 2011. Il corso era suddiviso in due moduli, il primo riguardante la programmazione di reti tramite Java, comprensivo di una parte iniziale di concetti di base di programmazione Java necessari al corso, ed il secondo orientato alla programmazione di siti web dinamici con vari linguaggi tra cui PHP, Javascript, Servlet e JSP. L'esame consisteva nello sviluppo di una piccola applicazione web, possibilmente in gruppo, e di un orale comprensivo di discussione del progetto.

Sotto, si può visualizzare il programma del corso, scaricare le slide usate a lezione e le soluzioni agli esercizi proposti. Presenti inoltre le specifiche dei progetti assegnati ed un esempio di sviluppo di un esercizio più complesso (nello specifico, il secondo esercizio sul multithreading) con l'utilizzo di tecniche di ingegneria del software come analisi dei requisiti, progettazione e testing.

Programma

Riassunto: Approfondimento di aspetti della programmazione Java necessari alla programmazione di reti. Pagine web: il formato HTML e il protocollo HTTP. Sviluppo di applicazioni web tramite Java. Siti web dinamici tramite PHP, le Servlet e le JSP. Interazione con database lato server. Javascript per un comportamento attivo lato client. Problematiche di sicureza dei siti web.

Le eccezioni

  • Gestione di errori tramite eccezioni
  • Gestione e propagazione di eccezioni
  • Eccezioni checked ed unchecked

Slide (pdf) Esercizio svolto (zip)

Il sistema di IO di Java

  • Concetto di stream
  • Classi per i diversi tipi di stream
  • Utilizzo di filtri per stream
  • Classi reader e writer
  • Altre classi di java.io: File e RandomAccessFile

Slide (pdf) Esercizio svolto (zip)

Il multithreading

  • Il concetto di thread
  • Uso dei thread in Java
  • Problematiche della concorrenza e sincronizzazione
  • Coordinazione dei thread
  • Problema dei deadlock e sua prevenzione

Slide (pdf) Esercizio 1 svolto (zip)

Soluzione esercizio 2 con esempio di progettazione

Il pacchetto java.net

  • Le principali classi del pacchetto
  • Creazione di connessioni TCP lato client/server
  • Uso del protocollo UDP
  • Interazione con Uniform Resource Locators

Slide (pdf) Esercizio 1 svolto (zip) Esercizio 2 svolto (zip)

Creazione e gestione di pagine web

  • Il formato HTML
  • Il protocollo HTTP

Slide (pdf) Esercizio svolto (pagina html)

I fogli di stile per pagine web (CSS)

  • Scopo ed utilizzo dei CSS
  • Selettori CSS
  • Regole CSS

Slide (pdf) Esercizio svolto (zip)

Uso di Java nelle pagine web

  • Sviluppo di applet
  • Basi per la creazione di interfacce grafiche in Java

Slide (pdf) Esercizio svolto (zip)

Il linguaggio PHP

  • Costrutti del linguaggio
  • Caratteristiche del weak typing
  • Gestione degli oggetti in PHP
  • Manipolazione di richieste e risposte HTTP
  • Uso delle sessioni
  • Trasferimenti di file in download ed upload

Slide (pdf) Esercizio 1 svolto (zip) Esercizio 2 svolto (zip)

Le servlet

  • Vantaggi delle servlet, confronto con PHP e CGI
  • Cenni sull'uso e sulla configurazione di Tomcat
  • Implementare una servlet
  • Manipolare richieste e risposte HTTP
  • Uso di sessioni e coordinazione fra servlet

Slide (pdf) Esercizio svolto (zip)

Uso di database lato server

  • Uso di database per applicazioni web dinamiche
  • PEAR e il pacchetto MDB2
  • Interfacciarsi con database tramite JDBC

Slide (pdf) Esercizio svolto (zip)

Javascript

  • Il linguaggio Javascript
  • Vettori, funzioni ed oggetti in Javascript
  • Manipolazione del Document Object Model
  • Gestione degli eventi

Slide (pdf) Esercizio svolto (zip)

Java Server Pages

  • Scrivere JSP come astrazione delle servlet
  • Scriptlet ed espressioni
  • Dichiarazioni e direttive JSP
  • Uso di Java bean

Slide (pdf) Esercizio svolto (zip)

Extensible Markup Language

  • Usare il linguaggio XML: portabilità ed estendibilità
  • Document Type Definition
  • Parsing di XML in Java: i parser SAX e DOM
  • Un esempio di XML: gli RSS

Slide (pdf)

Problematiche di sicurezza dei siti web

  • Analisi dell'entità di una minaccia
  • Code injection per quanto riguarda SQL, PHP e JSP
  • Cross site scripting (XSS) e cross site request forgery (CSRF)
  • Problematiche di riservatezza di password
  • Blocco dell'automatizzazione degli accessi a CAPTCHA
  • Segretezza delle comunicazioni ed uso di protocolli sicuri come HTTPS e SFTP
  • Problema del phishing

Slide (pdf)

Specifiche del progetto: Modulo 1 e Modulo 2

Testi consigliati per la programmazione Java

B. Eckel, Thinking in Java, terza edizione disponibile gratuitamente su www.mindview.net/Books/TIJ/

M.Hughes, M. Shoffner, D. Hamner: JAVA Network Programming, Manning. (Part I: Preliminaries, Part II: Streams, Part III:Networking)

Manuale pratico di Java, L. Bettini et al., HOPS