La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Corso Java/J2EE per PM/software architect Struts 2

Presentazioni simili


Presentazione sul tema: "Corso Java/J2EE per PM/software architect Struts 2"— Transcript della presentazione:

1 Corso Java/J2EE per PM/software architect Struts 2
Elaborazione di Franco Grivet Chin Data 16/06/2009 Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

2 Framework Framework (infrastruttura) è una struttura di supporto su cui un software può essere organizzato e progettato. Ha le seguenti caratteristiche E’ una piattaforma che velocizza la costruzione di applicazioni del dominio a cui si rivolge grazie al riuso della soluzione architetturale che ne costituisce la struttura Risparmiare allo sviluppatore la riscrittura di codice già steso in precedenza per compiti simili Si estendono le classi del framerwork e/o se ne implementano le interfacce; sono i componenti del framework che hanno la responsabilità di controllare il flusso elaborativo. sono le classi del framework che invocano il nostro codice applicativo e non viceversa come nel caso delle librerie di classi Utilizza i design pattern Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

3 Framework Una libreria contiene funzioni o routine (metodi) che l’applicazione può invocare Framework fornisce componenti generici che collaborano tra loro che possono essere estesi (punti di estensione) per fornire nuove funzionalità Lo sviluppatore non scrive codice per coordinare le componenti. Lo sviluppatore deve determinare le componenti che aderendo alla logica collaborativa del framework verranno coordinate da quest'ultimo. I framework assumono il controllo della applicazione e non il contrario! Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

4 Open source framework Sono stati tra i principali elementi di innovazione nelle architetture web negli ultimi anni Hanno rappresentato il principale veicolo dell’esperienza “collettiva” degli sviluppatori in termini di design & architectural pattern, idioms, best practices Rispetto ai framework in-house (realizzati ad hoc) hanno una contribuzione di sviluppo più ampia e quindi una maggiore velocità di convergenza alla soluzione “migliore” per il dominio specifico Aumentano la produttività nello sviluppo Supportano la standardizzazione delle soluzioni Supportano un approccio allo sviluppo architettura-centrico Per uno sviluppatore/architetto la competenza su framework e librerie Open Source è fondamentale Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

5 Vantaggi di un framework
Disegno architetturale Un framework è fondato su un disegno architetturale valido, in quanto il suo codice è scritto in base alle best-practices della tecnologia in uso. Riduzione dei tempi di progetto Lo sviluppatore deve implementare esclusivamente la logica applicativa potendo risparmiare le energie e il tempo necessari alla scrittura di componenti infrastrutturali. Semplificazione dello sviluppo Semplifica lo sviluppo applicativo perché fornisce tutta una serie di componenti che risolvono la gran parte dei compiti comuni a tutte le applicazioni web J2EE (controllo del flusso, logging, gestione messaggi di errore, custom tags per la presentation logic, internazionalizzazione, validazione dei dati, etc..) Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

6 Scelta del framework Maturità del progetto Sconsigliabile adottare un framework che sia in una fase iniziale di sviluppo e che sia poco adottato nella comunità degli sviluppatori e quindi poco testato sul campo in progetti reali. Documentazione Verificare che la documentazione sia ricca e ben fatta. Questo facilita la risoluzione dei problemi che si incontrano nella realizzazione dell'applicazione e la comprensione del suo funzionamento. Validità del disegno architetturale Verificare che sia disegnato correttamente e quindi che siano adottati i design-pattern e le best-practises della tecnologia di riferimento. Adozione degli standard Un framework deve essere fondato sui componenti standard della tecnologia di riferimento. Evitare framework conuso di specifici tool di sviluppo o un modello troppo indirizzato ad uno specifico caso applicativo Estensibilità Deve essere possibile estenderne le funzionalità per adattarlo alle alle proprie esigenze. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

7 Web Application modello 2
Web / Servlet Container Business Model Richiesta Servlet dispatch JSP Risposta Browser Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

8 Web Application Framework
un sistema software che fornisce struttura e comportamento generalizzati di task e workflow tipici delle applicazioni web. Es: gestione della navigazione (MVC), gestione dell’accesso ai dati (DAO), … Nella “vita reale” per la realizzazione di web application è tipico l’utilizzo congiunto di diversi framework open source specializzati in aspetti specifici Ci concentreremo su alcuni di quelli più diffusi Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

9 Struts storia STRUTS 1.x.x
Framework open source per lo sviluppo di applicazioni web su piattaforma J2EE. Progetto inizialmente sviluppato come sotto-progetto di Apache Jakarta ma ora è divenuto un progetto a sé. Struts estende le Java Servlet, aiutando all'utilizzo del pattern Model-View-Controller Ideatoda Craig McClanahan donato alla Apache Software Foundation nel maggio del 2000. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

10 STRUTS 1 e 2 Struts E’ un insieme di classi ed interfacce che costituiscono l'infrastruttura per costruire web application Java EE conformi al design pattern Model 2 (MVC) Il suo ideatore è Craig McClanahan ed è stato donato alla Apache Software Foundation nel maggio del 2000 da parte di IBM. E’ uno dei web application framework più diffusi al mondo Struts 2 Nonostante il nome, Struts 2 non è solo una nuova release di Struts è un framework completamente nuovo basato su WebWork Sono state introdotte caratteristiche non presenti in Struts grazie ai feedback di migliaia di sviluppatori Struts e Struts 2 sono piuttosto diversi è importante conoscerli entrambi perchè il primo è ancora molto diffuso Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

11 Struts1 e 2 Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

12 Struts1 class diagram Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

13 Struts 1 sequence diagram
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

14 Struts1 componenti principali
Struts-config.xml fornisce alla ActionServlet, in base ai parametri della URL La Action da invocare La pagina JSP a cui inoltrare la richiesta ActionServlet: il controller di Model 2 Action: il Model di Model 2 (Classe base per le classi “action” ) Le classi action sono responsabili di Interfacciarsi con il layer sottostante (es: EJB, DAO, …) Recuperare i dati da presentare alla View e inserirli in un contesto Le pagine JSP sono responsabili di Recuperare i dati da visualizzare dal contesto Visualizzare i dati Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

15 Esempio di Struts-config per struts 1
<form-beans> <form-bean name=”projectForm” type=”it.uniroma2.app.form.ProjectListForm”/> </form-beans> <action-mappings> <action path=”/tasklist” type=” it.uniroma2.app.action.ProduceTaskListAction” name=”projectForm” scope=”request” validate=”true” input=”/jsp/Project.jsp”> <forward name=”success” path=”/jsp/TaskList.jsp”/> <forward name=”failure” path=”/jsp/ServerErrors.jsp”/> </action> </action-mappings Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

16 Struts 2 La versione 2 di Struts risulta profondamente rinnovata rispetto alla precedente. In realtà il progetto è nato con il nome di WebWork, che non ha nessun legame particolare con la versione 1 di Struts, per poi passare, dopo una prima fase di analisi e sviluppo, al nome Struts 2. Per questo motivo la migrazione dalla versione 1 alla versione 2 non è semplice. Utilizzando il nuovo framework è possibile scrivere software facilmente manutenibile, solido e aderente al pattern MVC. La versione attualmente stabile è la Il sito ufficiale del progetto è struts.apache.org, dal quale è possibile scaricare sia le librerie, che la documentazione. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

17 Struts 2 differenze con Struts 1
Vediamo in evidenza le differenze principali rispetto alla versione precedente. web.xml Struts: Il controllo viene affidato ad una Servlet. Di default alla ActionServlet ma è possibile definire una Action personalizzata Struts 2: Il controllo viene affidato ad un Filter. Di default al FilterDispatcher ma è possibile definire un Filtro personalizzato URI pattern Struts: Di default viene utilizzato il pattern *.do per identificare una richiesta che la ActionServlet prenderà in carico Struts 2: Di default viene utilizzato il pattern *.action per identificare una richiesta che il FiltroDispatcher prenderà in carico File di configurazione Struts: Di default il nome del file di configurazione è struts-config.xml che va posizionato allo stesso livello del file web.xml Struts 2: Di default il nome del file di configurazione è struts.xml che va posizionato in una directory del classpath Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

18 Struts 2 differenze con Struts 1
Mapping delle Action Struts: Il mapping di una Action viene definito nel file di configurazione mediante il tag action-mapping Struts 2: Il mapping di una Action viene automaticamente generato dalla concatenazione "package-nome della action", entrambi definiti nel file di configurazione Proprietà di una Action Struts: Le proprietà necessarie ad una Action vengono definite in una classe ActionForm, nella quale occorre definire anche i metodi get e set Struts 2: Le proprietà necessarie vengono definite direttamente nella Action nella quale occorre definire anche i metodi get e set Action Struts: Una Action deve estendere la classe org.apache.struts.action.Action Struts 2: Una Action deve implementare l'interfaccia com.opensymphony.xwork2.Action oppure estendere la classe com.opensymphony.xwork2.ActionSupport che, a sua volta, è un'implementazione di Action Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

19 Struts 2 differenze con Struts 1
Metodo execute Struts: Il metodo execute di una Action restituisce un ActionForward Struts 2: Il metodo execute di una Action restituisce una stringa. Il Controller stabilisce, in base alla stringa restituita, qual è la vista da richiamare TagLibrary Struts: Sono disponibili diverse taglibrary, suddivise per tipo di argomento trattato (logic, bean, HTML) Struts 2: È disponibile un'unica taglibrary che mette a disposizione sia operazioni di logica che di rendering HTML Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

20 Struts 2 Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

21 Struts 2 in pratica Prima di tutto aggiungiamo le seguenti librerie al nostro progetto, incluse nello zip completo scaricabile dal sito ufficiale del progetto: commons-logging jar freemarker jar ognl jar struts2-core jar xwork jar Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

22 Struts 2 in pratica Nel file web.xml, oltre alle usuali dichiarazioni, è necessario definire un filtro al quale vengono affidate tutte le richieste. Questo filtro rappresenta il Controller dell'applicazione. Naturalmente è necessario indicare anche l'URL al quale esso risponde. Nel nostro esempio, utilizziamo la classe di default messa a disposizione dal framework, org.apache.struts2.dispatcher.FilterDispatcher Nel nostro esempio il filtro viene invocato su tutte le URL (/*) che hanno come suffisso l'estensione .action (default). È possibile comunque configurare diversamente il filtro, indicando un pattern diverso da quello di default. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

23 Struts 2 in pratica <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="   xmlns:xsi="   xsi:schemaLocation="      <filter>     <filter-name>struts</filter-name>     <filter-class>       org.apache.struts2.dispatcher.FilterDispatcher     </filter-class>   </filter>   <filter-mapping>     <filter-name>struts</filter-name>     <url-pattern>/*</url-pattern>   </filter-mapping>   <welcome-file-list>     <welcome-file>index.jsp</welcome-file>   </welcome-file-list> </web-app> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

24 Struts 2 in pratica Ogni richiesta intercettata dal Controller viene inoltrata ad una Action, una classe Java che implementa l'interfaccia com.opensymphony.xwork2.Action. L'unico metodo da dover implementare è execute(), che viene invocato automaticamente dal framerwork nel momento in cui il Controller inoltra la richiesta alla Action. È possibile anche estendere la classe com.opensymphony.xwork.ActionSupport, un'implementazione di Action, dalla quale è possibile ereditare un insieme di metodi e attributi di grande utilità nello sviluppo, quali gestione degli errori, dei messaggi e così via. Anche la versione 2 di Struts, così come il suo predecessore, prevede un file di configurazione: struts.xml . Il file deve essere posizionato nel classpath della webapp. Il posto più appropriato ove inserirlo è in /WEB-INF/classes/struts.xml. Tale file contiene la definizione di tutte le Action disponibili nel sistema. Ciascuna Action è identificata da un package, da un nome univoco e da uno o più destinazioni (result). Il result verrà utilizzato dal Controller per decidere qual è la vista appropriata da richiamare. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

25 Struts 2 in pratica <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" " <struts> <package name="html" extends="struts-default"> <action name="HtmlAction" class="it.html.action.HtmlAction"> <result name="giorno">/jsp/giorno.jsp</result> <result name="notte">/jsp/notte.jsp</result> </action> </package> </struts> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

26 Struts 2 in pratica Il nostro file struts.xml contiene soltanto la Action HtmlAction, il cui package è HTML. La Action prevede due possibili comandi di uscita (result): giorno e notte. Se il metodo execute restituisce la stringa "giorno", verrà caricata la pagina giorno.jsp, se il metodo execute restituisce la stringa "notte", verrà caricata la pagina notte.jsp. Sarà possibile richiamare la Action mediante il seguente URL: html/HtmlAction, che corrisponde alla concatenazione package-nome. package it.html.action; import java.util.Calendar; import com.opensymphony.xwork2.ActionSupport; public class HtmlAction extends ActionSupport { public String execute() throws Exception { Calendar cal = Calendar.getInstance(); int ora = cal.get(Calendar.HOUR_OF_DAY); if (ora > 16 || ora < 5) return "notte"; else return "giorno"; }} Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

27 Struts 2-. Interceptor Uno dei concetti nuovi di Struts 2 è rappresentato dagli Interceptor, classi stateless (che non mantengono uno stato tra invocazioni successive) che possono essere invocate prima e dopo una Action, o un insieme qualunque di Action. Gli interceptors svolgono lo stesso compito dei filtri, infatti, entrambi implementano il pattern "interceptor". Usando questi interceptors è possibile, per esempio, validare l'input, intercettare eccezioni e così via. Il framework dispone di numerosi interceptor predefiniti, ciascuno dei quali può essere inserito in uno stack. L'ordine di esecuzione dei diversi interceptors è dato dal loro ordine di dichiarazione nello stack. La filosofia utilizzata è quella FIFO, chi è dicharato per primo, viene eseguito per primo. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

28 Struts 2-. Interceptor Di default, Struts 2, prevede un gruppo di interceptor, che vengono richiamati prima di invocare qualsiasi action. Il cosiddetto stack di default, prevede ben 17 interceptor che lavorano dietro le quinte per offrire vari servizi. I principali sono i seguenti: Exception: permette di mappare una particolare eccezione ad una vista; Prepare: permette di richiamamare un metodo di inizializzazione della Action nel caso questa implementi una determinata interfaccia; I18n: gestisce la memorizzazione del locale per l'utente corrente; Debugging: permette di attivare il debug delle viste; FileUpload: permette di gestire l'upload dei file; Validation: permette di eseguire la validazione dei dati forniti nella form, congruentemente al contenuto dei relativi file xml di definizione dei controlli. Oltre agli interceptor inclusi nello stack di default, struts 2 permette di configurare ulteriori interceptor disponibili, utili soltanto in situazioni particolari Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

29 Struts 2-. Interceptor in pratica
Vediamo come esempio come utilizzare uno degli interceptor waitAndExecute, che permette di fornire all'utente un messaggio di attesa qualora i dati non siano caricati. Si pensi ad uno scenario in cui l'utente debba effettuare una ricerca all'interno del nostro portale. Qualora il sistema, per estrapolare tutti i dati corrispondenti ai filtri di ricerca impostati, necessiti di un po' di tempo di elaborazione, sarebbe carino far apparire un messaggio di attenzione che informi l'utente che la ricerca è in corso. L'interceptor "executeAndWait" di Struts 2, è proprio stato pensato per risolvere questo tipo di problema. Sostanzialmente questo interceptor esegue una action in background e attende per un certo tempo che la stessa termini. Se la action termina subito, l'interceptor risulta ininfluente, ma se la action richiede tempi lunghi di elaborazione, viene caricata la vista wait. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

30 Struts 2-. Interceptor in pratica
Definiamo la nostra action nel file struts.xml nel seguente modo: <struts>   <package name="html" extends="struts-default">     <action name="RicercaAction" class="it.html.action.RicercaAction">             <interceptor-ref name="execAndWait">         <param name="delay">1000</param>       </interceptor-ref>       <result name="success">/risultati.jsp</result>       <result name="input">/index.jsp</result>       <result name="wait">/attendere.jsp</result>     </action>   </package> </struts> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

31 Struts 2-. Interceptor in pratica
L'interceptor execAndWait prevede il parametro delay, che rappresenta il tempo, in millisecondi, che l'interceptor attenderà prima di richiamare la vista "wait". Naturalmente, è necessario fornire i due forward, success e wait, che redirigono rispettivamente alla pagina dei risultati e alla pagina di attesa. Il form di ricerca sarà semplicissimo, includiamo un semplice campo di testo: destinazione. <s:form action="RicercaAction.action" method="POST">   <s:actionerror />   <s:textfield key="destinazione" name="destinazione" />   <s:submit key="ricerca" /> </s:form> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

32 Struts 2-. Interceptor in pratica
public class RicercaAction extends ActionSupport{   private String destinazione;   public String execute() throws Exception {     for (int i=0; i< 40; i++){       try{         Thread.sleep(400);       }       catch (InterruptedException e){         e.printStackTrace();       }     }     return ActionSupport.SUCCESS;   }   public String getDestinazione() {     return destinazione;   }   public void setDestinazione(String destinazione) {     this.destinazione = destinazione;   } } Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

33 Struts 2-. Interceptor in pratica
Se l'action impiega più di 1000 millisecondi per completare l'operazione, l'interceptor chiamerà la vista wait. Nella pagina JSP corrispondente, è necessario richiamare la action ogni n secondi. Per fare ciò utilizziamo il meta tag refresh, che permette di richiamare automaticamente dopo n secondi, un URL specificata. <s:i18n name="Messaggi"> <html> <head>   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   <meta http-equiv="refresh" content='5;url=<s:url includeParams="all"/>' />   <title><s:text name="titolo" /></title> </head> <body>   <s:text name="attenderePrego" />     </body> </html> </s:i18n> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

34 Struts 2-. Servlet Filter
La Servlet API a partire dalla versione 2.3 mette a disposizione i Servlet Filters. Possono essere utilizzati per moltissimi scopi, alcuni esempi: tracciatura e Logging delle attività utente, localizzazione, compressione dati, autenticazione. Sono delle particolari classi Java che consentono di filtrare le richieste del browser verso le Servlets di una web applications e la risposta della Servlet al browser. La “filtratura” avviene intercettando la richiesta HTTP in modo da poterla manipolare, prima che questa arrivi alla Servlet destinataria o modificando la risposta prima di essere ritornata al browser. Una classe per poter essere utilizzata come filtro deve implementare l’interfaccia javax.servlet.Filter, che definisce tre metodi di base: init(FilterConfig fc) doFilter(ServletRequest req, ServletResponse res, FilterChain chain) destroy() Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

35 Struts 2-. Servlet Filter
Nei Servlet Filters esiste il concetto di “catena”, per ogni web application possono essere configurati più filtri a formare una catena, invocata in sequenza in base alla mappatura dei singoli filtri che la compongono, sulle risorse (Servlet/JSP) della web applications. Ogni Servlet Filter deve essere configurato e mappato nel deployment descriptor della web application (web.xml), mediante l’uso dei tag xml <filter> e <filter-mapping> Il tag <filter> consente di specificare un nome logico assegnato al filtro, la classe che lo implementa i sui eventuali parametri di inizializzazione, questo il formato: <filter> <filter-name>LogicalFilterName1</filter-name> <filter-class>[package.]FilterClass1</filter-class> <init-param> <param-name>param1</param-name> <param-value>value</param-value> </init-param> ... <param-name>paramN</param-name> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

36 Struts 2-. Servlet Filter
Il tag: <filter-mapping> consente di mappare il filtro, attraverso il suo nome logico, su le risorse per cui deve filtrare le richieste, questo il formato: <filter-mapping> <filter-name>LogicalFilterName1</filter-name> <url-pattern>WebResourceURL(es./*)</url-pattern> </filter-mapping> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

37 Struts 2 diagramma di sequenza
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

38 Struts 2-. WorkFlow La classe che gestisce tutte le richieste è la FilterDispatcher (Front Controller) Startup: vengono create le classi ConfigurationManager ActionMapper ObjectFactory Ricezione della request (es: ) 1. Si determina l’azione relativa alla request tramite i componenti ConfigurationManager e ActionMapper (per default le azioni hanno estensione .action, per es 2. Viene creato l’ ActionContext: poichè le azioni sono generiche e non devono essere dipendenti dal protocollo HTTP l’informazione contenuta nella web request è convertita in un formato indipendente da HTTP (si estraggono idati da HttpServletRequest e HttpSession. 3. Viene creato l’ActionProxy che contiene tutte le configurazioni e informazioni di contesto per elaborare la request compreso il risultato una volta reso disponibile 4. Esegue il cleanup: per assicurare che non ci siano memory leak il filtro automaticamente esegue il cleanup dell’oggetto ActionContext 5. Il metodo execute di ActionProxy viene eseguiti iniziano la vera e propria esecuzione della Action Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

39 Struts 2- WorkFlow Invocazione della action
L’oggetto ActionInvocation (il core della classe ActionProxy) gestisce l’”ambiente di esecuzione”. Questo è costituito da Actions Interceptor Result In base alle informazioni presenti nel ActionProxy viene creata una istanza dell’oggetto Action. L’oggetto Action deve avere un metodo a zero argomenti che restituisce un oggettor di tipo Result o di tipo String Permettono di inserire logica di elaborazione che devono essere eseguite prima e dopo ogni action. Possono essere configurati diversi interceptor che vengono eseguiti nell’ordine di configurazione. Dopo l’esecuzione della action si eseguono gli interceptor in ordine inverso L’esecuzione della request restituisce un oggetto di tipo Result (Result è un interfaccia). Quest’ultimo possiede un unico metodo che restituisce il risultato vero e proprio che cambia con il dominio (un immagine, una collazione, una stringa) Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

40 Struts 2- Componenti core - Action
􀂄 Nessun obbligo di implementare interfacce o ereditare da classi. Sono però fornite due helper classes 􀂅 L’interfaccia Action 􀂅 La classe di supporto ActionSupport public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; } public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable { public String execute() throws Exception { return SUCCESS; Supporto per la validazione dei datiapplicativa, annotation-based, XML b Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

41 Struts 2- Componenti core - Action
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

42 Struts 2- Componenti core - Interceptors
Fornisce un “punto di estendibilità” del framework per inserire nel workflow logica di pre-processing (es: recupero di Spring-Object per la Action) e post-processing (es: rendering multi-device) Molti Interceptor sono già forniti (vedi slide.succ.) singolarmente ed è possibile usare degli “stack” già preparati di Interceptor per problemi specifici (es:i18nStack) E’ possibile realizzare i propri Interceptor implementando la seguente interfaccia o ereditare dalla classe astratta AbstractInterceptor ( fornisce init() e destroy() “vuoti” ed il metodo abstract intercept) public interface Interceptor extends Serializable { void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception; } Attività di creazione (init) e distruzione (destroy) one-shot a deploy-time Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

43 Struts 2- Componenti core - Interceptors
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

44 Struts 2- Componenti core - Interceptors
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

45 Struts 2- Value Stack e OGNL
Value Stack e OGNL (Object Graph Navigational Language) 􀂄 Temporary objects 􀂄 Model object 􀂄 Action object 􀂄 Named objects (oggetti “custom” con un identificatore) 􀂄 Per navigare nel Value Stack è possibile utilizzare il linguaggio OGNL. Es: 􀂅 address.postcode. Restituisce ll valore della chiamata getAddress().getPostcode(). 􀂅 #session['user'] restituisce l’oggetto user da HTTP session. 􀂅 top. Restituisce l’oggetto in posizione “top” nello Stack Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

46 Struts 2- Value Stack e OGNL
Value Stack e OGNL (Object Graph Navigational Language) 􀂄 Temporary objects 􀂄 Model object 􀂄 Action object 􀂄 Named objects (oggetti “custom” con un identificatore) 􀂄 Per navigare nel Value Stack è possibile utilizzare il linguaggio OGNL. Es: 􀂅 address.postcode. Restituisce ll valore della chiamata getAddress().getPostcode(). 􀂅 #session['user'] restituisce l’oggetto user da HTTP session. 􀂅 top. Restituisce l’oggetto in posizione “top” nello Stack Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

47 Struts 2- Result Type 􀂄 La restituzione del risultato è suddivisa in due: 􀂄 Result Type. E’ il tipo di risultato. (in basso i tipi predefiniti) è possibile creare un proprio tipo di risultato implementando l’interfaccia Result Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

48 Struts 2- Tag Library 􀂄 Control tags. (gestione collezioni, …)
􀂄 Data tags. (render dinamico di informazioni, internazionalizzazione,…) 􀂄 Form tags: HTML form, widgets (option group, date e time pickers, 􀂄 check box). 􀂄 Nonform tags: message displays, tabbed panels, e tree views. Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

49 Titolo Presentazione / Data / Confidenziale / Elaborazione di ...


Scaricare ppt "Corso Java/J2EE per PM/software architect Struts 2"

Presentazioni simili


Annunci Google