doc - Universität Stuttgart

Werbung
Universität Stuttgart
Institut für Visualisierung
und Interaktive Systeme
Fachpraktikum Graphische Benutzungsoberflächen
Aufgabe 5: Web-basierter Client für News-Feeds.
Steffen Koch
Ziel dieser Aufgabe ist es, einen Einblick in die
Erstellung webbasierter Oberflächen unter
Nutzung der Hypertext Markup Language
(HTML), Cascading Stylesheets (CSS) und
JavaScript zu erlangen. Mit den genannten
Beschreibungs- und Skriptsprachen soll eine
graphische Benutzeroberfläche erstellt werde,
die es erlaubt News-Feeds zu abonnieren, sie
abzurufen und diese auch wieder abzubestellen.
Hierfür wird ein Proxy-Server zur Verfügung
gestellt, der gängige Feed-Formate wie RSS1
oder Atom2 aggregiert und mittels eines
vereinfachten XML-Formats ausliefern kann.
Der Datenaustausch zwischen Browser und
Feed-Proxy soll dabei asynchron durch die
Verwendung
von
AJAX
(asynchronous
JavaScript and XML) erfolgen.
Insbesondere folgende Lernziele sollen in dieser
Aufgabe vermittelt werden:

mit HTML Weboberflächen zu erstellen,

CSS anzuwenden,

über JavaScript auf das sogenannte
Document Object Model (DOM)
zuzugreifen,

JavaScript
und
asynchronen
einzusetzen.
XML
für
den
Datenaustausch
Organisatorisches
Für die Bearbeitung der Aufgaben des
Fachpraktikums steht Ihnen wie üblich das
Subversion-Repository zur Verfügung. Darin
finden Sie für diese Aufgabe sowohl den
Proxy-Server im Quellcode, sowie bereits
angelegte
Verzeichnisse
für
den
zu
erstellenden HTML-Client. Zudem enthält das
Projekt ein Ant-Skript, welches Ihnen das
Deployment der Anwendung erleichtern soll.
Für die Bearbeitung der Aufgabe kann ein
1
http://de.wikipedia.org/wiki/Rss
2
http://www.atompub.org/
beliebiger Editor verwendet werden. Die
Nutzung von Eclipse wie es im Pool installiert
ist wird empfohlen. Die Abgabe des von Ihnen
erstellten HTML-Clients erfolgt ebenfalls wie
immer über das SVN-Repository.
Anmerkung:
Bitte beachten Sie, dass sich unterschiedliche
Browser sowohl in Bezug auf das Scripting als
auch
die
Darstellung
von
Inhalten
unterschiedlich verhalten können. In der
Praxis
ist
es
mitunter
aufwändig
Anwendungen zu entwickeln, die in mehreren
Browsern gleich gut laufen. Entscheiden Sie
sich bitte daher gleich zu Beginn der Aufgabe
für einen Browser Ihrer Wahl um späteren
„Überraschungen“ bei der Entwicklung und
Vorführung der Aufgabe zu vermeiden.
Gefordert ist also die Implementierung der
Aufgabe für nur einen Browser.
Einleitung
Neben der Tatsache, dass das World Wide
Web (WWW) seit Anfang der 90er Jahre
einen geradezu sagenhaften Boom erlebte,
finden sich mittlerweile immer mehr
Anwendungen in Unternehmen, die ebenfalls
von Webtechnologie Gebrauch machen. Dies
liegt nicht zuletzt daran, dass inzwischen eine
große Vielzahl von Produkten, Frameworks,
freien Web-Servern, Web-Infrastruktur und
Clients in Form von Webbrowsern verfügbar
ist.
Diese
Möglichkeiten,
sowie
die
zunehmend vorhandene Kompetenz der
Benutzer im Umgang mit Weboberflächen
lassen
sich
auch
in
verteilten
Firmenanwendungen nutzen. Zudem ist beim
Einsatz neuer webbasierter Anwendungen
kein
zusätzlicher
Installationsaufwand
notwendig.
Die wichtigsten Standards für webbasierte
Anwendungen sind die Hypertext Markup
Language (HTML) für die Erstellung von
Weboberflächen, sowie das
Hypertext
1
Transfer Protocol (HTTP) welches Basis für
den Datenaustausch zwischen Webserver und
Browser ist.
HTML
Die erste Version von HTML wurde 1989 von
Tim Berners Lee entwickelt der als der
Begründer
des
WWW
gilt.
Die
Beschreibungssprache HTML ist kein starres
Gebilde, das seit Beginn des WWW
unverändert besteht, vielmehr wird es ständig
weiterentwickelt.
Diese
Entwicklungen
wurden in der Vergangenheit häufig durch
Browser-Hersteller initiiert und sind teilweise
in
die
offiziellen
Sprachstandards
eingeflossen. Die Standards selbst werden in
Form sogenannter „Recommendations“, also
Empfehlungen, vom World Wide Web
Consortium gepflegt. Im Moment wird gerade
am HTML 5 Standard gearbeitet. Aktuell
üblich sind jedoch noch die Standards HTML
4.01 sowie XHTML 1.1 (eine XML-konforme
Variante von HTML). Bei der Bearbeitung der
Aufgabe sollten Sie sich für eine der beiden
Varianten entscheiden und sich durchgängig
an
diesen
Standard
halten.
Standardkonformität lässt sich leicht mittels
des HTML-Validators auf der Seite des World
Wide Web Consortiums (W3C) überprüfen.
Die herausragende Eigenschaft von HTML ist
es Seiten über sogenannte Hyperlinks
netzwerkartig zu verknüpfen und dafür
Navigationsmöglichkeiten zur Verfügung zu
stellen. Dabei spielt es keine Rolle ob die
Seiten alle auf demselben Webserver liegen
oder nicht. Die Seiten selbst werden hierbei
über sogenannte Uniform Resource Locators
(URLs) identifiziert. Allerdings handelt es sich
bei den heutigen Webinhalten nicht mehr
ausschließlich um Texte, wie der Begriff
„Hypertext“ vermuten lassen würde. Die
neueren Standards erlauben es nahezu
beliebige Multimediadaten in Webseiten zu
integrieren. Zudem bietet HTML die
Möglichkeit Benutzereingaben in Formularen
an einen Webserver zu versenden.
Während zu den Anfangszeiten des WWW
über die Beschreibungssprache HTML sowohl
die Struktur als auch das Layout von
Webseiten festgelegt wurde, hat sich dies in
den letzten Jahren dahingehend verändert,
dass eine Trennung von Struktur/Inhalt
(beschrieben durch HTML) und Layout (über
CSS) angestrebt wird. Der Sinn einer solchen
Trennung liegt auf der Hand: Dieselben
Inhalte
können
über
unterschiedliche
Stylesheets mit unterschiedlichen Layouts
versehen
werden,
oder
sogar
für
unterschiedliche Ausgabegeräte und Medien
angepasst werden.
Auf den Seiten des W3C finden Sie alle
wichtigen Informationen und Spezifikationen
zu
HTML,
CSS
und
verwandten
Themengebieten: www.w3.org
HTTP
Das Hypertext Transfer Protocol ist ein
Protokoll, das für den Austausch von Daten
zwischen Webservern und Webbrowsern zum
Einsatz
kommt.
Eine
ausführliche
Beschreibung des Protokolls findet sich unter:
http://tools.ietf.org/html/rfc1945
und
http://tools.ietf.org/html/rfc2616
Innerhalb der zu bearbeitenden Aufgabe sind
lediglich die HTTP-Anfragen „Get“ und „Post“
interessant, die es ermöglichen vom Client aus
eine
Web-Ressource
anzufordern
und
gleichzeitig Parameter an den Server zu
übertragen.
HTTP ist ein zustandsloses Protokoll. Das
bedeutet, dass jeder Request/Response-Zyklus
unabhängig vom Kontext vorangegangener
Aufrufe stattfindet. Dies stellt, insbesondere
im Rahmen von Anwendungen die einen
„Sitzungscharakter“ aufweisen, ein Problem
dar. Um künstlich Informationen über einen
Zyklus hinweg zu erhalten, können
unterschiedliche Mechanismen für dieses
sogenannte „Session-Handling“ zum Einsatz
kommen. Gängige Verfahren sind „URLRewriting“,
HTTP-Cookies3
sowie
das
„Durchschleifen“ von Session-Parametern. Für
die gestellte Aufgabe ist das Session-Handling
auf Basis von Cookies bereits transparent in
den bereitgestellten Proxy integriert. Dies
bedeutet,
dass
für
eine
korrekte
Funktionsweise Cookies im Browser erlaubt
werden müssen.
JavaScript
HTML und CSS bilden wie schon erwähnt die
Basis für Seiten im WWW. Allerdings lassen
sich damit nur „statische“ Anwendungen
erstellen die den Webclients auch den Namen
3
http://tools.ietf.org/html/rfc2965
2
„Browser“
bescherten.
Sollen
Inhalte
dynamisch änderbar/generierbar sein so
reichen HTML-Beschreibungen und CSS
alleine nicht mehr aus. Zur Generierung
dynamischer Webseiten auf Serverseite, steht
eine große Palette von Skriptsprachen,
Frameworks und Toolkits zur Verfügung.
PHP4, JSP5 und ASP6 sind hierfür nur einige
der bekannteren Vertreter. Mit deren Hilfe
kann auf die Eingabe von Benutzern in
geeigneter Weise dynamisch reagiert werden.
Zum Beispiel lassen sich so Weblogs (kurz
Blogs) erstellen, in die ein Autor Inhalte
einpflegen und im Netz zur Verfügung stellen
kann. In der vorliegenden Aufgabe wurden für
die Server-seitige Implementierung des FeedProxys JavaServer Pages (JSP) eingesetzt.
Aber auch Client-seitig ist Dynamisierung in
vielen Fällen wünschenswert. Sei es für die
Erstellung von Funktionalität, die nicht über
die Beschreibung in HTML möglich ist, wie
z.B. Veränderung der Seiteninhalte bezüglich
ihrer
Struktur
oder
Anordnung,
„Animationen“, oder dem asynchronen
Austausch von Nachrichten mit dem
Webserver wie er im Abschnitt „AJAX“
beschrieben ist. Eine Möglichkeit für die
Client-seitige Dynamisierung von Webseiten
bietet JavaScript oder auch ECMA-Script7 wie
der Sprachstandard bei der European
Computer Manufacturers Association genannt
wird.
Bei JavaScript handelt es sich um eine
interpretierte Sprache mit dynamischer
Typisierung. Das heißt, einer Variablen
können Werte/Instanzen unterschiedlichen
Typs zugewiesen werden. „Objektorientierte“
Programmierung ist mit JavaScript möglich,
innerhalb der hier zu bearbeitenden Aufgabe
jedoch nicht zwingend erforderlich. Lassen Sie
sich jedoch bitte nicht vom Namen
„JavaScript“ täuschen, zwar gibt es Parallelen
zu Java was die Syntax anbelangt, die
semantischen Konzepte unterscheiden sich
jedoch deutlich.
4
http://www.php.net/
5
http://java.sun.com/products/
jsp/index.html
6
7
http://asp.net/
http://www.ecma-international.org/
publications/standards/Ecma-262.htm
Für das Scripting von HTML-Webseiten steht
das sogenannte Document Object Model zur
Verfügung (DOM). Es bietet die Möglichkeit
beliebige Elemente auf einer Webseite zu
finden und zu verändern. Auch für den Zugriff
auf XML-Dateien (wie z.B. die vom FeedProxy zur Verfügung gestellten) gibt es ein
DOM. Die wichtigsten Zugriffsmethoden des
XML-DOM haben Sie bereits bei der
Bearbeitung
vorangegangener
Aufgaben
kennengelernt. Sie sind in ähnlicher Weise
auch auf HTML-Dokumente anwendbar.
Anmerkung:
Falls Sie noch nie in JavaScript programmiert
haben sollten, arbeiten Sie sich bitte mit Hilfe
der
unter
Quellen
und
Tutorials
referenzierten Materialien ein.
Für das Polling von Feed-Nachrichten sollten
Sie
sich
insbesondere
die
Methode
setTimeout() des Window-Objekts ansehen.
Bei der Entwicklung von Client-seitigem
JavaScript ist es ratsam äußerst defensiv zu
programmieren.
So
sollten
sämtliche
Variablen denen ein Objekt zugewiesen wurde
vor deren Benutzung auf ihren Inhalt
überprüft werden:
if (object) {
//do something
} else {
alert(„An error has occurred, object was 0 or ‘undefined’”);
}
Fehlermeldungen können mit dem Befehl
alert(„Fehlermeldung“) in Form eines
Dialogs ausgegeben werden.
AJAX
In letzter Zeit geistert der Begriff „Web 2.0“
durch die Medien. Unter diesem Begriff
werden neuere Webanwendungen wie Wikis,
Soziale Netzwerke, Mashups und viele weitere
Applikationen subsumiert, welche (auch) die
aktive Einflussnahme von Benutzern auf
Webinhalte umfassen. Häufig wird „Web 2.0“
daher auch als das „Mitmachweb“ bezeichnet.
Wie auch immer man diese Form der
Webanwendungen bezeichnen möchte, neu
sind die Möglichkeiten, die unter Web 2.0
zusammengefasst werden nicht - obwohl das
die Versionsnummer 2.0 suggeriert.
Tatsächlich neueren Ursprungs sind jedoch
Erweiterungen in JavaScript, die es erlauben
3
Daten mit einem Webserver asynchron
auszutauschen. Dies bietet neben Vorteilen
bezüglich der benötigten Bandbreite auch
wesentliche Verbesserungen hinsichtlich der
Usability von Webanwendungen. Zum einen
entfällt das Nachladen kompletter Webseiten
inklusive der beim Seitenaufbau auftretenden
Effekte wie Flackern und Layout-Artefakte
und zum anderen ist es möglich dynamisch
auf Benutzereingaben oder Teile davon zu
reagieren. Ein häufig hierfür angeführtes
Beispiel ist die Anzeige von Vorschlägen zur
automatischen Vervollständigung von StringEingaben.
Die typische Aufrufsyntax eines AJAX-Calls
(HTTP-get) sieht wie folgt aus:
var xmlHttp;
xmlHttp = new XMLHttpRequest();
if (!xmlHttp) {
// Internet Explorer 6 und aelter
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = null;
}
}
}
Innerhalb der im Beispiel „inline“ definierten
Funktion (diese kann man natürlich auch
auslagern) muss die eigentliche Verarbeitung
der Antwort auf den get-Request stattfinden.
Quellen und Tutorials
Für die in den vorangegangenen Abschnitten
vorgestellten Technologien gibt es nahezu
unzählige Quellen und Tutorials. Neben den
schon
erwähnten
Standards
bzw.
Herstellerspezifikationen sind sie eventuell
besser dazu geeignet, sich möglichst schnell
einen Überblick zu verschaffen sowie
Lösungen zu spezifischen Problemstellungen
zu
finden.
Anleitungen
und
Nachschlagewerke zu den Themen HTML,
CSS und JavaScript finden sich unter
http://de.selfhtml.org/
und
http://www.galileocomputing.de/openb
ook/javascript_ajax/
Erste Schritte
Laden Sie sich zunächst die gepackte
Binärversion des Apache Tomcat 6.x Server
herunter
(http://tomcat.apache.org/).
Entpacken Sie den Server in einem
Verzeichnis Ihrer Wahl und starten Sie ihn
mit dem Aufruf „startup“ im Verzeichnis
/bin über die Konsole. Ist der Aufruf
erfolgreich8 überprüfen Sie anschließend ob
der Server läuft indem Sie im Browser Ihrer
Wahl die URL http://localhost:8080/
aufrufen. Falls der Server korrekt gestartet
werden konnte, sollte die folgende Oberfläche
angezeigt werden:
if (xmlHttp) {
xmlHttp.open(‘GET’, url);
xmlHttp.onreadystatechange =
function {
//tue etwas
};
xmlHttp.send(null);
} else {
//Fehlerbehandlung
}
Hierbei
stellt
der
obere
Teil
die
Sonderbehandlung des Internetexplorers dar.
8
Tomcat benötigt Zugriff auf ein JDK um
korrekt zu funktionieren. Daher sollte die
Umgebungsvariable JAVA_HOME korrekt gesetzt
werden. Ob dies der Fall ist oder nicht erfahren
Sie, indem Sie in der Konsole „set JAVA_HOME“
aufrufen. Unter “Start->Control Panel>System->Advanced->Environment
Variables” können Sie Umgebungsvariablen
anlegen oder verändern.
4
Anschließend sollten Sie die Aufgabe 5
auschecken. Sie können das entweder direkt
über Eclipse oder über Tortoise SVN
erledigen. Falls Sie sich für die 2. Möglichkeit
entscheiden, wird empfohlen, dass Sie die
Aufgabe danach in Eclipse weiterbearbeiten.
Im nächsten Schritt müssen Sie die Datei
/localconfig/build.properties so anpassen,
dass die enthaltenen Properties an den
Installationspfad des Webservers angepasst
werden. Ist dies geschehen, öffnen Sie als
nächstes das ant-file build.xml. In Eclipse
werden nun alle verfügbaren Ziele (Targets)
des Skripts angezeigt. Wählen Sie das Ziel
„deploy“ aus und starten Sie das Deployment
über das Kontextmenü. Alternativ können Sie
auch die Binär-Version von Ant installieren,
den Pfad in der path-Variable angeben und
über den Kommandozeilenbefehl ant deploy
im Projektverzeichnis den Buildvorgang
anstoßen.
Ist
das
Build-Skript
ohne
Fehler
durchgelaufen können Sie jetzt den FeedProxy
über die folgenden Requests testen (selbiges
muss später mittels JavaScript erledigt
werden):
http://localhost:8080/FeedServer/
feed.server?action=subscribe_feeds&
feedUrl=http://localhost:8080/
FeedServer/beer.xml
http://localhost:8080/FeedServer/
feed.server?action=get_subscribed_fe
eds
http://localhost:8080/FeedServer/
feed.server?action=unsubscribe_feeds
&feedUrl=http://localhost:8080/
FeedServer/beer.xml
Funktionieren
die
Aufrufe
wunschgemäß (die XML-Rückgabe der
Services wird angezeigt) so können
Sie nun mit der Entwicklung der
Weboberfläche loslegen.
Bearbeitung der Aufgabe
Für die Bearbeitung dieser Aufgabe wird kein
Skelett
ausgeliefert.
Lediglich
der
FeedProxyServer mit den im vorigen
Abschnitt genannten Requests steht zur
Verfügung.
Die
Entwicklung
der
Weboberfläche selbst bleibt vollkommen
Ihnen überlassen. Die Ressourcen, die im Web
zu diesem Thema zur Verfügung stehen (auch
über die schon genannten hinaus) sind so
zahlreich, dass sich die allermeisten
Fragestellungen schnell beantworten lassen
sollten.
Weiteres Vorgehen
Legen Sie die Dateien die Sie erstellen jeweils
in den entsprechend benannten Ordnern an.
HTML-Dateien in /web/html, JavaScriptDateien in /web/script und CSS-Dateien in
/web/css. Achten Sie bei der Referenzierung
der Dateien darauf, dass dies immer relativ
geschehen sollte. Spätestens wenn Sie einmal
eine Webanwendung auf einen anderen
Server stellen möchten, führen absolute Pfade
zu Schwierigkeiten. Zugriff auf das von Ihnen
zu erstellende HTML-Frontend erhalten Sie
demnach über:
5
http://localhost:8080/FeedServer/htm
l/<name_der_datei>
Die URL:
http://localhost:8080/FeedServer
wird übrigens automatisch auf die Datei
/html/index.html auf dem Server gemapt.
Wenn Sie diese Einstellungen ändern
möchten, dann passen Sie bitte die Datei
/web/WEB_INF/web.xml entsprechend an.
Aufgabenstellung
Ziel dieser Aufgabe ist es eine Weboberfläche
zu erstellen, die es erlaubt News-Feeds an
einem gegebenen Feed-Proxy zu abonnieren,
anzuzeigen und wieder abzubestellen. Die
entsprechende Funktionalität stellt der Proxy
über die URL
http://localhost:8080/FeedServer/
feed.server
bereit. Über den Request-Parameter action
lässt sich die jeweilige Funktionalität abrufen.
Zur Verfügung stehen:
subscribe_feeds
unsubscribe_feeds
get_subscribed_feeds
Wobei die ersten beiden jeweils die Angabe
des weiteren Parameter feedUrl erfordern.
Sie können auch mehrere URLs gleichzeitig
übertragen. Ob die Parameterübergabe per
HTTP-Post oder HTTP-Get gelöst wird bleibt
Ihnen überlassen, der Server kann mit beiden
Übergabemethoden umgehen. Die Zugriffe
auf die entsprechenden Dienste sollen per
AJAX durchgeführt werden. Für die zu
erstellende Weboberfläche ist folgende
Funktionalität gefordert: Auf die Eingabe
einer gültigen Feed-URL (beispielsweise über
ein Textfeld) soll dieser abonniert werden
können (z.B. über das Drücken eines HTMLButtons, oder die Auswahl eines Links).
Handelt es sich um keine gültige URL so soll
die Fehlermeldung des Servers an den
Benutzer weitergeleitet werden. Ist die FeedAdresse gültig, so soll sie zusammen mit den
anderen abonnierten Feeds in einer Liste auf
der Oberfläche angezeigt werden. Es bleibt
dabei ebenfalls Ihnen überlassen, wie Sie die
Liste implementieren möchten. Sie können
z.B. das HTML-Element select verwenden
oder selbst eine Liste mit geeigneter
Funktionalität erstellen. Wird nun ein
abonnierter Feed vom Benutzer aus der Liste
ausgewählt,
sollen
die
Nachrichtenüberschriften in einem weiteren
Bereich auf der Seite aufgelistet werden (mit
Datum falls vorhanden). Bei Klick auf die
entsprechende Überschrift soll ein neues
Fenster
geöffnet
werden,
das
die
entsprechende Nachricht anzeigt. Das neue
Fenster soll dabei ohne Menü- und Toolbar
erzeugt werden. Zudem soll als Überschrift
über der Newsliste die Hauptseite des Feeds
verlinkt werden und ebenfalls in einem neuen
Fenster geöffnet werden können.
Für
Tests
steht
Ihnen
unter
http://localhost:8080/FeedServer/
beer.xml ihr eigener Atom-FeedServer zur
Verfügung. Bitte nutzen Sie diesen während
der Entwicklung der Oberfläche, um bei
Anbietern von „echten“ Feeds keinen
unnötigen Datenverkehr zu erzeugen.
Aus der Liste der abonnierten Feeds sollen
Einträge vom Benutzer auch wieder gelöscht,
also abbestellt, werden können. Zudem sollen
alle abonnierten Feeds im Hintergrund ohne
Interaktion
des
Benutzers
periodisch
abgefragt werden und Änderungen (neue
Nachrichten) durch eine Hervorhebung des
Feeds signalisiert werden. Bei Klick auf den
Feed soll die Markierung aufgehoben werden.
Dasselbe soll in der Liste mit den News für
gelesene
und
ungelesene
Nachrichten
implementiert werden.
Fehler, die aufgrund von Benutzereingaben
auftreten, sollen in geeigneter Weise
angezeigt werden. Zudem soll während der
Kommunikation über AJAX ein animierter
Ladebalken eingeblendet werden. Das Layout
aller Strukturen und Widgets auf der
erstellten Webseite soll soweit wie möglich
über CSS definiert werden.
Überlegen Sie sich eine Möglichkeit wie man
die einzelnen Feeds (semi-) automatisch mit
geeigneten
Piktogrammen
oder
Icons
versehen könnte. Halten Sie dies schriftlich in
einer Textdatei fest und checken Sie diese
unter dem Ordner „docs“ im SVN ein.
Versuchen Sie Ihre Überlegungen in einer
einfachen Implementierung umzusetzen.
Hinweise
Programmieren mit JavaScript kann vor allem
zu
Beginn
recht
anstrengend
sein.
Insbesondere da Fehlermeldungen der
Browser oftmals wenig Aufschluß über die
Ursache des Problems geben. Es wird daher
dazu geraten, Mozilla Fierfox mit der
6
„Firebug“-Erweiterung als Testbrowser zu
benutzen. Firebug9 bietet zusätzlich für
HTML, CSS und Cookies Hilfestellung. Ein
ganz
ähnliches
Hilfsmittel
ist
das
10
Webdeveloper-Addon . Hiermit lassen sich
unter anderem die Gültigkeit von HTML und
CSS bequem überprüfen. Gerade beim Einsatz
von
AJAX
steht
zusätzlich
mit
LiveHttpHeaders11 ein nützliches Tool zur
Verfügung. Hiermit lassen sich die httpAnfragen und Antworten aufzeichnen und
ansehen.
Programmierrichtlinien
Bitte halten Sie sich beim Programmieren an
die nachstehenden Richtlinien – die Richtlinienkonformität geht in die Bewertung Ihrer
Lösung mit ein! Bitte beachten Sie, dass sich
die Richtlinien je nach Programmiersprache
von Aufgabenblatt zu Aufgabenblatt leicht
unterscheiden können.
Bitte beachten Sie, dass diese Aufgabe so
gestellt ist, dass objektorientiertes Design
nicht zwingend erforderlich ist. Die
JavaScript-Funktionen
mit
der
Objektorientierung richtig in Einklang zu
bringen, erfordert einige Erfahrung und ist
insbesondere bei umfangreicheren Projekten
sinnvoll.
Ein
objektorientierter
Programmierstil wird im Rahmen der
gestellten Aufgabe nicht verlangt.
Sprache
Kommentare und sämtliche Bezeichnungen
sind in Englisch zu verfassen.
Zeilenlänge und Einrückung
Die Zeilenlänge darf 80 Zeichen nicht
überschreiten.
Die Einrückungstiefe beträgt vier Leerzeichen.
Kurze Kommentare
Kurze Kommentare dienen zur Verbesserung
der Lesbarkeit des Codes:
9
https://addons.mozilla.org/
de/firefox/addon/1843
10
https://addons.mozilla.org/
de/firefox/addon/60
11
https://addons.mozilla.org/
de/firefox/addon/3829
if (a == 2) {
return TRUE; /* special case */
} else {
return isPrime(a); /* works only for odd 'a' */
}
Der ersten Kommentar sollte beispielsweise
nicht lauten: /* if a=2 then return
true */.
Vor
jeder
CSS-Klasse
bitte
einen
beschreibenden
Kommentar
einfügen.
Wichtige Elemente innerhalb der HTMLDatei(en)
bitte
ebenfalls
ausreichend
kommentieren.
Klassen-, Methoden- und
Funktionskommentare für
JavaScript
Für Klassen- und Methodenkommentare
sollte JavaDoc/Doxygen verwendet werden.
Bei Klassen sollten die Autoren und Versionen
genannt werden. Bei Methoden und
Funktionen sind die Parameter zu erklären.
/**
* Short class description
* (one sentence).
*
* Extended descriptions
*
* @author name_of_author
* @author name_of_author2
* @version date_of_last_change
*/
function Example {
[...]
}
/**
* Short method description
* (one sentence).
*
* Extended descriptions
*
* @param accuracy Defines the type
*
of the shape:
*
0=precise, 1=fast
*
approximation
* @return Number of matching
*
datasets.
*/
function GetNumberOfExamples(
accuracy) {
[...]
}
7
Namenskonventionen

Generell: Bitte „CamelCase“ verwenden,
zum
Beispiel
CamelCaseLooksLikeThis.

Klassen und Interfaces: Einfache
Substantive in UpperCamelCase.

Öffentliche Methoden und Funktionen:
Einfache Verben oder sprechende
Bezeichnungen, in lowerCamelCase.

Sonstige Methoden: Einfache Verben
oder
sprechende
Bezeichnungen
lowerCamelCase.

Variablen:
Möglichst
kurze
„sprechende“
Bezeichnungen
in
lowerCamelCase.

Temporäre Variablen dürfen auch ein
Zeichen wie „i“ als Namen haben.
8
Fragenkatalog
Sie müssen mindestens die Hälfte der
folgenden Fragen richtig beantworten, um das
Fachpraktikum erfolgreich abzuschließen.
Eine Frage gilt dann als richtig beantwortet,
wenn genau die richtigen Antworten markiert
sind. Es können beliebig viele Antworten pro
Frage richtig sein, also auch keine oder alle.
(X)HTML
1.
Welche der folgenden Fragmente stellen
repräsentiern
(korrekten
Kontext
vorrausgesetzt) gültiges XHTML?
 <div id=”5”>Inhalt</div>
 <div class=myClassX>Inhalt</div>
 <div class=”myClassX”/>
2. Welches der nachfolgenden (X)HTMLElemente (+Attibut) eignet für die
Darstellung
einer
Auswahl
von
verschiedenen Optionen?
 <select>…</select>
 <input type=“radio“>…</input>
 <input type=“checkbox“>
…</input>
3. Wie lassen sich ohne AJAX, also auf
herkömmliche Art und Weise in HTML
bzw. JavaScript http-Requests an einen
Server senden?
 Implizit mittels eines HTML-Links
(<a href=“…“>…</a>)
 Mit Hilfe eines Formular-Elements:
<form method=“get“ action=“…“>
…
<input type=“submit“>…</input>
</form>
 Mit Hilfe eines JavaScript-Aufrufs:
form.submit();
(Der Variablen „form“ wurde zuvor
ein Formularobjekt zugewiesen)
 Implizit über ein Image-Element:
<img src=“…“/>
4. Welche der aufgeführten Eventhändler
können in der angegebenen Reihenfolge
abgefragt werden um eine „Rollover“Funktionalität in HTML mit JavaScript zu
realisieren. Beispiel: Wenn ein Benutzer
die Maus über den Eintrag einer Liste
bewgt, dann soll dieser in einer anderen
Frabe hervorgehoben werden?
 onmousedown, onmouseup
 onmouseover, onmouseout
 onfocus, onblur
5. Früher wurde das Layout von HTMLSeiten häufig mittels Tabellen-Elementen
gesteuert. Welche Probleme bringt eine
solche Vorgehensweise mit sich?
 Keine Trennung von Inhalt und
Layout.
 Die Wartung solcher Seiten ist
mitunter aufwändiger als dies bei
Benutzung von CSS der Fall wäre.
 Die Nutzung von CSS bringt
Geschwindigkeitsvorteile
beim
Rendern von (X)HTML -Seiten.
CSS
6. Auf welche Art lassen sich externe CSSDefinitionen in (X)HTML einbinden?



<style type=”text/css”
href=”foo.css”></style>
<link rel=”stylesheet”
type=”text/css”
href=”foo.css”><link>
<style type=”text/css”>
@import url(“foo.css”)
</style>
7. Wie wird der Universalselector in CSS
notiert?
 ? {…}
 * {…}
 univ {…}
 + {…}
8. Welche der folgenden Aussagen trifft für
Kommentare in CSS zu?
 Ab der Zeichenfolge „//“ werde alle
weiteren Zeichenbis zum Ende der
Zeile als Kommentar interpretiert.
 Einzelne Zeilen die als Kommentar
interpretiert werden sollen müssen
mit „#“ beginnen.
 Kommentare
werden
mit
den
Zeichenfolgen „/*“ und „*/“ begrenzt.
9. Mit welchem der folgenden Selektoren
lässt sich in CSS2 ausschließlich den pElementen, die direkte Kinder eines divElements sind, ein bestimmtes Format
zuweisen?
 div *
 div > p
 div + p
 div, p
10. Wie sieht die Festlegung einer CSS-Klasse
„myClass“ aus, die allen Elementen mit
9
dem Attribut class=“myClass“ rote Schrift
auf blauem Hintergrund zuweisen soll?
 .myClass {
background-color:blue;
color: red;
}
 *.myClass {color:red;
background-color:blue;}
 .myClass {backgroundcolor;blue:color;red}
 Class myClass {
background-color = blue;
color = red;
}
beim Laden einer Seite
Funktionen aufzurufen?
JavaScript-

…
<body onload=“functionXY()“>
…
 …
<script
type=“text/javascript“>
document.onload=functionXY;
<script/>
…
 …
<script
type=“text/javascript“>
window.onload=functionXY;
<script/>…
JavaScript
11. Der Begriff „Ajax“ wird unter anderem
für:
 ein Waschmittel
 einen Fußballverein
 einen griechischen Helden
 asynchronous JavaScript and XML
verwendet.
12. Um im HTML_Context mit JavaScript die
Ausführung einer Aufgabe zeitlich zu
steuern benutzt man sinnvollerweise:



window.iterate()
window.setTimeout()
window.setInterval()
13. Welcher lautet der korrekte JavaScriptAufruf um auf den Textinhalt eines „div“Elementes mit der id „message“
zuzugreifen? Hier noch das Beispiel als
HTML-Fragment:
…<div id=“message“>Textinhalt<div/> …
Bitte
ignorieren
Sie
ungültige
Zeilenumbrüche bei der folgenden
Auswahl!

var elems =
docment.getElementsByTagName(“div“)
;
var text;
for (var i = 0; i < elems; i++) {
if (elems[i].getAttribute(“id”)
== message) {
text = elems[i].nodeValue;
}
}
 var text =
document.getElementById(“message“)
.firstChild.nodeValue;
 var text =
document.getElementById(“message“)
.lastChild.nodeValue;
14. Welche der nachfolgend aufgezählten
Möglichkeiten lassen sich dazu nutzen
10
Bewertungskriterien
Punkte
Der Web-Applikations-Server Tomcat wurde korrekt installiert und das Ant-Skript
lässt sich ausführen und aktualisiert sowohl den Feed-Server als auch die
Weboberfläche.
2
Der komplette Quellcode ist standardkonform. Er enthält keine offensichtlichen
Speicher- und Ressourcenlecks oder offensichtlich semantisch falsch verwendete
Sprachkonstrukte.
Die JavaScript-Teile der Aufgabe sind sinnvoll dokumentiert und befolgen die
Programmierrichtlinien (Dokumentation analog zu Java). Zudem ist der HTML-Code
dokumentiert, CSS-Klassen sind sinnvoll benannt. Die Oberfläche lässt sich im VISGSPool in einem Browser Ihrer Wahl anzeigen, nachdem der Anwendungs-Code auf dem
Webserver deployed wurde.
3
Die Weboberfläche lässt sich ohne Fehler aufrufen und ist robust im Hinblick auf
sämtliche möglichen Benutzerinteraktionen.
2
Es gibt innerhalb der Weboberfläche eine Möglichkeit neue News-Feeds zu
abonnieren. Zum Beispiel in Form eines Texteingabefeldes und eines Buttons für das
Abonnement.
3
Es wird auf der Oberfläche eine Liste der abonnierten News-Feeds angezeigt, aus der
ein bestimmter Feed selektierbar ist und die sich bei Abonnement neuer sowie dem
Abbestellen vorhandener Feeds automatisch aktualisiert. Das Abbestellen soll ebenfalls
über die Liste möglich sein.
3
Wird ein abonnierter Feed ausgewählt so erscheinen der Titel und das Datum (sofern
vorhanden) der aktuellen Nachrichten in einer weiteren Liste oder Tabelle. Dabei
sollen sowohl die Nachrichten-Seite selbst als auch die einzelnen Nachrichten auf
einen Mausklick hin in einem neuen Fenster (ohne Menü und Toolbar) geöffnet
werden. Gelesene Nachrichten sollen geeignet markiert werden.
4
Für alle abonnierten Feeds soll regelmäßig auf dem Server nachgefragt werden, ob
neue Nachrichten eingetroffen sind ist dies der Fall so soll dies dem Benutzer
signalisiert werden und neue Nachrichten als noch nicht gelesen markiert werden (z.B.
durch farbliche Kennzeichnung).
3
Jegliche Kommunikation mit dem Server soll über AJAX erfolgen. Fehler, die aufgrund
von ungültigen Benutzereingaben oder Serverfehlern auftreten, müssen geeignet
abgefangen und an den Benutzer weitergeleitet werden.
2
Während eines AJAX-Requests soll ein animierter „Ladebalken“ eingeblendet werden,
der nach Ende der Kommunikation wieder abgeschaltet wird.
2
Innerhalb der HTML-Seite werden Elemente ausschließlich zur Strukturierung der
Inhalte eingesetzt. Die Layoutinformation ist in CSS ausgelagert.
2
Im SVN befindet sich eine Textdatei mit einer kurzen Erläuterung dazu, wie man
zusätzlich zum Namen einer Newsseite bzw. deren Link auch noch ein Icon für die
Seite zuordnen und anzeigen könnte.
2
Die Überlegungen aus dem vorigen Punkt wurden implementiert.
2
Gesamtpunktzahl
30
11
Herunterladen