cerca
Appello d'esame di Tecnologie Web - 19/06/2007
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Appello d'esame di Tecnologie Web - 19/06/2007

Torna alla pagina di Tecnologie Web


 :: Appello d'esame di Tecnologie Web - 19/06/2007 ::

Esercizio 1

Considerate il seguente documento XML:

<?xml version="1.0"?>  
<doc> 
  <foo file="1-redir.out"> 
    Testing Redirect extension: 
    <bar>A foo subelement text node</bar> 
  </foo> 
  <main> 
    Everything else 
  </main> 
<ordinary> 
</ordinary> 
<ordinary> 
</ordinary> 
</doc>

1.a Scrivete una dichiarazione DTD che consenta di validare il file

SOLUZIONE

<!ELEMENT doc (foo, main, ordinary+)>
<!ELEMENT foo  (#PCDATA | bar)*>
<!ATTLIST foo 
	file CDATA #IMPLIED>
<!ELEMENT bar (#PCDATA)>
<!ELEMENT main (#PCDATA)>
<!ELEMENT ordinary EMPTY>

1.b Spiegate, motivando la risposta, se la DTD da voi descritta sia l’unica possibile che consenta di validare il file.

SOLUZIONE

Non è l'unica possibile, perché possiamo modificarne alcune parti, ad esempio gli indicatori di occorrenza. Potremmo inserire ordinary*, oppure mettere l'attributo di foo invece che come facoltativo obbligatorio tramite il #REQUIRED. Oppure ancora inserire main* anche se ne è presente uno solo.
Queste modifiche avrebbero consentito lo stesso di validare il file.

Esercizio 2

Considerate il seguente documento XHTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it"> 

<head> 
<title>Scuola Aperta, Lombardia </title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" 
/> 
</head> 

<body> 
<div id="testata"> 
<div id="logo"> <img src="images/scuolalog.gif" alt="Scuola Aperta 
[logo]" /> 
<span class="scuola">Scuola Aperta</span><br />via Porte Aperte sul Web, 
11 - Lombardia 
</div> 
<p align="left" id="agg" >ultimo aggiornamento <strong>10 maggio 
2004</strong> 
</p> 
</div> 
</body> 
</html>

2.a Verificate che il documento sia valido rispetto alla dichiarazione. Individuate gli eventuali elementi che rendono non valido il documento.

SOLUZIONE

Il documento non è valido.
L'elemento che non lo rende valido è align="left" che si trova in p nella sestultima riga perché il tag p non prevede l'attributo align e questo deve essere dichiarato.

2.b Modificando la dichiarazione si potrebbe validare il documento?

SOLUZIONE

Non è possibile validare il documento se si utilizza una delle tre DTD pubbliche riferite a XHTML (strict, transitional, frameset), se però si crea una DTD personalizzata che permette l'utilizzo di align in p allora il documento diventa valido.

Esercizio 3

3.a Discutete le principali caratteristiche del WWW e spiegate per quale motivo ne decretarono il successo.

SOLUZIONE

Il WWW (world wide web) serve per presentare a schermo i documenti ipertestuali e multimediali.
Il punto di forza del WWW è la scalabilità, ottenuta tramite il meccanismo dei link, che semplifica il protocollo e semplifica la navigazione ipertestuale.
Un altro fattore che ne determinò il successo è stato l'URI, cioè lo standard per gli identificatori univoci nella rete. È indipendente dal protocollo, facilmente memorizzabile e scambiabile.
Il protocollo di comunicazione utilizzato è l'HTTP, che permette di scambiare messaggi su una rete informatica (TCP/IP).
Le due componenti principali legate al WWW sono:

  • browser(client): permette di visualizzare i documenti.
  • server: meccanismo di accesso a risorse locali, in grado di trasmettere via socket TCP documenti identificati da un nome univoco. Può anche collegarsi ad applicazioni lato server(tramite protocollo CGI) agendo da tramite tra il browser e l'applicazione, quindi il browser diventa l'interfaccia dell'applicazione.

I linguaggi di markup (ad es. SGML, HTML, XHTML) sono i più opportuni per strutturare e marcare i documenti in maniera indipendente dall’applicazione, favorendo la riusabilità, la flessibilità e l’apertura ad applicazioni complesse dei documenti, quindi si va a risolvere il problema della portabilità dei dati.

3.b 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.

Esercizio 4

Spiegare il ciclo di vita di una servlet.

SOLUZIONE

Il ciclo di vita di una servlet è caratterizzata da 4 fasi:
1. Caricamento:
Una servlet può essere caricata quando:

  • viene avviato il server
  • l'amministratore di sistema richiede al server di caricare la servlet
  • il browser tenta l'accesso alla servlet

Per caricare una servlet, il server ha bisogno di conoscere il classname della servlet, cioè il nome della servlet richiesto dal browser. Se presente anche il nome del package.nomeDellaServlet

2. Inizializzazione:
Consiste nella creazione e inizializzazione delle risorse che verranno utilizzate per rispondere alle richieste. Il container invoca il metodo init(), prima di poter servire richieste e produrre risposte . Questo metodo è definito dall'interfaccia javax.servlet.Servlet', che ovviamente ogni servlet dovrà implementare.

3. Servizio:
Durante questa fase la servlet:

  • interagisce con le richieste provenienti dai client
  • interagisce con altre servlet o risorse
  • produce risposte

Il metodo che entra in gioco è service()(anche questo definito dall'interfaccia javax.sevlet.Servlet), invocato per ogni richiesta in arrivo, da thread del processo container.
Il metodo service() richiede due parametri che rappresentano la richiesta da servire e la risposta da produrre, questi due parametri sono identificati dai due oggetti Java javax.servlet.ServletRequest e javax.servlet.ServletResponse.

Nella fase di servizio vengono utilizzati vari metodi HTTP, i due principali sono doGet() e doPost(), la differenza che intercorre tra i due è sempre la stessa:
nel primo caso le informazioni vengono accodate sotto forma di query string(? seguito dalla coppia nome=valore) alla URL, con eventuale perdita di informazione se il web server limita i caratteri della URL a 255.
Nel secondo caso non si può avere perdita di informazione perché la risposta viene inviata nel body e non nella URL.

4. Deattivazione:
Durante questa fase una servlet viene rimossa dall'ambiente di esecuzione rilasciando ogni risorsa creata per gestire le richieste.
Il container per deattivare la servlet invoca il metodo destroy(). Il metodo fa sempre parte dell'interfaccia javax.servlet.Servlet.

Esercizio 5

Cos’è uno scriptlet? Commentare dettagliatamente e mostrare quale sarà l’output del seguente codice:

<html> 
  <head> 
  <title> Esercizio </title> 
  </head> 
<body> 
  <% 
  String [] strings=new String[4]; 
  strings[0]= “La”; 
  strings[1]= “canzone”; 
  strings[2]= “del”; 
  strings[3]= “sole”; 
  for (int i=0; i<strings.lenght; i++) { %> 
String[<%= i %>] = <%=strings[i] %> <br> 
<% } %> 
</body> 
</html>

SOLUZIONE

E' una pagina JSP che genera una pagina HTML titolata Esercizio nel cui body è dichiarato tramite uno scriptlet un array di stringhe ed un ciclo for che genera come output il numero di posizione dell'array con il relativo valore associato.

OUTPUT:
String[0] = La
String[1] = canzone
String[2] = del
String[3] = sole 

Uno scriptlet è un frammento di codice Java definito in una pagina JSP da <% codice java %>, adatto per inserire cicli, condizioni o comunque funzionalità semplici.

Esercizio 6

Spiegare in maniera precisa il seguente pezzo di codice:

<sql: update> 
  INSERT INTO persone (nome, cognome) 
  VALUES (?, ?) 
  <sql: param value= “${param.nome}” /> 
  <sql: param value= “${param.cognome}” /> 
</sql: update>

SOLUZIONE

E' una query sql per registrare nome e cognome di un utente. Il primo ? del parametro VALUES passa il valore del parametro* nome alla variabile nome, mentre il secondo ? passa il valore del parametro* cognome alla variabile cognome.
Questi due valori vengono inseriti nella tabella persone presente nel database specificato in un altro punto del codice.

(*) parametro proveniente da una form nella pagina precedente


Torna alla pagina di Tecnologie Web