Web Framework Introduzione

Marco Andreini

Spring Framework

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.

Caratteristiche salienti

  • È 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.

Componenti Spring Framework

Spring Framework

Spring Framework: Core container

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

Spring Boot

Bootable

si avvia direttamente senza bisogno di un application server a parte, avendo integrato un Tomcat o Jetty.

Minimal

riduce al minimo la richiesta di configuraione iniziale, utilizzando le convenzioni sulle configurazioni

Integration

offre integrazioni già pronte con molte funzionalità utili

start.spring.io

start.spring.io

Il progetto in Spring Boot

  • Cosa comprende?

    • la configurazione di minima

    • il pom (maven) per scaricare le dipendenze e compilare

Spring MVC

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

I controller

  • 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

Le View

  • 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

@RequestMapping

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

@RequestMapping: esempio

@RequestMapping: dettagli

@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";
}
1indicazione del template URI e della variabile userId
2utilizzo della variabile userId

@RequestMapping: dettagli(2)

@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) {
        ...
    }
}
1template URI di base sul controller; da notare la userId
2template URI del metodo; da notare l’altro paremetro docId
3utilizzo della userId
4utilizzo della docId

Vincoli su @RequestMapping

  • è possibile vincolare le variabili con espressioni regolari

@RequestMapping(value = "/users/{userId:[a-z-]+}")                 (1)
public String findUser(@PathVariable String userId, Model model) {
    ...
}
1in questo modo possono essere solo lettere minuscole, dalla a alla z

Risorse statiche

  • 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

Archivi di risorse statiche

  • 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/…​

Logging

  • Spring Boot fornisce configurazioni già pronte per sistemi di logging:

    1. logback

    2. log4j

    3. java.util.logging

  • negli esempi trattati useremo logback

    Esempi di logging

Agenda

  • il main e relativo avvio

  • un controller

    • metodo senza parametri (list)

    • metodo con un parametro id (show)

    • salvataggio?

  • configurazione jpa

  • la generazione del jar