Torna alla pagina di Tecnologie Web
:: Appello d'esame di Tecnologie Web - 04/09/2008 ::
Esercizio 1
Considerate il seguente foglio di stile XSL:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
<th>Dynamic Content</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
<td><xsl:value-of select="ORACLE"/></td>
</tr>
</table>
</body>
</html>
</xsl:stylesheet>
1.a Nel documento esistono due errori. Individuateli e commentateli.
SOLUZIONE
- primo errore: il tag for-each viene aperto, ma non viene chiuso e quindi un qualsiasi programma segnalerebbe un errore. Non rispetta le regole XML sui documenti ben formati.
- secondo errore: manca l'elemento xsl:template che definisce l'inizio di un template. Ogni elemento <xsl:template> contiene delle regole da applicare quando uno specifico nodo viene trovato.
Se manca questo elemento il browser non sa cosa fare.
1.b Scrivete un istanza di documento a cui potrebbe essere applicata una versione corretta del presente foglio di stile.
SOLUZIONE
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="2008-09-04es1.xsl"?>
<CATALOG>
<CD>
<TITLE>Scenes from a memory</TITLE>
<ARTIST>Dream Theater</ARTIST>
<ORACLE>prova prova</ORACLE>
</CD>
<CD>
<TITLE>Black Album</TITLE>
<ARTIST>Metallica</ARTIST>
<ORACLE>prova prova</ORACLE>
</CD>
</CATALOG>
Esercizio 2
Considerate la seguente istanza XHTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title> Frameset DTD XHTML Example </title>
</head>
<body bgcolor="#FFFFFF" link="#000000" text="red">
<p>This is an XHTML example</p>
<frameset cols="100,*">
<frame src="toc.html" />
<frame src="intro.html" name="content" />
</frameset>
</body>
</html>
2.a Spiegate la dichiarazione DOCTYPE. È questo un documento ben formato? È valido?
SOLUZIONE
La dichiarazione DOCTYPE specifica qual'è il DTD relativo al documento e dove si trova, in questo caso è un DTD pubblico e più precisamente è quello XHTML FRAMESET, cioè quello più "libero" tra i tre previsti per XHTML. E' la versione più libera in quanto permette anche di utilizzare elementi correlati ai frame come frameset e iframe.
Il documento è ben formato, perché rispetta tutte le regole relative ai tag.
Le regole dei documenti ben formati sono cinque:
- apertura e chiusura dei tag
- annidamento corretto dei tag
- dichiarazione all'inizio del documento
- xml/xhtml sono CASE-SENSISTIVE: quindi utilizzare lo stesso nome per gli elementi/tag in apertura e chiusura
- inserire correttamente gli apici singoli o doppi negli attributi
Il documento è valido quando rispetta le regole espresse nello schema DTD o XML-SCHEMA.
Il documento non è valido perché a quanto pare anche se nell'XHTML FRAMESET è possibile inserire i frameset questi non possono essere messi all'interno del body, o almeno così dice il programma.
2.b Scrivete esempio di XHTML che riporti gli stessi contenuti ma che sia valido rispetto ad una DTD STRICT.
SOLUZIONE
Il cane si è mangiato la soluzione
Esercizio 3
3.a Discutete la nozione di standard e la sua importanza per il WWW.
SOLUZIONE
Lo standard è un prerequisito per la costruzione di un’infrastruttura globale funzionale e poco costosa. Servono per evitare caos e il monopolio.
L’incapacità di giungere ad uno standard sostiene il lock-in, crea isole di connettività, mantiene i sistemi costosi, difficili da usare, inflessibili, e ritarda la diffusione di tecnologie utili nella società.
Ci sono diversi tipi di standard:
- proprietari vs. non proprietari
- prescrittivi (devi fare in un det. Modo) vs. descrittivi
- de jure vs. de facto
Uno standard può essere creato:
- con un intervento governativo
- attraverso un processo formale all’interno di organizzazioni
- attraverso l’accettazione del mercato di una specifica in competizione
L’impatto degli standard nelle Tecnologie dell’Informazione coinvolge:
- Interoperabilità: fare in modo che i sistemi lavorino insieme (ad esempio, permettere che software diversi accedano agli stessi dati).
- Portabilità: permettere che il software funzioni su architetture diverse (ad esempio, un linguaggio di programmazione comune).
Uno standard per prevalere deve raggiungere la giusta combinazione di prestazioni - universalità - costo.
3.b Spiegate scopo ed uso dello standard RSS.
SOLUZIONE
RSS significa Really Simple Syndication ed è un formato basato su XML adatto alla diffusione di contenuti su Internet.
I documenti RSS, detti anche feed, sono uno strumento per descrivere contenuti che possono essere forniti a chi pubblica informazioni su Internet per i siti ad
aggiornamento frequente come quelli di news.
Attraverso un RSS Reader è possibile veicolare i contenuti di un sito e riaggregarli presentandoli sotto nuove forme. Il programma che permette di effettuare il download, il parsing e visualizzare i contenuti di un feed RSS si chiama feed reader. I feed reader sono in grado di rilevare automaticamente se il produttore di feed ha effettuato aggiornamenti al feed stesso, effettuando download a intervalli di tempo regolari.
Il concetto chiave quindi è che l'utente tramite RSS può scaricare e visualizzare gli aggiornamenti di decine di siti, usando una sola interfaccia.
Nota: esattamente quello che avviene col nostro forum.
Esercizio 4
CGI: cosa sono, come funzionano, quali svantaggi presentano.
SOLUZIONE
CGI (Common Gateway Interface) è un’interfaccia standard che permette ad un web server di comunicare con altre applicazioni e programmi autonomi.
Funzionamento:
- Il client esegue una richiesta al web server.
- Il web server passa la richiesta ad un programma esterno.
- Il programma esterno riceve la richiesta, crea contenuti dinamici che tramite il server vengono inviati al client.
Problemi:
- Vengono mischiate presentazione e logica: formato scomodo sia per gli sviluppatori che per i programmatori. Difficile fusione tra HTML e linguaggi di programmazione.
- Velocità: ad ogni richiesta del client, il server deve inoltrare questa richiesta al programma CGI che nel frattempo era stato chiuso.
- Stateless: non viene tenuta traccia di nessun dato tra una richiesta e l'altra.
- Consumo di risorse: ad ogni richiesta di risorsa alla CGI, il web server crea un nuovo processo, quindi c'è un numero limitato di processi concorrenti e di utenti contemporanei.
Per risolvere il problema della velocità e del consumo sono state introdotte le Fast CGI (seconda generazione di CGI) che mantengono un pool di processi sempre attivo, evitando quindi di creare e terminare ad ogni richiesta un nuovo processo. Questo permette anche di mantenere traccia dello stato. La richiesta e la risposta viaggiano sullo stesso canale di comunicazione Socket.
Esercizio 5
Java beans: cosa sono, vantaggi dati dal loro utilizzo, azioni standard per integrare JavaBeans e pagine JSP.
SOLUZIONE
Le Java Beans sono componenti software, che possono essere incluse in una pagina JSP, contenenti classi Java scritte in un formato standard. Permettono un ottimo incapsulamento e riutilizzo di codice.
Vantaggi:
In generale
- permettono di poter utilizzare le classi (ovviamente quelle che seguono il formato) senza scrivere codice.
Con JSP
- si possono utilizzare oggetti Java usando solo sintassi XML-compatibile (comporta una forte separazione tra presentazione e contenuto).
- condivisione di oggetti tra pagine o richieste più semplice.
- utile corrispondenza tra parametri della richiesta e proprietà degli oggetti: semplificazione del processo di lettura parametri di richiesta, conversione da stringa, copia del risultato nell’oggetto.
Ci sono tre azioni standard per integrare JavaBeans e pagine JSP:
- <jsp:useBean>:
associa la classe contenuta nel JavaBean ad un oggetto visibile all’interno della pagina, in modo da poter richiamare i suoi metodi senza dover fare riferimento al file di origine.
- <jsp:setProperty>:
permette di impostare il valore di una delle proprietà di un bean.
- <jsp:getProperty>:
prende il valore di una proprietà di una data istanza di bean e lo inserisce nell’oggetto out implicito (in pratica lo stampa a video).
Esercizio 6
Commentare dettagliatamente il seguente pezzo di codice:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloWorldServlet extends HttpServlet
{
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
- Nel codice è presente il metodo doGet(). In quale fase del ciclo di vita della servlet viene invocato tale metodo?
- Quale altro metodo conosci che ha finalità analoghe a doGet()? Quali sono le differenze tra i due metodi?
SOLUZIONE
E' il codice di una servlet e come tale scritto in java. All'inizio vengono chiamati i pacchetti per la servlet per l'inizializzazione della servlet e definire il metodo service(e il package I/O per gestire le eccezioni).
Prima di scrivere l'output è necessario specificare il tipo di contenuto della pagina tramite chiamata al metodo setContentType()
Per il servizio viene usato il metodo doGet che implementa le classi di request e response. Viene così prodotta una pagina HTML con la solita fantastica scritta "Hello World!".
- Il metodo doGet() viene invocato nella fase di servizio della servlet. In questa fase una servlet interagisce con le richieste provenienti dal client, può interagire con altre servlet o risorse producendo risposte.
- Le principali differenze sono:
- doGet() comprende una quantità limitata d'informazione (in alcuni casi non più di 255 caratteri) in forma di query string: lista che inizia con ? seguita da coppie nome-valore. Inoltre appare come parte dell'URL.
- doPost() può essere basato su query string; con questo metodo si può spedire una quantità illimitata d'informazione come parte di una richiesta HTTP, senza apparire come parte di URL.
Torna alla pagina di Tecnologie Web