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 output

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%'''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%'''WARNING'''\\
E' giusto?
Deleted lines 168-169:
%warning%'''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%'''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%'''WARNING'''\\
Può andare come riassunto?
Changed lines 138-139 from:
# ''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
# ''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:
# ''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.
# ''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:
# ''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:
# ''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:
# ''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@].
# ''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:
# ''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@].
# ''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:
# ''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
# ''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)
# ''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.
# ''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:
# ''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
# ''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)
# ''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@].
# ''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.
# ''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.
# ''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:
# uso di '''cookies'''
# '''riscrittura di URL'''
# 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:
# ''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
# ''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)
# ''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.
# ''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%'''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%'''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:
# 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
# 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:
# '''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
# '''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%'''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:
# 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
# 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à:
# '''service requestor''': richiede l'esecuzione del web service
# '''service provider''': implementa il servizio e lo rende disponibile per il web
# '''service registry''': offre un servizio di pubblicazione e ricerca dei servizi disponibili

%warning%'''WARNING'''\\
E' giusto?
Added lines 11-13:
%warning%'''WARNING'''\\
Manca soluzione
Added lines 81-83:
%warning%'''WARNING'''\\
Manca soluzione
Deleted line 104:
Added lines 107-109:
%warning%'''WARNING'''\\
Manca soluzione
Deleted line 187:
Added lines 189-191:

%warning%'''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%'''WARNING'''
Manca l'esempio
Added lines 76-77:
%red%[-'''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:

%red%[
-'''SOLUZIONE'''-]

!!Esercizio 3
'''
Web services: cosa sono e come funzionano.'''\\\


%red%[
-'''SOLUZIONE'''-]

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


%red%[
-'''SOLUZIONE'''-]

!!Esercizio 5
'''
Dichiarazioni JSP: cosa sono? Scrivere un pezzo di codice che ne mostri l’utilizzo.'''\\\


%red%[
-'''SOLUZIONE'''-]

!!Esercizio 6
'''
Spiegare il funzionamento e commentare dettagliatamente il seguente pezzo di codice.'''

>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
[@
Changed lines 160-164 from:
to:
@]
>><<


%red%[-'''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:
>>left bgcolor=#f5f9fc width=auto border='2px solid #cccccc' padding=5px<<
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 -> TecnologieWeb]]
----

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

!!Esercizio 1
'''HTTP: cos’è, metodi principali, schemi di autenticazione.'''\\\

%red%[-'''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 -> TecnologieWeb]]