Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta...
Transcript of Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta...
![Page 1: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/1.jpg)
Spring IntroUna panoramica del framework open source
Giovedì 18 febbraio 2016
![Page 2: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/2.jpg)
Programma della mattinata
9.45 - 10.45: Primo Modulo
➢ Introduzione a Spring Framework➢ Panoramica delle componenti principali➢ IoC e Dependency Injection➢ Configurazione del context
10.45 - 11.00: coffee break
![Page 3: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/3.jpg)
Programma della mattinata
11.00 - 11.45: Secondo Modulo
➢ Spring MVC➢ Introduzione alla configurazione MVC➢ Spring Controllers➢ Spring Hateoas: REST Support
11.45 - 12.00: Q&A e conclusione dei lavori
![Page 4: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/4.jpg)
Introduzione a Spring Framework
Il più diffuso framework open-source per lo sviluppo di applicazioni in ambiente Java EE:
● Adottato ormai come uno standard de facto● Non invasivo● Modulare● Facilita lo sviluppo, occupandosi delle operazioni base e lasciando
al programmatore il focus sulla logica di business● Promuove pratiche di programmazione virtuose e l’uso di design
patterns
![Page 5: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/5.jpg)
![Page 6: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/6.jpg)
![Page 7: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/7.jpg)
Core Container
● Core & Beanscompongono la parte fondamentale del framework e forniscono funzionalità quali IoC e Dependency Injection
● Contextfornisce un metodo di accesso agli oggetti gestiti da Spring, in modo simile ad un registro
● Expression languagefornisce un potente linguaggio per leggere e manipolare oggetti a runtime (jsp, security, ecc..)
![Page 8: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/8.jpg)
AOP, Aspect, Instrumentation
● AOPimplementazione AOP Alliance-compliant che permette all’utente di definire intercettori e punti di controllo per disaccoppiare funzionalità distinte
● Aspectintegrazione con AspectJ
● Instrumentationclassi di supporto e classloaders per vari applications server (spring-instrumentation-tomcat)
![Page 9: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/9.jpg)
Data Access Integration
● JDBC● ORM
integrazione con framework come Hibernate e iBatis
● OXMintegrazione con framework di mapping Obj/xml (jaxb, castor, ecc..)
● JMS● Transaction
per la gestione programmatica delle transazioni
![Page 10: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/10.jpg)
WEB
● Weboffre funzionalità base per applicazioni web-oriented, come l’upload multipart e l’inizializzazione del container IoC attraverso l’uso di Servlet Listeners
● WebMVC (web servlet)fornisce le implementazioni per il pattern model-view-controller e i protocolli REST
● WebMVC - Portletcome la precedente, ma implementa il protocollo JSR-286 (portlet 2.0)
![Page 11: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/11.jpg)
![Page 12: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/12.jpg)
IoC e Dependency Injection
● IoC Pattern
● Le basi del Container IoC
![Page 13: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/13.jpg)
IoC Pattern
Un’applicazione Java consiste tipicamente in un insieme di componenti (oggetti) che collaborano tra loro in diversi modi, generando delle dipendenze tra di loro.
Una delle lacune di Java è la mancanza di un metodo standard per la gestione e l’organizzazione dei blocchi principali di un’applicazione.
La soluzione è lasciata all’architetto (o molto spesso al programmatore stesso), che si può affidare ai Design Patterns.
![Page 14: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/14.jpg)
IoC Pattern
![Page 15: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/15.jpg)
IoC Pattern
Spring utilizza il principio chiamato Inversion of Control (IoC) per gestire questa complessità, fornendo una modalità per comporre i diversi oggetti di un’applicazione in un unico progetto coerente.
Implementa una serie di pattern che possono essere utilizzati in modo semplice dall’utente.
Il Dependency Injection è una modalità con la quale viene realizzato IoC.
![Page 16: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/16.jpg)
IoC Pattern
Il Dependency Injection è un processo attraverso il quale gli oggetti definiscono le proprie dipendenze, in tre modalità:
● Argomenti del Construttore● Argomenti ad un Factory Method● Proprietà che devono essere settate (setters)
Il Container si occupa di iniettare queste dipendenze, in modo automatico, invertendo di fatto il processo di creazione degli oggetti.
![Page 17: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/17.jpg)
IoC Pattern
![Page 18: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/18.jpg)
Le basi del Container IoC
L’interfaccia ApplicationContext rappresenta il Container IoC Spring.
E’ responsabile della creazione, configurazione e assemblaggio dei beans.
![Page 19: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/19.jpg)
Le basi del Container IoC
Le istruzioni per la creazione dei beans vengono caricate dai metadati di configurazione, che sono rappresentati da:
● XML● Java Annotations● Java Configuration
Questi metadati esprimono le dipendenze tra gli oggetti gestiti nella nostra applicazione.
![Page 20: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/20.jpg)
Configurazione del Context
● Creazione di un context: xml, annotation e configuration● Inizializzazione di un Container IoC: standalone e web● Uso del Container IoC
![Page 21: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/21.jpg)
Creazione di un Context: XML
![Page 22: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/22.jpg)
Creazione di un Context: Annotation
![Page 23: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/23.jpg)
Creazione di un Context: Annotation
Per essere attivo richiede la configurazione preventiva di uno scanner per individuare le annotation:
Le injection via Annotation vengono chiamate prima di quelle dichiarate via configuazione xml.
![Page 24: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/24.jpg)
Creazione di un Context: Annotation
Esiste una gerarchia di Stereotipi che ci aiuta a definire il ruolo dei nostri oggetti all’interno della struttura dell’applicazione:
![Page 25: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/25.jpg)
Creazione di un Context: Java Config
![Page 26: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/26.jpg)
Inizializzazione di un Container IoC
In modalità “stand-alone” (cioè non web) un context può essere inizializzato caricando un metadato (xml config) o registrando una o più classi di configurazione (java config)
![Page 27: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/27.jpg)
Inizializzazione di un Container IoC
Un esempio di caricamento tramite configurazione Java
![Page 28: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/28.jpg)
Inizializzazione di un Container IoC
![Page 29: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/29.jpg)
Uso del Container IoC
Abbiamo già visto che l’interfaccia ApplicationContext rappresenta il nostro Container e inizializza il context.
Una volta inizializzato il context possiamo recuperarlo nei nostri bean (ServletContextAware)
● @Autowired e @Valuepossono essere wirate anche Collections<T> dove T è in una gerarchia di beans gestiti
● context.getBean(String name, Class<T> requiredType)
![Page 30: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/30.jpg)
Uso del Container IoC
![Page 31: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/31.jpg)
Spring MVC
● Spring web-mvc● Il Pattern MVC● Spring MVC architetture● Dispatcher Servlet● Componenti principali
![Page 32: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/32.jpg)
Spring web-MVC
Spring web-mvc è un modulo di Spring che possiamo utilizzare nei nostri progetti.
E’ il modulo di riferimento per le applicazioni web (sia classiche che REST)
Implementa il pattern Model - View - Controller
![Page 33: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/33.jpg)
Il Pattern MVC
MVC è un pattern architetturale di “front-end” per l’interazione con altri sistemi.
Si basa sull’interazione di tre componenti principali, opportunamente configurati.
![Page 34: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/34.jpg)
Il Pattern MVC
Rappresentazione del flusso di esecuzione in un pattern mvc
![Page 35: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/35.jpg)
Spring MVC Architecture
Assumendo l’uso di jsp, possiamo rappresentare così l’archiettura mvc implementata da Spring
![Page 36: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/36.jpg)
Spring MVC Architecture
● DispatcherServlet: single point of access per le richieste● Controller: si occupa di elaborare le richieste e costruire gli
elementi necessari per inviare la risposta● View: si occupa di renderizzare i dati contenuti nel model● ModelAndView: incapsula la relazione tra view e model,
contenendo i dati (model) e il nome logico della vista● Model/ModelMap: contiene i dati (tipicamente pojo) che servono
per il rendering finale della vista
![Page 37: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/37.jpg)
Dispatcher Servlet
E’ la servlet principale dell’applicazione, nella maggior parte dei casi, l’unica servlet definita.
Si occupa anche di inizializzare i componenti del framework che servono a processare le richieste (interceptor, view resolver, internationalization, ecc..)
Gestisce tutte le richieste in arrivo e le dirotta ai vari controller, determinando quale di essi sia deputato a gestire la richiesta specifica
Utilizza un design pattern chiamato Front Controller.
![Page 38: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/38.jpg)
Dispatcher Servlet
Deve essere inizializzata nel web.xml.
E’ richiesta la creazione di un WebApplicationContext per ogni servlet definita.
.. ricordate il secondo contesto definito durante la creazione del progetto? Vediamolo insieme!
![Page 39: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/39.jpg)
Componenti principali: Controller
● E’ responsabile di ricevere le richieste dall’utente (o dal browser)● Interpreta e valida gli input dell’utente● Trasforma gli input ricevuti in oggetti più o meno complessi● Si occupa di creare e popolare il model, utilizzando i servizi
sottostanti● All’interno di un’applicazione Spring, può essere riconosciuto per
dall’annotation @Controller
![Page 40: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/40.jpg)
Componenti principali: Model
● Il Model è un contenitore di oggetti (pojo o beans) che saranno inviati alla view per essere rappresentati
● Tipicamente viene implementato attraverso una Map<String, Object>
● All’interno di un’applicazione Spring web troveremo spesso un oggetto di tipo ModelAndView, che incapsula la relazione tra model e view e viene ritornato dal controller
![Page 41: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/41.jpg)
Componenti principali: View
● Si occupa di renderizzare l’output finale da ritornare al browser o all’invocante
● Possono essere utilizzate diverse tecnologie per la realizzazione della view, ad esempio:○ jsp○ tiles○ velocity○ struts○ ecc
● Spring utilizza uno (o più) bean per matchare il nome della view definito nel controller con un oggetto specifico da processare (un file jsp, un template velocity, ecc..)
![Page 42: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/42.jpg)
Introduzione alla configurazione MVC
● Guardiamo insieme un esempio di contesto● View Resolution
![Page 43: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/43.jpg)
![Page 44: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/44.jpg)
![Page 45: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/45.jpg)
Configurazione MVC
All’interno del file di esempio possiamo discutere gli elementi principali di questo context:
- <context:annotation-config />- component-scan - <mvc:annotation-driven/>- <mvc:default-servlet-handler/>- esempi di view resolver- <mvc:argument-resolvers />- <mvc:interceptors />- security
![Page 46: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/46.jpg)
View Resolution
Possiamo definire più beans che si occupino di matchare il nome logico di una vista con un bean/file/template.
Tutti questi beans implementano due interfacce:
- ViewResolver- Ordered
Questi resolvers dovrebbero sempre essere ordinati e la risoluzione avviene per pattern matching. Possiamo definire più beans che si occupino di matchare il nome logico di una vista con un bean/file/template.
![Page 47: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/47.jpg)
Spring Controllers
● Definizione di un Controller● Request Mapping● Parameter Injection● RequestBody e ResponseBody
![Page 48: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/48.jpg)
Definizione di un Controller
Lo stereotipo @Controller identifica una classe deputata alla gestione di una o più richieste http.
L’annotation @RequestMapping è utilizzata per definire il mapping tra le richieste, definite come url + parametri, e i metodi deputati alla gestione.
Può essere utilizzata a livello di classe, per definire un path specifico valido per tutti i metodi, o a livello di metodo.
Accetta una serie di parametri che analizzeremo tra poco.
![Page 49: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/49.jpg)
@Request Mapping
Definisce il mapping tra url e classe/metodo di gestione Properties disponibili:
● Value: definisce il path url a cui il metodo risponde● Method: definisce l’elenco dei metodi HTTP che il metodo
supporta (GET, POST, OPTION, PUT, ecc..)● Consumes/produces: definisce il mimetype del contenuto che
il metodo supporta. Il mimetype è usato per fare il marshalling e l’unmarshalling del contenuto della request e della response (esempio: text/html, application/json, ecc..)Alcuni mimetype richiedono converters (json, xml,..)
![Page 50: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/50.jpg)
@Request Mapping
![Page 51: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/51.jpg)
Parameter Injection: URI Templates
Spring ci permette di definire delle variabili all’interno dei nostri path e di gestire queste variabili come parametri in ingresso al controller:
- supportano regular expressions- valido solo per tipi primitivi (wrapper), String e Date
![Page 52: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/52.jpg)
Parameter Injection: HTTP Params
Spring ci permette di definire i parametri della nostra richiesta (GET, POST) come parametri in ingresso al controller:
- default per tipi primitivi (wrapper), String e Date- possono essere estesi con i DataBinding- supportano le properties: value, required e defaultValue
![Page 53: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/53.jpg)
Parameter Injection: HTTP Params
Possiamo tranquillamente utilizzare tutti questi metodi di injection dei parametri, Spring cercherà il miglior match possibile (o ritornerà 404 se nessun match è possibile)
![Page 54: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/54.jpg)
@RequestBody
Indica a Spring che l’intero body della nostra request deve essere mappato su un unico oggetto java.
Deve esistere un converter valido per questo oggetto!
![Page 55: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/55.jpg)
@ResponseBody
Indica a Spring che l’intero body della nostra response deve essere popolato con il valore del tipo di ritorno del metodo.
Anche in questo caso deve essere utilizzato un converter valido tra l’oggetto java e il mimetype in output dichiarato dal metodo.
Utilizzato molto spesso in ambiti REST.
![Page 56: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/56.jpg)
Esempio di una vista
![Page 57: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/57.jpg)
Spring Hateoas: REST Support
● ResourceSupport● Utilizzo di @RestController● Gestione chiamate Cross-Origin
![Page 58: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/58.jpg)
Resource Support
La funzionalità principale del pacchetto Hateoas è l’introduzione della classe ResourceSupport
Supporta nativamente la conversione in JSON, tramite la libreria jackson
In ambito REST, ogni metodo che ritorna un dato (@ResponseBody) dovrebbe ritornare:
HttpEntity<T extends ResourceSupport>
![Page 59: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/59.jpg)
@Rest Controller
Novità di Spring 4.0, definito come meta annotation:
@Controller + @ResponseBody
L’annotation @ResponseBody viene propagata a livello di metodo, quindi non è più necessario indicarla su ogni singolo metodo.
Da Spring 4.2 (Luglio 2015) supporta l’utilizzo di @JsonView per definire proiezioni di dati.
![Page 60: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/60.jpg)
@Json View
![Page 61: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/61.jpg)
Gestione di chiamate Cross Origin
Una chiamata http viene definita Cross Origin quando l’initiator e la destination hanno due domain name diversi (protocol + server name + port).
Spesso utilizzate per chiamate ajax.
Caso tipico applicazioni REST + frontend javascript!
![Page 62: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/62.jpg)
Gestione di chiamate Cross Origin
Fino a poco tempo fare era necessario implementare un filtro
Da Spring 4.2 non serve più!
@CrossOrigin permette di modellare questo comportamento, aggiungendo gli header corretti
![Page 63: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/63.jpg)
Q&A
Domande? Dubbi?
![Page 64: Spring Intro Una panoramica del framework open source · Novità di Spring 4.0, definito come meta annotation: @Controller + @ResponseBody L’annotation @ResponseBody viene propagata](https://reader033.fdocument.pub/reader033/viewer/2022060406/5f0f62017e708231d443e2d2/html5/thumbnails/64.jpg)
Grazie per l’attenzione!
Per saperne di più sui nostri corsi di formazione visita
www.miriade.it/training