Lösungen der Aufgaben zur Klausurvorbereitung

Transcription

Lösungen der Aufgaben zur Klausurvorbereitung
HTW Dresden
Fakultät Informatik/Mathematik
Internettechnologien
Lösungen der Aufgaben zur Klausurvorbereitung
Aufgabe 1:
a) was sagen die folgenden Eigenschaften eines XML-Dokumentes aus?
□ wohlgeformt
□ gültig
wohlgeformt, dann wenn die Regeln von XML eingehalten werden, d.h. Inhalte
durch öffnende und schließende Tags eingeschlossen werden. Die Tags sind
hierarchisch verschachtelt.
gültig, wenn Tag-Reihenfolge, bzw. -Schachtelung und Werte mit DTD oder XMLSchema einhergehen. Ein gültiges Dokument setzt Wohlgeformtheit voraus.
b) Zeigen Sie am unten stehenden XML-Dokument, an welchen Stellen welche
dieser Eigenschaften verletzt werden.
DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT musiksammlung (album)*>
<!ATTLIST musiksammlung eigentuemer CDATA #REQUIRED>
<!ELEMENT album ((interpret), albumtitel, songs) >
<!ELEMENT songs (song)* >
<!ELEMENT interpret (#PCDATA) >
<!ELEMENT albumtitel (#PCDATA) >
<!ELEMENT song (#PCDATA) >
XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE musiksammlung SYSTEM "musiksammlung.dtd">
<musiksammlung eigentuemer="Max Meier">
<album>
<interpret>Die Singfreunde</interpret>
<albumtitel> Unsere Lieder <songs>
…. nicht wohlgeformt: </albumtitel> fehlt
<song>Lied 1</song>
<song>Lied 2</song>
</albumtitel>
… nicht wohlgeformt: </albumtitel> passt hier nicht
</songs>
</album>
<album>
… nicht gültig: Albumtitel fehlt
<titel> Wanderlieder </titel> … nicht gültig: Element Titel nicht in DTD
<song>Schlaflieder</song> … nicht gültig: Elemente song nur innerhalb
von songs
</album>
</musiksammlung>
Aufgabe 2:
Erläutern Sie die Softwarearchitektur einer 3-Tier-Web-Anwendung!
Geben Sie dazu je Schicht die verwendeten Software-Instanzen(z.B. Webbrowser),
die Dokumentauszeichnungssprachen bzw. die Skript-Programmiersprachen an!
Antwort:
Schicht 1 – Darstellungsschicht, Webbrowser, zeigt HTML, eingebettete Inhalte und
XML an, führt JavaScript aus, führt xslt- und css-Transformationen aus
Schicht 2 – Bereitstellung, Webserver, speichert und überträgt HTML- und XMLDokumente,
speichert und überträgt xslt- und css-Dokumente, speichert und überträgt JavaScript
(keine Ausführung), speichert und überträgt eingebettete Inhalten (Images, SoundDateien)
Schicht 3 – serverseitige Verarbeitung (Scripting), Programmiersprache PHP,
verarbeitet PHP, erzeugt HTML, erzeugt XML, erzeugt zum Teil JavaScript
(Parameter, Funktionsaufrufe, auch Codeerzeugung möglich, wenngleich nicht
üblich)
Hinweis: In der Klausur werden derart ausführliche Beschreibungen nicht erwartet.
Aufgabe 3:
Antworten:
a) IP-Adresse und Port, auch URL
b) DNS, richtigerweise Domain Name Service übersetzt URLs in IP-Adressen
c) Durch welches Programm, bzw. auch durch welches Objekt wird kann ein httpRequest ausgelöst werden?
Antwort: (1) durch den Webbrowser (z.B. nach Eingabe einer URL,
nach Anklicken eines Links, bei Absenden eines Formulars)
(2) durch das XMLHttpRequestObject (AJAX)
… auch ein Webservice-Client kann einen http_request auslösen
d) Im Query String (GET), oder im Body einer Request-Nachricht (POST)
Geben Sie jeweils eine konkrete Nutzung für http-Header
e) in einer http-Request-Nachricht
z.B. User-Agent: …. [Browserkennung] …
d) und in einer http-Response-Nachricht an:
z. B. Content-Type: text/html;
z. B. Content-Length: 1025
Aufgabe 4:
Es soll ein FORM-Formular in HTML erstellt werden, das zwei eingegebene Zahlen
an den Server übergibt. Benutzten Sie die GET-Methode und nehmen Sie an, dass
ein Skript auswertung.php auf der Serverseite existiert.
a) Geben Sie den HTML-Code-Ausschnitt für das FORM-Formular an!
b) Geben Sie die ersten zwei Zeilen des http-Requests an, der beim Absenden
des Formulars übertragen wird. Es muss erkennbar sein, wo und in welcher
Syntax die eingegeben Werte transportiert werden.
c) Geben Sie den Ausschnitt des PHP-Skripts an, das die zwei Zahlen in ein
Array zur weiteren Verarbeitung überträgt.
Lösung a)
<form name="Formular" method="GET" action="auswertung.php">
<input name="zahl1" type="text" size="10" value="0.0"></input><br/>
<input name="zahl2" type="text" size="10" value="0.0"> </input><br/>
<input type="submit" value="Absenden"/>
</form>
Lösung b)
Nach Eingabe von 47.11 und 0.815 …
GET
auswertung.php?zahl1=47.11&zahl2=0.815
Lösung c)
…
$z1 = $_GET[‘zahl1‘];
$z2 = $_GET[‘zahl2‘];
HTTP/1.1
Aufgabe 5:
Ein POST-Request mit den folgenden Eingabedaten im Body wird an den WebServer gesendet und dort von einem PHP-Skript verarbeitet.
xpos=45.33 & ypos=20.25 & r=10.14
Entwickeln Sie ein PHP-Skript, das den Flächeninhalt des Kreises (durch xpos,
ypos und r beschrieben) als HTML-formatierten Text ausgibt.
$r = $_POST[‘r‘];
$f = pi()*$r*$r; // auch PI*$r*$r mit define (“PI“, “3.14159“);
echo(“<p>Die Kreisflaeche betraegt $f Einheiten. </p>“;
Um ein gültiges HTML-Dokument zu erzeugen , ist noch die Ausgabe der HTML-,
HEAD und BODY-Tags nötig. Das kann man hier aber weglassen.
Aufgabe 6:
Lösung:
var p1obj;
var p2obj;
var x1,x2,y1,y2;
p1obj = xmlobj.getElementById(‘p1');
p2obj= xmlobj.getElementById(‘p2’);
x1=parseFloat( p1obj.getElementsByTagName(‘x’)[0].firstChild.nodeValue);
y1=parseFloat(p1obj.getElementsByTagName(‘y’)[0].firstChild.nodeValue);
x2=parseFloat( p2obj.getElementsByTagName(‘x’)[0].firstChild.nodeValue);
y2=parseFloat(p2obj.getElementsByTagName(‘y’)[0].firstChild.nodeValue);
// euklidische Distanz:
var dx = x1 – x2;
var dy = y1 – y2;
var dist = Math.sqrt( dx*dx + dy*dy );
Aufgabe 7:
Ergänzen Sie den Script-Teil der im folgenden gegebenen Webseite, dass zwischen
dem Absenden des Requests und dem vollständigen Vorliegen der Antwort der Text
“Auftrag wird bearbeitet“ im Textfeld (id=“dyntext“) als “innerHTML“ angezeigt wird.
Wenn die Antwort vollständig übertragen worden ist, so soll der als responseText
zurückgelieferte Text des AJAX-Requests angezeigt werden.
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE html \nPUBLIC \"-//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\"
xmlns:svg=\"http://www.w3.org/2000/svg\"
xmlns:xlink=\"http://www.w3.org/1999/xlink\">
<head>
<title>AJAX-Demo</title>
<script type="text/javascript">
//<![CDATA[
function ajaxload()
{
var req = new XMLHttpRequest();
var requesturl = "beispiel.php";
req.open("GET", requesturl, true);
// hier Loesung einfügen
req.onreadystatechange = function () {
var dt = document.getElementById("dyntext");
if (req.readyState == 4) {
if (req.status == 200) {
dt.innerHTML = req.responseText;
}
else{
dt.innerHTML = “Anfrage beendet, Fehler!”;
}
}
else {
dt.innerHTML = “Auftrag wird bearbeitet …”;
}
}
req.send(NULL);
}
//]] >
</script>
</head>
<body onload="ajaxload()">
<H1>AJAX-Demonstration </H1>
<div>Antwort:</div><div id="dyntext"></div><br/>
</body>
</html>
Aufgabe 8:
a) Geben Sie mindestens zwei Unterschiede an, die SOAP und REST
unterscheiden!
Unterschied 1:
SOAP umschließt die Nutznachrichten in einem s.g. SOAP-Envelope - einem
XML-Dokument, das zum Transport dient. Dabei ist z.B. auch das
Referenzieren einer Web-Service-Beschreibung in einem WSDL-Dokument
möglich.
REST transportiert die Service-Anfragen und -Antworten direkt über http und
kodiert Daten als XML. Einen Envelope (vgl. SOAP) gibt es hier aber nicht.
Die Nachrichten sind daher kürzer.
Unterschied 2:
REST bezieht sich auf Ressourcen, die serverseitig erzeugt, gelesen,
geändert und gelöscht werden können.
SOAP hingegen macht keine solche Einschränkungen. SOAP wird
typischerweise zur internen Realisierung von RPC’s benutzt.
b) Angenommen der in der Vorlesung vorgestellte Webservice mit der Funktion
Kontakt soll anstatt wie in der unten dargestellten Nachricht
<SOAP-ENV:Envelope ….. >
<SOAP-ENV:Body>
<ns1:Kontakt>
<param0 xsi:type="xsd:string">Start</param0>
</ns1:Kontakt>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
den Parameter (hier Start) mit den Tags <Kommando> …</Kommando>
umschließen?
Wie kann man das erreichen? (Angabe des Prinzips reicht aus)
Antwort: Durch Bereitstellung einer WSDL-Datei. Die Eingabenachricht wird
dann mit einem Parameter <Kommando> spezifiziert, z.B. so
<element name="Request ">
<complexType> <all>
<element name="Kommando" type="string"/>
</all> </complexType>
</element>
c) Wie wird eine Ressource in einem REST-Webservice-Request identifiziert?
Antwort: Entweder als Query-String-Parameter, oder als Teil der URL.
Beispiele:
http://myhome.net/temperatureservice?position=Eingang HTTP/1.1
http://myservice.net/hello/FRITZ
Bei AWS auch so:
PUT /my-image.jpg HTTP/1.
Host: htw.s3.amazonaws.com
(hier ist die Bucket-Ressource htw ein Teil des Hostnamen)