TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO
Modulo LABORATORIO

Anno accademico 2023/2024 - Docente: SALVATORE NICOTRA

Risultati di apprendimento attesi

Il corso di Laboratorio Tecnologie per i sistemi distribuiti e il Web mira ad approfondire in modalità pratica i fondamenti concettuali di base e le capacità operative necessarie per lo sviluppo di applicazioni Web e, più in generale, distribuite. Verranno sviluppati le soluzioni architetturali tipiche, ovvero i paradigmi client-server, delle chiamate remote di procedura, del web dinamico, degli handler di richieste HTTP (servlet), il pattern MVC (Model-View-Controller) e le applicazioni Web basate su API REST.  Le tecnologie di sviluppo presentate si basano sulle piattaforme Java

Modalità di svolgimento dell'insegnamento

Lezioni ed esercitazioni si svolgono in aule-laboratorio, nelle quali gli studenti possono utilizzare i PC disponibili o il proprio PC portatile. Le lezioni consistono prevalentemente in sessioni live, operate dal docente, di sviluppo di applicazioni distribuite e per il Web mediante le tecnologie presentate. Come cornice e guida di tali sessioni, vengono proiettate delle note, interamente condivise con gli studenti attraverso il portale Studium. Nelle esercitazioni, gli studenti sono vivamente incoraggiati a studiare, modificare ed innovare il materiale presentato dal docente durante le sessioni.
Per quanto le note delle lezioni non ambiscano a costituire un testo di riferimento, esse sono intese, oltre che ad agevolare la comprensione, a fornire un dettaglio puntuale del materiale presentato e della documentazione tecnica da consultare quale riferimento.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

  • Capacità di pensare in termini algoritmici (corsi di Programmazione 1 e Programmazione 2)
  • Conoscenza di problematiche e soluzioni della programmazione concorrente (trattata nel corso di Sistemi Operativi)
  • Conoscenza dei principali concetti, meccanismi e protocolli della rete Internet (corso di Reti di calcolatori)

Frequenza lezioni

La frequenza è vivamente consigliata, dato anche l'orientamento pratico dell'attività didattica, per il raggiungimento di una piena comprensione di materiale, concetti e principi presentati.

Contenuti del corso

Verranno presentati, a livello di concetti, paradigmi e aspetti architetturali, gli argomenti elencati di seguito.

Si prega inoltre di tenere presente che le note del docente, pubblicate sul repository del corso https://github.com/unict-dmi-tsdw-lab/docs  o il portale Teams d'ateneo documentano fedelmente e in dettaglio gli argomenti svolti e, di conseguenza, i contenuti del corso.
NB: il repository delle note è unico per questo modulo e quello di laboratorio.

Applicazioni client-server basate su socket in Java

  • ​comunicazione connection-oriented e connectionless
  • API Java (Server(Client)
  • NIO
Thread Java
  • classe Thread e API del JDK per la creazione e gestione dei thread
  • interfaccia Runnable
  • Virtual Thread 
Java Web Application
  • Tomcat
  • Servlet e web application
  • Connessione ai databases JDBC/JPA
Spring Boot
  • Micro Servizi
  • Spring Boot Web MVC
  • Thymeleaf

  • Spring Data (JDBC, Spring Data JPA)
Frameworks
  • Web Assembly
  • React Native

    Testi di riferimento

    1. Note del docente (pubblicate attraverso il portale Studium, documentano puntualmente il materiale presentato)
    2. Deitel H. M., Deitel P. J. Java: Tecniche avanzate di programmazione. Apogeo (in biblioteca).
    3. Documentazione online Java, https://docs.oracle.com/javase/tutorial/
    4. Documentazione online Java Enterprise Edition, Tutorial Jakarta EE

    Programmazione del corso

     ArgomentiRiferimenti testi
    1Introduzione ai sistemi concorrenti e distribuiti e al corso.1
    2Socket: introduzione e system call principali.1
    3Socket: Cliente di esempio. Semantica di read() e write(). Socket non bloccanti.1
    4Socket: Indirizzi IP e delle socket. DNS e interfaccia al resolver.1
    5Socket: Comunicazione connectionless. send() e receive().1
    6Socket in linguaggio Java.1,2,3
    7Java Servlets1,4
    8Web Application: principi e concetti1,4
    9Web services: REST con JSON1
    10Sviluppo in PHP1
    11Sviluppo di API REST con Spring Boot1
    12Sviluppo in PHP1
    13Laravel MVC1
    14Sviluppo di client per il web e API web1

    Verifica dell'apprendimento

    Modalità di verifica dell'apprendimento

    Colloquio orale sugli argomenti del corso, a partire dalla correzione e discussione delle prove di laboratorio svolte e superate in precedenza. 

    La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.

    Esempi di domande e/o esercizi frequenti

    Sistemi client-server basati su socket.
    Uso dei thread Posix.
    Architettura 3-tier per un sistema distribuito.
    Sviluppo di applicazioni Web server-side, mediante servlet.
    Impiego di ambienti integrati di sviluppo.
    Servlet e servlet container
    Web application
    Costruzione e utilizzo di web services SOAP e REST.
    Formato di interscambio JSON.
    Caratteristiche del linguaggio PHP.
    Il pattern MVC nei framework Spring Boot e Laravel.