Programmazione Java Avanzata Il Framework Spring

Похожие документы
Programmazione Java Avanzata Spring - JDBC

Spring Intro Una panoramica del framework open source. Giovedì 18 febbraio 2016

Il Pattern MVC nei Framework di sviluppo per applicazioni Web. Analisi e comparazione di SPRING MVC Framework e ASP.NET MVC Framework.

Programmazione Java Avanzata PATTERN

PROGETTAZIONE E SVILUPPO DI UN. Relatore: Studente: Paolo Merialdo Valerio Barbagallo

Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica. Elaborato finale in Programmazione 2

Programmazione Java Avanzata

L architettura MVC (Model- View-Controller) Introduzione

Corso analista programmatore Java. Corso analista programmatore Java Programma

Framework. Impianti Informatici. Web application - tecnologie

Laboratorio di Basi di Dati e Web

Framework di Middleware. per Architetture Enterprise

SWIM v2 Design Document

CORSO DI PROGRAMMAZIONE JAVA

Implementazione di MVC. Gabriele Pellegrinetti

Architettura Model-View-Controller (MVC)

INTRODUZIONE E CONTESTO PROBLEMA. DEPENDENCY INJECTION INGEGNERIA DEL SOFTWARE Università degli Studi di Padova. Scopo. Esempio naive.

3.3.6 Gli operatori Le funzioni di accesso al tipo Le strutture di controllo Le funzioni

J2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser.

Laboratorio di Basi di Dati

Web framework in ambito Java: Java Server Faces

Università degli Studi di Pisa

1 Applicazione J2EE sul SAP WAS con SAP NWDS

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

VirtualPiano Giada Gibertoni, Meshua Galassi e Lorenzo Valentini 30 maggio

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Corso di Applicazioni Telematiche

Laboratorio di Basi di Dati

MODEL-VIEW-CONTROLLER PROBLEMA

Verso l architettura MVC-2 Java Server Pages (JSP)

Tesina esame Programmazione di Sistemi Mobile Realizzato da Roberto Giuliani Matricola icloud. Inserimenti, modifiche e cancellazioni

EJB Components. Leonardo Mariani Esercitazione di Sistemi Distribuiti. Oggetti Distribuiti

JUG Ancona Italy Spring Framework

Corsi di Ingegneria del Software / Interazione Uomo - Macchina Paolo Bottoni

NETSHOP: un centro commerciale virtuale

Introduzione a JSF: Le basi in un esempio. Giulio Rossetti 20/09/2007

Laboratorio di Basi di Dati e Web

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Strumenti per l automazione del testing di applicazioni web Javascript-based

JSIS JSIS L architettura JSIS

Tecnologie di Sviluppo per il Web

Curriculum Vitae di. Pietro Martinelli

Programmazione server-side: Java Servlet

La Roadmap dello sviluppo per System i5: dalle Applicazioni Legacy alla SOA

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria. Laurea Magistrale in Ingegneria Informatica

Introduzione a Visual Studio 2005

Il Sistema Operativo

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Architettura Tecnica i. Architettura Tecnica

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

Sviluppo di una web-application per itinerari turistici in Spring MVC: autenticazione tramite social network

Fondamenti di Informatica T-1. Classi e metodi astratti

Integration Software S.r.l.

Introduzione al mondo della persistenza. Dott. Doria Mauro

Introduzione ORGANIZZAZIONE DEL LIBRO. Il libro è composto da 12 capitoli organizzati nelle tre parti seguenti:

Strutture di accesso ai dati

Introduzione ai connettori

Architettura MVC-2 A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

DBMS. Alice Pavarani

Corso Online. We Train Italy

Alcuni Design Pattern in Java

Ereditarietà. Ereditarietà. Ereditarietà. Ereditarietà

Architettura Connettore Alfresco Share

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Basi di dati D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2012/13

Realizzazione di uno strumento web-based per la simulazione remota di reti di sensori senza filo

Server-side Programming: Java servlets Parte II

Ingegneria del Software

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

SETA Selection Tool del Sistema ARTIST

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Applicazioni Web con JavaServer Faces (JSF)

SOMMARIO DESIGN PATTERN

Progettazione di Applicazioni Web

Design Patterns. Introduzione 2. Introduzione 3

Analizzatori Lessicali con JLex. Giuseppe Morelli

Транскрипт:

Programmazione Java Avanzata Il Framework Spring Ing. Gianluca Caminiti

Riferimenti Spring http://www.springsource.org/ (scaricate il reference) Beginning Spring 2 - From Novice to Professional. APress. 2008. http://www.apress.com/book/downloadfile/3867 (sample del capitolo 1)

Overview della Struttura

Overview della Struttura Core Container Inversion Of Control (IoC) e Dependency Injection; Bean - creazione, gestione e manipolazione di oggetti (beans). Context aggiunge le funzionalità JNDI, EJB, JMX, internazionalizzazione(i18n), ecc. Expression Language - linguaggio per interrogare e modificare oggetti a runtime. Data Access/Integration Livello di astrazione per l'accesso ai dati mediante tecnologie eterogenee tra loro (JDBC, Hibernate, ecc.) Spring AOP Aspect Oriented Programming. Supporto delle operazioni trasversali tra più oggetti (es. logging). Web Spring MVC Framework (moduli Web-Servlet e Web-Portlet). Testing Integrazione con JUnit, e presenza di Mock objects per il testing del codice in isolamento.

Programmazione Java Avanzata Inversion of Control e Dependency Injection Ing. Gianluca Caminiti

Riferimenti Spring http://www.springsource.org/ Beginning Spring 2 - From Novice to Professional. APress. 2008 (capitolo 3). http://www.apress.com/book/downloadfile/3867 (sample del capitolo 1) IoC http://www.martinfowler.com/articles/injection.html (articolo originale in inglese) http://docs.google.com/view?docid=dg4p5693_22h76 wp (traduzione in italiano)

Inversion of Control L'Inversion of Control è un principio architetturale nato alla fine degli anni ottanta, basato sul concetto di invertire il controllo del flusso di sistema (Control Flow) rispetto alla programmazione tradizionale. Programmazione tradizionale: lo sviluppatore definisce la logica del flusso di controllo, specificando le operazioni di creazione, inizializzazione degli oggetti ed invocazione dei metodi. IoC: Si inverte il control flow, facendo in modo che non sia più lo sviluppatore a doversi preoccupare di questi aspetti, ma il framework, che reagendo a qualche "stimolo" se ne occuperà per suo conto. Questo principio è anche conosciuto come Hollywood Principle ("Non chiamarci, ti chiameremo noi").

Dependency Injection Il termine Dependency Injection (DI) è utilizzato per riferirsi ad una specifica implementazione dello IoC DI è rivolta ad invertire il processo di risoluzione delle dipendenze, facendo in modo che queste vengano iniettate (a run-time) dall'esterno. Esempio di tight coupling : Una classe A si dice dipendente dalla classe B se ne usa in qualche punto i servizi offerti. Uso del costruttore Uso di una Factory Uso di un servizio di naming (lookup)

Dipendenza fra classi

Problema Le dipendenze sono scolpite nel codice Il principale problema è il fatto che ogni volta che si vuole cambiare la dipendenza, si deve modificare il codice

Dependency Injection Un componente esterno (assembler) si occupa della creazione degli oggetti e delle loro relative dipendenze. Gli oggetti sono assemblati e le dipendenze risolte con l'utilizzo dell'injection. In particolare esistono tre forme di injection: Constructor Injection - la dipendenza viene iniettata tramite l'argomento del costruttore Setter Injection - la dipendenza viene iniettata attraverso un metodo "set" Interface Injection - mapping tra interfaccia e relativa implementazione (non utilizzato in Spring)

IoCMotivationExample1

IoC Container Lo IoC Container fornisce un contesto altamente configurabile per la creazione e risoluzione delle dipendenze di componenti (bean, da non confondere con i JavaBean, che seguono le convenzioni note ) E realizzato da due interfacce: BeanFactory, che definisce le funzionalità di base per la gestione dei bean ApplicationContext, che estende queste funzionalità basilari aggiungendone altre tipicamente enterprise come ad esempio la gestione degli eventi, l'internazionalizzazione e l'integrazione con AOP

IoC Container L'interfaccia BeanFactory rappresenta la forma più semplice di IoC Container in Spring e ha il compito di: * creare i bean necessari all'applicazione * inizializzare le loro dipendenze attraverso l'utilizzo dell'injection * gestirne l'intero ciclo di vita Per fare ciò, il container si appoggia a configurazioni (via XML) impostate dall'utente che, riflettendo lo scenario applicativo, specificano i bean che dovranno essere gestiti dal container, le dipendenze che intercorrono tra questi oltre alle varie configurazioni specifiche.

SpringExample2

Programmazione Java Avanzata Spring MVC Ing. Gianluca Caminiti

Riferimenti Spring http://www.springsource.org/ spring-mvc-step-by-step.pdf (contenuto nella cartella docs del file spring-framework-2.5.6.sec01-with-dependencies.zip) Spring reference 2.5.6 Beginning Spring 2 - From Novice to Professional. APress. 2008. (Capitolo 6)

MVC Overview Il Pattern MVC aiuta a realizzare la separazione fra gli aspetti di logica, presentazione e controllo (uso) dell applicazione web. Model incapsula i dati dell applicazione. View presenta all utente lo stato dei dati e le risposte del sistema. Controller riceve/elabora le richieste dell utente e richiede al model gli aggiornamenti sui dati.

Spring MVC Overview

Spring MVC Esiste un servlet principale (DispatcherServlet) che si occupa di ricevere le richieste dell utente e le smista (a seconda delle necessità) al/ai Controller appropriati. DispatcherServlet riceve per primo la request dell utente. La configurazione di questo servlet (che è nascosto dal framework) avviene tramite un file di configurazione (per default, dispatcher-servlet.xml) che si aggiunge al sempre presente web.xml. STEP 1. DispatcherServlet consulta HandlerMapping e invoca il Controller associato alla richiesta dell utente.

Spring MVC STEP 2. Il Controller elabora la richiesta invocando i metodi di servizio appropriati e restituisce un oggetto ModelAndView al DispatcherServlet. Tale oggetto contiene principalmente i dati del modello e il nome della View che sarà usata per presentare tali dati. STEP 3. Il DispatcherServlet invia il nome della View al ViewResolver che associa l effettiva View da invocare. Un riferimento a tale View è restituito al DispatcherServlet. STEP 4. Il DispatcherServlet invia l oggetto contenente i dati del Model alla View scelta per presentare i risultati. La View presenta i risultati utilizzando i dati del Model.

SpringExample5 E un semplice esempio di Hello World che usa Spring MVC.

SpringExample6 Per gestire i form si deve estendere la classe SimpleFormController. Creiamo un semplice form di registrazione e lo gestiamo tramite Spring MVC. During the HTTP GET request the formview will be rendered. When the form is submitted (during the HTTP POST request) the onsubmit() method of the UserController class will be called, on successful execution of the method the successview will be rendered.

SpringExample7 Adesso si mostrerà come popolare il form in modo dinamico.

SpringExample8 Effettuiamo la validazione del form con Spring Creiamo una classe UserValidator che implementa l interfaccia Validator. Sovrascriviamo il metodo validate() che effettua la validazione. Nella pagina JSP aggiungiamo il tag form:errors per mostrare gli errori (direttamente nel form). Si deve infine collegare la classe UserValidator con la classe UserController. Poiché però questa estende la classe SimpleFormController, il metodo validate() sarà invocato automaticamente. E possibile porre i messaggi di errore in un file separato (.properties).

SpringExample9 Questo esempio verte sull uso di un semplice interceptor. Un Interceptor può intercettare una richiesta web prima che essa venga gestita e dopo che lo è stata. Ciò è utile per il debug in primo luogo. Ogni classe Interceptor deve estendere la classe HandlerInterceptorAdapter. Qui si crea un Logger Interceptor tramite tale estensione. Si possono sovrascrivere i tre metodi prehandle(), posthandle() e aftercompletion(). prehandle() sarà chiamato prima di gestire la richiesta. posthandle() sarà chiamato dopo aver gestito la la richiesta aftercompletion() sarà chiamato dopo avere prodotto i risultati. Si usa in ciascuno di tali metodi log4j per il logging effettivo che avverrà sulla console.

SpringExample10 L uso della classe MultiActionController permette di raggruppare multipe azioni nello stesso controller.