Skip to content

1. Introduzione

1.1. Contesto

Il PDF del documento è disponibile |QUI|.

Gli esempi contenuti nel documento sono disponibili |QUI|.

Questo documento funge sia da lezione che da esercitazione universitaria (TD). È destinato ai principianti. Si avvale delle seguenti fonti:

Riferimenti:

  1. Introduzione al linguaggio Java;
  2. Lavorare con un database relazionale utilizzando l'ecosistema Spring;

Ci riferiremo a queste fonti rispettivamente come [rif1] e [rif2]. La fonte [ref1] è obsoleta (2002) ma sufficiente per il presente documento, in cui viene utilizzata solo per la presentazione della sintassi del linguaggio Java e delle operazioni di base. Il resto del materiale necessario per completare il compito è presentato in questo documento nei capitoli intitolati [Corso]. Questi capitoli sono tratti direttamente da [ref2] (2015) e in alcuni casi sono stati semplificati.

L'obiettivo di questo documento è insegnare il linguaggio Java da una prospettiva professionale. Per questo motivo, ci affidiamo in larga misura al framework Spring [http://spring.io/], ampiamente utilizzato nello sviluppo JEE (Java Enterprise Edition). Logicamente, questo corso dovrebbe essere seguito da un corso JEE. Questo è il caso dell'Istia (Università di Angers). Il JEE è attualmente (novembre 2015) la principale fonte di occupazione per i giovani sviluppatori in possesso di un master. Nel mondo JEE esistono molte altre tecnologie oltre a Spring. Spring ha il vantaggio di essere facile da comprendere e, soprattutto, di fornire best practice di codifica che possono essere riutilizzate al di fuori dell’ecosistema Spring. Questo spiega perché è stato scelto in questa sede.

Questo laboratorio è in uso da oltre 10 anni e si è evoluto con le tecnologie. È seguito (all'IstiA) da un laboratorio JEE [Introduzione a Java EE]. Quest'ultimo laboratorio risale al 2012 (ora siamo nel 2015) e necessiterebbe di un aggiornamento. Presenta lo standard JEE attraverso il framework web JSF2 (Java Server Faces) e EJB3 (Enterprise Java Bean). Nel loro insieme, questi due tutorial hanno permesso a molti studenti di ottenere stage JEE presso aziende di servizi digitali (ESN) e di essere assunti lì subito dopo.

In questo documento non troverete una presentazione formale di tutti gli aspetti di Java. Nel corso degli anni, il modo in cui gli sviluppatori junior affrontano un problema è cambiato in modo significativo. Oggi, si rivolgono quasi sempre a Internet per trovare frammenti di codice che, una volta messi insieme, formano un programma. Se forniamo loro un corso, lo utilizzano pochissimo e preferiscono tornare su Internet. Sebbene inizialmente fossi scettico riguardo a questo approccio, sono rimasto comunque sorpreso dai risultati. Gli studenti più deboli sono stati in grado di produrre programmi funzionanti, mentre senza l'aiuto di Internet probabilmente non ci sarebbero riusciti. Ora mi affido a questo approccio.

I frammenti di codice non offrono una panoramica dell'architettura di una soluzione, e uno degli obiettivi di questo documento è proprio quello di fornire tale panoramica. Gli studenti completano questo tutorial come esercizio di laboratorio, lavorando in modo indipendente. Non ci sono lezioni frontali. C'è un programma che delinea i progressi che ci si aspetta da loro nel corso delle sessioni. Possono essere in ritardo o in anticipo rispetto a questo programma. I loro progressi vengono verificati attraverso una serie di checkpoint che devono presentare al docente. Il docente è presente sia per fornire spiegazioni quando richiesto, sia per convalidare il loro lavoro. Ognuno lavora al proprio ritmo. Alla fine delle 36 ore assegnate a questo laboratorio, alcuni avranno completato il 50% di convalide in più rispetto ad altri, ma tutti — almeno questo è l’obiettivo — avranno compreso ciò che hanno fatto da soli. Questo laboratorio può essere completato senza la guida di un insegnante. Ecco perché è disponibile all’indirizzo [https://stahe.github.io].

Questo documento non è adatto a chi cerca un corso accademico su Java, ovvero qualcosa che spieghi Java in modo strutturato e passo dopo passo, dove ogni dettaglio della sintassi sia spiegato e giustificato. Piuttosto, ciò che viene proposto qui è un approccio sperimentale. È probabile che lo studente non capisca tutto ciò che viene presentato nel documento, ma probabilmente sarà in grado di mettere a frutto il suo contenuto, e la comprensione dei dettagli arriverà con l'esperienza.

Questo documento non è nemmeno un corso sugli algoritmi. L'algoritmo nell'esercizio è di base e può essere risolto da qualsiasi principiante che stia seguendo i primi corsi di algoritmi. Il documento si concentra sull'ambiente di sviluppo Java professionale con le sue numerose librerie e framework, nonché sull'architettura del codice. La maggior parte degli studenti che vedo ha delle lacune negli algoritmi, che vengono poi confermate dai loro supervisori di tirocinio. Quindi sì, la padronanza degli algoritmi è importante, ma non è l'obiettivo di questo tutorial.

Infine, questo documento (dicembre 2015) non copre le ultime funzionalità di Java, in particolare gli stream e le funzioni lambda. Tuttavia, utilizza alcuni elementi dell'ultimo JDK, il JDK 1.8, e il codice che segue deve essere compilato utilizzando questo JDK.

1.2. Indice

Il capitolo 2 introduce l'argomento del tutorial: il calcolo dei risultati elettorali. Il problema è semplice. Il capitolo 2 richiede di implementare la soluzione utilizzando due linguaggi molto simili, C# e Java. L'implementazione viene effettuata senza classi. L'obiettivo è quello di introdurre la sintassi Java, le sue istruzioni di base e l'IDE (Integrated Development Environment) Eclipse utilizzato per creare progetti Java.

Il capitolo 3 richiede di implementare la soluzione dell'esercizio in Java utilizzando le classi. L'obiettivo è introdurre i concetti di classi, ereditarietà, interfacce e classi generiche. Viene introdotto il concetto di test unitari JUnit.

Il capitolo 4 introduce i concetti alla base dei capitoli seguenti:

  • architetture a livelli;
  • programmazione tramite interfacce;
  • l'uso di Spring per implementare i due concetti precedenti;

Image

Il capitolo 5 presenta il framework Spring attraverso quattro progetti.

Il capitolo 6 introduce l'API JDBC, che è un'interfaccia di accesso al database.

Il capitolo 7 implementa il livello [DAO] (Data Access Object) del progetto del corso utilizzando l'API JDBC e Spring.

Image

Il capitolo 8 implementa il livello [business] del progetto del corso:

Image

Il capitolo 9 implementa il livello [UI] del TD utilizzando un'applicazione console:

Image

Il capitolo 10 implementa il livello [UI] del tutorial utilizzando un'applicazione grafica che sfrutta la libreria di componenti Swing:

Image

Image

Il capitolo 11 tratta la gestione dei database utilizzando il framework [Spring Data], un componente dell'ecosistema Spring. Introduce la specifica JPA (Java Persistence API), che consente al livello [DAO] di manipolare oggetti invece che SQL (Structured Query Language). L'architettura a livelli si evolve come segue:

Image

Il capitolo 12 applica i concetti del capitolo 11 implementando l'accesso al database per il tutorial utilizzando [Spring Data].

Il capitolo 13 mostra come esporre un database sul web utilizzando [Spring MVC], un altro ramo dell'ecosistema Spring. L'architettura si evolve in un'architettura client/server:

Image

I capitoli 14 e 15 trasformano l'applicazione del tutorial in un'applicazione client/server:

Image

Il capitolo 16 mostra come proteggere l'accesso a un'applicazione web utilizzando [Spring Security], un altro ramo dell'ecosistema Spring.

Image

Il capitolo 17 riprende il tutorial e rende sicuro il servizio web dedicato alle elezioni.

Il capitolo 18 affronta la questione delle richieste cross-domain:

  • In [1], un'applicazione web fornisce pagine HTML/JavaScript;
  • in [2], il browser esegue il JavaScript incorporato nelle pagine HTML per interrogare il servizio web sicuro [3-4];

Sia D1 = http://machine1:port1 il dominio del server [1] e D4 = http://machine4:port4 il dominio del server [4]. Se i server [1] e [4] non si trovano nello stesso dominio [D1≠D4], le richieste da [3] a [4] sono dette richieste cross-domain. A causa delle restrizioni di sicurezza implementate dai browser, la loro configurazione può risultare problematica. Esamineremo una soluzione.

Il capitolo 19 implementa le richieste cross-domain utilizzando l'applicazione elections.

1.3. Strumenti utilizzati

I seguenti esempi sono stati testati nel seguente ambiente:

  • computer con Windows 10 Pro a 64 bit;
  • JDK 1.8 (Sezione 22.1);
  • Spring Tool Suite 3.6.3 IDE (Sezione 1);
  • NetBeans 8.1 (Sezione 22.4);
  • Browser Chrome (non sono stati utilizzati altri browser);
  • Estensione Chrome [Advanced Rest Client] (sezione 1);
  • WampServer, che include il DBMS MySQL e lo strumento [PhpMyAdmin] per gestirlo (sezione 22.7);

È importante utilizzare JDK 1.8. Alcuni esempi utilizzano componenti di questo JDK. La maggior parte degli esempi sono progetti Maven che possono essere aperti utilizzando uno dei seguenti IDE: Eclipse [https://www.eclipse.org/], IntelliJ IDEA Community Edition [https://www.jetbrains.com/idea/download/] e NetBeans [https://netbeans.org/]. Di seguito, le schermate provengono dall'IDE Spring Tool Suite, una variante di Eclipse.

1.4. Supporto

I progetti Eclipse presenti in questo documento sono disponibili all'indirizzo [https://tahe.developpez.com/tutoriels-cours/intro-java-spring/serge-tahe-introduction-au-langage-java-et-a-l-ecosysteme-spring/].

Per importare i progetti di un capitolo, procedere in Eclipse come indicato nei punti [1-8]:

La maggior parte dei progetti sono progetti Maven. Se si verificano errori dopo il caricamento, premere [Alt-F5] e seguire la procedura descritta nei punti [9-10]. I progetti Maven selezionati verranno ricompilati.