Torna alla pagina di Tecnologie Web
:: Appello d'esame di Tecnologie Web - 15/01/2008 ::
Esercizio 1
Considerando la seguente dichiarazione di tipo:
<xsd:complexType name="TransferInfo">
<xsd:sequence>
<xsd:element name="receiver" type="xsd:string" maxOccurs="1"/>
<xsd:element name="sender" type="xsd:string" maxOccurs="1"/>
<xsd:element name="issued" type="xsd:dateTime" maxOccurs="1"/>
<xsd:element name="arrived" type="xsd:dateTime" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="id" type="xsd:long" maxOccurs="1"/>
<xsd:element name="description" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
1.a Scrivete la dichiarazione di un elemento appartenente a questo tipo.
SOLUZIONE
<xsd:element name="Posta" type="TransferInfo"/>
1.b Scrivete un frammento XML valido rispetto allo schema formato dalla dichiarazione di tipo e dalla vostra definizione di elemento.
SOLUZIONE
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="2008-01-15es1.xsd"?>
<Posta>
<receiver>Dagon</receiver>
<sender>Cthulhu</sender>
<issued>2001-10-27T21:32:52</issued>
<arrived>2001-12-09T21:32:52</arrived>
<id>666</id>
<description>Muahahahahahahah</description>
</Posta>
Esercizio 2
Considerate l’elemento HEAD del seguente frammento HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="Author" content="Frankie Roberto">
<meta name="Keywords" content="Creative Commons, music, radio">
<title>frankie roberto blog -
Bar successfully defends its playing of royalty-free Creative Commons music
in Spain</title>
<link rel="stylesheet"
href="http://www.frankieroberto.com/weblog/styles/style.css" type="text/css">
<link rel=”alternate” media=”print” href="print/bar.pdf">
</head>
</html>
2.a Spiegate il significato dei sotto elementi presenti e dei loro attributi.
SOLUZIONE
2.b Citate almeno un altro sotto elemento di HEAD compatibile con la dichiarazione XHTML.
SOLUZIONE
Chiedo di essere esonerato da questo esercizio, quando l'ha spiegato avevo il vaiolo bovino
Esercizio 3
3a. Spiegate che cos’è un selettore CSS e come potrebbe essere usato per ottenere formattazioni diverse di medesimi elementi XHTML.
SOLUZIONE
I CSS sono fogli di stile a cascata (cascatine style sheets) che permettono di separare contenuto e presentazione.
Un selettore CSS fa parte delle regole del foglio di stile e può essere qualsiasi tag oppure un’insieme di tag.
Ci sono 6 tipi di selettori: raggruppati, universale, per elemento discendente, per elemento figlio, per elemento adiacente e per attributo.
3b. Spiegate l’utilità dello spazio dei nomi (namespace) nei linguaggi di marcatura.
SOLUZIONE
I Namespaces in XML hanno due scopi:
- servono a distinguere tra elementi ed attributi con lo stesso nome, appartenenti ad applicazioni XML differenti. Per esempio, il titolo di un libro e il titolo della pagina Web in una pagina che descrive i libri.
- servono a raggruppare assieme tutti gli elementi e gli attributi di un'applicazione XML correlati fra loro in modo che il software possa distinguerli più facilmente.
E' insomma un metodo per definire elementi ed attributi, usato da XML per associarli ad un URI. Quindi gli elementi e gli attributi associati allo stesso URI si trovano nello stesso namespace. E' supportato da XML Schema, non da DTD.
I namespaces evitano ambiguità concatenando i nomi degli elementi con quelli di URL (che sono univoci).
Esempio:
<xs:schema xmlns:xs=“http://www.w3c.org/2001/XMLSchema”
targetNamespace=“http://www.mioindirizzo.org”
elementFormDefault=“qualified”>
Il seguente frammento indica che gli elementi e i datatype usati nello schema (schema, element, complexType, sequence) appartengono al namespace http://www.w3c.org/2001/XMLSchema
Esercizio 4
Modello di una transizione Web basato su file: funzionamento, limiti, una possibile soluzione.
SOLUZIONE
Nella transazione web con il modello basato su file il server trova la risposta, alla richiesta proveniente dal browser, in un file.
Questo modello è adatto per le informazioni che non cambiano o cambiano poco (ad es. il testo di una canzone, oppure la programmazione del tour di un cantante…).
È inadatto invece per le informazioni che cambiano rapidamente o che richiedono un input dall’utente (ad es. un catalogo on-line oppure il voto per un’indagine statistica…).
Una possibile soluzione sarebbe l’utilizzo di pagine dinamiche (ad es. con l’utilizzo di CGI che permettono al web server di comunicare con un programma esterno). Oppure tramite jsp/servlet.
Esercizio 5
Commentare dettagliatamente e scrivere per esteso quale sarà l’output del seguente codice:
<html>
<head>
<title> Tecnologie Web </title>
</head>
<body>
<%@ page language="java"%>
<h1> Esercizio JSP </h1>
<% for (int i=0;i<11;i++) { %>
<br>
<%=i%> -> <%=i*i%>
<% } %>
</body>
</html>
SOLUZIONE
Questa è una pagina JSP che richiama sè stessa generando una pagina HTML intitolata "Tecnologie Web". Nel body della pagina è specificato il linguaggio di script di default tramite la direttiva page. E' inserito poi un ciclo tramite uno scriptlet in cui viene inserita una nuova riga e viengono visualizzati tutti i numeri minori di 11 e i numeri moltiplicati per sè stessi.
5a. Cosa sono le espressioni JSP?
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 che contengono a loro volta le espressioni.
Le espressioni sono stringhe di testo dinamiche definite <%= codice Java%>. Qualunque sia il tipo di dati del risultato di un’espressione viene sempre convertito dal metodo toString prima di essere inviato al client.
Esercizio 6
Spiegare perché il seguente pezzo di codice non funziona e scriverne una versione corretta.
In quale caso viene generato il messaggio "Spiacente nome utente utente già in uso"? Spiegare il significato delle variabili associate.
<c:choose>
<c:when test="${not empty param.login and not empty param.pw}">
…
<sql:query var="result">
select * from utente where login = ?;
<sql:param value = "${param.login}"/>
</sql:query>
<sql:query var="res">
select * from admin where login = ?;
<sql:param value = "${param.login}"/>
</sql:query>
<c:choose>
<c:when test="${result.rowCount > 0 or res.rowCount > 0 or param.login == 'admin'}">
<c:out value="Spiacente nome utente utente già in uso."/>
<br><a href="registrazione.jsp">Torna</a>
</c:when>
<c:otherwise>
<sql:update >
INSERT INTO utente (login, pw) VALUES(?)
<sql:param value = "${param.login}"/>
<sql:param value = "${param.pw}"/>
</sql:update>
<c:out value="Registrazione avvenuta con successo"/>
<br><a href="index.jsp">Torna</a>
</c:otherwise>
</c:choose>
</c:when>
SOLUZIONE
1 - i comandi sql sono scritti in minuscolo: vanno scritti in maiuscolo.
2 - L'errore si trova nella riga INSERT INTO utente (login, pw) VALUES(?) perché è presente un solo ?, mentre dalle richieste sottostanti se ne aspetta due e quindi restituisce sicuramente un errore.
Il codice è corretto se il campo contiene due ? VALUES(?, ?).
Il messaggio viene generato nel caso in cui i campi res e result sono maggiori di zero (cioè è già attivo quell'utente); oppure il parametro di login è uguale a quello di amministratore.
Le due variabili associate res e result contengono il dato userid inserito dall'utente nella form della pagina jsp di registrazione.
3 - </c:choose> e </c:when> sono invertiti rispetto alla loro annidazione.
Torna alla pagina di Tecnologie Web