Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Riferimenti:
https://nttdataitalia.percipio.com/courses/8f421b0f-8b43-4e5d-b870-6bfe9b41f8c7/videos/a3b78fb3-
d50c-4425-86ef-2097f508300c
2. Vantaggi di springboot
Springboot è bello perchè specificando quattro opzioni ti prepara il progetto semilavorato su cui
aggiungere il codice che serve
3. Setup springboot
Per mettere in piedi springboot:
groupId: il gruppo di progetti a cui appartiene la nostra app, solitamente è il domain al contrario
artifactId: il nome del nostro progetto, nonchè il nome del jar che otterremo dopo la build
-DartifactId=SpringBootHelloApp \
-DarchetypeArtifacId=maven-archetype-quickstart \
-DinteractiveMode=false
- se l'esecuzione produce una "build success" troverete una sottocartella SpringBootHelloApp che
contiene il ns progetto, ossia
pom.xml
folder test
A questo punto possiamo importare il progetto in eclipse come progetto maven esistente.
Notare che la versione della nostra app (servirà in futuro) viene specificata nell’apposito tag:
<version>1.0.-SNAPSHOT</version>
Aggiungeremo un nuovo tag “parent”, figlio del tag principale “project” specificando che il progetto di
partenza è spring-boot-starter-parent e gli daremo la versione 2.3.1.RELEASE: in pratica diciamo a
maven che accettiamo tutte le dipendenze di default del progetto di partenza 'parent': al variare della
versione del progetto di partenza cambieranno le versioni dei package dipendenti
<artifactId> spring-boot-starter
<groupId> org.springframewoork.boot
Queste le poche e semplici modifiche per creare una app con le sole librerie core core di spring:
Nota: <packaging>jar</packaging> specifica che verrà prodotto un jar, ossia una app standalone
autocontenuta
@ComponentScan <-- cercherà nel package corrente e nei sotto package le eventuali necessità
di 'injectable beans'
A questo punto, facendo click dx sul pom.xml -> “maven” -> “update project” carichiamo dipendenze e
librerie necessarie, facendo click dx su app.java -> run As -> java application eseguiremo l'applicazione
Nota alle annotation fin qui usate: usando @SpringBootApplication include in un sol colpo
@SpringBootConfiguration @EnableAutoConfiguration e @ComponentScan
vuol dire: applicazione web che userà spring mvc, Jackson per lavorare con JSON
<artifactId>spring-boot-starter-tomcat</artifactId>
vuol dire: container tomcat, non è obbligatorio, potremmo anche non metterlo e implicitamente verrà
usato tomcat
A questo punto, facendo click dx sul pom.xml -> “maven” -> “update project” carichiamo dipendenze e
librerie necessarie, facendo click dx su app.java -> run As -> java application eseguiremo l'applicazione:
<package usato>.control.HelloController.java
usiamo l’annotation @RestController per specificare che stiamo mettendo in piedi una Rest API
definiamo tre metodi public String ...() ciascuno con la sua @RequestMapping(value="/path...", method
= RequestMethod.GET ) che fanno ciascuno una return di una stringa costante
Eseguiamo ancora una volta la nostra java application: verrà fatto lo startup del server tomcat che avrà
dentro l'app da noi sviluppata, non sarà necessario creare un war, e con un browser andando su
localhost:8080 otterremo risposta dal metodo di default index()
Il war prodotto dalla build di maven lo troveremo nella cartella target e può essere copiato nella cartella
webapps di una installazione qualsiasi di tomcat.
Notare che la risorsa sull'application server cambierà: bisognerà aggiungere alla url anche il nome del
war in questione!
Spring Initializer è un tool web based che ci permette di generare la struttura base di un'applicazione per
spring boot.
Andare su http://start.spring.io per accedere all'nterfaccia che non scriverà il codice per noi ma farà solo
il setup di dipendenze etc per il nostro progetto:
nella parte sx sceglieremo linguaggio Java, versione di spring boot, groupId, artifactId, name,
description, packaging, java version e gli altri metadata del progetto
nella parte destra aggiungeremo le dipendenze che ci servono, comparirà un dialog che ci permetterà di
scegliere le caratteristiche della nostra app; nel nostro caso scegliamo "spring web" e clicchiamo infine
su "generate" che farà partire il download di un file zip che conterrà la cartella springinitializr con la
struttura base del mio progetto.
La struttura del progetto sarà molto simile a quella vista nel caso del war (paragrafo e):
pom.xml
classe springinitializrapplication.java (invece della app.java)
A questo punto creeremo al solito il package ...controller con dentro la nostra classe HalloController.java
dentro cui inseriremo il codice visto negli esempi precedenti.
A questo punto possiamo fare il run dell'application per far partire l'application server embedded
l’annotation @Controller per specificare che la classe controllerà le risposte che arrivano dal
web per determinati paths
un metodo public String index() con annotation @GetMappings(value = "/home") che fa una
return della stringa "home": la stringa ritornata non è un messaggio per l'utente ma una "logical
view name". thymeleaf mappa questo name con una view fisica che starà dentro
src/main/resources/templates
src/main/resources/templates/home.html conterrà
src/main/resources/messages.properties conterrà
title=Hallo!
Il file in questione usa il default locale (che dovrebbbe essere English US), per altre lingue utilizzeremo
un parametro "lang" nella url http://.../home?lang=french ma non essendo configurato un file per il
francese prenderà cmq quello di default
A questo punto adesso creiamo tra i src un package ...config e una nuova classe
InternationalizationService che estende WebMvcController che si occuperà di gestire
l'internationalization:
@Configuration significa che la classe dichiara uno o più bean methods:
bean localechangeinterceptor serve per intercettare il parametro lang e impostarlo prima che
venga fatta la render
il bean localechangeinterceptor va aggiunto (add) nel registro degli interceptor facendo override
del metodo addInterceptors
spring starter project <- quello che ci serve per costruire una nuova app con springboot
name (del progetto), location, java version, packaging (jar, war...), type (maven), group, artifact,
package
(group.artifact), ...
cliccando next ci farà scegliere versione di springboot, le dependencies (es. spring web,
thymeleaf...) del pom
il tasto finish ci genererà il progetto vuoto con il pom già configurato e la classe
stsspringbootapplication di partenza
(...)