Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Corso Framework Struts (1) 2
Elaborazione di Franco Grivet Chin Data 16/06/2009 Corso Framework Struts - Grivet Chin Franco
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 Corso Framework Struts - Grivet Chin Franco
3
Framework VS Librerie 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. Losviluppatore deve determinare le componenti che aderendo alla logica collaborativa del framework verranno coordinate da quest'ultimo Il framework assume il controllo della applicazione e non il contrario! Corso Framework Struts - Grivet Chin Franco
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 Per uno sviluppatore/architetto la competenza su framework e librerie Open Source è fondamentale Corso Framework Struts - Grivet Chin Franco
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..) Corso Framework Struts - Grivet Chin Franco
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. Corso Framework Struts - Grivet Chin Franco
7
Web Application modello 2
E’ il modello utilizzato per lo sviluppo delle applicazioni Java/J2EE prima del’avvento dei framework. Si contrappone al modello 1 in cui si aveva solo servlet e Model o peggio JSP e model Web / Servlet Container Business Model Richiesta Servlet dispatch JSP Risposta Browser Corso Framework Struts - Grivet Chin Franco
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 che “lavorano” bene insieme Struts (1) 2 (per la parte View e Controller) Spring (per l’IOC – Inversion of Control) Hibernate (per la parte di Model – ORM ) Jquery ( per la parte di front-end Web 2.0 , Ajax ) Corso Framework Struts - Grivet Chin Franco
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 Ideato da Craig McClanahan donato alla Apache Software Foundation nel maggio del 2000. Corso Framework Struts - Grivet Chin Franco
10
STRUTS 1 e 2 Struts 1 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 Corso Framework Struts - Grivet Chin Franco
11
Struts1 class diagram Corso Framework Struts - Grivet Chin Franco
12
Struts 1 sequence diagram
Corso Framework Struts - Grivet Chin Franco
13
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” ) ActionForm: delle classi che contengono i dati inviati da un form Le classi action sono responsabili di Interfacciarsi con il layer sottostante (es: EJB, DAO, …) Recuperare i dati da un ActionForm da presentare alla View e inserirli in un contesto (request, session, application) Le pagine JSP sono responsabili di Recuperare i dati da visualizzare dal contesto Visualizzare i dati Corso Framework Struts - Grivet Chin Franco
14
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> Corso Framework Struts - Grivet Chin Franco
15
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. Corso Framework Struts - Grivet Chin Franco
16
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. Corso Framework Struts - Grivet Chin Franco
17
Struts 2-. Servlet Filter
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() Corso Framework Struts - Grivet Chin Franco
18
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> Corso Framework Struts - Grivet Chin Franco
19
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 Corso Framework Struts - Grivet Chin Franco
20
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 Corso Framework Struts - Grivet Chin Franco
21
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 Corso Framework Struts - Grivet Chin Franco
22
Struts 2 Corso Framework Struts - Grivet Chin Franco
23
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 Corso Framework Struts - Grivet Chin Franco
24
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 ...
25
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> Corso Framework Struts - Grivet Chin Franco
26
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. Corso Framework Struts - Grivet Chin Franco
27
Struts 2 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. Corso Framework Struts - Grivet Chin Franco
28
Struts 2 in pratica <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" " <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="Menu"> <! -- appartiene al package di default -- > <result>/menu/Menu.jsp</result> </action> </package> <! -- xm diviso in più parti -- > <include file="manning/chapterTwo/chapterTwo.xml"/> </struts> Corso Framework Struts - Grivet Chin Franco
29
Struts 2 in pratica Constant serve per impostare prorietà del framework Il valore devMode=“true” abilita automaticamente un livello di informazioni di debugging e anche il ricaricamento delle varie risorse a ogni request Il processo di mapping è semplice: + server:porta + /contesto + / package namespace + / azione.action i package dividono le action in zone logiche e gli associano un path Corso Framework Struts - Grivet Chin Franco
30
Struts 2 in pratica Ruolo delle azioni
Racchiudere la logica di business public String execute() { setCustomGreeting( GREETING + getName() ); return "SUCCESS"; } Permettere il data transfer private String name; public String getName() {return name;} public void setName(String name) {this.name = name;} Restituire una stringa per il routing del result (view) <action name="HelloWorld" class="manning.chapterOne.HelloWorld"> <result name="SUCCESS">/chapterTwo/HelloWorld.jsp</result> <result name="ERROR">/chapterTwo/Error.jsp</result> </action> Corso Framework Struts - Grivet Chin Franco
31
Struts 2 in pratica Packages I package di Struts 2 sono simili concettuamente ai package di Java. Forniscono un meccanismo per raggruppare le azioni in base a funzionalità comuni o a dominio. NOTA: E’ possibile avere lo stesso namespace in più di un package In tale caso le azione dei due package mappano lo stesso namespace. Corso Framework Struts - Grivet Chin Franco
32
Struts 2 in pratica Packages Namespace di default: è quello che ha come namespace “”; se un’action viene chiamata su un namespace e non viene trovata , viene ancora cercata nel namespace di default Namespace di root: è quello che ha come namespace “/”; viene trattato come tutti gi altri namespace extends: è fondamentale per fare in modo che un package “erediti” la logica (interceptor, etc.) ad esempio del package già presente che si chiama “struts-default” che dichiara moltissimi componenti standard (si trova nel struts2-core.jar) ad esempio l’interceptor che si ocupa del popolamento dei parametri della action Corso Framework Struts - Grivet Chin Franco
33
Struts 2 in pratica Action Le Action normalmente implementano l'interfaccia com.opensymphony.xwork2.Action oppure estendono la classe com.opensymphony.xwork2.ActionSupport che, a sua volta, è un'implementazione di Action Nota: potrebbe essere sufficiente avere una classe normale che espone un metodo execute conforme La Action Interface fornisce anche costanti: public static final String ERROR "error" public static final String INPUT "input" public static final String LOGIN "login" public static final String NONE "none" public static final String SUCCESS "success" Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
34
Struts 2 in pratica Action Ad esempio la pass-through action:
<action name="Name"> <result>/chapterOne/NameCollector.jsp</result> </action> Non specifica la classe ; Struts2 fonisce ua action di default anche se non lo specifichiamo con un metodo execute vuoto che restituisce SUCCESS che è anche il default dell’attributo name de tag result (convention over configuration) Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
35
Struts 2 in pratica Validazione di base
La classe ActionSupport fornisce una validazione di base, poichè implementa Validateable che lavora con il DefaultWorkflowInterceptor Quando il workflow interceptor scatta, cerca un metodo validate() sulla action da invocare. public class Register extends ActionSupport { …. public void validate(){ PortfolioService ps = getPortfolioService(); if ( getPassword().length() == 0 ){ addFieldError( "password", "Password is required.") ); }…..} Dopo l’esecuzione del validate il controllo ritorna al workflow interceptor che veirifica se ci sono messagi di errore (il metodo è void); se sì termina l’esecuzione della action e torna all’input form Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
36
Struts 2 in pratica Validazione di base L’interfaccia ValidationAware fornisce I metodi per memorizzare e recuperare I messaggi. L’iterfaccia è implementata da ActionSupport addFieldError ( String fieldName, String errorMessage ) addActionError ( String errorMessage ) Nel stut.xm si defiisce la view a cui si deve ritornare , ovvero il result con name “input” <action name="Register" class="manning.chapterThree.Register"> <result>/chapterThree/RegistrationSuccess.jsp</result> <result name="input">/chapterThree/Registration.jsp</result> </action> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
37
Struts 2 in pratica Validazione di base E’ possibile utilizzare un file di properties per recuperare i messaggi di errore public void validate(){ PortfolioService ps = getPortfolioService(); if ( getPassword().length() == 0 ){ addFieldError( "password", getText("password.required") ); } Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
38
Struts 2 in pratica Object-backed JavaBeans properties public String execute(){ getPortfolioService().createAccount( user ); return SUCCESS; } private User user; public User getUser() { return user; Nel Form <s:textfield name="user.username" label="Username"/> Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
39
Titolo Presentazione / Data / Confidenziale / Elaborazione di ...
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.