TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO

Academic Year 2020/2021 - 3° Year - Curriculum B
Teaching Staff Credit Value: 9
Taught classes: 36 hours
Exercise: 24 hours
Laboratories: 12 hours
Term / Semester:

Learning Objectives

  • Technologies for Distributed Systems and the Web: Foundations

    This course, with the integrated Laboratory module, aims at delivering the conceptual foundations and practical skills deemed essential for the development of Web applications and, more generally, distributed systems. Typical architectural solutions to be treated include: the client-server paradigm, remote procedure calls, dynamic Web, HTTP request handlers (servlets), the MVC (Model-View-Controller) pattern, and REST API-based Web applications. Development technologies presented are based on the C/Unix and Java platforms and, specifically for the Web, on Java and PHP (and a choice of related frameworks).

    General learning objectives and expected results

    Knowledge and understanding: students will acquire a precise knowledge and understanding of the conceptual foundations (i.e., fundamental concepts, problem classes and relevant solutions) underlying present-day design and development of distributed systems, including server-side Web applications.
    Applying knowledge and understanding: students will become capable of employing solutions and paradigms learned during the course, so as to develop an effective "toolset" of skills, required for the design of distributed systems and server-side Web applications.
    Making judgements: students will acquire the ability to assess the relative merits and limits of solutions commonly adopted, within software industry, to tackle problems and scenarios typical of the design of distributed systems and server-side Web applications.
    Communication skills: students will learn the terminology and paradigms specific to distributed systems and server-side Web development, and acquire the communication skills required to express and discuss, at a rigorous technical level, problems of interest for the field.
    Learning skills: students will become capable of profitaby reading, understanding and making use of available information sources, i.e. textbooks and/or online resources, possibly applying the information acquired to real-world scenarios.

  • Technologies for Distributed Systems and the Web: Laboratory

    Knowledge and understanding: students will acquire a precise knowledge and understanding of the main technologies for the development of distributed systems, including server­ side Web applications.
    Applying knowledge and understanding: students will become capable of employing technologies introduced and practised during the course, so as to develop an effective "toolset" of practical, development- and deployment-oriented skills in the fields of distributed systems and server­-side Web applications.
    Making judgements: students will acquire the ability to assess the relative merits and limits of the main technologies available for the development and operations of distributed systems and server­-side Web applications.
    Communication skills: students will acquire the terminology specific to the design and development of distributed and Web systems, and acquire the communication skills required to express and discuss, at a rigorous technical level, problems of interest within such development tasks.
    Learning skills: students will become capable of profitably using technical documentation concerning technologies and solutions commonly available for distributed and Web systems, in order to concretely put them to effective use in tasks of system development or deployment.


Course Structure

  • Technologies for Distributed Systems and the Web: Foundations

    Lectures will mainly consist in live sessions dealing with the development of distributed applications, with a special emphasis on server-side web applications. These will be carried out by the lecturer and replicated, with suggested variations, by students, on their notebooks or lab workstations. As a framework and guidance for such sessions, lecture notes will be displayed during the lecture and shared with students through the Studium portal. Notes will provide a precise record of the material presented, as well as pointers to the required reference technical documentation.

  • Technologies for Distributed Systems and the Web: Laboratory

    Course activity is organized into laboratory sessions guided by the lecturer. Students are required to gain the ability to replicate the exercises proposed, modify them conveniently and tackle design problems conceived along the lines of the former. Laboratory practice aims at enabling students to refine their understanding of the technologies presented and acquire autonomous design and development skills.

    Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, in line with the programme planned and outlined in the syllabus.

    Learning assessment may also be carried out on line, should the conditions require it.


Detailed Course Content

  • Technologies for Distributed Systems and the Web: Foundations

    The course will introduce the main concepts, paradigms and architectural aspects pertaining the following topics.

    • Client-server, socket-based applications
      • ​connection-oriented and connectionless communication
      • connection establishment
      • communication semantics
      • sockets in the Internet domain (IP addresses and the DNS)
    • Client-server, remote invocation based applications
      • remote invocation semantics
      • IDL - Interface Description Languages
      • stub generation for remote invocation
    • Linux Threads in the C language
      • Linux threads API: creation and management of threads and thread attributes
      • mutual exclusion and locking
      • condition variables and monitors
    • Java Threads
      • the Thread class and the JDK API for thread creation and management
      • the Runnable interface
    • 3-tier architecture of a Web system
      • tier 1: the browser client
      • business logic and tier 2 (the web/application server)
      • tier 3: the back-end database
    • Servlets and web applications
      • the HttpServlet class as a HTTP request handler
      • the Servlet API: main configuration and management methods
      • Cookies and Session management
      • structure and notion of a Web Application
    • Dynamic Web: concepts and technologies
      • Java Server Pages
      • Linguaggio e ambiente PHP
    • Web Services (WS): SOAP and REST
      • accessing WS through method invocation and SOAP
      • accessing WS through URLs and REST
      • Message exchange languages: XML/SOAP e JSON
    • the Model-View-Controller (MVC) pattern for Web applications
      • MVC and separation of concerns
      • the Web browser as a rich/poor client
  • Technologies for Distributed Systems and the Web: Laboratory

    The course will consist in “live coding” laboratory sessions, aimed at achieving development and deployment skills on the following topics:

    • C and Java development of client-­server, socket-­based applications
      • Unix API and system calls for socket management (connection establishment and data exchange)
      • IP address management API and DNS API under Unix
      • example socket-based clients and servers
      • development of a parallel multiprocess server
      • example design of a client-server application protocol
      • the Java JDK API for datagram and stream sockets
    • Development of client-­server, remote invocation-based applications
      • Remote Procedure Call (RPC) in C
      • Remote Method Invocation (RMI) in Java
    • Multi-threaded programming in C under Linux and Java
      • multi-threaded application development in C
      • managing Linux Threads parameters
      • multi-threaded programming examples in C and Java
      • implementing the producer-consumer paradigm in C and Java
    • Web application and servlet development by hand and with the Netbeans and Eclipse IDEs
      • using Netbeans: development of servlets and other Web applications
      • using Eclipse: developing more example Web Applictions
    • Accessing databases in a Java environment
      • accessing a database from Java code: JDBC, Derby, JPA and Hibernate
      • the mysql database: installation and configuration
    • Deployment of Web applications on the Apache Tomcat engine
      • installation and configuration
      • Web App deployment with Tomcat
    • Developing and consuming SOAP/REST Web services (WS)
      • SOAP WS development with Netbeans
      • SOAP WS client development with Netbeans
      • REST WS development with Netbeans
    • PHP elements for the Web
      • the PHP environment
      • the PHP language
      • making SQL queries in PHP
      • object-oriented PHP
    • implementing the MVC pattern in the framework of REST Web Services
      • Java and the Spring Boot framework
      • Spring Boot development with Eclipse/STS
      • the PHP framework Laravel
    • Other Web architectures
      • Developing a Web API in Laravel (JSON and REST)
      • Clients and frameworks for a REST Web API
      • Python libraries for a Web thin client

Textbook Information