JSP parte E - Unibg · B6 JSP Paolo Salvaneschi 1 B6_5 V1.11 JSP parte E Applicazioni Internet B...
Transcript of JSP parte E - Unibg · B6 JSP Paolo Salvaneschi 1 B6_5 V1.11 JSP parte E Applicazioni Internet B...
B6 JSP Paolo Salvaneschi 1
B6_5 V1.11
JSP parte E
Applicazioni Internet B
Paolo Salvaneschi
Università di BergamoFacoltà di Ingegneria
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 2B6 JSP Paolo Salvaneschi 2
• Introduzione a XML• Tecnologie XML
– DTD - W3C XML schema– CSS – XSLT - XSL-FO– XPath
• Utilizzo di XML con JSP /tag library– Libreria <X: >– Esempi
INDICE
B6 JSP Paolo Salvaneschi 3B6 JSP Paolo Salvaneschi 3
Introduzione a XML
• Origine e ruolo di XML– eXtensible Markup Language (XML)
(1998 --raccomandazione del W3C)
– Metalinguaggio che permette di rappresentare contenuti testuali organizzati in una gerarchia
– Derivato da SGML (Standard Generalized Markup Language)
B6 JSP Paolo Salvaneschi 4B6 JSP Paolo Salvaneschi 4
<TITLE>Laptop Computer</TITLE><BODY><UL><LI>DELL INSPIRON 7500<LI>650 Mhz<LI>256 Mb<LI>23 Gb<LI>4.1 pounds<LI>$3200</UL></BODY>
Descrizione HTML dei contenuti
Introduzione a XML
<COMPUTER TYPE=“LAPTOP”><MANUFACTURER>DELL</MANUFACTURER><LINE>INSPIRON</LINE><MODEL>7500</MODEL><SPEED>650 Mhz</SPEED><MEMORY>256 Mb</MEMORY><DISK>23 Gb</DISK><WEIGHT UNIT=“POUND”>4.1 </WEIGHT><PRICE CURRENCY=“USD”>3200</PRICE>
</COMPUTER>
Descrizione XML dei contenuti
B6 JSP Paolo Salvaneschi 5B6 JSP Paolo Salvaneschi 5
Introduzione a XML
• Sintassi– Elementi
Un documento XML, è costituito da una struttura gerarchica di elementi distinti mediante una marcatura di inizio e fine<Nome>Mario</Nome>
Gerarchia di tag non sovrapposti
Un elemento può contenere testo, altri elementi, elementi e testo
B6 JSP Paolo Salvaneschi 6B6 JSP Paolo Salvaneschi 6
Introduzione a XML
<Nome>Mario</Nome>
Case sensitive
Composto da caratteri alfanumerici, . , - , _ Inizia con lettera o _
Notazione abbreviata se non c’è un corpo<graphic file="smile.jpg"/>
B6 JSP Paolo Salvaneschi 7B6 JSP Paolo Salvaneschi 7
Introduzione a XML
<note><nota n=”101”>
La riunione del <data>10 marzo</data> viene spostata da <luogo>Londra</luogo> a <luogo>Parigi</luogo>
</nota><nota n=”102”>
La riunione del <data>20 marzo</data> viene annullata</nota>
</note>
Elemento misto: testo + elementi
B6 JSP Paolo Salvaneschi 8B6 JSP Paolo Salvaneschi 8
Introduzione a XML
– AttributiUn elemento può avere degli attributi (proprietà a singolo valore) degli elementi.<Order Key = "23">……..</Order>
– Caratteri specialiSe è necessario inserire un carattere speciale (usato per marcare elementi e attributi in un valore), occorre adottare la codifica seguente:< < > > & & " "
– CommentiSono racchiusi tra <!-- e --> e possono contenere i caratteri speciali.<!-- if x > 0 then -->
B6 JSP Paolo Salvaneschi 9B6 JSP Paolo Salvaneschi 9
<caldata><holiday type="international"><name>New Year's Day</name><date><month>January</month><day>1</day></date>
</holiday><holiday type="personal"><name>Erik's birthday</name><date><month>April</month><day>23</day></date>
</holiday><holiday type="national"><name>Independance Day</name><date><month>July</month><day>4</day></date>
</holiday><holiday type="religious"><name>Religious</name><date><month>December</month><day>25</day></date>
</holiday></caldata>
Calendariodei giorni di festa
Introduzione a XML
B6 JSP Paolo Salvaneschi 10B6 JSP Paolo Salvaneschi 10
Introduzione a XML
Editor: NotepadViewer: Explorer
B6 JSP Paolo Salvaneschi 11B6 JSP Paolo Salvaneschi 11
Introduzione a XML
• Struttura di un documento XML– Prologo
sezione che contiene metadati
– Elemento (o elemento radice)contiene tutti gli elementi e i contenuti che fanno parte del documento
B6 JSP Paolo Salvaneschi 12B6 JSP Paolo Salvaneschi 12
<?xml version="1.0" standalone="no"?>
<!DOCTYPE reminderSYSTEM "/home/reminder.dtd" [
<!ENTITY smile "<graphic file="smile.jpg"/>">]>
<reminder> ⌣ <msg>Smile! It can always get worse.</msg>
</reminder>
Introduzione a XML
Dichiarazione XML
Dichiarazione del tipo di documento
Prologo
DocumentoDichiarazione di entità
Elemento radice
B6 JSP Paolo Salvaneschi 13B6 JSP Paolo Salvaneschi 13
<?xml version="1.0" standalone="no"?>
Nella prima rigaCase sensitiveOrdine dei parametri come sotto
version versione XMLencoding tipo codifica caratteristandalone esistenza di dichiarazioni esterne al documento
Introduzione a XML
Dichiarazione XML
Prologo
B6 JSP Paolo Salvaneschi 14B6 JSP Paolo Salvaneschi 14
<!DOCTYPE reminderSYSTEM "/home/reminder.dtd" [
<!ENTITY smile "<graphic file="smile.jpg"/>">]>
<!DOCTYPE element nome elemento radiceSYSTEM “DTD identifier" DTD (system-specifico del
sistema; public-registrato in modo pubblico)
[ declaration 1 elementi di informazione da
assemblare (es. parti ripetitive)…..
]>
Introduzione a XML
Dichiarazione del tipo di documento
Prologo
Dichiarazione di entità
B6 JSP Paolo Salvaneschi 15B6 JSP Paolo Salvaneschi 15
<reminder> ⌣ <msg>Smile! It can always get worse.</msg>
</reminder>
Introduzione a XML
Documento
Utilizzo dell’entità
B6 JSP Paolo Salvaneschi 16B6 JSP Paolo Salvaneschi 16
Introduzione a XML
• Namespaces– meccanismo attraverso il quale i nomi degli elementi
sono assegnati a gruppi
– Scopo: evitare conflitti di nomi nello scambio di documenti
B6 JSP Paolo Salvaneschi 17B6 JSP Paolo Salvaneschi 17
<?xml version="1.0" ?><catalogoxmlns:abb="http://www.abbindustries.com/"xmlns="http://www.newindustries.com/"
><abb:elemento abb:codice="1327">
<abb:descrizione>caldaia</abb:descrizione>
</abb:elemento><parte >
<descrizione>bruciatore</descrizione></parte>
</catalogo>
Introduzione a XML
Dichiarazioni di Namespaces(attributi di catalogo)•Namespace•Implicit Namespace
Fully qualified name
B6 JSP Paolo Salvaneschi 18B6 JSP Paolo Salvaneschi 18
Tecnologie XML
• Tecnologie XML• Validazione
– DTD (Document Type Definition): primo meccanismo utilizzato. Non nato per descrivere XML
– W3C XML SchemaEstensione. Es. tipi di dati, vincoli sui contenuti
B6 JSP Paolo Salvaneschi 19B6 JSP Paolo Salvaneschi 19
Tecnologie XML
• Tecnologie XML• Formattazione e trasformazione
– CSS– XSLT: W3CeXtensible Stylesheet
Language for Transformation. Linguaggio per la trasformazione di contenuti XML in altri contenuti XML, testuali o HTML
– XSL-FO: eXtensible Stylesheet LanguageFormatting Objects. Linguaggio che definisce una semantica di formattazione di contenuti (es. stampe con formattazioni complesse)
B6 JSP Paolo Salvaneschi 20B6 JSP Paolo Salvaneschi 20
<?xml version="1.0"?><?xml-stylesheet type="text/css" href="esterno_1.css"?><catalogo>
<titolo>Nuova edizione del catalogo</titolo><elemento> Sedia ottocento</elemento><numero>6</numero><elemento> Tavolo Luigi Filippo</elemento><numero>2</numero><elemento> Vetrinetta inglese ottocento</elemento><numero>5</numero>
</catalogo>
Tecnologie XML
B6 JSP Paolo Salvaneschi 21B6 JSP Paolo Salvaneschi 21
esterno_1.css
Tecnologie XML
catalogo{font-family: Times New Roman;font-size: 12pt;color: black;display: block;}
titolo{font-family: Tahoma;font-size: 18pt;color: blue;font-weight: bold;display: block;}
elemento{font-family: Tahoma;font-size: 14pt;color: red;font-weight: bold;display: block;}
B6 JSP Paolo Salvaneschi 22B6 JSP Paolo Salvaneschi 22
Tecnologie XML
• Tecnologie XML• Navigazione
– Un documento XML è un albero di nodi che può essere percorso per raggiungere i nodi ed elaborarli
– XPath: Linguaggio per raggiungere i nodi dell’albero
B6 JSP Paolo Salvaneschi 23B6 JSP Paolo Salvaneschi 23
Tecnologie XML
• Xpath – esempi
<AAA><BBB/> <CCC/> <BBB/> <BBB/> <DDD>
<BBB/> </DDD>
<CCC/> </AAA>
/AAA l’elemento radice
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD>
<BBB/></DDD>
<CCC/> </AAA>
/AAA/DDD/BBB gli elementi BBB figli degli elementi DDD figli dell’elemento radice
B6 JSP Paolo Salvaneschi 24B6 JSP Paolo Salvaneschi 24
Tecnologie XML
<AAA> <BBB/><CCC/> <BBB/> <DDD>
<BBB/></DDD> <CCC>
<DDD> <BBB/><BBB/>
</DDD> </CCC>
</AAA>
//BBB tutti gli elementi BBB
/AAA/CCC/DDD/* Tutti gli elementi identificati dal path precedente
<AAA> <BBB/> <CCC/> <BBB/> <DDD>
<BBB/> </DDD> <CCC>
<DDD> <BBB/> <EEE/>
</DDD> </CCC>
</AAA>
B6 JSP Paolo Salvaneschi 25B6 JSP Paolo Salvaneschi 25
Tecnologie XML
<AAA> <BBB/><BBB/> <BBB/> <BBB/>
</AAA>
/AAA/BBB[1]Il primo figlio BBB dell’elemento AAA
<AAA> <BBB/> <BBB/> <BBB/> <BBB/>
</AAA>
/AAA/BBB[last()]L’ultimo
B6 JSP Paolo Salvaneschi 26B6 JSP Paolo Salvaneschi 26
Tecnologie XML
<AAA> <BBB id = "b1"/> <BBB id = "b2"/><BBB name = "bbb"/> <BBB/>
</AAA>
//BBB[@id]Tutti gli elementi BBB che hanno attributo “id”
<AAA> <BBB id = "b1"/> <BBB id = "b2"/> <BBB name = "bbb"/> <BBB name = "kkk"/><BBB/>
</AAA>
//BBB[@name= "bbb"]Tutti gli elementi BBB che hanno attributo “name” con valore “bbb”
B6 JSP Paolo Salvaneschi 27B6 JSP Paolo Salvaneschi 27
Tecnologie XML
<AAA> <BBB/><CCC/>
</AAA>
/child::AAA/child::BBB
Equivalente di /AAA/BBB
. Il nodo corrente
.. Il nodo genitore
Direzione di percorso dell’albero
B6 JSP Paolo Salvaneschi 28B6 JSP Paolo Salvaneschi 28
Tecnologie XML
<AAA> <BBB>
<DDD> <CCC>
<DDD/> <EEE/>
</CCC> </DDD>
</BBB> <CCC>
<DDD><EEE>
<DDD> <FFF/>
</DDD> </EEE>
</DDD> </CCC>
</AAA>
//CCC/descendant::DDD
Tutti gli elementi DDD che hanno CCC tra i loro avi
Etc………………………
B6 JSP Paolo Salvaneschi 29B6 JSP Paolo Salvaneschi 29
Utilizzo di XML con JSP /tag library
• La tag library < x : >
<x:if><x:choose><x:when><x:otherwise><x:forEach>
<x:parse> <x:transform><x:out><x:set><x:param>
B6 JSP Paolo Salvaneschi 30B6 JSP Paolo Salvaneschi 30
Utilizzo di JSTL
<x:if select="espressioneBooleana XPath">Elementi JSP
</x:if>
• Valuta il corpo solo se l’espressione Xpathspecificata vale true<x:if select="$doc//c">
True se l’insieme dei nodi estratti contiene almeno un nodoFalse se l’insieme è vuoto
B6 JSP Paolo Salvaneschi 31B6 JSP Paolo Salvaneschi 31
Utilizzo di JSTL
• Analogamente a <c: per <x:choose> <x:when> <x:otherwise>
<x:choose>azioni <c:when> ed eventualmente un’azione <c:otherwise>
</x:choose><x:when select="espressioneBooleana XPath">
Elementi JSP</x:when><x:otherwise>
Elementi JSP</x:otherwise>
B6 JSP Paolo Salvaneschi 32B6 JSP Paolo Salvaneschi 32
Utilizzo di JSTL
• Nota:Valore dinamico <x:if select="$doc//c">
statico <x:if select=".//d">– Le espressioni Xpath sono accettate solo nell’attributo select– Non devono essere racchiuse tra ${………} (come per
espressioni EL) - solo normali apici– Le variabili possono apparire in qualunque posizione in
un’espressione Xpath e iniziano con un carattere $ es. $doc– Non sono riconosciuti gli operatori di accesso alle proprietà e
agli elementi di EL ( . e [] ) (es. myBean.myProperty)– Le variabili implicite EL sono disponibili alle espressioni Xpath
con sintassi diversa (: anziché .)es. $param:myParam (in EL: param.myParam) -- parametro della request
B6 JSP Paolo Salvaneschi 33B6 JSP Paolo Salvaneschi 33
Utilizzo di JSTL
<x:forEach select="espressioneXPath" [var="var"] >Elementi JSP
</x:forEach>
• Valuta il corpo una volta per ciascun nodo presente nel risultato di un’espressione Xpath.
• Sul nodo corrente è impostato il nodo di contesto utilizzato dalle azioni nidificate(con XPath: ". Il nodo corrente " vedi esempio 4 )
• var - nome della variabile nidificata che detiene l’elemento corrente
B6 JSP Paolo Salvaneschi 34B6 JSP Paolo Salvaneschi 34
Utilizzo di JSTL
<x:out select="espressioneXPath"/>
Valuta l’espressione e inserisce il risultato nella risposta
<x:set select="espressioneXPath" var="var"
[scope= "page|request|session|application" ] />Imposta una variabile di scope sul valore di un’espressione XPath
B6 JSP Paolo Salvaneschi 35B6 JSP Paolo Salvaneschi 35
Utilizzo di JSTL
<x:parse xml="DocumentoXML" [var= " var "| varDom= " var "]/>
<x:parse [var= " var " | varDom= " var "]>DocumentoXML
</x:parse>
Esegue il parsing di un documento XML (String o java.io.Reader) e salva il risultato in un’oggetto dipendente dall’applicazione (struttura dati utilizzata dalle altre azioni XML della JSTL)Alternativamente può salvare il risultato in un oggetto DOM (org.w3c.dom.Document) per elaborazioni con codice specifico
B6 JSP Paolo Salvaneschi 36B6 JSP Paolo Salvaneschi 36
Utilizzo di JSTL
<x:transform>Trasforma un documento XML utilizzando un foglio di stile XSLT
<x:param> Fornisce un valore per un parametro utilizzato in un foglio di stile XSLT
B6 JSP Paolo Salvaneschi 37B6 JSP Paolo Salvaneschi 37
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title>JSTL: XML Support -- Parse / Out</title></head><body bgcolor="#FFFFFF"><h3>Parse / Out</h3><x:parse var="doc"><a>
<b><c>testo 1
</c></b><d>testo 2
</d></a>
</x:parse><x:out select="$doc//c"/><x:out select="$doc//d"/><hr /></body></html>
Utilizzo di XML con JSP /tag library
Esempio 1
B6 JSP Paolo Salvaneschi 38B6 JSP Paolo Salvaneschi 38
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title></title></head><body bgcolor="#FFFFFF"><h3>Parse / Set / Out</h3><x:parse var="doc"><a><b><c>testo 1--c
</c></b><d>
<e>testo 2--e</e><f>testo 3--f</f>
</d></a></x:parse>……….
Utilizzo di XML con JSP /tag library
……….
<x:set var="elementod" select="$doc//d"/>
<x:out select=" $elementod/f "/>
<hr /></body></html>
Estrae l’albero <d>
Trova l’elemento <f> nell’albero <d>
Esempio 2
B6 JSP Paolo Salvaneschi 39B6 JSP Paolo Salvaneschi 39
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title></title></head><body bgcolor="#FFFFFF"><h3>Parse / If</h3><x:parse var=“doc"><a>
<b><c>testo 1</c>
</b><d>
testo 2</d>
</a></x:parse>…………
……..<x:if select="$doc//c">$doc//c exists
</x:if><br><x:if select="$doc/a/d">$doc/a/d exists
</x:if><br><x:if select="$doc/w/o/l">$doc/w/o/l exists
</x:if><hr></body></html>
Non esiste
Utilizzo di XML con JSP /tag library
Esempio 3
B6 JSP Paolo Salvaneschi 40B6 JSP Paolo Salvaneschi 40
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title></title></head><body bgcolor="#FFFFFF"><h3>Parse / ForEach</h3><x:parse var="document"><doc><a>
<b>testo 1</b></a><a>
<c>testo 2</c></a><a>
<d>testo 3</d></a><a>
<d>testo 4</d></a></doc></x:parse>
Utilizzo di XML con JSP /tag library
Esempio 4
B6 JSP Paolo Salvaneschi 41B6 JSP Paolo Salvaneschi 41
………….<x:forEach select="$document//a">elemento trovato--- <x:out select="."/><br />
</x:forEach><hr /><x:forEach select="$document//a"><x:if select=".//d">
elemento trovato tipo d--- <x:out select="."/><br />
</x:if></x:forEach>
</body></html>
Utilizzo di XML con JSP /tag library
Nodo corrente dell’iterazione
B6 JSP Paolo Salvaneschi 42B6 JSP Paolo Salvaneschi 42
<?xml version="1.0"?><a><b><c>testo 1--c
</c></b><d>
<e>testo 2--e</e><f>testo 3--f</f>
</d></a>
Utilizzo di XML con JSP /tag library
Import e parsingdi un file esterno
Risultato
Esempio 5
B6 JSP Paolo Salvaneschi 43B6 JSP Paolo Salvaneschi 43
<%@ page contentType="text/html" %><%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title>Import / Parse / Set / Out</title>
</head><body bgcolor="#FFFFFF"><h3>Parse / Set / Out</h3><c:import url="testo.xml" varReader="xmlSource">
<x:parse var="doc" xml="${xmlSource}"/></c:import><x:set var="elementod" select="$doc//d"/><x:out select="$elementod/f"/><hr></body></html>
Utilizzo di XML con JSP /tag library
Index.jsp
Il contenuto importato èreso disponibile all’azione nidificata tramite un java.io.Reader
Valore dinamico EL
B6 JSP Paolo Salvaneschi 44B6 JSP Paolo Salvaneschi 44
Utilizzo di JSTL
<c:import> Importa una risorsa interna (all’applicazione web) (come <jsp:include>) o esterna
• Salvando il contenuto come String (nella variabile var)<c:import url="url" var="var"/>
• Rendendo disponibile ad azioni annidate il contenuto tramite java.io.Reader
<c:import url="url" varReader="varReader" >azioni che utilizzano il Reader
</c:import>
B6 JSP Paolo Salvaneschi 45B6 JSP Paolo Salvaneschi 45
Utilizzo di JSTL
Esempio 6
B6 JSP Paolo Salvaneschi 46B6 JSP Paolo Salvaneschi 46
Utilizzo di JSTL
<%@ page contentType="text/html" %><%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %><%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %><html><head><title>Elabora ordine</title></head><body bgcolor="#FFFFFF"><c:import url="ordine.xml" varReader="xmlSource">
<x:parse var="document" xml="${xmlSource}"/></c:import>
…………………..
B6 JSP Paolo Salvaneschi 47B6 JSP Paolo Salvaneschi 47
Utilizzo di JSTL
……………….
<h1>Ordine ricevuto</h1><hr>Protocollo N.----<x:out select="$document/ordine/protocollo"/> <br>Ente emittente----<x:out select="$document/ordine/enteEmittente"/> <br>
<hr><h2>Elenco parti</h2><hr><x:forEach select="$document//descrizione">elemento--- <x:out select="."/><br></x:forEach><hr>
</body></html>
B6 JSP Paolo Salvaneschi 48B6 JSP Paolo Salvaneschi 48
Utilizzo di JSTL
………………<c:import url="ordine.xml" varReader="xmlSource">
<x:parse var="document" xml="${xmlSource}"/></c:import>………………….
Modi alternativi di importare il file xml
Salvando il contenuto come String (nella variabile var)
Rendendo disponibile ad azioni annidate il contenuto tramite java.io.Reader
…………………. <c:import url="ordine.xml" var="xmlSource"/><x:parse var="document" xml="${xmlSource}"/>………………….
B6 JSP Paolo Salvaneschi 49B6 JSP Paolo Salvaneschi 49
Utilizzo di JSTL
Esercizio:Aggiungere all’ultimo esempio di utilizzo di database una funzione di import da file XML