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



Documenti analoghi
Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Servizio Feed RSS del sito CNIT

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

Laboratorio di sistemi JSTL e database Jsp [NetBeans]

Laboratorio di sistemi Prima Web Application JSP [Java]

<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body>

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

SOMMARIO... 3 INTRODUZIONE...

Registratori di Cassa

Esercitazione 4 JDBC

Laboratorio di sistemi SELECT e checkbox Jsp [Java]

Corso di HTML. Prerequisiti. Modulo L3. 1-Concetti generali. Browser Rete Internet Client e server. M. Malatesta 1-Concetti generali-12 28/07/2013

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Progetto di Ingegneria del Software 2. SWIMv2

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Manuale utente Volta Control

Tale attività non è descritta in questa dispensa

Guida all'uso del CMS (Content Management System, Sistema di Gestione dei Contenuti)

MANUALE D USO DELLA PIATTAFORMA ITCMS

GUIDA ALL USO DELL AREA RISERVATA

Aggiornamento database versione Aggiornamento procedure: - SD.98 (Anagrafe / Elettorale) versione SAIA-AP5 versione 2.0.

MANUALE PORTALE UTENTE IMPRENDITORE

Software per la diagnostica dei file batch

Introduzione a JSP (Java Server Pages) MC 2005

Al giorno d oggi, i sistemi per la gestione di database

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

GUIDA UTENTE PRIMA NOTA SEMPLICE

Database 1 biblioteca universitaria. Testo del quesito

SW Legge 28/98 Sommario

XFACILE / XTOTEM Pagina 1. Procedure guidate Facile

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

Esercitazione n. 10: HTML e primo sito web

2015 PERIODO D IMPOSTA

Manuale Utente Amministrazione Trasparente GA

Analisi e sviluppo di un componente per un ESB open source

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

Esercizi di JavaScript

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

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Versione 2.0. Manuale d uso. Software per la gestione. degli applicativi Bticino. TiManager 03/07-01 PC

Sistema Gestionale FIPRO. Dott. Enea Belloni Ing. Andrea Montagnani

(Tasto Svuota file) Il tasto Svuota file elimina tutti i record presenti nel database.

Guida all uso della piattaforma. portale Weblog & Podcast del MIUR COME UTILIZZARE AL MEGLIO L AMMINISTRAZIONE DEL BLOG

GESGOLF SMS ONLINE. Manuale per l utente

istruzioni per l uso

Tabelle di riferimento Pulsanti Inserire documento Predisposizione doc Approvazione Doc Numerazione Doc Pubblicazione Albo Webservice

I Preferiti. Elenco dei Preferiti

Esercizio data base "Biblioteca"

MANUALE OPERATIVO. Sistema di Gestione Contenuti

COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE

19. LA PROGRAMMAZIONE LATO SERVER

Una metodologia di progettazione di applicazioni web centrate sui dati

MANUALE OPERATIVO PROGRAMMA DI GESTIONE DATI ARTERITE VIRALE EQUINA.

Let's start! File > New Project > Ruby > Ruby on Rails Application (events)

Istruzioni di accesso alla propria casella di posta elettronica tramite Zimbra Web Mail

DBMS (Data Base Management System)

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Guida di Pro Spam Remove

Consiglio regionale della Toscana. Regole per il corretto funzionamento della posta elettronica

Dispensa di database Access

SU Suap. IS357_03_01 Lettera aggiornamento SUAP vers Pagina 1 di 10

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

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

Progetto: Servizio location based per la ricerca di punti di interesse

PROCEDURA DI CHIUSURA ANNO FISCALE 2006 CON E-SHOP

Eliminare i contatti duplicati in MS Outlook

Database Manager Guida utente DMAN-IT-01/09/10

UTILIZZO DEL MODULO DATA ENTRY PER L IMPORTAZIONE DEI DOCUMENTI (CICLO PASSIVO)

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Concetti fondamentali dei database database Cos'è un database Principali database

Procedura SMS. Manuale Utente

Manuale Utente Albo Pretorio GA

Come installare e configurare il software FileZilla

Applicazione JobScheduler su DB SQL Milano, lì 14/09/2009

Istruzioni per il download e l'utilizzo del browser tariffe per Microsoft Windows 7 e Mozilla Firefox

La Skills Card relativa alle certificazioni Nuova ECDL è svincolata dalla singola certificazione.

Artigiani di Podcast. Lezione del 8 febbraio Fabio P. Corti

Sistema Informativo Veterinario Regionale. Applicazione Interrogazione per Allevatori

REOL-Services Quick Reference Ver. 1.1 Tecno Press Srl. 1

CONDOMINIO MOBI. Per farlo, basta cliccare sul pulsante di pubblicazione dati nella buttonbar

Installazione e configurazione di Java DB in Windows (7)

INDICE. IL CENTRO ATTIVITÀ... 3 I MODULI... 6 IL MY CLOUD ANASTASIS... 8 Il menu IMPORTA... 8 I COMANDI DEL DOCUMENTO...

Manuale d'uso del Connection Manager

La tecnologia ASP.NET e i database

GateManager. 1 Indice. tecnico@gate-manager.it

RSS. Si sente parlare, anzi si vedono spuntare sempre più spesso siti che offrono i cosiddetti feed RSS.

ISTRUZIONI PER L UTILIZZO DELLA SCHEDA INFORMATIZZATA E MODALITA DI INVIO DEI DATI - L. R. 162/98 PROGRAMMA

EXPLOit Content Management Data Base per documenti SGML/XML

hiclot Manuale utente del software

Le query di raggruppamento

X-Letter Gestione Newsletter (versione template o landing pages)

GUIDA UTENTE MONEY TRANSFER MANAGER

Linea guida di inserimento dati Antiriciclaggio-XP DM-143

Transcript:

Nel caso di una lista: <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 9</title> </head> <body> <h3>prova 9</h3> <c:set var="personaggimadagascar2" value="alex, Melman, Marty, Gloria, Moto Moto, Re Julien & Maurice, I pinguini, Le scimmie"/> I personaggi del film Madagascar 2<br/> <c:foreach var="personaggio" items="${personaggimadagascar2}"> Un personaggio del film Madagascar è <c:out value="${personaggio}"/><br/> </c:foreach> </body> </html> Questa volta l'output riporta gli elementi della lista nell'ordine di caricamento (nel caso degli HashSet, l'ordine degli elementi dipende dalla funzione di hashing): Fig. 1 Uso di una lista nelle JSTL JSTL-parte2.pdf Pag. 1/14 Cozzetto

Azioni c:import, x:parse, x:out E' possibile effettuare facilmente il parsing (analisi sintattica) di un file XML e determinare porzioni di un documento XML mediante il linguaggio XPath (lo studio di XPath è al di fuori degli scopi del presente articolo). Sfortunatamente NetBeans non include il supporto per le librerie XPath per cui dobbiamo cercarle su Internet e importarle dall'esterno. Il supporto per XPath è fornito normalmente dalla libreria Java xalan.jar. Puntiamo allora il browser alla URL http://apache.fagioli.biz/xml/xalan-j/e preleviamo il file xalan-j_2_7_1-bin-2jars.zip. Scompattiamolo il file zip sul desktop e nella cartella ottenuta cerchiamo il file xalan.jar. Nella cartella di sistema del nostro progetto, WEB-INF, creiamo ora la sottocartella lib e al suo interno copiamo il file xalan.jar. A questo punto, le funzionalità del pacchetto xalan.jar sono attive. File games.xml <?xml version="1.0" encoding="iso-8859-1"?> <games> <country id="luxembourg"> <athlete> <name>lux 1</name> <sport>swimming</sport> <age>23</age> <gender>m</gender> </athlete> <athlete> <name>lux 2</name> <sport>wrestling</sport> <age>31</age> <gender>m</gender> </athlete> </country> <country id="denmark"> <athlete> <name>den 1</name> <sport>cycling</sport> <age>18</age> <gender>f</gender> </athlete> <athlete> <name>den 2</name> <sport>sailing</sport> <age>27</age> <gender>m</gender> </athlete> </country> </games> JSTL-parte2.pdf Pag. 2/14 Cozzetto

File prova10.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 10</title> </head> <body> <h3>prova 10</h3> <c:import var="docstring" url="games.xml"/> <x:parse var="doc" doc="${docstring}"/> <c:out value="${docstring}"/> <br/> <br/> <b>$doc//sport</b> <x:out select="$doc//sport"/><br/> <b>$doc/games/country/*</b> <x:out select="$doc/games/country/*"/><br/> <b>$doc//*</b> <x:out select="$doc//*"/><br/> <b>$doc/games/country</b> <x:out select="$doc/games/country"/><br/> <b>$doc/games/country[last()]</b> <x:out select="$doc/games/country[last()]"/><br/> <b>$doc//@id</b> <x:out select="$doc//@id"/><br/> <b>$doc//country[@id='denmark']</b> <x:out select="$doc//country[@id='denmark']"/><br/> </body> </html> JSTL-parte2.pdf Pag. 3/14 Cozzetto

Fig. 2 Output del file prova10.jsp RSS (Estratto da http://it.wikipedia.org/wiki/really_simple_syndication) RSS (acronimo di RDF Site Summary ed anche di Really Simple Syndication) è uno dei più popolari formati per la distribuzione di contenuti Web; è basato su XML, da cui ha ereditato la semplicità, l'estensibilità e la flessibilità. RSS definisce una struttura adatta a contenere un insieme di notizie, ciascuna delle quali sarà composta da vari campi (nome autore, titolo, testo, riassunto,...). Quando si pubblicano delle notizie in formato RSS, la struttura viene aggiornata con i nuovi dati. Sviluppo RSS fu lanciato per la prima volta dal portale My Netscape e fu subito un grande successo: in breve, centinaia di fornitori di contenuti aderirono all'iniziativa e il portale My Netscape poté beneficiare di una vasta raccolta di notizie a disposizione dei propri utenti registrati. Nel frattempo, lo stesso formato fu adottato progressivamente dalla comunità dei blogger: i post di un blog potevano essere facilmente esportati in RSS, in modo da essere resi disponibili a servizi di raccolta di contenuti. La popolarità dei blog è forse una delle ragioni principali del successo di RSS: migliaia di blog iniziarono a produrre contenuti in RSS e iniziarono a proliferare siti che raccoglievano una selezione di post dai blog più seguiti (i cosiddetti blog aggregator) e programmi per fruire i contenuti di un blog direttamente sul proprio desktop o su altri dispositivi (RSS reader). Oggi RSS è lo standard de facto per l'esportazione di contenuti Web. I principali siti di informazione, i quotidiani online, i fornitori di contenuti, i blog più popolari hanno adottato il formato RSS. JSTL-parte2.pdf Pag. 4/14 Cozzetto

Fruizione di un feed RSS Le modalità più diffuse sono due: attraverso appositi software che interpretano un flusso di contenuti XML (detto anche feed RSS o documento RSS, in pratica un file XML) permettendo agli utenti di visualizzarne i contenuti, o integrando i contenuti del feed all'interno di un sito Web. Come viene interpretato un documento RSS Un'applicazione in grado di interpretare un documento RSS ne effettua il parsing, ovvero una scansione del documento che individua i tag e isola i diversi elementi, per poi convertire i contenuti decodificati in qualche altro formato: ad esempio un feed reader può estrarre i titoli di tutti gli elementi item per visualizzare la lista degli articoli di un giornale online, mentre un aggregatore Web può estrarre i contenuti del feed per convertirli in linguaggio HTML e incorporarli all'interno delle proprie pagine. (Fine) Proviamo a scrivere un mini-lettore di feed RSS web in Java. Procuriamoci un documento RSS particolarmente significativo, quello del sito della CNN, all'indirizzo http://rss.cnn.com/rss/edition.rss. Fig. 3 Il file edition.rss interpretato dal browser Firefox Per vedere il file XML, selezionare dal menu di Firefox Visualizza > Sorgente pagina. File prova11.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %> JSTL-parte2.pdf Pag. 5/14 Cozzetto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 11</title> </head> <body> <h3>prova 11</h3> <c:import var="docstring" url="http://rss.cnn.com/rss/edition.rss"/> <x:parse var="doc" doc="${docstring}"/> <p><x:out select="$doc//title"/></p> <p><x:out select="$doc//description"/></p> <p><x:out select="$doc//url"/></p> <p><img src="<x:out select='$doc//url'/>"/></p> <!-- visualizziamo solo la prima news per semplicità --> <p> <x:out select="$doc/rss/channel/item[1]/title"/><br/> <x:out select="$doc/rss/channel/item[1]/guid"/><br/> <x:out select="$doc/rss/channel/item[1]/link"/><br/> <x:out select="$doc/rss/channel/item[1]/description"/><br/> <x:out select="$doc/rss/channel/item[1]/pubdate"/><br/> </p> </body> </html> Fig. 4 L'output del programma prova11.jsp JSTL-parte2.pdf Pag. 6/14 Cozzetto

I18N Per internazionalizzazione (i18n perchè sono 18 i caratteri tra le iniziali della parola inglese internazionalization) o localizzazione (l10n, localization) intendiamo quel processo con cui vengono identificati tutti quegli elementi che possono cambiare in lingue e culture differenti (formato delle date, delle valute ecc). Un programma localizzato in italiano ad esempio fornisce tutti quegli elementi che l'utenza italiana si aspetta come le date nel formato gg/mm/aaaa e il simbolo per la valuta. Fig. 5 Output del programma prova12.jsp File prova12.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 12</title> </head> <body> <h3>prova 12</h3> <c:set var="importo" value="34.87"/> L'importo vale <fmt:formatnumber value="${importo}" type="currency"/><br/> <jsp:usebean id="oggi" class="java.util.date"/> Data di oggi <fmt:formatdate value="${oggi}" datestyle="full" type="date"/ ><br/> Sono le <fmt:formatdate value="${oggi}" timestyle="full" type="time"/> </body> </html> JSTL-parte2.pdf Pag. 7/14 Cozzetto

Functions La libreria Functions contiene una serie di funzioni di utilità generale, come ad esempio funzioni per estrarre sottostringhe, per eliminare gli spazi, rimpiazzare caratteri in una stringa ecc. Fig. 6 L'output del programma prova13.jsp File prova13.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 13</title> </head> <body> <h3>prova 13</h3> <c:set var ="anagrafica1" value="antonio De Pascale" /> <c:set var ="anagrafica2" value="maurizio Cozzetto" /> <c:set var="partecognome" value="de" /> <c:if test="${fn:containsignorecase(anagrafica1, partecognome)}"> Trovato ${anagrafica1} </c:if> <c:if test="${fn:containsignorecase(anagrafica2, partecognome)}"> Trovato ${anagrafica2} </c:if> </body> </html> JSTL-parte2.pdf Pag. 8/14 Cozzetto

SQL Query di lettura L'ultima libreria che prendiamo in considerazione consente l'accesso a database relazionali. Con essa possiamo gestire la connessione a un database, per esempio MySQL, l'esecuzione di query di lettura o di aggiornamento, le transazioni ecc. Ricordiamo tuttavia che questa libreria è adatta solo allo sviluppo di prototipi di applicativi basati su database mentre in generale per le applicazioni distribuite mission critical occorre ricorrere a tecniche più sofisticate (ad esempio sfruttando il design pattern MVC, si legga l'articolo corrispondente nella sezione Java, Applicazioni web, chiave di ricerca MVC versione 2). Ricordiamo inoltre che occorre inserire nel nostro progetto i driver relativi a MySQL (Tasto destro del mouse sul progetto > (Categories) Libraries > Pulsante Add Library... > MySQL JDBC Driver > Pulsante OK). Per maggiori informazioni sulla gestione in Java dei database, leggere i due articoli Fondamenti di JDBC- Parte1 e Fondamenti di JDBC-Parte2 nella sezione Java > Applicazioni console, oppure ricercare i due articoli mediante la chiave di ricerca jdbc. Fig. 7 Lettura della tabella libri_tbl del database MySQL biblio_db (Xampp è in esecuzione) File prova14.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 14</title> </head> JSTL-parte2.pdf Pag. 9/14 Cozzetto

<body> <h3>prova 14</h3> <c:catch var="ex"> <sql:setdatasource driver="com.mysql.jdbc.driver" url="jdbc:mysql://localhost:3306/biblio_db" user="prova" password="prova" /> <sql:query var="result"> SELECT * FROM libri_tbl </sql:query> <c:foreach var="row" items="${result.rows}"> <c:out value="${row.isbn}" /> <c:out value="${row.titolo}"/><br/> </c:foreach> </c:catch> <c:choose> <c:when test="${ex!=null}"> Attenzione si è verificato il seguente errore <c:out value="${ex.message}"/> </c:when> <c:otherwise> Tutto ok. Si prosegue. </c:otherwise> </c:choose> </body> </html> Se invece Xampp non è in esecuzione, o i driver non sono quelli richiesti, oppure la password non coincide o la query è sbagliata ecc, l'applicativo restituisce un messaggio di errore. Fig. 8 Qui è stato cambiato il nome del driver Query di aggiornamento Possiamo inserire, aggiornare o cancellare record (eventualmente usare anche le CREATE del linguaggio SQL) mediante l'azione sql:update. JSTL-parte2.pdf Pag. 10/14 Cozzetto

Fig. 9 Inserito un nuovo record (il secondo nella figura) File prova15.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>prova 15</title> </head> <body> <h3>prova 15</h3> <c:catch var="ex"> <sql:setdatasource driver="com.mysql.jdbc.driver" url="jdbc:mysql://localhost:3306/biblio_db" user="prova" password="prova" /> <sql:update var="result"> INSERT INTO libri_tbl(isbn,titolo) VALUES ("11-111-1111-1","Prova") </sql:update> <sql:query var="result"> SELECT * FROM libri_tbl </sql:query> <c:foreach var="row" items="${result.rows}"> <c:out value="${row.isbn}" /> <c:out value="${row.titolo}"/><br/> </c:foreach> </c:catch> JSTL-parte2.pdf Pag. 11/14 Cozzetto

<c:choose> <c:when test="${ex!=null}"> Attenzione si è verificato il seguente errore <c:out value="${ex.message}"/> </c:when> <c:otherwise> Tutto ok. Si prosegue. </c:otherwise> </c:choose> </body> </html> Se tentiamo di reinserire il record con la stessa chiave, rieseguendo il codice precedente non possiamo farlo, dal momento che esiste già un record con la stessa chiave. Fig. 10 Entry duplicata per la tabella libri_tbl Cancelliamo il record appena inserito sempre con l'azione sql:update JSTL-parte2.pdf Pag. 12/14 Cozzetto

Fig. 11 Cancellazione effettuata con successo Per semplicità, riportiamo solo la query di aggiornamento, visto che il codice del programma prova16.jsp differisce solo di poco dal codice del programma prova15.jsp. <sql:update var="result"> DELETE FROM libri_tbl WHERE isbn="11-111-1111-1" </sql:update> Per quanto riguarda l'aggiornamento di un record, procediamo in maniera analoga. Le azioni necessarie sono simili alle seguenti. <sql:update var="result"> UPDATE libri_tbl SET titolo="c#: la Bibbia, Volume II" WHERE isbn="85-666-6392-4" </sql:update> JSTL-parte2.pdf Pag. 13/14 Cozzetto

Fig. 12 Il record è stato aggiornato (il terzo partendo dall'altro) JSTL-parte2.pdf Pag. 14/14 Cozzetto