Slideshare.net (beta)

 
Post to TwitterPost to Twitter
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 1 (more)

02 Struts Actions

From federico.paparoni, 2 years ago

Struts Actions

3894 views  |  0 comments  |  1 favorite  |  147 downloads  |  2 embeds (Stats)
 

Categories

Add Category
 
 
 
 

Groups / Events

 

 
Embed
options

More Info

This slideshow is Public
Total Views: 3894
on Slideshare: 3537
from embeds: 357

Slideshow transcript

Slide 1: Jakarta Struts: Processare le richieste con gli Action Objects Struts Versione 1.2 Core Servlets & JSP book: www.coreservlets.com More Servlets & JSP book: www.moreservlets.com Servlet/JSP/Struts/JSF Training: courses.coreservlets.com Traduzione a cura di JavaStaff.com Slides © Marty Hall, http://www.coreservlets.com, books © Sun Microsystems Press

Slide 2: Agenda • Flusso di controllo di Struts • I sei passi base per l’utilizzo di Struts – Per implementare il flusso di controllo • Esempi www.coreservlets.com 2 Apache Struts: Actions

Slide 3: Il flusso di controllo di Struts struts-config.xml JSP p .js rm Fo me So .../ a t ies ch ri Sceglie Determina invoca Action Ritorna Invio form la pagina Form condizione richiesta .../blah.do la Action esegue un JSP metodo Ritorna risultato Forward verso finale JSP www.coreservlets.com 3 Apache Struts: Actions

Slide 4: Il flusso di controllo di Struts • L’utente richiede un form – Per ora utilizziamo il semplice HTML per costruire la form • Successivamente utilizzeremo il tag Struts html:form • Il form è inviato ad un URL della forma blah.do. – Questo indirizzo è mappato ad un Action class nel file di configurazione struts-config.xml • Il metodo execute dell’oggetto Action viene invocato – Uno degli argomenti è un form bean che è automaticamente creato e le cui proprietà sono popolate automaticamente con i dati che arrivano dal form – L’oggetto Action dopo invoca la business logic e la data-access logic, mettendo i risultati in dei bean che vengono salvati in uno scope di request, session o application. – L’Action utilizza mapping.findForward per ritornare una condizione, e le condizioni sono mappate nel file struts-config.xml per effettuare il forward verso diverse pagine JSP. • Struts ridirige le richieste verso la pagina JSP appropriata – La pagina può utilizzare bean:write o l’EL di JSP 2.0 per stampare le proprietà dei bean – La pagina può utilizzare bean:message per stampare determinate stringhe www.coreservlets.com 4 Apache Struts: Actions

Slide 5: I sei passi base per utilizzare Struts 1. Modificare struts-config.xml. Si utilizza WEB-INF/struts-config.xml per: – Mappare gli indirizzi in entrata.do verso le classi Action – Mappare le condizioni di ritorno della pagine JSP – Dichiarare i form beans che devono essere usati. – Riavviate il server una volta modificato il file struts-config.xml. 2. Definire un form bean. – Questo bean è una classe che estende ActionForm e rappresenterà i dati inviati dall’utente. E’ automaticamente valorizzato quando la form di input viene inviata. La definizione dei bean è rinviata alla prossima lezione. www.coreservlets.com 5 Apache Struts: Actions

Slide 6: I sei passi base per utilizzare Struts 1. Creare i bean per il risultato. – Nell’architettura MVC architecture, il codice relativo alla business- logic e data-access crea i risultati e le pagine JSP li presentano. Per trasferire i risultati da un layer all’altro si utilizzano dei bean dove vengono memorizzati questi valori. Questi bean differiscono dai form bean perchè non hanno bisogno di estendere alcuna classe particolare e rappresentano l’output del processo computazionale, non l’input. I bean verranno discussi nella prossima lezione. 2. Definire una classe Action per gestire le richieste. – Il file struts-config.xml definisce le classi Action classes che gestiscono le richieste per differenti URL. Gli oggetti Action hanno bisogno di fare il vero lavoro: invocare la business-logic (e/o data- access-logic), salvare dei risultati in dei bean e definisce il tipo di situazione appropriata in base ai risultati (dati mancanti, errore sul database, categoria di successo 1, categoria di successo 2 etc. etc.). Il file struts-config.xml dopo decide quale pagina JSP deve essere applicata a questa situazione. www.coreservlets.com 6 Apache Struts: Actions

Slide 7: I sei passi base per utilizzare Struts 1. Creare il form che invoca blah.do. – Creare un form di input la cui ACTION corrisponde ad uno degli indirizzi contenuti nel file struts-config.xml. – In una lezione successiva si parlerà dei vantaggi dell’utilizzo del tag html:form di Struts per costruire i form di input. 2. Display dei risultati nelle JSP. – Visto che Struts è costruito sul pattern M VC, queste pagine JSP dovrebbero evitare elementi di scripting ove possibile. Si può usare il tag bean:write, ma anche l’EL di JSP 2.0 è alternativa possibile. – Nella maggior parte dei casi, le pagine JSP hanno senso solo quando la richiesta è inviata attraverso una Action. – Se le pagine JSP hanno senso indipendentemente dalla Action, allora queste pagine dovrebbero essere poste in una sottodirectory della Web application e le entry di forward entries nel file struts- config.xml dovrebbero riportare <forward ... redirect=\"true\"/>. www.coreservlets.com 7 Apache Struts: Actions

Slide 8: Esempio 1: Mapping di un risultato • URL – http://hostname/StrutsActions/register1.do • Action Class – RegisterAction1 • RegisterAction1 estende Action ed è presente nel package di com.javastaff.strutsaction. • Il metodo execute di RegisterAction1 ritorna sempre \"success\" • Pagina dei risultati – /WEB-INF/results/confirm.jsp • L’URL mostrato sarà sempre register1.do www.coreservlets.com 8 Apache Struts: Actions

Slide 9: Passo 1A (Modificare struts- config.xml) • Mappare gli indirizzi in arrivo .do con delle classi Action – In questo caso abbiamo deciso che la classe RegisterAction1 deve gestire le richieste per l’indirizzo register1.do. Per assolvere a questo compito, dobbiamo aggiungere una entryaction al tag action- mappings, dove la action deve avere i seguenti attributi. • path: il path relativo che deve essere mappato sulla Action, tranne l’estensione .do. Così il path=\"/register1\" si riferisce all’URL http://hostname/webAppName/register1.do. • type: il nome completo della classe Action che deve essere invocato per gestire la richiesta. <action-mappings> <!-- .do implied automatically --> <action path=\"/register1\" type=\"com.javastaff.strutsaction.RegisterAction1\"> ... </action> </action-mappings> www.coreservlets.com 9 Apache Struts: Actions

Slide 10: Passo 1B (Modificare struts- config.xml) • Mappare le condizioni di ritorno con delle pagine JSP – In questo caso utilizziamo l’elemento forward per dire che la pagina confirm.jsp viene applicata quando il metodo execute di RegisterAction1 ritorna \"success\", come segue : <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> – Nota: se lo stesso forward è utilizzato da azioni multiple, è possibile inserirlo in una sezione global-forwards section (prima di action-mappings) invece che metterlo dentro la action. <global-forwards> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </global-forwards> www.coreservlets.com 10 Apache Struts: Actions

Slide 11: Passo 1 (Modificare struts- config.xml) – Il file struts-config.xml finale <?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?> <!DOCTYPE struts-config PUBLIC ... > <struts-config> <action-mappings> <action path=\"/register1\" type=\"com.javastaff.strutsaction.RegisterAction1\" > <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </action> </action-mappings> </struts-config> www.coreservlets.com 11 Apache Struts: Actions

Slide 12: Passo 2 e 3 • Definire un form bean. – I bean sono rimandati alla prossima lezione, quindi questo step è omesso per il momento. • Creare dei result bean. – I bean sono rimandati alla prossima lezione, quindi questo step è omesso per il momento. www.coreservlets.com 12 Apache Struts: Actions

Slide 13: Passo 4 (Definire una classe Action per gestire le richieste) • Le sottoclassi Action dovrebbero… essere in un package. – In questo caso abbiamo package com.javastaff.strutsaction; • Questo significa che il file class dovrebbe andare in web_app/WEB-INF/classes/com/javastaff/strutsaction. • Le sottoclassi Action dovrebbero… aggiungere gli import specifici per Struts o qualsiasi altro importo necessario. – In questo caso abbiamo import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; www.coreservlets.com 13 Apache Struts: Actions

Slide 14: Passo 4 (Definire una classe Action per gestire le richieste) • Le sottoclassi Action dovrebbero... estendere Action • Le sottoclassi Action dovrebbero... effettuare l’override del metodo execute – In questo caso abbiamo public class RegisterAction1 extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ... } } www.coreservlets.com 14 Apache Struts: Actions

Slide 15: Passo 4 (Definire una classe Action per gestire le richieste) • Le sottoclassi Action dovrebbero... Ritornate mapping.findForward. – Il metodo execute dovrebbe avere uno o più valori di ritorno. – Questi valori corrisponderanno a specifiche pagine JSP definite nelle entry forward del file struts-config.xml. In questo caso ritorniamo semplicemente \"success\" in ogni situazione. public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return(mapping.findForward(\"success\")); } www.coreservlets.com 15 Apache Struts: Actions

Slide 16: Passo 4 (Definire una classe Action per gestire le richieste) – Codice finale package com.javastaff.strutsaction; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; public class RegisterAction1 extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { return mapping.findForward(\"success\"); } } www.coreservlets.com 16 Apache Struts: Actions

Slide 17: Passo 5 (Creare il form che richiama register1.do) • Abbiamo bisogno di un form HTML che richiama http://hostname/struts-actions/register1.do. <!DOCTYPE ...> <HTML> <HEAD><TITLE>New Account Registration</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>New Account Registration</H1> <FORM ACTION=\"register1.do\" METHOD=\"POST\"> Email address: <INPUT TYPE=\"TEXT\" NAME=\"email\"><BR> Password: <INPUT TYPE=\"PASSWORD\" NAME=\"password\"><BR> <INPUT TYPE=\"SUBMIT\" VALUE=\"Sign Me Up!\"> </FORM> </CENTER> </BODY></HTML> www.coreservlets.com 17 Apache Struts: Actions

Slide 18: Passo 6 (Display dei risultati nella JSP) • In generale, a questo punto possono esserci diverse pagine – Ogni pagina può corrispondere ai diversi valori che vengono ritornati dal metodo execute della Action invocata. • Nel file struts-config.xml, ogni pagina JSP è dichiarata in una entry forward con la relativa action. – In questo semplice caso l’unico valore di ritorno è \"success\", così /WEB-INF/results/confirm.jsp è usata in tutti i casi. • Questa pagina JSP mostrerà un semplice messaggio (come potete vedere nella prossima slide) www.coreservlets.com 18 Apache Struts: Actions

Slide 19: Passo 6 (Display dei risultati nella JSP) – Codice finale <!DOCTYPE ...> <HTML> <HEAD><TITLE>Success</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>You have registered successfully.</H1> Congratulations </CENTER> </BODY></HTML> www.coreservlets.com 19 Apache Struts: Actions

Slide 20: Esempio 1: Risultati • Il form HTML viene invocato con l’URL http://localhost/StrutsAction/form.html www.coreservlets.com 20 Apache Struts: Actions

Slide 21: Esempio 1: Risultati • Questo form viene riempito ed in seguito inviato – L’ ACTION del form è register1.do • Questo indirizzo è mappato nel file di configurazione struts-config.xml – E’ associato alla classe RegisterAction1, della quale viene invocato il metodo execute. • Questo metodo ritorna mapping.findForward – Con il valore \"success“, definito staticamente • Questo valore è mappato in struts-config.xml – Gestisce il forward verso /WEB-INF/results/confirm.jsp, • Che è il risultato finale mostrato all’utente. • Tuttavia visto che la pagina è invocata con RequestDispatcher.forward, e non response.sendRedirect, l’URL mostrato all’utente è register1.do, non confirm.jsp. www.coreservlets.com 21 Apache Struts: Actions

Slide 22: Esempio 1: Risultati www.coreservlets.com 22 Apache Struts: Actions

Slide 23: Esempio 2: Mapping multipli per il risultato • URL – http://hostname/StrutsAction/register2.do • Action Class – RegisterAction2. • Il metodo execute di RegisterAction2 ritorna \"s ccess\", u \"bad-address\", o \"bad-password\" • Pagine dei risultati – /WEB-INF/results/confirm.jsp, – /WEB-INF/results/bad-address.jsp, e – /WEB-INF/results/bad-password.jsp • Nuova feature di questo esempio – L’uso di forward multipli in un elemento action. www.coreservlets.com 23 Apache Struts: Actions

Slide 24: Passo 1 (Modificare struts- config.xml) • Mappare gli indirizzi .do con le classi Action – In questo caso utilizziamo RegisterAction2 per gestire le richieste relative a register2.do (come prima, notare che il .do è implicito). • Mappare le condizioni ritornate con delle pagine JSP – In questo caso utilizziamo degli elementi forward multipli, uno per ogni possibile valore di ritorno del metodo execute di RegisterAction2. • Dichiarare tutti i form bean che devono essere usati. – I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. www.coreservlets.com 24 Apache Struts: Actions

Slide 25: Passo 1 (Modificare struts- config.xml) – Codice finale <?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?> <!DOCTYPE struts-config PUBLIC ... > <struts-config> <action-mappings> ... <action path=\"/register2\" type=\"com.javastaff.strutsaction.RegisterAction2\"> <forward name=\"bad-address\" path=\"/WEB-INF/results/errorEmail.jsp\"/> <forward name=\"bad-password\" path=\"/WEB-INF/results/errorPassword.jsp\"/> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </action> </action-mappings> </struts-config> www.coreservlets.com 25 Apache Struts: Actions

Slide 26: Passi 2 e 3 • Definire un form bean. – I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. • Creare i bean dei risultati. – I Bean sono rimandati alla prossima lezione quindi per il momento sono omessi. www.coreservlets.com 26 Apache Struts: Actions

Slide 27: Passo 4 (Definire una classe Action per gestire le richieste) • Simile al precedente esempio tranne per il fatto che ora inseriamo diverse entry nel mapping.findForward – Ritorniamo un \"bad-address\" se l’email non è presente nel form, se è più piccola di 3 caratteri o se manca il carattere \"@\". – Ritorniamo \"bad-password\" se la password è mancante o se è più piccola di 6 caratteri. – Altrimenti ritorniamo \"success\". • In questo semplice esempio utilizziamo esplicitamente request.getParameter. – Nelle lezioni successive vedremo come Struts popola automaticamente un bean a partire dai dati della request HTTP. www.coreservlets.com 27 Apache Struts: Actions

Slide 28: Passo 4 (Definire una classe Action per gestire le richieste) – Codice finale public class RegisterAction2 extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String email = request.getParameter(\"email\"); String password = request.getParameter(\"password\"); if ((email == null) || (email.trim().length() < 3) || (email.indexOf(\"@\") == -1)) { return(mapping.findForward(\"bad-address\")); } else if ((password == null) || (password.trim().length() < 6)) { return(mapping.findForward(\"bad-password\")); } else { return(mapping.findForward(\"success\")); }}} www.coreservlets.com 28 Apache Struts: Actions

Slide 29: Passo 5 (Creare il form che invoca blah.do) • Abbiamo bisogno di un form che invoca http://hostname/StrutsAction/register2.do. <!DOCTYPE ...> <HTML> <HEAD><TITLE>New Account Registration</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>New Account Registration</H1> <FORM ACTION=\"register2.do\" METHOD=\"POST\"> Email address: <INPUT TYPE=\"TEXT\" NAME=\"email\"><BR> Password: <INPUT TYPE=\"PASSWORD\" NAME=\"password\"><BR> <INPUT TYPE=\"SUBMIT\" VALUE=\"Sign Me Up!\"> </FORM> </CENTER> </BODY></HTML> www.coreservlets.com 29 Apache Struts: Actions

Slide 30: Passo 6 (Visualizzare i risultati in una JSP) Prima possibile pagina <!DOCTYPE ...> <HTML> <HEAD><TITLE>Illegal Email Address</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>Illegal Email Address</H1> Address must be of the form username@host. Please <A HREF=“form2.html\"> try again</A>. </CENTER> </BODY></HTML> www.coreservlets.com 30 Apache Struts: Actions

Slide 31: Passo 6 (Visualizzare i risultati in una JSP) Seconda possibile pagina <!DOCTYPE ...> <HTML> <HEAD><TITLE>Illegal Password</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>Illegal Password</H1> Password must contain at least six characters. Please <A HREF=“form2.html\"> try again</A>. </CENTER> </BODY></HTML> www.coreservlets.com 31 Apache Struts: Actions

Slide 32: Passo 6 (Visualizzare i risultati in una JSP) confirm.jsp già utilizzata <!DOCTYPE ...> <HTML> <HEAD><TITLE>Success</TITLE></HEAD> <BODY BGCOLOR=\"#FDF5E6\"> <CENTER> <H1>You have registered successfully.</H1> Congratulations </CENTER> </BODY></HTML> www.coreservlets.com 32 Apache Struts: Actions

Slide 33: Esempio 2: Risultati (Form iniziale) www.coreservlets.com 33 Apache Struts: Actions

Slide 34: Esempio 2: Risultati (Indirizzo sbagliato) www.coreservlets.com 34 Apache Struts: Actions

Slide 35: Esempio 2: Risultati (Password sbagliata) www.coreservlets.com 35 Apache Struts: Actions

Slide 36: Esempio 2: Risultati (Successo) www.coreservlets.com 36 Apache Struts: Actions

Slide 37: Combinare condizioni condivise per i vari mapping • Idea – Se la stessa condizione è mappata sulla stessa pagina JSP in diverse azioni, è possibile muovere questo forward in una sezione global-forwards per evitare inutili ripetizioni • Sintassi – La sezione global-forwards precede action-mappings – Le entry di forward in global-forwards hanno la stessa sintassi e lo stesso comportamento delle entry di forward nelle action • Esempio <global-forwards> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </global-forwards> www.coreservlets.com 37 Apache Struts: Actions

Slide 38: Combinare condizioni condivise per i vari mapping: vecchia configurazione <action-mappings> <action path=\"/register1\" type=\"com.javastaff.strutsaction.RegisterAction1\"> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </action> <action path=\"/register2\" type=\"com.javastaff.strutsaction.RegisterAction2\"> <forward name=\"bad-address\" path=\"/WEB-INF/results/errorEmail.jsp\"/> <forward name=\"bad-password\" path=\"/WEB-INF/results/errorPassword.jsp\"/> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </action> ... </action-mappings> www.coreservlets.com 38 Apache Struts: Actions

Slide 39: Combinare condizioni condivise per i vari mapping: nuova configurazione <global-forwards> <forward name=\"success\" path=\"/WEB-INF/results/confirm.jsp\"/> </global-forwards> <action-mappings> <action path=\"/register1\" type=\"com.javastaff.strutsaction.RegisterAction1\"> </action> <action path=\"/register2\" type=\"com.javastaff.strutsaction.RegisterAction2\"> <forward name=\"bad-address\" path=\"/WEB-INF/results/errorEmail.jsp\"/> <forward name=\"bad-password\" path=\"/WEB-INF/results/errorPassword.jsp\"/> </action> ... </action-mappings> www.coreservlets.com 39 Apache Struts: Actions

Slide 40: Sommario • Modificare struts-config.xml – Mappare indirizzi blah.do su delle classi che estendono Action – Mappare le condizioni di return su delle pagine JSP – Dichiarare tutti i form bean che devono essere utilizzati. • Definire un form bean • Creare un bean dei risultati • Definire una classe Action che gestisce le richieste – Estendere Action – Effettuare l’override di execute() – Ritornare mapping.findForward • Creare un form che invoca blah.do • Mostrare i risultati in una JSP www.coreservlets.com 40 Apache Struts: Actions