vedi esempio
Marco Andreini
Spring è il più popolare application development framework in ambiente Java enterprise. Milioni di sviluppatori nel mondo usano Spring. È un framework per scrivere codice molto performante, facilmente testabile, particolarmente riutilizzabile.
È organizzato in modo modulare. Ad esempio:
Il modulo Spring Web MVC framework permette di sviluppare applicazioni web integrate.
Il modulo Spring JPA permette di collegare il JPA all’applicazione.
Permette di creare applicazioni di livello enterprise utilizzando POJO.
Ha un sistema di IoC/Dependency Injection integrato.
Il modulo core implementa le parti fondamentali del framework, includendo quindi le funzionalità di Dependency Injection.
Il modulo bean implementa il BeanFactory che è una sofisticata implementazione del factory pattern.
Il modulo context è il mezzo per accedere agli oggetti definiti e configurati.
Il modulo Expression Language implementa un potente linguaggio per le espressioni per la consultazione e la gestione degli oggetti a runtime.
si avvia direttamente senza bisogno di un application server a parte, avendo integrato un Tomcat o Jetty.
riduce al minimo la richiesta di configuraione iniziale, utilizzando le convenzioni sulle configurazioni
offre integrazioni già pronte con molte funzionalità utili
Cosa comprende?
la configurazione di minima
il pom (maven) per scaricare le dipendenze e compilare
Il Model incapsula i dati dell’applicazione, che in generale sono POJO.
La View è responsabile dell’interpretazione dei dati del modello e di solito genera HTML, che il browser dell’utente può interpretare.
Il Controller è responsabile di elaborare le richieste utente, costruire un Model appropriato e passarlo alla View.
In spring MVC la DispatcherServlet
delega le richieste ai controller per
eseguire le funzionalità specifiche.
L’annotazione @Controller indica che una particolare classe ha il ruolo di controller.
L’annotazione @RequestMapping è utilizzata per associare un URL ad una classe intera o ad un metodo specifico.
L’uso dell’annotazione @RequestMapping a livello di classe indica che tutti i metodi in quel controller sono relativi a quel percorso.
vedi esempio
Spring MVC supporta molte tipologie di sistemi di template e tecnologie di presentazione.
Tra le queli cono HTML, PDF, Excel, XML, Velocity, JSON, Atom/RSS feeds.
Ci concentreremo sui template FreeMarker come esempio.
vedi esempio
Si può utilizzare l’annotazione @RequestMapping
per ottenere un accesso
conveniente a parti selezionate di un URL.
Un template URI è una string simile a un URI
contiene uno o più nomi di variabili
quando sostituiamo il valore di queste variabili, il template in questione diventa una URI.
per esempio, l’URI Template http://www.esempio.it/users/{userId}
contiene
la variabile userId.
si assegna il valore mario alla variabile userId consultando http://www.esempio.it/users/mario
@RequestMapping(value = "/users/{userId}", method = RequestMethod.GET) (1)
public String findUser(@PathVariable String userId, Model model) { (2)
User user = userDao.findById(userId);
model.addAttribute("user", user);
return "displayUser";
}
1 | indicazione del template URI e della variabile userId |
2 | utilizzo della variabile userId |
@Controller
@RequestMapping(value = "/users/{userId}") (1)
public class UsersController {
@RequestMapping(value = "/docs/{docId}", method = RequestMethod.GET) (2)
public String findDoc(@PathVariable String userId, (3)
@PathVariable String docId, (4)
Model model) {
...
}
}
1 | template URI di base sul controller; da notare la userId |
2 | template URI del metodo; da notare l’altro paremetro docId |
3 | utilizzo della userId |
4 | utilizzo della docId |
è possibile vincolare le variabili con espressioni regolari
@RequestMapping(value = "/users/{userId:[a-z-]+}") (1)
public String findUser(@PathVariable String userId, Model model) {
...
}
1 | in questo modo possono essere solo lettere minuscole, dalla a alla z |
Si utilizza il classpath:/static/**
→ src/main/resources/static
Le alternative disponibili sono:
classpath:/public/**
classpath:/resources/**
classpath:/META-INF/resources/**
Trattamento speciale per index.html
posizionato in uno dei percorsi indicati
Si possono utilizzare i webjar
archivi di risorse statiche già pronte
twitter-bootstrap, jquery …
si indicano come dipendenze del progetto, quindi via maven
si utilizzano nel template con riferimenti statici:
esempio: /webjars/bootstrap/…
Spring Boot fornisce configurazioni già pronte per sistemi di logging:
logback
log4j
java.util.logging
negli esempi trattati useremo logback
Esempi di logging
il main e relativo avvio
un controller
metodo senza parametri (list)
metodo con un parametro id (show)
salvataggio?
configurazione jpa
la generazione del jar