Projektbericht – YouTube 5.0 Projektteam: Michael Baumgartner

Werbung
Projektbericht – YouTube 5.0
Projektteam:
Michael Baumgartner, Christoph Asanger, Matthias Lange, Thomas Ostarek, Nicole Stanek
Projektbeschreibung:
Ziel des Projektes war es, eine Website mit HTML 5 zu erstellen, die es ermöglicht nach
YouTube Videos zu suchen und diese abzuspielen. Benutzer sollten sich auf der Website nach
einmaliger Registrierung anmelden können, um auf ihre persönliche Favoritenliste Zugriff zu
haben. Diese Favoritenliste sollte per Drag & Drop sortierbar sein.
Projektaufteilung:
Christoph:
Benutzerverwaltung
Michael:
Videosuche
Matthias:
Video und Drag&Drop mit HTML5
Nicole:
Datenbank
Thomas:
Design
1. Datenbank:
Um die geplante Benutzerverwaltung und individuellen Favoritenlisten realisieren zu können,
wurden zwei Tabellen benötigt, die mit den folgenden SQL Statements erstellt wurden:
CREATE TABLE IF NOT EXISTS `users` (
`User_Id` int(11) NOT NULL AUTO_INCREMENT,
`Username` varchar(255) NOT NULL,
`Email` varchar(255) NOT NULL,
`Password` varchar(255) NOT NULL,
PRIMARY KEY (`User_Id`)
);
CREATE TABLE IF NOT EXISTS `videos` (
`Video_Id` int(11) NOT NULL,
`User_Id` int(11) NOT NULL,
`List_item` varchar(255) NOT NULL,
`Item_order` int(11) NOT NULL,
PRIMARY KEY (`Video_Id`)
);
Um die Persistenz der Laufzeit-Objekte zu gewährleisten, wurde mit Hilfe der Java
Persistence API die Zuordnung und Übertragung der Objekte zu den zugehörigen
Datenbankeinträgen realisiert. Diese Schnittstelle ermöglicht den Einsatz relationaler
Datenbanken.
Während der Implementierung wurden hierfür die Konfigurationsdatei (persistence.xml), Java
Beans (pro Datenbanktabelle: user.java, video.java) und ein Datenzugriffsobjekt
(UserDAO.java) erstellt. Das Datenzugriffsobjekt verwaltet den Zugriff auf die Datenbank
und bietet die automatisierte Erstellung für die Basisoperationen an.
2. Benutzerverwaltung:
Technik:
Html5 Web Strorage:
Web Storage ist eine mit Html5 angebotene API um Daten im Web Browser abzuspeichern.
Der Web Storage ist ein persistenter Speicher der in seiner Funktionalität dem des Browser
Coookies entspricht. Die Speicherung der Daten erfolgt anhand von Key/Value Paaren welche
beide im String Format gespeichert werden.
Gegenüber Cookies besitzt er aber einige Vorteile.
Der Web Storage unterscheidet sich in zwei arten Session Storage und Local Storage
Der Session Storage ist nur für die Dauer der Session gültig. Es wird für jedes geöffnete
Browser Window oder Tab ein separater Session Storage erzeugt. Dadurch werden Probleme
vermieden die bei der Verwendung von Cookies entstehen können wie zB. Das mehrfache
bestellen des selben Produckts in einem online Shop wenn der Kunde diesen in mehreren Tabs
geöffnet hat.
Der Local Storage ist ein persistenter Speicher, er existiert für jeden installierten Browser
separat.
Die Besonderheit des Local Storage ist das bei einem hinzufügen eines neuen Eintrages oder
bei Änderung eines vorhandenen ein Web Storage Event erzeugt wird. Dieses kann zB. dazu
benutzt werden mehrere offene Tabs oder Windows der entsprechenden Webseite zu
Synchronisieren und somit Race conditions zu vermeiden.
Client-siede Interface: der zugriff auf den Storage muss über Client Scripts erfolgen. Der
Vorteil ist hierbei das im Gegensatz zu Cookies der Inhalt nicht in jedem http Request
mitgesendet wird und sich so der Treffic verringert. Der Server muss dementsprechend read
and write Requests senden.
Die Speichergröße ist von der Implementierung des Browsers abhängig als Standard sind
5MB pro Domain angelegt. Cookies sind hingegen auf 4KB pro Cookie und je nach Browser
auf maximal 20 bis 50 Stück limitiert.
Daraus resultiert ein breiteres Anwendungsspektrum als das bloße abspeichern von Login
Variablen. Es wäre zB. eine Nutzung ähnlich eines Cache denkbar um das laden der Webseite
zu beschleunigen . So lassen sich mittels base64 Codierung beispielsweise auch Bilder
abspeichern.
Der User kann die Nutzung des Web Storage wie bei Cookies deaktivieren weshalb man
entsprechende Vorkehrungen treffen muss und sich nicht ausschließlich auf dessen Nutzung
verlassen kann. Ein weitere Punkt indem Web Storage und Cookies übereinstimmen ist die
Sicherheit,
die werte werden unverschlüsselt abgespeichert. Für die Speicherung von sensiblen Daten wie
zB. Bankkonto oder Kreditkartennummer ist der Web Storage genauso wenig geeignet wie
Cookies.
Ablauf:
Nur ein registrierter User kann eine Favoritenliste aus Youtube Videos erstellen. Sollte ein
User nicht autorisiert sein wird er automatisch auf die Login Seite geleitet. Bei der
Registrierung muss ein noch nicht in der Datenbank vorhandener Username und ein Passwort
angegeben werden. Das Password muss mindestens 6 Zeichen lang sein. Die Überprüfung
erfolgt in der registredBean. Sollten diese Kriterien nicht erfüllt werden wird dem User eine
entsprechende Fehlermeldung angezeigt. Nach einer erfolgreichen Registrierung wird der
entsprechende Usereintrag in der Datenbank angelegt und kann sich fortan auf der Seite
einloggen.
Der Login erfolgt in der loginBean. Zuerst wird der anhand des angegebenen Usernamens der
entsprechende Eintrag aus der Datenbank geladen. Sollte der Username nicht existieren wird
eine entsprechende Fehlermeldung angezeigt. Stimmt das Passwort mit dem aus der
Datenbank überein wird im Session Storag eine „authorized“ Key mit dem wert „yes“ und die
user_id des Users gespeichert.
Bei Logout werden die im Session Storag gespeicherten werte „user_id“ und „authorized“
gelöscht.
3. Videosuche per Webservice:
xxx
4. Video und Drag&Drop mit HTML5:
YouTube Videos mit HTML5 einbinden:
Mit einem neuen Embed-Code erlaubt YouTube das Einbetten von Videos in die eigene
Webseite im HTML5-Format. Dieser neue Weg richtet sich derzeit primär an Entwickler,
ermöglicht aber schon jetzt Videos auf Geräten, die keine Wiedergabe von Flash-Inhalten
zulassen.
Die Grundlage für das Einbetten von HTLM5-Videos ist ein neuer Embed-Code, der auf das
<iframe>-Tag setzt. Verfügt ein Browser über das Flashplayer-Plugin, liefert der neue Code
auch weiterhin den Flash-basierten YouTube-Player aus, wodurch wie gewohnt auch Werbung
mit ausgeliefert werden kann. Unterstützt der Browser dagegen keine Flash-Wiedergabe,
liefert der Code den HTML5-Player von YouTube aus.
Das Einbetten des YouTube HTML5-Players ist dabei an zwei Voraussetzungen geknüpft.
Zum einen müssen die Nutzer den YouTube HTML5 Beta-Channel aktivieren. Und auch dann
spielt der Embed-Code das Video nur im Format h.264-Stream (Chrome, Safari) oder im
WebM-Format (Opera, Vorabversion des Firefox) aus. Nutzer des Internet Explorer 8
profitieren von dieser Möglichkeit vorerst nicht. Der Embed-Code lautet dabei:
<iframe class="youtube-player" type="text/html" width="640" height="385"
src="http://www.youtube.com/embed/VIDEO_ID" frameborder="0">
</iframe>
Der HTML5-Player von YouTube befindet sich momentan noch in einer experimentellen
Betaphase und einige Funktionen werden noch nicht unterstützt. Die Wiedergabe eines Videos
in einer Endlosschleife (loop) und das Abspielen einer Wiedergabeliste (playlist)
funktionieren beispielsweise derzeit nicht mit HTML5. Wählt der Benutzer des HTML5Players eine dieser Funktionen aus, versucht der Player automatisch auf Flash umzuschalten.
Wenn der Browser Flash unterstützt merkt der Benutzer nichts von der Umstellung, ohne
Flash-Player bekommt er eine Meldung, dass die Funktion mit HTML5 nicht genutzt werden
kann.
HTML5 Drag and Drop:
Vor HTML5 ließ sich die Drag-und-Drop-Funktionalität in Webseiten mit JavaScriptBibliotheken umsetzen, doch der erhebliche Aufwand machte diese Lösung nicht sonderlich
populär. Mit dem HTML5 Drag and Drop API soll es in Zukunft leichter sein, WebseitenElemente drag- und dropbar zu machen. Um ein Element dragbar zu machen, muss das
Attribut „draggable=‘true‘“ gesetzt werden. HTML5 bietet Events, die beim Drag&DropVorgang ausgelöst werden. Diese Events rufen JavaScript-Funktionen auf, die der
Programmierer individuell nutzen kann, um seinen Code auszuführen, wenn ein bestimmtes
Event ausgelöst wird. Beispielsweise legt das Attribut „ondragstart=‘return dragStart(event)‘“
eines Elements fest, dass sobald der Anwender per Maus den Drag-Vorgang auf dem Element
startet, die Funktion „dragStart“ aufgerufen wird. Dort kann festgelegt werden, ob das
Element verschoben (move) oder kopiert (copy) werden soll. Während dem Drag&Drop-
Vorgang wird ein Transferobjekt erzeugt, in dem die Daten des gewählten Elements enthalten
sind. Es ist auch möglich zusätzliche Informationen, wie z.B. id’s im Transferobjekt zu
speichern, dabei wird mit „event.dataTransfer.setData(key, value)“ ein Key-Value-Paar
gespeichert, auf das dann während dem gesamten Drag&Drop-Vorgang zugegriffen werden
kann.
Drag&Drop mit HTML5 macht den Einstieg in die Implementierung von Drag&Drop auf
WebSeiten einfacher, jedoch wird zusätzlich noch viel JavaScript-Programmierung benötigt,
wenn man ein bestimmtes Verhalten bei Drag&Drop erreichen will.
5. Design / Struktur:
Durch HTML5 werden diverse neue Tags eingeführt, die das Strukturieren von Internetseiten
einfacher machen sollen. Bisher wird zur Strukturierung einer Seite meist eine ganze Reihe
von „DIV“-Elementen verwendet, die dann als Container für die einzelnen Seitenbereiche wie
etwa Kopfbereich, Navigation, Hauptbereich und Footer verwendet werden.
Um diese Strukturierung, die die meisten Seiten aufweisen, übersichtlicher zu gestalten gibt
es in HTML5 die neuen Tags <header>, <nav>, <section> und <footer>.
Strukturierung vor HTML5:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Youtube5</title>
<link rel="stylesheet" href="css/style.css" type="text/css"
media="screen" />
</head>
<body>
<div id=“header“>
Logo
</div>
<div id=“navigation“>
Navigationseinträge
</div>
<div id=“content“>
<h1>Inhalt</h1>
</div>
<div id=“footer“>
Footer
</div>
</body>
</html>
Strukturierung mit HTML5:
<!doctype html>
<html>
<head>
<title>Youtube5</title>
<link rel="stylesheet" href="css/style.css" type="text/css"
media="screen" />
</head>
<body>
<header>
Logo
</header>
<nav>
Navigationseinträge
</nav>
<section>
<h1>Inhalt</h1>
</section>
<footer>
Footer
</footer>
</body>
</html>
Hier wird bereits ersichtlich wie durch die neuen Tags mehr Übersichtlichkeit erreicht wird,
da die Namen und damit die Bereiche viel deutlicher unterschieden werden können und nicht
jeder Bereich durch ein „DIV“ Element dargestellt wird.
Weitere neue Elemente finden sich bei den Formularen. Die „Input Types“ wurden um weitere
Typen ergänzt, die des Weiteren auch eine erhöhte Funktionalität erhalten haben. So können
jetzt beispielsweise die „Input Types“ Email, Tel oder URL verwendet werden. Diese bieten
zudem eine integrierte Validierungsfunktionalität ohne weitere Techniken wie etwa JavaScript
zu benötigen:
<form action="" method="post">
Name:
<input type="text" class="text_field" placeholder="Name"
required="required"/>
E-Mail:
<input type="email" class="text_field" placeholder="[email protected]"
required="required" />
Telefon:
<input type="tel" class="text_field" placeholder="12345" required="required"
pattern="^(((((((00|\+)49[ \-/]?)|0)[1-9][0-9]{1,4})[ \/]?)|((((00|\+)49\()|\(0)[1-9][0-9]{1,4}\)[ \-/]?))[0-9]{1,7}([ \-/]?[09]{1,5})?)$"/>
<button class="submit_btn" type="submit">
Absenden
</button>
</form>
Wie am Beispiel zu sehen ist gibt es des Weiteren nun auch die Möglichkeit einen Platzhalter
anzugeben, der angezeigt wird als Beispieltext solange in das Feld nichts eingegeben ist,
sowie die Möglichkeit Reguläre Ausdrücke anzugeben um die Eingabe auf dieses Muster hin
zu überprüfen. Wird eine falsche Eingabe getätigt wird dies durch die Signalfarbe rot
visualisiert:
Herunterladen