Torna alla pagina di Tecnologie Web
:: Appello d'esame di Tecnologie Web - 10/06/2008 ::
Esercizio 1
Considerando il seguente documento XML:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://bpms.intalio.com/FirstProcess/Time"
xmlns:ns="http://bpms.intalio.com/FirstProcess/Time"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="TimeRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="city" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TimeResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="UTCTime" type="xs:string"/>
<xs:element name="cityTime" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
1.a Definite il tipo di documento.
SOLUZIONE
Questo documento è un XML Schema, che definisce quali sono gli elementi presenti nel documento XML a cui è legato e quali sono le loro caratteristiche.
1.b Descrivete in linguaggio naturale il significato di quanto espresso nel documento.
SOLUZIONE
L'elemento radice dell'XML Schema è il tag xs:schema che contiene:
Nel documento è presente un elemento TimeRequest che è un tipo complesso formato da una sequenza ordinata di elementi city di tipo stringa.
E' presente anche un elemento TimeResponse anche questo di tipo complesso e formato da una sequenza ordinata di due elementi: UTCTime e cityTime entrambi di tipo stringa.
Esercizio 2
Considerando il seguente frammento XSLT:
<xsl:template match="/">
<html>
…
<body>
<table>
<tr>
<td>Data:</td>
<td>Mittente:</td>
<td>Messaggio:</td>
</tr>
<xsl:call-template name="list" />
</table>
</body>
</html>
</xsl:template>
<xsl:template name="list">
<xsl:for-each select="/mailbox/message">
<tr>
<td><xsl:value-of select="@date" /></td>
<td> <xsl:value-of select="from" /></td>
<td><xsl:value-of select="content" /></td>
</tr>
</xsl:for-each>
</xsl:template>
2.a Scrivete un’istanza XML compatibile con le regole di trasformazione descritte.
SOLUZIONE
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="2008-06-10es2.xsl"?>
<mailbox>
<message date="10/06/2008">
<from>Cthulhu</from>
<content>
Sono stufo di aspettare nella Città Sommersa!!!
</content>
</message>
<message date="06/06/1666">
<from>Ramses</from>
<content>
Pota!!
</content>
</message>
</mailbox>
2.b Scrivete un insieme di regole di trasformazione differente che produca comunque lo stesso output.
SOLUZIONE
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/mailbox">
<html>
<head><title>Esercizio 2</title></head>
<body>
<table bgcolor="grey">
<tr>
<td>Data:</td>
<td>Mittente:</td>
<td>Messaggio:</td>
</tr>
<xsl:for-each select="message">
<tr>
<td><xsl:value-of select="@date" /></td>
<td> <xsl:value-of select="from" /></td>
<td><xsl:value-of select="content" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Esercizio 3
3.a Spiegate la differenza tra i due più diffusi parser XML: SAX e DOM.
SOLUZIONE
DOM (Document Object Model): definisce interfacce, proprietà e metodi per manipolare documenti XML.
SAX (Simple API for XML): è un’interfaccia per leggere e manipolare file XML (quindi è un'API basata su eventi per il parsing di documenti XML).
Differenze:
- modalità di interazione tra le API(Application Programming Interface) e l’applicazione che ne fa uso.
In DOM è indispensabile leggere e sottoporre a parsing tutto il documento prima che il relativo modello a oggetti possa essere messo a disposizione di un'applicazione DOM. Ciò comporta che l'intero documento venga mantenuto in memoria e questo provoca un overhead non indifferente. Questo aspetto rende DOM poco adatto per applicazioni di trasformazione di documenti o per applicazioni che richiedano il parsing incrementale dei dati, come i protocolli di comunicazione e scambio di messaggi. DOM infatti non fornisce alcun supporto esplicito per effettuare il parsing di documenti o la serializzazione di nuovi documenti verso dispositivi di memorizzazione esterni.
In SAX ogni volta che il parser incontra un tag iniziale, un tag finale, dei dati di tipo carattere oppure un'istruzione di elaborazione, lo comunica direttamente al programma client, di conseguenza non bisogna aspettare che l'intero documento venga letto prima di poter agire sui dati presenti all'inizio del documento, perché il documento stesso viene passato al programma pezzo per pezzo, dall'inizio alla fine. Quindi non è necessario che l'intero documento risieda in memoria (cosa che invece avviene con DOM).
Questo comporta - memoria, - tempo di caricamento, + tempo per singolo accesso.
3.b Spiegate brevemente i problemi legati alla codifica dei caratteri dei formati di testo.
SOLUZIONE
La globalizzazione di Internet ha proposto il problema di rendere correttamente gli alfabeti di migliaia di lingue nel mondo.
Il problema si pone per i dati scambiati dai protocolli, in quanto deve essere non ambiguo il criterio di associazione di un blocco di bit ad un carattere di un alfabeto.
Come trasmettere un messaggio con uno strumento in grado di trasmettere solo punti e linee? Ovviamente è necessaria una codifica: ad ogni carattere associamo un numero che trasmettiamo o, nel nostro caso, memorizziamo.
Una codifica che si affermò in modo universale fu quella standard ASCII (1963), che comprendeva 128 caratteri (7 bits) tra cui alcuni caratteri di controllo che erano utilizzati per le trasmissioni e la gestione del terminale. 128 caratteri non sono molti ma erano sufficienti per codificare la lingua inglese che non usa le lettere accentate.
Per permettere la codifica di lingue che utilizzano molti caratteri accentati lo standard ASCII fu esteso a 8 bits.
Per semplificare le comunicazioni nell'era dell'informatizzazione globale è stata introdotta una codifica detta UNICODE in cui si arrivano ad utilizzare fino a 32 bits per carattere: è possibile rappresentare anche tutti gli ideogrammi cinesi.
Esercizio 4
Cosa si intende per deployment? Spiegare lo schema generale del descrittore del deployment.
SOLUZIONE
Fare il deploying dell'applicazione web significa istruire il container riguardo all'esistenza dell'applicazione (ad esempio con Tomcat lo riavviamo facendo stop e start).
Per tutte le servlet si deve effettuare il deploying perché siano disponibili agli utenti.
Il descrittore del deployment, web.xml, descrive una applicazione Web, che può contenere servlet, JSP, classi Java, JAR, file HTML...
Deve contenere tutte le definizioni necessarie per l’applicazione, tra cui:
- lista di servlet: utilizza l'elemento servlet. All'interno di una servlet possono essere contenute più servlet name, indi il fatto che un servlet mapping poi si riferisca a una determinata servlet name dipende dal fatto che esse sono uguali.
- URL associata all'invocazione di ogni servlet: utilizza l'elemento servlet-mapping, che quindi associa una URL alla servlet.
Richiede:
- <servlet-name>: elemento che identifica il nome della servlet precedentemente dichiarata.
- <url-pattern>: elemento che definisce il pattern usato per determinare quale servlet debba essere invocata.
Esercizio 5
Quali sono gli elementi di script di una JSP?
SOLUZIONE
Le JSP sono formate da codice HTML + frammenti di codice Java. Le componenti di una JSP sono gli elementi ed i template.
I template sono le parti di codice statico.
Gli elementi sono le parti di codice dinamico e si dividono in 3 categorie:
- Elementi di script: metodo più semplice per rendere dinamica una pagina. Si suddivide a sua volta in 3 parti:
- scriptlet: frammenti di codice Java. Definiti <% codice Java%>, adatti per i cicli, condizioni e funzionalità semplici.
- espressioni: stringhe di testo dinamiche. Definite <%= codice Java %>. Qualunque sia il tipo di dati del risultato di un’espressione viene sempre convertito dal metodo toString prima di essere inviato al client.
- dichiarazioni: frammenti di codice Java utilizzato per definire nuovi metodi o variabili globali. Definite da <%! codice Java%>. Vengono eseguite prima di _jspService().
Esercizio 6
Commentare dettagliatamente il seguente pezzo di codice:
<%! int pagecount = 0;
void addcount() {
pagecount++;
}
%>
<html>
<head>
<title> PageCounter.jsp </title>
</head>
<body>
<% addcount(); %>
Pagina visitata <%= pagecount %> volte
</body>
</html>
SOLUZIONE
Il pezzo di codice sopra riportato crea una pagina jsp in cui viene detto quante volte la pagina stessa è stata visitata. Viene inizializzata la variabile pagecount e iniziato il metodo addcount, poi inizia il codice html per generare la pagina. All'interno del body della pagina viene invocato tramite uno scriptlet il metodo addcount poi viene visualizzata la scritta con quante volte la pagina è stata visitata tramite l'espressione <%=pagecount %> che dà come output il valore di pagecount.
6a. Cos’è una dichiarazione in JSP?
SOLUZIONE
Le JSP sono formate da codice HTML + frammenti di codice Java. Le componenti di una JSP sono gli elementi ed i template.
Gli elementi contengono gli elementi di script (utilizzati per rendere una pagina dinamica) che contengono a loro volta le dichiarazioni.
Le dichiarazioni sono frammenti di codice Java utilizzato per dichiarare nuovi metodi o classi o variabili globali. Definite da: <%! codice Java %>. Vengono eseguite PRIMA di _jspService().
6b. Che conseguenze comporta il fatto che una dichiarazione venga eseguita prima di _jspService()?
SOLUZIONE
Tutto ciò che è prima di _jspService(), non è tradesafe; ciò vuol dire che non ci sono controlli sulla concorrenza.
Torna alla pagina di Tecnologie Web