Università di Bergamo Facoltà di Ingegneria. Applicazioni Internet B. Paolo Salvaneschi B6_3 V1.10. JSP parte C

Documenti analoghi
Pattern di Progettazione

Università di Bergamo Dip. di Ingegneria gestionale, dell'informazione e della produzione INGEGNERIA DEL SOFTWARE. Paolo Salvaneschi C1_1 V3.

Università di Bergamo Facoltà di Ingegneria. Applicazioni Internet B. Paolo Salvaneschi B6_1 V1.7. JSP parte A

Laboratorio di sistemi Prima Web Application JSP [Java]

Introduzione a JSP (Java Server Pages) MC 2005

Università di Bergamo Facoltà di Ingegneria. Applicazioni Internet B. Paolo Salvaneschi B6_4 V1.7. JSP parte D

Introduzione alle JSP

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

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

JUG Ancona Italy. JSP 2.0: Tag Library. Matteo Piccinini Web Developer

6 JavaServer Pages. Marco Tessarotto Programmazione dei Web Server Anno Accademico

Laboratorio di sistemi JSTL e database Jsp [NetBeans]

Siti web centrati sui dati Architettura MVC-2: JSP

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Università di Bergamo Facoltà di Ingegneria. Applicazioni Internet B. Paolo Salvaneschi B3_2 V1.22. HTML Parte B

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

Tecnologie di Sviluppo per il Web

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

Programmazione lato client. JavaScript. Applicazioni di Rete M. Ribaudo - DISI. JavaScript

7 custom tags. Marco Tessarotto Programmazione dei Web Server Anno Accademico

JavaScript JavaScript Programmazione lato client JScript JavaScript ECMAScript

Java Server Pages A.A

Applicazioni web. Sommario. Parte 7 Java Server Pages. Applicazioni web - JSP. Alberto Ferrari 1 JSP. JavaBeans JSTL. Architettura e sintassi di base

Soluzione 1: controller per la pagina di dettaglio delle categorie

Programmazione Web D B M G. Il linguaggio HTML

D B M G Il linguaggio HTML

@2011 Politecnico di Torino 1

JSP [2] Uso dei Costrutti JSP. Tag di azione. Uso di Bean Interazione fra pagine JSP. Uso di oggetti bean. Tre tag di azione per manipolare bean

Programmazione Web D B M G. Il linguaggio HTML

Programmazione Java Avanzata. MVC Model, View,, Controller. Ing. Gianluca Caminiti

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1

Modulo o Form in Html

D B M G. Basi di dati. Programmazione Web: HTML. Programmazione Web. Il linguaggio Politecnico di Torino 1

@2011 Politecnico di Torino 1

@2011 Politecnico di Torino 1

Laboratorio di Sistemi Fondamenti di JSTL (parte 1) Java (JSTL)

Esercizi su JavaScript, DOM e Web Storage

Le JavaServer Pages - Lezione 7 I JavaBean

HTML: FORM. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

scrivere window.alert(). 2 Nell esempio sarebbe scritto solo var hello, senza pertanto attribuire alla variabile hello alcun valore

Laboratorio Progettazione Web PHP e FORMs HTML - Lezione 8. Andrea Marchetti IIT-CNR 2011/2012

Informatica di base Laboratorio di HTML Dott. Serena Villata A.A. 2004/05

Java Server Side JSP. Ing. Cesare Monti

AJAX. Riccardo Rosati

Un esempio complesso

HTML Sintassi di HTML Tag principali per i contenuti I Forms

AJAX. Riccardo Rosati

Laboratorio di reti II: Java Server Pages

LE PRIME ACTIVE SERVICE PAGE: oggetto REQUEST

Linguaggio HTML. Reti. Il Linguaggio HTML. Il Linguaggio HTML. Il Linguaggio HTML

HTML e interattività FORM

HTML il linguaggio per creare le pagine per il web

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

UNIVERSITÀ DEGLI STUDI DI PARMA REALIZZAZIONE DI UNO STRUMENTO PER LA GESTIONE DI BASI DI DATI IN APPLICAZIONI WEB

Linguaggi di scripting

Lato client: vuol dire che le operazioni programmate vengono svolte e visualizzate direttamente sul computer dell'utente collegato

Introduzione a Java Server Pages (JSP) (estratto) SAPIENZA Università di Roma Corso di Architetture Software Orientate ai Servizi

Servlet 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 /

PHP & MySQL. Giselda De Vita

Java EE 3. Ingegneria del Software (parte II) Andrea Bei

Laboratorio di Sistemi Prototipo applicazione Biblioteca Jsp [Java]

Le JavaServer Pages - Lezione 5 Le Standard Action

HTML. Es: La prossima parola è in <b>neretto</b> Es: La prossima parola è in neretto

HTML il linguaggio per creare le pagine per il web

Tito Flagella - Introduzione alla programmazione di Servlet

HTML Interazione con l utente

Corso di PHP. Prerequisiti. 6.2 PHP e il web 2. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Laboratorio di sistemi Information hiding Jsp [Java]

Il tag form indica l'inizio della costruzione di un modulo. Necessita del tag di chiusura

Visualizzazione ordini in MyShopDB

Laboratorio di Informatica (Chimica)

Architetture Web: un ripasso

Javascript: il browser

Laboratorio di sistemi Autenticazione utente mediante scriplet Jsp [NetBeans]

JavaScript. Caratteristiche del JavaScript. Javascript consente di rendere dinamiche le pagine HTML

Linguaggio HTML. Reti. Il Linguaggio HTML. Il Linguaggio HTML. Il Linguaggio HTML

MVC - Principio. MVC Model View Controller. MVC - Terminologia. MVC - Funzionamento. Richiesta. Controller. Model. Risposta. View

Anno Accademico Corso di Tecnologie Web Web Application: JSP

Anno Accademico Corso di Tecnologie Web Web Application: JSP

Anno Accademico Corso di Tecnologie Web Web Application: JSP. JSP request processing

Esempio su strutture dati dinamiche: ArrayList

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

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

NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) E N G I N E = I

Laboratorio di Basi di Dati

MyShopDB = MyShop + MySQL

Laboratorio di Basi di Dati

MyShopDB = MyShop + MySQL

1. (6 punti) Spiegare il significato, in modo dettagliato, del pezzo di codice seguente di una servlet:

HTML il linguaggio per creare le pagine per il web

Transcript:

Università di Bergamo Facoltà di Ingegneria Applicazioni Internet B Paolo Salvaneschi B6_3 V1.10 JSP parte C Il contenuto del documento è liberamente utilizzabile dagli studenti, per studio personale e per supporto a lezioni universitarie. Ogni altro uso è riservato, e deve essere preventivamente autorizzato dall autore. Sono graditi commenti o suggerimenti per il miglioramento del materiale B6 JSP Paolo Salvaneschi 1

INDICE Utilizzo di JSTL Installazione di JSTL Azioni JSP di JSTL e linguaggio EL Gestione dell input con JSTL Passaggio del controllo tra pagine Model View Controller Passaggio dei dati tra pagine-scope B6 JSP Paolo Salvaneschi 2 B6 JSP Paolo Salvaneschi 2

Utilizzo di JSTL Elementi di azione Motivazione:permettere l utilizzo di tag speciali che realizzano funzioni utili per rendere dinamiche le pagine Raggruppati in tag libraries Standard Personalizzate JSTL B6 JSP Paolo Salvaneschi 3 B6 JSP Paolo Salvaneschi 3

Utilizzo di JSTL Elementi di azione standard <jsp: Elementi di azione personalizzata Specifica e ambiente di sviluppo per realizzare nuove azioni personalizzate (nuove tag library) JSTL (Java Standard Tag Library) Librerie predefinite di azioni <c: Core <x: <fmt: <sql: Elaborazione XML Formattazione e internazionalizzazione Accesso a database B6 JSP Paolo Salvaneschi 4 B6 JSP Paolo Salvaneschi 4

Utilizzo di JSTL Index.htm Esempio Risposta.jsp B6 JSP Paolo Salvaneschi 5 B6 JSP Paolo Salvaneschi 5

<%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head><title>prova</title></head> <body bgcolor="white"> <H1>Pagina di prova</h1> <c:choose> <c:when test="${param.nome == 'Mario'}"> <HR> <H2>Benvenuto <c:out value="${param.nome}" /></H2> </HR> </c:when> <c:otherwise> <HR> <H2>Utente non riconosciuto</h2> </HR> </c:otherwise> </c:choose> B6 JSP Paolo Salvaneschi 6 B6 JSP Paolo Salvaneschi 6 </body></html> Utilizzo di JSTL Utilizzo di un tag Risposta.jsp Dichiarazione di una tag library linguaggio EL

Utilizzo di JSTL Installazione taglib jstl Scaricare il distribution jakarta-taglibs-standard-1.0.5.zip da http://jakarta.apache.org/taglibs Copiare i file dalla cartella lib alla cartella lib di Web-inf dell applicazione Copiare i file dalla cartella tld alla cartella Web-inf dell applicazione B6 JSP Paolo Salvaneschi 7 B6 JSP Paolo Salvaneschi 7

Utilizzo di JSTL Files JAR Contengono le classi java che implementano le azioni Files TLD Contengono le definizioni dei tag della libreria, i nomi delle classi, Es. c.tld espressioni con scripting c-rt.tld espressioni con linguaggio EL B6 JSP Paolo Salvaneschi 8 B6 JSP Paolo Salvaneschi 8

Utilizzo di JSTL B6 JSP Paolo Salvaneschi 9 B6 JSP Paolo Salvaneschi 9

Utilizzo di JSTL Dichiarazione di una tag library <%@taglib prefix= prefisso uri= tagliburi %> Dichiara una tag library utilizzata nella pagina che contiene azioni personalizzate (o JSTL) prefix uri prefisso da utilizzare nei nomi degli elementi di azione stringa utilizzata per localizzare l implementazione della tag library (es. nome simbolico definito nel file TLD della library) B6 JSP Paolo Salvaneschi 10 B6 JSP Paolo Salvaneschi 10

Utilizzo di JSTL Utilizzo di una tag library - sintassi <prefix:action_name attr1= value1 attr2= value2 > action_body </prefix:action_name> Esempio <jsp:forward page= userinfovalid.jsp > <jsp:param name= msg value= invalid email address /> </jsp:forward> Forma abbreviata <prefix:action_name attr1= value1 attr2= value2 /> B6 JSP Paolo Salvaneschi 11 B6 JSP Paolo Salvaneschi 11

Utilizzo di JSTL La libreria JSTL core <c:if> <c:choose> <c:when> <c:otherwise> <c:foreach> <c:fortokens> <c:out> <c:import> <c:redirect> <c:url> <c:param> <c:remove> <c:set> <c:catch> B6 JSP Paolo Salvaneschi 12 B6 JSP Paolo Salvaneschi 12

Utilizzo di JSTL <c:if test= espressione booleana > Elementi JSP </c:if> <c:choose> azioni <c:when> ed eventualmente un azione <c:otherwise> </c:choose> Elabora la prima azione <c:when> che ha espressione di test con valore true; se nessuna elabora <c:otherwise> B6 JSP Paolo Salvaneschi 13 B6 JSP Paolo Salvaneschi 13

Utilizzo di JSTL <c:when test= espressione booleana > Elementi JSP </c:when> <c:otherwise> Elementi JSP </c:otherwise> B6 JSP Paolo Salvaneschi 14 B6 JSP Paolo Salvaneschi 14

Utilizzo di JSTL param Variabile EL implicita <c:choose> <c:when test="${param.nome == 'Mario'}"> <HR> <H2>Benvenuto <c:out value="${param.nome}" /></H2> </HR> </c:when> <c:otherwise> <HR> <H2>Utente non riconosciuto</h2> </HR> </c:otherwise> </c:choose> B6 JSP Paolo Salvaneschi 15 B6 JSP Paolo Salvaneschi 15

Utilizzo di JSTL Numero prefissato di iterazioni <c:foreach [var= var ] [varstatus= varstatus ] begin= startindex end= stopindex [step= increment ]> Elementi JSP </c:foreach> Valuta il corpo un numero di volte prefissato indice corrente Variabile che contiene un oggetto LoopTagStatus che definisce lo stato dell iterazione B6 JSP Paolo Salvaneschi 16 B6 JSP Paolo Salvaneschi 16

Utilizzo di JSTL Iterazione sugli elementi di una collezione <c:foreach items= collection [var= var ] [varstatus= varstatus ] [begin= startindex ] [end= stopindex ] [step= increment ]> Elementi JSP </c:foreach> Valuta il corpo una volta per ciascun elemento di una collezione collezione elemento corrente della collezione Indice iniziale con base 0 Default: 0 Indice finale con base 0 (incluso nell iterazione). Default: ultimo elemento B6 JSP Paolo Salvaneschi 17 B6 JSP Paolo Salvaneschi 17

Utilizzo di JSTL <%-- cinque iterazioni che scrivono 1,2,3,4,5 --%> <c:foreach var= current begin= 1 end= 5 > <c:out value= ${current} /> </c:foreach> <%-- iterazione su tutti i parametri di una richiesta --%> <c:foreach items= ${param} var= current > Name:<c:out value= ${current.key} /> Value:<c:out value= ${current.value} /> </c:foreach> Nome e valore del singolo elemento (java.util.map) B6 JSP Paolo Salvaneschi 18 B6 JSP Paolo Salvaneschi 18

Utilizzo di JSTL <c:fortokens items= stringoftokens delims= delimiters [var= var ] [varstatus= varstatus ] [begin= startindex ] [end= stopindex ] [step= increment ]> Elementi JSP </c:fortokens > I token su cui effettuare l iterazione Elenco dei delimitatori elemento corrente Valuta il corpo una volta per ciascun token presente in una String, delimitato da un carattere specificato B6 JSP Paolo Salvaneschi 19 B6 JSP Paolo Salvaneschi 19

Utilizzo di JSTL <%-- iterazione su token separati da barre verticali --%> <c:fortokens items= ${tokens} delims= var= current > <c:out value= ${current} /> </c:fortokens> B6 JSP Paolo Salvaneschi 20 B6 JSP Paolo Salvaneschi 20

Utilizzo di JSTL <%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title></title></head> <c:set var="elemento" value="primo secondo terzo quarto"/> <h3>elemento</h3> <c:out value="${elemento}"/> <h3>tokens</h3> <c:fortokens items="${elemento}" delims=" " var="current"> <c:out value="${current}"/> <br> </c:fortokens> </body> </html> B6 JSP Paolo Salvaneschi 21 B6 JSP Paolo Salvaneschi 21

Utilizzo di JSTL <c:out value= espressione [default= espressionedidefault ]/> Valuta un espressione e inserisce il risultato nella risposta convertito in String ( o un valore di default se l espressione vale null) B6 JSP Paolo Salvaneschi 22 B6 JSP Paolo Salvaneschi 22

Utilizzo di JSTL <c:import> Importa una risorsa interna (all applicazione web) (come <jsp:include>) o esterna. (può essere salvato il contenuto come String o reso disponibile tramite java.io.reader --- vedi JSTL library X:) <c:redirect> Invia al client una URL che indica di effettuare una nuova richiesta <c:url> Applica regole di conversione ad una URL (es. da percorso relativo al contesto (tomcat) a percorso relativo al server) <c:param> Utilizzata nidificata con le precedenti per inserire un parametro della richiesta in un URL B6 JSP Paolo Salvaneschi 23 B6 JSP Paolo Salvaneschi 23

Utilizzo di JSTL <c:set> imposta una variabile di scope <c:set var= " name " value= " myname " scope= " session " /> <c:remove> Cfr. Passaggio dati tra pagine rimuove una variabile di scope <c:remove var= " authenticationtoken " scope= " session " /> <c:catch> intercetta un eccezione lanciata da elementi JSP B6 JSP Paolo Salvaneschi 24 B6 JSP Paolo Salvaneschi 24

Utilizzo di JSTL IL linguaggio EL Linguaggio per scrivere le espressioni che impostano dinamicamente gli attributi delle azioni <c:out value="${param.nome} "/> EL fa parte delle specifiche JSTL Non delle azioni standard Linguaggio EL Espressione java <jsp:setproperty name="msg" property="category" value= "<%= request.getparameter('item') %>" /> B6 JSP Paolo Salvaneschi 25 B6 JSP Paolo Salvaneschi 25

Utilizzo di JSTL Sintassi <c:out value="${param.nome}"/> Inizio con delimitatore ${ Fine con } Si possono combinare espressioni EL e testo statico <c:out value="risultato:${1+2+3}"/> B6 JSP Paolo Salvaneschi 26 B6 JSP Paolo Salvaneschi 26

Utilizzo di JSTL Sintassi Operatori: + - * / <,>,&&,,!,empty (var con valore nullo o vuoto ).. Variabili specifiche dell applicazione Variabili implicite previste da EL B6 JSP Paolo Salvaneschi 27 B6 JSP Paolo Salvaneschi 27

Utilizzo di JSTL Variabili implicite previste da EL param collezione di tutti i valori dei parametri della richiesta, un valore String per parametro (java.util.map) paramvalues idem, array di String per ogni parametro (java.util.map) (es. di uso con checkbox) B6 JSP Paolo Salvaneschi 28 B6 JSP Paolo Salvaneschi 28

Utilizzo di JSTL Variabili implicite previste da EL pagescope, requestscope, sessionscope, applicationscope collezione di tutte le variabili con scope a livello di pagina, richiesta, sessione, applicazione pagecontext Fornisce l accesso a vari dati relativi alla richiesta (es.pagecontext.request.method).. B6 JSP Paolo Salvaneschi 29 B6 JSP Paolo Salvaneschi 29

Gestione dell input con JSTL index.jsp response.jsp Esempio 1 B6 JSP Paolo Salvaneschi 30 B6 JSP Paolo Salvaneschi 30

Gestione dell input con JSTL <html><head><title>user Info Entry Form</title></head> <body bgcolor="white"> <form action="response.jsp" method="post"> <table> <tr><td>nome:</td><td><input type="text" name="nome"></td></tr> <tr><td>cognome:</td><td><input type="text" name="cognome"></td></tr> <tr> <td>vini preferiti:</td> <td> <input type="checkbox" name="vino" value="ferrari">ferrari<br> <input type="checkbox" name="vino" value="berlucchi">berlucchi<br> <input type="checkbox" name="vino" value="prosecco">prosecco<br></td> </tr> <tr><td><input type="submit" value="invia"></td></tr> </table> </form> </body></html> B6 JSP Paolo Salvaneschi 31 B6 JSP Paolo Salvaneschi 31

<%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title>user Info Response</title></head> <body bgcolor="white"> <h2>dati ricevuti</h2> <table border="1"> <tr><td>nome:</td> <td><c:out value="${param.nome}" /></td> </tr> <tr><td>cognome:</td> <td><c:out value="${param.cognome}" /></td> </tr><td>vini preferiti:</td> <td> <c:foreach items="${paramvalues.vino}" var="current"> <c:out value="${current}" /> <br> </c:foreach> </td> Per tutti gli elementi dell array di </table> </body></html> Gestione dell input con JSTL String (da 0 a ultimo) B6 JSP Paolo Salvaneschi 32 B6 JSP Paolo Salvaneschi 32

Gestione dell input con JSTL Esempio 2 B6 JSP Paolo Salvaneschi 33 B6 JSP Paolo Salvaneschi 33

Gestione dell input con JSTL <%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title>request Info</title></head> <body bgcolor="white"> <h2>sono state ricevute le seguenti informazioni:</h2> <ul> <li>request Method: <c:out value="${pagecontext.request.method}" /> <li>request Protocol: <c:out value="${pagecontext.request.protocol}" /> <li>request URL: <c:out value="${pagecontext.request.requesturl}" /> <li>server Port: <c:out value="${pagecontext.request.serverport}" /> <li>remote Address: <c:out value="${pagecontext.request.remoteaddr}" /> </ul> </body></html> B6 JSP Paolo Salvaneschi 34 B6 JSP Paolo Salvaneschi 34

Gestione dell input con JSTL Validazione dell input B6 JSP Paolo Salvaneschi 35 B6 JSP Paolo Salvaneschi 35

<%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title>user Info Entry Form</title></head> <body bgcolor="white"> <form action="index.jsp" method="post"> <input type="hidden" name="forminviata" value="true"> <table> <c:if test="${param.forminviata && empty param.nome}"> <tr><td></td> <td colspan="2"><font color="red"> Scrivere il nome </font></td></tr> Verifica se il valore della </c:if> variabile è not null AND <tr> stringa vuota (" ") <td>nome:</td> <td> <input type="text" name="nome value="<c:out value="${param.nome}" />"> </td> </tr> Gestione dell input con JSTL Validazione dell input Al primo caricamento della pagina non è true (null) B6 JSP Paolo Salvaneschi 36 B6 JSP Paolo Salvaneschi 36

Gestione dell input con JSTL <c:if test="${param.forminviata && empty param.cognome}"> <tr><td></td> <td colspan="2"><font color="red"> Scrivere il cognome </font></td></tr> </c:if> <tr> <td>cognome:</td> <td><input type="text" name="cognome" value="<c:out value="${param.cognome}" />"> </td></tr> <tr> <td colspan="3"> <input type="submit" value="send Data"> </td> </tr> </table> </form></body></html> Validazione dell input Nota: quando tutti i parametri sono validati si può passare il controllo ad un altra pagina affinchè elabori i parametri B6 JSP Paolo Salvaneschi 37 B6 JSP Paolo Salvaneschi 37

Passaggio del controllo tra pagine <jsp:forward page= nextpage.jsp /> Trasferisce il controllo dell elaborazione della richiesta http ad un altra pagina. Il controllo non torna alla pagina di origine. <jsp:forward page= nextpage.jsp > <jsp:param> <jsp:param>. </jsp:forward > Trasferisce il controllo dell elaborazione della richiesta http ad un altra pagina passando parametri supplementari che si aggiungono ai parametri della richiesta http B6 JSP Paolo Salvaneschi 38 B6 JSP Paolo Salvaneschi 38

Passaggio del controllo tra pagine http://localhost:8080/es_controllo_1/index.jsp?nome=mario&cognome=rossi B6 JSP Paolo Salvaneschi 39 B6 JSP Paolo Salvaneschi 39

Passaggio del controllo tra pagine <HTML> <HEAD></HEAD> <BODY> <jsp:forward page="forwarded.jsp"/> </BODY> </HTML> <%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <HTML><HEAD></HEAD> <BODY> <H1> Pagina chiamata <HR> <BR> <H2>Nome:<c:out value="${param.nome}" /></H2> <H2>Cognome:<c:out value="${param.cognome}" /></H2> </H1> <HR> </BODY></HTML> B6 JSP Paolo Salvaneschi 40 B6 JSP Paolo Salvaneschi 40

Passaggio del controllo tra pagine http://localhost:8080/es_controllo_1/index.jsp?nome=mario&cognome=rossi indirizzo=via Roma 4 B6 JSP Paolo Salvaneschi 41 B6 JSP Paolo Salvaneschi 41

Passaggio del controllo tra pagine <HTML> <HEAD></HEAD> <BODY> <HR> <jsp:forward page="forwarded.jsp"> <jsp:param name="indirizzo" value="via Roma 4"/> </jsp:forward> </BODY> </HTML> B6 JSP Paolo Salvaneschi 42 B6 JSP Paolo Salvaneschi 42

Passaggio del controllo tra pagine <%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <HTML> <HEAD> </HEAD> <BODY> <H1> Pagina chiamata <HR> <BR> <H2>Nome:<c:out value="${param.nome}" /></H2> <H2>Cognome:<c:out value="${param.cognome}" /></H2> <H2>Indirizzo:<c:out value="${param.indirizzo}" /></H2> </H1> <HR> </BODY> </HTML> B6 JSP Paolo Salvaneschi 43 B6 JSP Paolo Salvaneschi 43

Passaggio del controllo tra pagine forwarded.jsp index.jsp index.jsp B6 JSP Paolo Salvaneschi 44 B6 JSP Paolo Salvaneschi 44

<%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title>user Info Entry Form</title></head> <body bgcolor="white"> <c:if test="${!empty param.nome &&!empty param.cognome}"> <jsp:forward page="forwarded.jsp"/> </c:if> <form action="index.jsp" method="post"> <input type="hidden" name="forminviata" value="true"> <table> <c:if test="${param.forminviata && empty param.nome}"> <tr><td></td> <td colspan="2"><font color="red"> Scrivere il nome </font></td></tr> </c:if> <tr> come prima. Gestione dell input con JSTL Esempio precedente (validazione dell input) modificato Nota: trasferisce il controllo dell elaborazione della richiesta http. Il controllo non torna alla pagina di origine. B6 JSP Paolo Salvaneschi 45 B6 JSP Paolo Salvaneschi 45

Model View Controller B6 JSP Paolo Salvaneschi 46 B6 JSP Paolo Salvaneschi 46

Model View Controller Form di richiesta index.htm Pagina di risposta valida accetta.jsp Pagina di risposta non valida rifiuta.jsp View submit forward forward Gestione Gestione.JSP Controller Cliente Bean access ClienteBean Model B6 JSP Paolo Salvaneschi 47 B6 JSP Paolo Salvaneschi 47

Model View Controller Model contiene dati / comportamenti relativi al dominio View visualizza il modello visualizza ogni informazione necessaria Controller gestisce l input manipola il modello causa l attivazione della view appropriata B6 JSP Paolo Salvaneschi 48 B6 JSP Paolo Salvaneschi 48

Model View Controller Form di richiesta index.htm Pagina di risposta valida accetta.jsp Pagina di risposta non valida rifiuta.jsp View Gestione Gestione.JSP Controller Cliente ClienteBean Model Nota: nonostante sembri dalla forma non è una architettura a layer B6 JSP Paolo Salvaneschi 49 B6 JSP Paolo Salvaneschi 49

Model View Controller <HTML><HEAD></HEAD> <BODY> <H1>Form di richiesta</h1> <HR> <FORM method= "get" action="gestione.jsp"> Nome: <br><input type="text" name="nome" size="30"><br> Cognome: <br><input type="text" name="cognome" size="30"><br> Codice utente: Form di richiesta <br><input type="text" name="codice" size="10" maxlength ="10"><br><br> Tipo fornitura: <br><input type="radio" name="tipo" Value="tipoC">Prodotto su specifica<br> <input type="radio" name="tipo" Value="tipoD" checked>prodotto a magazzino <br><br> <input type="submit" value="invia"> </FORM> </BODY></HTML> B6 JSP Paolo Salvaneschi 50 B6 JSP Paolo Salvaneschi 50

<%@ page contenttype="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <HTML> <HEAD> </HEAD> <BODY> <HR> <BR> <H2><c:out value="${param.info}" /></H2> </H1> <HR> </BODY> </HTML> Pagina di risposta valida Model View Controller Pagina di risposta non valida <HTML> <HEAD></HEAD> <BODY> <HR> <BR> <H2> Richiesta non accettata</h2> <BR> <HR> </BODY> </HTML> B6 JSP Paolo Salvaneschi 51 B6 JSP Paolo Salvaneschi 51

Model View Controller <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <jsp:usebean id="cliente" class="info.clientebean" /> <jsp:setproperty name="cliente" property="*" /> <c:choose> <c:when test="${cliente.stato == 'Cliente riconosciuto'}"> <jsp:forward page="accetta.jsp"> <jsp:param name="info" value="cliente riconosciuto--sconto accordato"/> </jsp:forward> </c:when> <c:otherwise> <jsp:forward page="rifiuta.jsp"/> </c:otherwise> </c:choose> Gestione Nota: non utilizza HTML B6 JSP Paolo Salvaneschi 52 B6 JSP Paolo Salvaneschi 52

Utilizzo di componenti JavaBean Nome Proprietà Tipo Accesso Descrizione Cliente ClienteBean nome String Read Write Nome del cliente cognome String Read Write Cognome del cliente codice String Read Write Codice utente tipo String Read Write Tipo fornitura stato String Read Stato: Cliente non riconosciuto, Cliente riconosciuto La lettura dello stato causa l aggiornamento dello sconto sconto String Read Importo dello sconto accordato B6 JSP Paolo Salvaneschi 53 B6 JSP Paolo Salvaneschi 53

Model View Controller package info; import java.util.*; public class ClienteBean implements java.io.serializable { private String nome; private String cognome; private String codice; private String tipo; private String stato; private String sconto; Cliente //Costruttore che inizializza le strutture di dati public ClienteBean() { initcliente(); } B6 JSP Paolo Salvaneschi 54 B6 JSP Paolo Salvaneschi 54

Model View Controller //Set dei parametri Cliente public void setnome(string nome) { this.nome = nome;} public void setcognome(string cognome) { this.cognome = cognome;} public void setcodice(string codice) { this.codice = codice;} public void settipo(string tipo) { this. tipo = tipo;} //Return anagrafica cliente public String getnome() { return nome;} public String getcognome() { return cognome;} public String getcodice() { return codice;} public String gettipo() { return tipo;} //Return stato e sconto public String getstato() { stato = "Cliente non riconosciuto"; sconto = "-------"; if ("Mario".equals(nome)) { stato = "Cliente riconosciuto"; sconto = "20 %"; } return stato;} public String getsconto() { return sconto;} //Inizializza private void initcliente() { nome = " "; cognome = " "; codice = " "; tipo = " "; stato = " "; B6 JSP Paolo Salvaneschi 55 B6 JSP Paolo Salvaneschi 55 sconto = "0 %";}}

Model View Controller Nota: Accesso alle proprietà del Bean Accesso con jsp:getproperty <jsp:getproperty name="cliente" property="stato" /> Aggiunge il valore della proprietà di un Bean convertito in una stringa, alla risposta generata dalla pagina Accesso con notazione a punto attraverso EL <c:out value="${cliente.stato}" /> ottiene lo stesso risultato di sopra <c:when test="${cliente.stato == 'Cliente riconosciuto'}"> <c:set var="statolocale" value="${cliente.stato}" /> B6 JSP Paolo Salvaneschi 56 B6 JSP Paolo Salvaneschi 56

Passaggio dei dati tra pagine - scope Condivisione dati tra pagine: Scope (ambiti di validità) Lo scope definisce la disponibilità di un oggetto: Page (default) oggetti disponibili solo all interno di una pagina Request oggetti disponibili a tutte le pagine che elaborano la stessa richiesta (cfr. jsp:forward) Session oggetti condivisi da più richieste dello stesso browser Application oggetti condivisi da tutti gli utenti dell applicazione web B6 JSP Paolo Salvaneschi 57 B6 JSP Paolo Salvaneschi 57

Passaggio dei dati tra pagine - scope Client richiesta risposta richiesta risposta Pagina 1 inoltro Pagina 2 Pagina 3 inoltro Pagina 4 Scope di pagina Scope di pagina Scope di pagina Scope di pagina Scope di richiesta Scope di richiesta Scope di sessione B6 JSP Paolo Salvaneschi 58 B6 JSP Paolo Salvaneschi 58

Passaggio dei dati tra pagine - scope Nota: il nome di un oggetto deve essere univoco in tutti gli scope (secondo la specifica JSP. In pratica disatteso dai container che implementano JSP) Specifica dello scope. Esempio: <jsp:usebean id="cliente" scope="request" class="info.clientebean" /> Al momento dell esecuzione cerca un bean con lo stesso nome nello scope. Se esiste: nulla. Se non esiste: crea istanza nello scope Accesso tramite variabili implicite <c:out value="${pagescope.userinfo1.username}" /> <c:out value="${requestscope.userinfo2.username}" /> B6 JSP Paolo Salvaneschi 59 B6 JSP Paolo Salvaneschi 59

Passaggio dei dati tra pagine - scope index.jsp Form di richiesta forward scope object submit Gestione Pagina di risposta valida forward gestione.jsp Bean access accetta.jsp View Controller Cliente clientebean Model B6 JSP Paolo Salvaneschi 60 B6 JSP Paolo Salvaneschi 60

Passaggio dei dati tra pagine - scope B6 JSP Paolo Salvaneschi 61 B6 JSP Paolo Salvaneschi 61

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <jsp:usebean id="cliente" scope="request" class="info.clientebean" /> <HTML><HEAD></HEAD> <BODY> <H1>Form di richiesta</h1> <HR> <FORM method= "get" action="gestione.jsp"> Nome:<br><input type="text" name="nome" size="30"><br> Cognome:<br><input type="text" name="cognome" size="30"><br> Codice utente:<br><input type="text" name="codice" size="10" maxlength ="10"> <br><br> Tipo fornitura: <br><input type="radio" name="tipo" Value="tipoC">Prodotto su specifica <br><input type="radio" name="tipo" Value="tipoD" checked>prodotto a magazzino <br><br> Passaggio dei dati tra pagine - scope NB Form di richiesta B6 JSP Paolo Salvaneschi 62 B6 JSP Paolo Salvaneschi 62

Passaggio dei dati tra pagine - scope <c:if test="${param.info == 'Cliente non riconosciuto'}"> <font color="red"> Nome:<c:out value="${cliente.nome}" /><br> Cognome:<c:out value="${cliente.cognome}" /><br> Cliente non riconosciuto. Inserire i dati<br><br> </font> </c:if> <input type="submit" value="invia"> </FORM> </BODY> </HTML> Form di richiesta Proprietà del Bean nello scope di request (E il Bean caricato con i dati della form. I dati sono utilizzati per produrre la scritta in rosso) B6 JSP Paolo Salvaneschi 63 B6 JSP Paolo Salvaneschi 63

Passaggio dei dati tra pagine - scope Pagina di risposta valida Cliente Come esempio precedente B6 JSP Paolo Salvaneschi 64 B6 JSP Paolo Salvaneschi 64

Passaggio dei dati tra pagine - scope <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <jsp:usebean id="cliente" scope="request" class="info.clientebean" /> <jsp:setproperty name="cliente" property="*" /> <c:choose> <c:when test="${cliente.stato == 'Cliente riconosciuto'}"> Gestione <jsp:forward page="accetta.jsp"> <jsp:param name="info" value="cliente riconosciuto--sconto accordato"/> </jsp:forward> </c:when> Torna alla form di richiesta <c:otherwise> <jsp:forward page="index.jsp"> <jsp:param name="info" value="cliente non riconosciuto"/> </jsp:forward> </c:otherwise> </c:choose> B6 JSP Paolo Salvaneschi 65 B6 JSP Paolo Salvaneschi 65

Passaggio dei dati tra pagine - scope Nota sull esempio: Prima request della pagina index.jsp: è creato un Bean cliente (che non è utilizzato) L utente compila la form e inoltra una nuova request alla pagina gestione.jsp la quale Crea un nuovo Bean cliente (il vecchio è fuori dallo scope di validità è una nuova request) Imposta le proprietà del Bean Passa il controllo alla pagina index.jsp (nello stesso scope di request) B6 JSP Paolo Salvaneschi 66 B6 JSP Paolo Salvaneschi 66

Passaggio dei dati tra pagine - scope La pagina index.jsp: recupera il Bean esistente nello scope di request utilizza le proprietà caricate da gestione.jsp per visualizzare la segnalazione di errore B6 JSP Paolo Salvaneschi 67 B6 JSP Paolo Salvaneschi 67

Passaggio dei dati tra pagine - scope Attenzione quando si mischia l utilizzo di JSTL e lo scripting Le azioni JSTL espongono i dati mediante le variabili di scope che vivono in uno degli scope di JSP Uno scriptlet dichiara variabili di scripting nello specifico linguaggio (java) B6 JSP Paolo Salvaneschi 68 B6 JSP Paolo Salvaneschi 68

Passaggio dei dati tra pagine - scope Per manipolare variabili di scope in uno script bisogna disporre di una variabile di scripting che accede alla variabile di scope L azione <jsp:usebean... crea anche una variabile di scripting che contiene il riferimento all istanza di Bean. B6 JSP Paolo Salvaneschi 69 B6 JSP Paolo Salvaneschi 69

Passaggio dei dati tra pagine - scope <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <jsp:usebean id="magazzino" scope="request" class="info.magazzinobean" /> <jsp:setproperty name="magazzino" property="*" /> <%-- Nota: l'unico articolo in magazzino è "patate" con codice "p21" --%> <c:choose> <c:when test="${magazzino.stato == 'a_magazzino'}"> <jsp:forward page="rispondi_ok.jsp"> <jsp:param name="info" value="articolo a magazzino"/> </jsp:forward> </c:when> <c:otherwise> <jsp:forward page="rispondi_nok.jsp"> <jsp:param name="info" value="articolo non a magazzino"/> </jsp:forward> </c:otherwise> </c:choose> B6 JSP Paolo Salvaneschi 70 B6 JSP Paolo Salvaneschi 70

Passaggio dei dati tra pagine - scope <%@ page contenttype="text/html" %> rispondi_ok <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <jsp:usebean id="magazzino" scope="request" class="info.magazzinobean" /> <HTML><HEAD></HEAD> <BODY> Accesso alla proprietà del bean con notazione a punto attraverso EL jsp:getproperty Script (espressione) <HR> <BR> <H2><c:out value="${param.info}" /></H2> <font color="red"> Quantità attualmente disponibile:<br> <c:out value="${magazzino.quantità}" /><br> <jsp:getproperty name="magazzino" property="quantità" /><br> <%=magazzino.getquantità()%> </font> </H1><HR> B6 JSP Paolo Salvaneschi 71 B6 JSP Paolo Salvaneschi 71

Passaggio dei dati tra pagine - scope <%--con la dichiarazione <jsp:usebean... tutti e tre i modi funzionano--%> <%--senza <jsp:usebean... funzionano i primi due: le librerie JSTL ritrovano la VARIABILE DI SCOPE "magazzino" nello scope di request--%> <%--ma non funziona il terzo. Infatti il terzo richiede una VARIABILE DI SCRIPTING che contenga il riferimento all'oggetto "magazzino". rispondi_ok L azione <jsp:usebean... Al momento dell esecuzione cerca un bean con lo stesso nome nello scope. Se esiste non crea un istanza nello scope. Crea anche una variabile di scripting che contiene il riferimento all istanza di Bean. L utilizzo dell azione è un modo per creare la variabile di scripting e rendere accessibili le variabili di scope allo script--%> B6 JSP Paolo Salvaneschi 72 B6 JSP Paolo Salvaneschi 72

Passaggio dei dati tra pagine - scope Condivisione dei dati di sessione e applicazione Ogni finestra dell esempio è associata ad una sessione B6 JSP Paolo Salvaneschi 73 B6 JSP Paolo Salvaneschi 73

Passaggio dei dati tra pagine - scope <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html><head><title>counter page</title></head> <body bgcolor="white"> <%-- Increment counters --%> <c:set var="sessioncounter" scope="session" value="${sessioncounter + 1}" /> <c:set var="applcounter" scope="application" value="${applcounter + 1}" /> <h1>counter page</h1> <h2> This page has been visited <i> <c:out value="${sessioncounter}" /> </i> times within the current session, and <i> <c:out value="${applcounter}" /> </i> times by all users since the application was started. </h2> </body> </html> Incrementato ad ogni attivazione da parte dello stesso browser Incrementato ad ogni attivazione dell applicazione web B6 JSP Paolo Salvaneschi 74 B6 JSP Paolo Salvaneschi 74

Passaggio dei dati tra pagine - scope sessione B6 JSP Paolo Salvaneschi 75 B6 JSP Paolo Salvaneschi 75

Passaggio dei dati tra pagine - scope <The following information was received: <ul> <li>request Method: <c:out value="${pagecontext.request.method}" /> <li>request Protocol: <c:out value="${pagecontext.request.protocol}" /> <li>request URL: <c:out value="${pagecontext.request.requesturl}" /> <li>server Port: <c:out value="${pagecontext.request.serverport}" /> <li>remote Host: <c:out value="${pagecontext.request.remotehost}" /> <li>cookies:<br> <c:foreach items="${pagecontext.request.cookies}" var="c"> <b> <c:out value="${c.name}" /></b>: <c:out value="${c.value}" /><br> </c:foreach> </ul> </body> </html> B6 JSP Paolo Salvaneschi 76 B6 JSP Paolo Salvaneschi 76