Torna alla pagina di Tecnologie Web
:: Appello d'esame di Tecnologie Web - 09/02/2009 ::
HTTP: cos’è, metodi principali, schemi di autenticazione.
SOLUZIONE
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:
Due sono le modalità di autenticazione HTTP:
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>
for $x in doc("books.xml")/bookstore/book where $x/price>30 order by $x/title return $x/titlee-
<ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{data($x)}</li> } </ul>
SOLUZIONE
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
<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
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
* Everyday Italian * Harry Potter * Learning XML * XQuery Kick Start
2b. Cosa sono le espressioni flwor?
SOLUZIONE
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:
Web services: cosa sono e come funzionano.
SOLUZIONE
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:
L'architettura del web service è basata su 3 entità:
Session tracking: cos’è? Illustrare la soluzione a tale problema basata sull’uso dell’interfaccia HttpSession, specificandone i vantaggi.
SOLUZIONE
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:
cookies e URL rewriting (deve quindi supportare entrambi precedenti metodi)
HttpSession ha 4 operazioni fondamentali:
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.
getAttribute
del metodo HttpSession. Se conosco già il valore della chiave posso usare getAttribute("key")
per cercare valori precendente memorizzati.
setAttribute
creo un nuovo attributo o se c'è già lo sovrascrivo. Per eliminare un valore senza rimpiazzarlo uso removeAttribute
.
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.
Dichiarazioni JSP: cosa sono? Scrivere un pezzo di codice che ne mostri l’utilizzo.
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().
<%! int pageCount = 0; void addCount (){ pageCount++; }%>
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); } }
SOLUZIONE
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. 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.