cerca
TemiEsameTW12
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Return to Temi Esame TW 12  (Edit)

Uni.TemiEsameTW12 History

Hide minor edits - Show changes to markup

Changed lines 259-262 from:

Se la variabile questoLink non è vuota o nulla viene stampato l'HTML tramite PrintWriter

to:

Se la variabile questoLink non è vuota o nulla viene stampato l'HTML tramite PrintWriter. Come prima informazione viene stampata la data dell'ultimo accesso, che era stata salvata nella variabile "tstamp" tramite il metodo LinkTracker() e convertita in stringa.
Tramite un ciclo while vengono stampati i valori delle varie "key" presenti nella hashTable col contatore di visite effettuate.

Changed lines 256-257 from:

WARNING
Manca soluzione

to:

Questo file è una Servlet che ha la funzione di LinkTracker in quanto quantifica quante volte viene cliccato un link. La quantità di clic viene visualizzata in codice HTML, se non è stato effettuato nessun clic viene visualizzato il messaggio: "No links have been tracked!".
Il metodo HTTP utilizzato per verificare quante volte il link è stato cliccato è il doGET, il quale accoda l'informazione alla URL.
Viene creata una hashtable, cioè una tabella con chiave-valore. Se la variabile stringa "questoLink" non è nulla o vuota viene effettuata una sincronizzazione della tabella e viene incrementato il contatore intero "count", se "count" è nullo viene inizializzato a 1.
Se la variabile questoLink non è vuota o nulla viene stampato l'HTML tramite PrintWriter

Added line 196:
Changed line 201 from:

tstamp = new Date().toString();

to:
 tstamp = new Date().toString();
Added line 203:
Changed lines 207-211 from:

if (questoLink != null && !questoLink.equals("")) { synchronized (hashLinks){ Integer count = (Integer) hashLinks.get(questoLink); if (count == null) { hashLinks.put(questoLink, new Integer(1));

to:
 if (questoLink != null && !questoLink.equals("")) {
  synchronized (hashLinks){
  Integer count = (Integer) hashLinks.get(questoLink);
   if (count == null) {
    hashLinks.put(questoLink, new Integer(1));
   }
   else {
    hashLinks.put(questoLink, new Integer(1+count.intValue()));
   }
 }

response.sendRedirect(questoLink);

Deleted lines 219-224:

hashLinks.put(questoLink, new Integer(1+count.intValue())); } } response.sendRedirect(questoLink); } else {

Changed lines 231-236 from:

Enumeration enumLinks = hashLinks.keys(); while (enumLinks.hasMoreElements()) { String key = (String)enumLinks.nextElement(); int count = ((Integer)hashLinks.get(key)).intValue(); out.println(key+" : "+count+" visits<br>");

to:
 Enumeration enumLinks = hashLinks.keys();
 while (enumLinks.hasMoreElements())
 {
  String key = (String)enumLinks.nextElement();
  int count = ((Integer)hashLinks.get(key)).intValue();
  out.println(key+" : "+count+" visits<br>");
 }
Deleted line 238:

}

Changed line 240 from:

out.println("No links have been tracked!<br>");

to:
 out.println("No links have been tracked!<br>");
Deleted lines 151-153:

WARNING
E' giusto?

Deleted lines 168-169:

WARNING
è giusto?

Changed lines 114-116 from:

Learning XML

XQuery Kick Start

to:

Learning XML
XQuery Kick Start

Changed lines 118-122 from:
  • Everyday Italian
    * Harry Potter
    * Learning XML
    * XQuery Kick Start

to:
* Everyday Italian
* Harry Potter
* Learning XML
* XQuery Kick Start
Changed lines 117-118 from:

e-

to:

e- restituisce i titoli dei libri in ordine alfabetico, ma questa volta in una lista non ordinata:
* Everyday Italian
* Harry Potter
* Learning XML
* XQuery Kick Start\\\

Changed lines 112-118 from:

d- restituisce

to:

d- restituisce, tramite un costrutto flowr, i titoli dei libri con prezzo maggiore di 30 ordinati in ordine alfabetico.
Everyday Italian
Learning XML

XQuery Kick Start
e-

Changed lines 105-106 from:
to:



Changed lines 110-111 from:

Learning XML

to:

Learning XML

d- restituisce

Changed lines 90-91 from:

WARNING
Manca soluzione

to:

a- restituisce tutti i titoli dei libri presenti nel file XML book.xml, perché parte dal nodo radice, entra nell'elemento bookstore, poi nel book e preleva i titoli.
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML

b- restituisce il libro che ha un prezzo inferiore a 30 dollari. In questo caso solo harry potter.
<book category="CHILDREN">
   <title lang="en">Harry Potter</title>
   <author>J K. Rowling</author>
   <year>2005</year>
   <price>29.99</price>
 </book>

c- restituisce i titoli dei libri che hanno un prezzo superiore a 30 dollari, quindi:
Everyday Italian
XQuery Kick Start
Learning XML

Deleted lines 21-23:

WARNING
Può andare come riassunto?

Changed lines 138-139 from:
  1. Operazione 1: accedere all'oggetto di sessione associato alla richiesta corrente. Per accedere agli oggetti di tipo HttpSession (che sono hashtable, cioè a ognuno è associata una chiave univoca) utilizzo la chiamata request.getSession. Il sistema estrae così lo userID da un cookie o dalla URL e lo confronta con gli elementi hashati della tabella: se ce n'è uno uguale ripristina la sessione altrimenti ne crea una nuova
  2. Operazione 2: cercare informazioni associate alla sessione. Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi faccio dare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)
to:
  1. Operazione 1: accedere all'oggetto di sessione associato alla richiesta corrente. Per accedere agli oggetti di tipo HttpSession (che sono hashtable, cioè a ognuno è associata una chiave univoca) utilizzo la chiamata request.getSession. Il sistema estrae così lo userID da un cookie o dalla URL e lo confronta con gli elementi hashati della tabella: se ce n'è uno uguale ripristina la sessione altrimenti ne crea una nuova.
  2. Operazione 2: cercare informazioni associate alla sessione. Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati.
Changed line 139 from:
  1. Operazione 2: cercare informazioni associate alla sessione. Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi facci odare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)
to:
  1. Operazione 2: cercare informazioni associate alla sessione. Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi faccio dare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)
Changed lines 140-143 from:
  1. Operazione 3: immagazzinare infomazioni nella sessione.

Attraverso la chiamata setAttribute creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione.

Ci sono 3 modi per eliminare i dati: removeAttribute ("key") per eliminare i valori associati a una specifica chiave; invalidate per eliminare l'intera sessione corrente; logout per eliminare tutte le sessioni relative all'utente.

to:
  1. Operazione 3: immagazzinare infomazioni nella sessione. Attraverso la chiamata setAttribute creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.
  2. Operazione 4: eliminazione dati di sessione. Ci sono 3 modi per eliminare i dati: removeAttribute ("key") per eliminare i valori associati a una specifica chiave; invalidate per eliminare l'intera sessione corrente; logout per eliminare tutte le sessioni relative all'utente.
Changed lines 138-144 from:
  1. Operazione 1: accedere all'oggetto di sessione associato alla richiesta corrente. Per accedere agli oggetti di tipo HttpSession (che sono hashtable, cioè a ognuno è associata una chiave univoca) utilizzo la chiamata request.getSession. Il sistema estrae così lo userID da un cookie o dalla URL e lo confronta con gli elementi hashati della tabella: se ce n'è uno uguale ripristina la sessione altrimenti ne crea una nuova
  2. Operazione 2: cercare informazioni associate alla sessione.

Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi facci odare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)

  1. Operazione 3: immagazzinare infomazioni nella sessione.

Attraverso la chiamata setAttribute creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione.

Ci sono 3 modi per eliminare i dati: removeAttribute ("key") per eliminare i valori associati a una specifica chiave; [@invalidate per eliminare l'intera sessione corrente; logout per eliminare tutte le sessioni relative all'utente.

to:
  1. Operazione 1: accedere all'oggetto di sessione associato alla richiesta corrente. Per accedere agli oggetti di tipo HttpSession (che sono hashtable, cioè a ognuno è associata una chiave univoca) utilizzo la chiamata request.getSession. Il sistema estrae così lo userID da un cookie o dalla URL e lo confronta con gli elementi hashati della tabella: se ce n'è uno uguale ripristina la sessione altrimenti ne crea una nuova
  2. Operazione 2: cercare informazioni associate alla sessione. Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi facci odare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)
  3. Operazione 3: immagazzinare infomazioni nella sessione.

Attraverso la chiamata setAttribute creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione.

Ci sono 3 modi per eliminare i dati: removeAttribute ("key") per eliminare i valori associati a una specifica chiave; invalidate per eliminare l'intera sessione corrente; logout per eliminare tutte le sessioni relative all'utente.

Changed lines 142-143 from:

Attraverso la chiamata setAttribute creo una nuova chiave o se c'è già la sovrascrive. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione
to:

Attraverso la chiamata setAttribute creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione.

Ci sono 3 modi per eliminare i dati: removeAttribute ("key") per eliminare i valori associati a una specifica chiave; [@invalidate per eliminare l'intera sessione corrente; logout per eliminare tutte le sessioni relative all'utente.

Added lines 131-144:

HTTP è un protocollo stateless cioè ho una connessione separata per ogni accesso del client a pagine Web e il server non mantiene informazioni contestuali sul client che effettua l'accesso. E' un problema quando capita che devo manterene la sessione quando ad esempio faccio shopping on line. Per mantenere la sessione precedente ci sono 3 diversi metodi:

  1. uso di cookies
  2. riscrittura di URL
  3. uso dell'interfaccia HttpSession interfaccia ad alto livello costruita sopra

cookies e URL rewriting (deve quindi supportare entrambi precedenti metodi)

HttpSession ha 4 operazioni fondamentali:

  1. Operazione 1: accedere all'oggetto di sessione associato alla richiesta corrente. Per accedere agli oggetti di tipo HttpSession (che sono hashtable, cioè a ognuno è associata una chiave univoca) utilizzo la chiamata request.getSession. Il sistema estrae così lo userID da un cookie o dalla URL e lo confronta con gli elementi hashati della tabella: se ce n'è uno uguale ripristina la sessione altrimenti ne crea una nuova
  2. Operazione 2: cercare informazioni associate alla sessione.

Cerco sul server facendo la chiamata getAttribute del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key") per cercare valori precendente memorizzati altrimenti mi facci odare i nomi di tutti gli attributi con la chiamata getAttributeNames. Sempre che il valore prodotto non sia nullo (quando avevo fatto li cast)

  1. Operazione 3: immagazzinare infomazioni nella sessione.

Attraverso la chiamata setAttribute creo una nuova chiave o se c'è già la sovrascrive. Per eliminare un valore senza rimpiazzarlo uso removeAttribute.

  1. Operazione 4: eliminazione dati di sessione
Changed line 146 from:

Manca soluzione

to:

è giusto?

Changed lines 104-105 from:
  • Order: ordina le tuple prodotte dalla for o dalla let (dove per tupla si intende la combinazione delle associazioni tra variabile e valori creata da un for o un let)
  • Return: crea il risultato dell'espressione FLWOR
to:
  • Order: ordina le tuple prodotte dalla for o dalla let (dove per tupla si intende la combinazione delle associazioni tra variabile e valori creata da un for o un let)
  • Return: crea il risultato dell'espressione FLWOR
Added line 149:

@]

Changed lines 142-145 from:

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().

WARNING Manca l'esempio

to:

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().

[@ <%! int pageCount = 0;

    void addCount (){
      pageCount++;
    }%>
Added lines 22-24:

WARNING
Può andare come riassunto?

Changed line 11 from:

Hyper Text Transfer Protocol è un protocollo per traferire dati tramite indirizzamento IP e protocollo di trasporto TCP. Esistono due versioni: 1.0 e 1.1 per la quale è garantita la compatibilità con la precedente versione. La principale differenza tra le due è che la priva versione non ha connessione persistente, cioè non mantiene attivo lo stato di connessione e per richiedere diversi oggetti bisogna continuare a fare richieste di connessione; mentre con la 1.1 la connessione resta aperta fin quando non sono stati trasferiti tutti gli oggetti nella pagina. I metodi sono uguali per lntrambe le versioni:

to:

Hyper Text Transfer Protocol è un protocollo per traferire dati tramite indirizzamento IP e protocollo di trasporto TCP. Esistono due versioni: 1.0 e 1.1 per la quale è garantita la compatibilità con la precedente versione. La principale differenza tra le due è che la priva versione non ha connessione persistente, cioè non mantiene attivo lo stato di connessione e per richiedere diversi oggetti bisogna continuare a fare richieste di connessione; mentre con la 1.1 la connessione resta aperta fin quando non sono stati trasferiti tutti gli oggetti nella pagina. I metodi sono uguali per lntrambe le versioni:

Changed lines 20-21 from:
  1. Basic Authentication Scheme dove il client si autentica rispetto ad un server attraverso uno userID e una password inviate come un'unica stringa separata da : e codificate in base 64 ma trasmessi in chiaro
  2. Digest Authentication Scheme che si basa sulle funzioni di hash non invertibili che permettono di spedire il contenuto in modo cifrato. Per aumentarne la sicurezza alla funzione MAC viene anche aggiunto un valore segreto detto nounce definito dal server e comunicato al client che dovrà spedire, con il resto del messaggio, per autenticarsi al server stesso.
to:
  1. Basic Authentication Scheme dove il client si autentica rispetto ad un server attraverso uno userID e una password inviate come un'unica stringa separata da : e codificate in base 64 ma trasmessi in chiaro
  2. Digest Authentication Scheme che si basa sulle funzioni di hash non invertibili che permettono di spedire il contenuto in modo cifrato. Per aumentarne la sicurezza alla funzione MAC viene anche aggiunto un valore segreto detto nounce definito dal server e comunicato al client che dovrà spedire, con il resto del messaggio, per autenticarsi al server stesso.
Changed lines 11-12 from:

WARNING
Manca soluzione

to:

Hyper Text Transfer Protocol è un protocollo per traferire dati tramite indirizzamento IP e protocollo di trasporto TCP. Esistono due versioni: 1.0 e 1.1 per la quale è garantita la compatibilità con la precedente versione. La principale differenza tra le due è che la priva versione non ha connessione persistente, cioè non mantiene attivo lo stato di connessione e per richiedere diversi oggetti bisogna continuare a fare richieste di connessione; mentre con la 1.1 la connessione resta aperta fin quando non sono stati trasferiti tutti gli oggetti nella pagina. I metodi sono uguali per lntrambe le versioni:

  • option: richiede ad un server informazioni sulle opzioni di comunicazione disponibili
  • get: richiede qualunque oggetto sia stato identificato dalla URL di richiesta
  • head: uguale a get ma il server non deve includere un messaggio nel body della risposta
  • post: richiede che il server di destinazione accetti l'oggetto identificato dalla URL dellla richiesta
  • put: richiede che l'oggetto conenuto nella richiesta sia salvato dal server alla URL specificata
  • delete: richiede la cancellaione dell'oggetto identificato dalla URL della richiesta
  • trace: richiede che il server destinatario risponda con lo stesso messaggio di richiesta come body, usato per la verifica dei messaggi

Due sono le modalità di autenticazione HTTP:

  1. Basic Authentication Scheme dove il client si autentica rispetto ad un server attraverso uno userID e una password inviate come un'unica stringa separata da : e codificate in base 64 ma trasmessi in chiaro
  2. Digest Authentication Scheme che si basa sulle funzioni di hash non invertibili che permettono di spedire il contenuto in modo cifrato. Per aumentarne la sicurezza alla funzione MAC viene anche aggiunto un valore segreto detto nounce definito dal server e comunicato al client che dovrà spedire, con il resto del messaggio, per autenticarsi al server stesso.
Changed lines 100-112 from:

Rappresentano una soluzione per permettere a sistemi eterogenei di lavorare insieme per realizzare il service oriented computing(programmazione con componenti distribuite sul web). Sono componenti software indipendenti dalla piattaforma e dall'implementazione: un client non può dire quale linguaggio, quale sistema operativo o tipo di computer è stato usato. Usando XML per codificare le comunicazioni, sono infatti indipendenti da piattaforme o linguaggi di programmazione. Esso garantisce ricchezza espressiva, estendibilità, portabilità e facilità di comprensione. Inoltre possono essere validati da entrambe le parti che parti che comunicano.

to:

Rappresentano una soluzione per permettere a sistemi eterogenei di lavorare insieme per realizzare il service oriented computing(programmazione con componenti distribuite sul web). Sono componenti software indipendenti dalla piattaforma e dall'implementazione: un client non può dire quale linguaggio, quale sistema operativo o tipo di computer è stato usato. Usando XML per codificare le comunicazioni, sono infatti indipendenti da piattaforme o linguaggi di programmazione: esso garantisce ricchezza espressiva, estendibilità, portabilità e facilità di comprensione. Inoltre possono essere validati da entrambe le parti che parti che comunicano. Possono essere:

  • descritti usando un linguaggio di descrizione del servizio (un web service deve descrivere se stesso: quali tipi di richieste può soddisfare, quali sono gli argomenti, quale il trasporto)
  • pubblicati in un registro di servizi per sapere dove è localizzato
  • invocati mediante un'API solitamente tramite la rete
  • composti con altri servizi e il servizio può a sua volta essere client di un altro servizio

L'architettura del web service è basata su 3 entità:

  1. service requestor: richiede l'esecuzione del web service
  2. service provider: implementa il servizio e lo rende disponibile per il web
  3. service registry: offre un servizio di pubblicazione e ricerca dei servizi disponibili

WARNING
E' giusto?

Added lines 11-13:

WARNING
Manca soluzione

Added lines 81-83:

WARNING
Manca soluzione

Deleted line 104:
Added lines 107-109:

WARNING
Manca soluzione

Deleted line 187:
Added lines 189-191:

WARNING
Manca soluzione

Deleted line 91:
Added lines 93-94:

Rappresentano una soluzione per permettere a sistemi eterogenei di lavorare insieme per realizzare il service oriented computing(programmazione con componenti distribuite sul web). Sono componenti software indipendenti dalla piattaforma e dall'implementazione: un client non può dire quale linguaggio, quale sistema operativo o tipo di computer è stato usato. Usando XML per codificare le comunicazioni, sono infatti indipendenti da piattaforme o linguaggi di programmazione. Esso garantisce ricchezza espressiva, estendibilità, portabilità e facilità di comprensione. Inoltre possono essere validati da entrambe le parti che parti che comunicano.

Added lines 106-112:

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().

WARNING Manca l'esempio

Added lines 76-77:

SOLUZIONE

Added lines 81-87:

Le espressioni FLWOR sono il costrutto più comune e potente di XQuery. Sono simili al costrutto SELECT-FROM-WHERE di SQL ma anzichè essere applicati a relazioni tra tabelle associano variabili a valori utliazzando i costrutti for e let e usano tali associazioni per produrre i risultati. FLWOR è l'acronimo di: For - Let - Where - Order - Return, dove:

  • For: associa una o più variabili alle esprezzioni che seguono la keyword in
  • Let: associa delle variabili all'intero risultato di un'espressione eventualmente aggiungendo questa associazione a quelle generate da un costrutto for
  • Where: filtra le tuple prodotte da una for o let scartando quelle che non soddisfano la condizione necessaria
  • Order: ordina le tuple prodotte dalla for o dalla let (dove per tupla si intende la combinazione delle associazioni tra variabile e valori creata da un for o un let)
  • Return: crea il risultato dell'espressione FLWOR
Changed lines 56-60 from:

2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:
a- doc("books.xml")/bookstore/book/title
b- doc("books.xml")/bookstore/book[price<30]
c- doc("books.xml")/bookstore/book[price>30]/title
d- [@

to:

2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:
a- doc("books.xml")/bookstore/book/title
b- doc("books.xml")/bookstore/book[price<30]
c- doc("books.xml")/bookstore/book[price>30]/title
'''d- [@

Changed lines 65-66 from:

@] e- [@

to:

@]''' '''e- [@

Changed line 74 from:

@]\\\

to:

@]'''\\\

Added line 10:
Changed lines 19-46 from:

<book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book>

to:
 <book category="COOKING">
   <title lang="en">Everyday Italian</title>
   <author>Giada De Laurentiis</author>
   <year>2005</year>
   <price>30.00</price>
 </book>

 <book category="CHILDREN">
   <title lang="en">Harry Potter</title>
   <author>J K. Rowling</author>
   <year>2005</year>
   <price>29.99</price>
 </book>

 <book category="WEB">
   <title lang="en">XQuery Kick Start</title>
   <author>James McGovern</author>
   <author>Per Bothner</author>
   <author>Kurt Cagle</author>
   <author>James Linn</author>
   <author>Vaidyanathan Nagarajan</author>
   <year>2003</year>
   <price>49.99</price>
 </book>

 <book category="WEB">
   <title lang="en">Learning XML</title>
   <author>Erik T. Ray</author>
   <year>2003</year>
   <price>39.95</price>
 </book>
Changed lines 77-80 from:

3- Web services: cosa sono e come funzionano. 4- Session tracking: cos’è? Illustrare la soluzione a tale problema basata sull’uso dell’interfaccia HttpSession, specificandone i vantaggi. 5- Dichiarazioni JSP: cosa sono? Scrivere un pezzo di codice che ne mostri l’utilizzo. 6- Spiegare il funzionamento e commentare dettagliatamente il seguente pezzo di codice.

to:

SOLUZIONE

Esercizio 3

Web services: cosa sono e come funzionano.

SOLUZIONE

Esercizio 4

Session tracking: cos’è? Illustrare la soluzione a tale problema basata sull’uso dell’interfaccia HttpSession, specificandone i vantaggi.

SOLUZIONE

Esercizio 5

Dichiarazioni JSP: cosa sono? Scrivere un pezzo di codice che ne mostri l’utilizzo.

SOLUZIONE

Esercizio 6

Spiegare il funzionamento e commentare dettagliatamente il seguente pezzo di codice.

[@

Changed lines 160-164 from:
to:

@]

SOLUZIONE

Changed line 50 from:

'2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:\\

to:

2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:\\

Changed lines 60-61 from:

e- [@

to:

e- [@

Changed line 68 from:

@]'\\\

to:

@]\\\

Changed line 50 from:

2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:\\

to:

'2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:\\

Changed line 69 from:

@]\\\

to:

@]'\\\

Changed lines 12-13 from:

Dato il seguente documento XML “books.xml”:\\\

to:

Dato il seguente documento XML “books.xml”:

Added line 15:
Changed lines 48-51 from:

'''2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery: a- doc("books.xml")/bookstore/book/title b- doc("books.xml")/bookstore/book[price<30] c- doc("books.xml")/bookstore/book[price>30]/title

to:

2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:
a- doc("books.xml")/bookstore/book/title
b- doc("books.xml")/bookstore/book[price<30]
c- doc("books.xml")/bookstore/book[price>30]/title\\

Changed line 67 from:

@]'''\\\

to:

@]\\\

Added line 13:
Changed lines 46-54 from:

'''2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:
a- doc("books.xml")/bookstore/book/title
b- doc("books.xml")/bookstore/book[price<30]
c- doc("books.xml")/bookstore/book[price>30]/title
d- for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title\\

to:

'''2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery: a- doc("books.xml")/bookstore/book/title b- doc("books.xml")/bookstore/book[price<30] c- doc("books.xml")/bookstore/book[price>30]/title

d-
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
Added lines 1-130:

Torna alla pagina di Tecnologie Web


 :: Appello d'esame di Tecnologie Web - 09/02/2009 ::

Esercizio 1

HTTP: cos’è, metodi principali, schemi di autenticazione.

SOLUZIONE

Esercizio 2

Dato il seguente documento XML “books.xml”:

<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

'''2a. scrivere e spiegare il risultato per ognuna delle seguenti XQuery:
a- doc("books.xml")/bookstore/book/title
b- doc("books.xml")/bookstore/book[price<30]
c- doc("books.xml")/bookstore/book[price>30]/title
d- for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
e-

<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{data($x)}</li>
}
</ul>
'''

2b. Cosa sono le espressioni flwor?

3- Web services: cosa sono e come funzionano. 4- Session tracking: cos’è? Illustrare la soluzione a tale problema basata sull’uso dell’interfaccia HttpSession, specificandone i vantaggi. 5- Dichiarazioni JSP: cosa sono? Scrivere un pezzo di codice che ne mostri l’utilizzo. 6- Spiegare il funzionamento e commentare dettagliatamente il seguente pezzo di codice. import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class LinkTracker extends HttpServlet { static private Hashtable hashLinks = new Hashtable(); String tstamp; public LinkTracker() { tstamp = new Date().toString(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String questoLink = request.getParameter("link"); if (questoLink != null && !questoLink.equals("")) { synchronized (hashLinks){ Integer count = (Integer) hashLinks.get(questoLink); if (count == null) { hashLinks.put(questoLink, new Integer(1)); } else { hashLinks.put(questoLink, new Integer(1+count.intValue())); } } response.sendRedirect(questoLink); } else { response.setContentType("text/html"); PrintWriter out = response.getWriter(); request.getSession(); out.println("<html>"); out.println("<head>"); out.println("<title>Links Tracker Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>Links Tracked Since"); out.println(tstamp+":</p>"); if (hashLinks.size() != 0) { Enumeration enumLinks = hashLinks.keys(); while (enumLinks.hasMoreElements()) { String key = (String)enumLinks.nextElement(); int count = ((Integer)hashLinks.get(key)).intValue(); out.println(key+" : "+count+" visits<br>"); } } else { out.println("No links have been tracked!<br>"); } out.println("</body>"); out.println("</html>"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); } }


Torna alla pagina di Tecnologie Web