TECHNOLOGIES FOR DISTRIBUTED SYSTEMS AND WEB WITH LAB
Module TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

Academic Year 2023/2024 - Teacher: Giuseppe PAPPALARDO

Expected Learning Outcomes

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 callsdynamic 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.

Course Structure

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.

Required Prerequisites

  • Ability to think algorithmically (from Programming 1 and Programming 2 courses)
  • Knowledge of the main concepts and solutions of concurrent programming (from the Operating Systems course)
  • Knowledge of the main concepts, mechanisms and protocols of the Internet (from the Computer Networks course)

Attendance of Lessons

Attending classes is not mandatory but strongly recommended, due to the practical nature of the course.

Detailed Course Content

 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)
  • Unix system calls and Java API
Client-server, remote invocation based applications
  • remote invocation semantics 
  • IDL - Interface Description Languages
  • stub generation for remote invocation
  • RPC and RMI
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
  • IDEs and servlet engines
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
  • Java SOAP development
  • Java Spring boot
The Model-View-Controller (MVC) pattern for Web applications
  • MVC and separation of concerns
  • the Web browser as a rich/poor client
  • Laravel MVC
http API clients
  • Javascript clients
  • thin clients

Textbook Information

  1. Lecture notes available through the Studium portal or the University's MS Teams platform
  2. Deitel H. M., Deitel P. J. Java: How to Program. Pearson.
  3. Java online documentation, https://docs.oracle.com/javase/tutorial/
  4. Java Enterprise Edition online documentation, Tutorial Jakarta EE

Course Planning

 SubjectsText References
1Introduzione ai sistemi concorrenti e distribuiti e al corso.1
2Sockets: main system calls1
3Sockets: clients, read/write. Non-blocking sockets1
4Sockets: IP addresses, DNS, the resolver.1
5Sockets: connectionless communication. send() e receive().1
6Sockets in the Java language.1,2,3
7Java: Remote Method Invocation2,3
8Remote Procedure Call in C1
9Java Servlets1,4
10Web Application: concepts and principles.1,4
11Web services: SOAP1
12Web services: REST and JSON1
13API REST development with Spring Boot1
14PHP Development1
15Laravel MVC1
16Client development for the web and web APIs1

Learning Assessment

Learning Assessment Procedures

Coding exercises on the course topics in laboratory, then oral discussion.

Examples of frequently asked questions and / or exercises

Client-server socket based clients.
Usage of Posix threads.
3-tier architectures.
Server-side web application development using servlets.
Integrated Development Environments for Web Apps.
Servlets and servlet containers.
Web applications.
Developing and consuming SOAP and REST web services.
The JSON data interchange format.
PHP and the web.
The MVC design pattern in the Spring Boot and Laravel frameworks.