7 - Framework Apache Struts

14
 Il fra mewo rk Apach e Strut s A.A. 2011-12 Introduzione L architettura MVC consente di separare la logica dalla presentazione Facilità di Sviluppo Test Manutenzione dellapplicazione Estensione 2 Introduzione Il framework open source Struts 2 è stato introdotto nel 2005 Implementa il pattern MVC È basato sul framework OpenSymphony WebW ork 2.2 http://struts.apache.org/ Aggiunge delle funzionalità mancanti nella versione 1 Estensibilità Supporto ad AJAX Internazionalizzazione e localizzazione Gestione della navigazione nelle pagine Validazione dei campi di input Layout consistente 3 Struts 2: Caratteristiche generali Il modello, le viste e il co ntrollor e sono implementati dalle interfacce e classi Action, Result e FilterDispatcher Il controllore determina l azione da invocare in base all URL contenuta nella richiesta ed al file struts.xml Che definisce le corrispondenz e richiesta/azione Alla ricezione di una richiesta, viene istanziato l oggetto Action corrispondente Ed eseguito il metodo execute() Questo restituisce un stringa che sarà utilizzata per determinare quale vista selezionare Le viste possono essere implementate utilizzando differenti tecnologie  JSP , Velocity T emplate, Freemak er, 4

Transcript of 7 - Framework Apache Struts

Il framework Apache StrutsA.A. 2011-12

IntroduzioneLarchitettura MVC consente di separare la logica dalla presentazione Facilit di

Sviluppo Test Manutenzione dellapplicazione Estensione

2

Introduzione

Il framework open source Struts 2 stato introdotto nel 2005 Implementa il pattern MVC basato sul framework OpenSymphony WebWork 2.2 http://struts.apache.org/

Aggiunge delle funzionalit mancanti nella versione 1 Estensibilit Supporto ad AJAX Internazionalizzazione e localizzazione Gestione della navigazione nelle pagine Validazione dei campi di input Layout consistente

3

Struts 2: Caratteristiche generali

Il modello, le viste e il controllore sono implementati dalle interfacce e classi Action, Result e FilterDispatcher

Il controllore determina lazione da invocare in base allURL contenuta nella richiesta ed al file struts.xml Che definisce le corrispondenze richiesta/azione

Alla ricezione di una richiesta, viene istanziato loggetto Action corrispondente Ed eseguito il metodo execute() Questo restituisce un stringa che sar utilizzata per determinare quale vista selezionare

Le viste possono essere implementate utilizzando differenti tecnologie JSP, Velocity Template, Freemaker,

4

Struts 2: Caratteristiche generali

Il framework opera grazie alla presenza di un filter dispatcher, che ha il compito di Esaminare le richieste Inoltrarle ai controllori Selezionare la vista da mostrare

Un insieme di componenti, chiamati intercettatori, supportano tali operazioni automatizzando vari compiti

5

Struts 2: Caratteristiche generali

Le URI contenute nelle richieste vengono mappate sulle singole azioni usando le informazioni contenute nel file struts.xml Eventuali cambiamenti non comportano la ricompilazione dellapplicazione

Se la richiesta contiene dei parametri, questi sono memorizzati dal framework nellAction relativa, prima dellinvocazione del metodo execute() Utilizzando i metodi setter da essa esposti, che devono avere il nome corrispondente al parametro

6

Struts 2: Caratteristiche generali

Si possono validare i valori in ingresso ad unazione e rimandare lutente sul campo del form sul quale fallito il controllo Attraverso annotazioni o un file xml per la validazione

Il dispatcher, dopo aver esaminato il risultato dellazione, pu intraprendere diverse azioni Mostrare una pagina jsp, generare un pdf, mandare un messaggio di errore

7

8

Struts 2: Flusso di funzionamentoFramework ActionInvocation - invoke()Si Lo stack contiene un nuovo interceptor? Si No

Lelaborazione della richiesta pu continuare? No

Chiamata dellintercettatore

Chiamata dellazione Generazione del risultato

Render del risultato

Post elaborazione

9

Struts 2: Flusso di funzionamento

Il controllore riceve la richiesta dellutente e determina lazione da invocare Il framework crea unistanza dellazione richiesta e seleziona gli intercettatori corrispondenti Essi validano i parametri ricevuti, effettuano le conversioni di tipo eventualmente necessarie, popolano loggetto Action

Ogni volta che viene chiamato il metodo invoke(), listanza di ActionInvocation consulta il proprio stato ed esegue il prossimo intercettatore, attraverso il metodo intercept()

10

Struts 2: Flusso di funzionamento

Lintercettatore, a sua volta, richiama il metodo invoke() dellistanza di ActionInvocation Dopo aver chiamato tutti gli intercettatori, viene invocata lazione e generato il risultato Gli intercettatori possono essere chiamati anche dopo la generazione del risultato, per rielaborarne il contenuto

Infine, avviene la presentazione dei risultati

11

Filter Dispatcher

il cuore del controllore del framework Verifica lURI in ingresso e determina quale azione invocare e quale classe azione Java instanziare

Quello di default ha il seguente nome org.apache.struts2.dispatcher.FilterDispatcher

12

Filter Dispatcher

Deve essere registrato nel descrittore di sviluppo dellapplicazione (web.xml) struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

13

Gli intercettatori

Alcuni compiti del controllore vengono affidatati a sotto-componenti, gli intercettatori Possono essere aggiunti o rimossi semplicemente modificando il file di configurazione di struts Non occorre ricompilare lapplicazione

14

Gli intercettatori

Di seguito vengono elencati e descritti gli intercettatori pi diffusi I nomi tra parentesi sono utilizzati per registrare gli stessi nel file di configurazione

Alias (alias) Converte parametri simili che possono avere nomi differenti tra le richieste

Chaining (chain) Se il risultato di tipo Chain, vengono resi disponili le propriet della precedente azione a quella corrente

15

Gli intercettatori

Checkbox (checkbox) Gestisce le checkbox allinterno di un form, in modo tale che quelle non spuntate possano essere rilevate

Cookie (cookie) Aggiunge un cookie allazione corrente

Conversion Error (conversionError) Aggiunge gli errori legati alla conversione dei parametri allelenco degli errori presenti nei campi dellazione

Create Session (createSession) Crea un oggetto HttpSession se questo non esiste gi per lutente corrente

16

Gli intercettatori

Debugging (debugging) Supporto al debugging

Execute and Wait (execAndWait) Esegue unazione che richiede unelaborazione di tempo lunga in background e nel frattempo manda allutente una pagina intermedia di attesa

Exception (exception) Mappa le eccezioni a un risultato

File Upload (fileUpload) Supporto allupload di file17

Gli intercettatori

I18n (i18n) Supporto allinternazionalizzazione e alla localizzazione

Logger (logger) Fornisce in uscita il nome dellazione

Message store (store) Salva e recupera dalla sessione i messaggi o gli errori delle azioni o gli errori dei campi, per gli oggetti Action che implementano linterfaccia ValidationAware

18

Gli intercettatori

Model Driven (modelDriven) Supporto per il pattern model driven per tutte le classi azione che implementano ModelDriven

Parameters (params) Popola le propriet dellazione con i parametri della richiesta

Scope (scope) Fornisce un meccanismo per salvare lo stato dellazione nella sessione o nel contesto dellapplicazione

19

Gli intercettatori

Servlet Config (servletConfig) Fornisce laccesso alle mappe che rappresentano gli oggetti di tipo HttpServletRequest e HttpServletResponse

Static Parameters (staticParams) Mappa le propriet definite allinterno del file struts.xml sulle propriet dellazione

Roles (roles) Supporta azioni basate su ruoli

Timer (timer) Fornisce in uscita il tempo che stato richiesto per lesecuzione dellazione

20

Gli intercettatori

Token (token) - Token Session (tokenSession) Verifica che sia presente un token valido nella richiesta per evitare linvio ripetuto delle stesse informazioni

Validation (validation) Supporto alla validazione dei campi di input (specificati tramite il file action-validation.xml)

Workflow (workflow) Chiama il metodo validate() allinterno della classe azione e restituisce INPUT in caso di errore

Parameter Filter (n/a) Rimuove i parametri dalla lista di quelli disponibili per lazione

Profiling (profiling) Supporta la profilatura dellazione

Prepare (prepare) Se lazione implementa linterfaccia Preparable, invoca il metodo prepare() prima di invocare il metodo di esecuzione vero e proprio

21

Lo stack di default

Struts2 definisce il seguente stack di default1. 2. 3. 4. 5. 6. 7. 8. 9. 10. exception servletConfig prepare checkbox multiselect actionMappingParams params conversionError validation workflow22

Le azioni

Le azioni permettono di eseguire operazioni allinterno dellapplicazione Sono costituite da classi java dotate di metodi e propriet, secondo le seguenti regole Una propriet deve avere i metodi get e set Una propriet pu essere di qualunque tipo La conversione tra tipi String e i tipi elementari avviene automaticamente Deve avere un costruttore senza argomenti Deve avere almeno un metodo

Ad essa si possono associare azioni multiple Viene creata unistanza di azione ad ogni richiesta HTTP Non viene creato un oggetto HttpSession

23

Le azioni

La classe azione normalmente implementa linterfaccia com.opensymphony.xwork2.Action Direttamente o estendendo la classe ActionSupport

lecito dichiarare azioni che dispongano di un metodo execute() ma che non implementino formalmente linterfaccia

24

Le azioni

Attraverso il metodo statico ActionContext.getContext(), si pu accedere a vari tipi di informazione I parametri della richiesta Gli attributi della richiesta Gli attributi della sessione Gli attributi della applicazione Gli errori rilevati Lo stack dei valori OGNL25

I risultatiUn metodo dellazione ritorna una stringa che determina quale risultato eseguire Un risultato deve avere un nome e un tipo

Il nome di default success Il tipo di default dispatcher, che ridirige il browser a una pagina jsp

26

I risultati

Di seguito, vengono elencati e descritti i tipi di risultati

I nomi tra parentesi sono utilizzati per registrare gli stessi nel file di configurazione

Chain (chain)

Permette di concatenare i risultati precedenti con quelli attuali Consente di effettuare il forward verso una pagina JSP

Dispatcher (dispatcher)

FreeMarker (freemarker)

Utilizzato per lintegrazione con FreeMarkerUtilizzato per rispondere al browser con header http

HttpHeader (httpheader)

27

I risultati

Redirect Action(redirect-action) Utilizzato per redirigere il risultato ad unaltra azione

Stream (stream) Utilizzato per mandare un InputStream al browser

Velocity (velocity) Utilizzato per lintegrazione con Velocity

XSLT (xslt) Utilizzato per lintegrazione per XML/XSLT

PlainText(plaintext) Utilizzato per mandare del testo in chiaro, generalmente per mostrare il sorgente di una pagina JSP

28

File di configurazione

Il file struts.xml definisce tutti gli aspetti dellapplicazione Include le azioni, gli intercettatori e i possibili risultati Pu ereditare le configurazioni di default del framework Sono incluse nel file del framework struts2-core-VERSION.jar

Il file default.properties contiene le impostazioni che vengono utilizzate in tutte le applicazioni struts Anchesso incluso nel package struts2-core-VERSION.jar File opzionale, nel caso in cui vanno bene le propriet di default

29

Il file struts.xml

Lelemento root il tag Le azioni possono essere raggruppate in package Questultimo deve avere un attributo name e un namespace Il namespace, se non presente, quello di default / Per invocare unazione di un package non presente in un namespace non di default, si deve specificare il namespace nellURI /context/namespace/actionName.action

30

Il file struts.xml

I package possono essere suddivisi in file distinti Si utilizza il tag Ogni tag deve avere lo stesso elemento DOCTYPE e un elemento root struts

Unazione posizionata allinterno di un elemento package Deve avere un attributo name Se non si specifica la classe di azione verr istanziata la classe di azione di default Si pu specificare anche il metodo da eseguire quando lazione viene invocata Se non specificato, il metodo di default execute

31

Il file struts.xml

Lelemento un sotto elemento di Corrisponde al valore di ritorno di un metodo di unazione Unazione pu ritornare differenti risultati, quindi avere differenti elementi Se il risultato restituito da unazione non presente nel file di configurazione Viene controllato se il esso presente nellelemento global-results, questultimo contenuto allinterno del package In caso contrario, viene lanciata un eccezione

Lattributo name, se omesso, assume il valore success Lattributo type specifica il tipo di risultato di ritorno, se omesso assume il valore Dispacher