11 Web-Anwendungen

Werbung
Klaus-Peter Löhr!
11 Web-Anwendungen!
11.1 Mobiler Code !
!
11.2 JavaScript - Teil 1
!
11.3 Document Object Model
11.4 JavaScript - Teil 2
!
11.5 Un/sicherheit !
!
11.6 Applets etc.
!
!
11.7 AJAX !
!
!
11.8 Web-Anwendungen
!
Zusammenfassung
!
!
WS 13/14
ALP 5 - Web-Anwendungen
!3!
!8!
!13!
!26!
!29!
!37!
!67!
!74!
!78!
1
Web-Anwendung (Web application) = verteilte Anwendung
mit Anwendungslogik als Backend beim Web Server
und Benutzerschnittstelle als Frontend beim Browser
Zusätzlich wünschenswert:
§  klientenseitig ausführbarer Code,
§  samt HTML vom Server heruntergeladen;
§  Benutzerschnittstelle ohne Server-Kontakt veränderbar!
è mobiler Code
(Vorsicht vor Trojanischen Pferden !)
WS 13/14
ALP 5 - Web-Anwendungen
2
11.1 Mobiler Code!
Zwei Techniken für das Herunterladen von mobilem Code:
<html>!
.....!
<script> alert('note:..') </script>!eingebetteter Code
.....!
<script src="myscript.js"></script>!nachzuladender Code
<applet code="Animation.class" ... >..</applet>
*
<object ..... >.. "Animation.class" ..</object>!
.....!
</html>
* HTML 4.01
WS 13/14
ALP 5 - Web-Anwendungen
3
Es gibt verschiedene Skriptsprachen:
!
<html>!
<head>!
<META http-equiv="Content-Script-Type" content="text/vbscript">!
.....!
Gilt für gesamtes Dokument.
</head>!
Voreinstellung ist "text/javascript" !
!
<body>!
.....!
<script type="text/javascript">!
!.................. !
!( JavaScript Code )
</script>!
.....!
<script>!
!.................. !
!( VBScript Code )
</script>!
.....
WS 13/14
ALP 5 - Web-Anwendungen
4
! Ein HTML-Verweis (Hyperlink, A element, tag <a> )
kann sich auf Skript-Code beziehen:
!
<html>!
.....!
<br>!
Unsere Geschäftsbedingungen finden Sie!
<a href="http://www.abc.com/agb.html">hier.</a>!
<br><br>!
Unsere Coldline erreichen Sie!
<a href="mailto:[email protected]">hier.</a>!
Wenn Sie Ihren Namen eingeben wollen - !
<a href="javascript: var name = prompt('Name:','');!
!
!
!
if(name=='') ..... ">hier.</a>!
.....!
</html>
!
WS 13/14
ALP 5 - Web-Anwendungen
5
Skript-Code kann auf eine Vielzahl vom Benutzer ausgelöster
Ereignisse reagieren. Beispiel mit GUI-Element in Formular:
<html>!
<head>!
<script>!
! function check() { ..... } !
!
!
</script>!
</head>!
!
<body>!
.....!
<input type="button" name="checkButton" !
value="check input" onclick=" check() " >!
.....!
!!
Auch hier beliebiger Skript-Code!
WS 13/14
ALP 5 - Web-Anwendungen
6
Ø  Einschlägige Sprachen für klientenseitig ausgeführten
eingebetteten Skript-Code in HTML:
§  JavaScript mit Varianten
•  ECMAScript
•  Jscript
(Microsoft)
•  JScript.NET
(Microsoft)
§  VBScript
§  Tcl
§  Flash
Ø  JavaScript wird von allen gängigen Browsern unterstützt!
Ø  Flash ist attraktiv für Graphik/Animation
WS 13/14
ALP 5 - Web-Anwendungen
7
11.2 JavaScript - Teil 1!
JavaScript ist keine Java-Variante!
Ø  Mehrparadigmensprache:
•  objektbasiert mit Prototypen statt Klassen
•  funktional (beeinflusst durch Scheme, Self, Smalltalk, ...)
Ø  ausgeführt durch einen Interpretierer im Browser
Ø  kann umgehen mit Elementen des Dokuments und des
umgebenden Browser-Fensters, ferner mit Ereignissen,
die durch den Benutzer ausgelöst werden
WS 13/14
ALP 5 - Web-Anwendungen
8
Meilensteine und Implementierungen:
–  JavaScript (1995): Netscape/Sun
–  ECMAScript: ECMA (European Computer Manufacturers
Association)
–  JScript: Microsoft
–  Seit Version 1.5: Orientierung an DOM (Document Object
Model): standardisierte Repräsentation des Dokumentinhalts
WS 13/14
ALP 5 - Web-Anwendungen
9
Ein erstes Beispiel:
!
<html><head> !
!
!
!!
<script> !
function action() {!
document.write("<br><font size=10 color='red'>"); !
document.write("<b>autsch!</b> </font> ")
}!
</script>
!
!!
</head>!
<body>!
<br>Dies ist !
<script> document.write("ein Test:<br><br>") !
</script>!
<input type="button" value="drück mich!" onclick=" action() ">!
<br><br>Nein,!
<a href="javascript: alert('aua!') ">mich!</a>!
</body>!
</html>
!
!
!
!
Hilfreich: Fehlermeldungen auf Fehlerkonsole des Browsers!
WS 13/14
ALP 5 - Web-Anwendungen
10
Wichtige Eigenschaften:
Ø  keine statische Typisierung
Ø  Mehrparadigmen-Sprache:
§  objektähnliche Elemente (keine Klassen)
§  „Vererbung“: Erweiterung eines Prototyps
§  funktionale Elemente
§  „Funktionen“ sind selbst Objekte
Ø  DOM: HTML-Elemente als Objekte
WS 13/14
ALP 5 - Web-Anwendungen
11
Objekte haben
§  Eigenschaften (properties)
§  Methoden (methods)
und können ad-hoc (!) um solche erweitert werden.
Funktionen können als Konstruktoren eingesetzt werden (vgl. Beta):
function Complex(r,i) { this.re = r; this.im = i; }
var c = new Complex(3.14, 1.0);
aber hier auch einfach var c = { re: 3.14, im: 1.0 }
Kein Unterschied zwischen Feld, Verbund, Objekt (vgl. PHP):
!
!
!c.re == c["re"]!
WS 13/14
ALP 5 - Web-Anwendungen
12
11.3 Document Object Model (DOM)!
Ø  JavaScript „sieht“ den HTML-Text als Baum von Objekten
und kann diesen Baum manipulieren!
Ø  Knoten in diesem Baum sind HTML-Elemente,
HTML-Attribute und andere.
Ø  Änderungen am Objektbaum schlagen sich sofort in
entsprechenden Änderungen der Ansicht nieder!
(Allerdings ist nicht alles erlaubt!)
WS 13/14
ALP 5 - Web-Anwendungen
13
Beispiel
(aus http://www.w3schools.com/htmldom/default.asp )
<html>!
<head>!
<title>My title</title></head>!
<body>!
<a href="other.html">My link</a>!
<h1>My header</h1></body></html>!
WS 13/14
ALP 5 - Web-Anwendungen
Hier 4 Knotentypen:
•  Document
•  Element
•  Attribute
•  Text
14
„Typen“ von Knoten im Objektbaum:
Node - Obertyp aller Knoten
Document - Wurzel des Baums: document
Element - HTML-Element
Attr - Attribut eines HTML-Elements
Weitere allgemeine „Typen“:
NodeList - Liste der Kindknoten eines Knotens
NamedNodeMap - die Attribute eines HTML-Elements
Ferner „Typen“ für etliche spezielle HTML-Elemente.
WS 13/14
ALP 5 - Web-Anwendungen
15
Events als Attribute name=value von HTML-Elementen:
name = Event-Name
value = JavaScript-Code, der beim Eintreffen des
Ereignisses ausgeführt wird. this ist das
dem Element entsprechende DOM-Objekt!
Typische Events:
!onclick!
!onmousedown
!onmouseover
!onsubmit!
!.....!
onmouseup!
onmouseout!
!
Jedes Element hat seine eigenen - jeweils sinnvollen - Events.
WS 13/14
ALP 5 - Web-Anwendungen
16
Beispiel mit einfachem Textelement:
<html><body>!
<p id="test" !
onclick=" firstChild.nodeValue = 'pong' ">!
ping!
<br>!
pong!
</p>!
</body></html>!
Beim Klicken irgendwo im Absatz test
wird ping durch pong ersetzt.
WS 13/14
ALP 5 - Web-Anwendungen
17
Lokale Überprüfung von Formulareingaben
Zur Erinnerung: gothic (10.3.3, 10.3.4 )
Zur Entscheidung über eine mögliche Mitgliedschaft im
Gothic Club bedarf es gar keiner Rückfrage beim Server!
Sie kann klientenseitig mit JavaScript vorgenommen werden:
1.  Eingabe syntaktisch korrekt?
2.  Entscheidung über eligible.
Achtung:
WS 13/14
Trotzdem ist es ratsam, wichtige Prüfungen
immer auch beim Server vorzunehmen;
denn der Klient kann ja den Browser umgehen.
ALP 5 - Web-Anwendungen
18
<FORM action="http://localhost/alp5/php/gothic.php" method="GET">!
!First name: !<INPUT type="text" name="firstname" size=10>
!
!Last name: !<INPUT type="text" name="lastname"><br>!
!Age: !<INPUT type="text" name="age" size=2><br>
!
!email:!<INPUT type="text" name="email"><br>!
!Sex: !<INPUT type="radio" name="sex" value="Male"> male!
!
!<INPUT type="radio" name="sex" value="Female"> female!
!<BR><BR>!
!<INPUT type="submit"> <INPUT type="reset">
!
WS 13/14
!
</FORM>
!
!
! ALP 5!- Web-Anwendungen
!
!
ersetzen19durch:
<FORM onSubmit=" !
partielle Eingabeüberprüfung
var years = parseInt(age.value);!
var error = isNaN(years) || years<=0 || years>150;!
if (error) errorAlert(age.value)!
else check(years,elements[4].checked,firstname.value);!
return false " >
!
!!
!First name: !<INPUT type="text" name="firstname" size=10>
!
!Last name: !<INPUT type="text" name="lastname"><br>!
!Age: !<INPUT type="text" name="age" size=3><br>
!
!email:!<INPUT type="text" name="email"><br>!
!Sex: !<INPUT type="radio" name="sex" value="Male"> male!
!
!<INPUT type="radio" name="sex" value="Female"> female!
!<BR><BR>!
!<INPUT type="submit"> <INPUT type="reset">
!
</FORM> !
!
!
!
!
!
!!
WS 13/14
ALP 5 - Web-Anwendungen
20
Ø  !Das INPUT-Element mit Attribut name="age" wird im DOM!
durch das Kind age des Formularobjekts repräsentiert
und der Wert von dessen value-Attribut durch age.value
(entsprechend für firstname ).
Ø  !elements[4] repräsentiert den Schalter Male. Das Attribut
checked prüft, ob er eingeschaltet ist.
Ø  onSubmit: Der hier angegebene JavaScript-Code bildet den
Rumpf einer anonymen Boole‘schen Methode des Formularobjekts.
Er wird aktiviert, wenn der submit-Knopf gedrückt wird.
Ø  Der gelieferte Wert entscheidet, ob das submit tatsächlich
ausgeführt wird oder nicht.
WS 13/14
ALP 5 - Web-Anwendungen
21
<SCRIPT> !
function errorAlert(age) {!
document.bgColor = "red";
!
alert("incorrect age " + val);!
document.bgColor = "white"; } !
</SCRIPT>!
<SCRIPT>!
function check(age, male, name) {!
var eligible = male? age>70 : age>75;!
document.open();!
if(eligible)!
document.write('<h2>Ok!</h2>')!
else document.write(!
'<h2>Sorry, ' + name.split(' ')[0] +!
', you are not eligible.</h2>');!
document.close()
} </SCRIPT>!
(Dies z.B. im HEAD-Element unterbringen.)
WS 13/14
ALP 5 - Web-Anwendungen
22
JavaScript Code statt Hyperlink
Script-Aktivierung auch durch Klicken auf Verweis-Element a :
!
<a href="javascript: . . . (JavaScript code) . . . ">
. . . HTML: Text, Bilder, . . .
</a>!
Beim Anklicken wird der Code ausgeführt.
Aber Achtung: Wenn der letzte berechnete Wert
(Ausdruck oder Anweisung) nicht undefined ist,
ersetzt er - als HTML interpretiert - das aktuelle
Dokument.
WS 13/14
ALP 5 - Web-Anwendungen
23
Beispiel Bild ersetzen:
!
<html><head><title>Test DOM</title></head>!
<body><br><br>!
<p align="center">!
<a href="javascript: image.src = 'tree.gif'; undefined ">!
!<img !id="image" src="tuer.jpg" !
!
!width="300" height="300"></a>!
!<br>!
tuer.html
!Open door!!
</p>!
</body></html>
(Ohne undefined wird der ganze Fensterinhalt
durch den Text „tree.gif“ ersetzt.)
WS 13/14
ALP 5 - Web-Anwendungen
24
Beispiel DOM-Baum verändern: Textknoten entfernen
!
<html><head><title>TestX DOM</title></head>!
<body><br><br>!
<script> function swap() { !
image.src = 'tree.gif';!
p.removeChild(p.childNodes[4]) }!
</script><br><br>!
<p id="p" align="center">!
<a href="javascript: swap() ">!
<img id="image" src="tuer.jpg" !
width="300" height="300"></a>!
<br>!
Open door!!
</p>!
tuerX.html
</body></html>!
WS 13/14
ALP 5 - Web-Anwendungen
25
11.4 JavaScript - Teil 2!
Drei JavaScript-Prinzipien:
Œ Verwendung: lokale Reaktion auf Ereignisse, die
durch Benutzer-Interaktion ausgelöst werden.
 Bevorzugter Stil: weitgehende Trennung von HTML
und JavaScript: Code in functions konzentrieren und
z.B. im Dokumentkopf unterbringen - vorzugsweise
in getrennten <SCRIPT>-Elementen.
Ž
WS 13/14
Nachgeladener Code und Trennung von HTML, CSS, JS
ALP 5 - Web-Anwendungen
26
Nachgeladener Code
Vollkommene Trennung der functions vom Dokument:
<html><head><title>Test DOM</title></head>!
<body>!
<script src="treescript.js"></script>!
<br><br>!
<p id="p" align="center">!
<a href="javascript: swap() ">!
<img id="image" src="tuer.jpg"!
width="300" height="300"> </a>!
<br>!
!Open door!!
</p>!
function swap() { !
</body></html>!
image.src = 'tree.gif';!
p.removeChild(p.childNodes[4]) }!
WS 13/14
ALP 5 - Web-Anwendungen
27
Trennung von HTML, CSS, JS :
Inhalt
(contents)
Verhalten
(behaviour)
Darstellung
(presentation)
HTML
JavaScript
CSS
!index.html !
!myJS.js
<head>!
<script src="myJS.js">!
<link
rel="stylesheet"!
! type="text/css"!
! href="myCSS.css">!
. . . . . (Inhalt!) . . . . .
WS 13/14
ALP 5 - Web-Anwendungen
!
!myCSS.css!
28
11.5 Un/sicherheit!
Mobiler Code kann immer auch Trojanischer Code sein!
Beschränkung der Zugriffsmöglichkeiten von JavaScript Code:
Ø  Code läuft in eingeschränkter Umgebung (sandbox):
Zugriff nur auf Browser- und DOM-Objekte
Ø  Weitere Einschränkung (same-origin policy):
Zugriff nur auf solche Ressourcen, die zum gleichen
Ursprungsort (protocol, host, port) wie der Code gehören
WS 13/14
ALP 5 - Web-Anwendungen
29
Weiterreichende Rechtevergabe
jenseits der genannten Einschränkungen ähnlich wie beim
Sicherheitssystem von Java (8.5), aber wenig genutzt:
Ø  Signierter Code
Ø  Preferences für Rechtevergabe
http://www.mozilla.org/projects/security/components/jssec.html
Dennoch:
WS 13/14
Schwachstellen im Web - insbesondere ausnutzbar
durch Skript-Code - sind nach wie vor die beliebtesten
Einfallstore bei Angriffen auf Informatik-Systeme.
ALP 5 - Web-Anwendungen
30
Kleine Fallstudie
Beim Formular des Gothic Club soll Anna ihren Namen eingeben.
Was passiert, wenn sie „aus Versehen“ folgendes eingibt?
!<script>alert("bang!")</script>
Wenn Anna zu jung für den Club ist, erhält sie dann die
Antwort „Sorry, <script>alert("bang!")</script>, ..... “ ?
Œ Nein, wenn die Eingabe-Überprüfung diese Eingabe ablehnt.
 „Ja, wenn dieser Text nicht überprüft wird. “ ??
Ž Nein, doch nicht, weil document.write HTML-Text als
solchen interpretiert, d.h. das Skript erkennt und alert
ausführt: die alert-Meldung „bang!“ erscheint.
WS 13/14
ALP 5 - Web-Anwendungen
31
Ursache der Malaise:
Daten und Code werden nicht unterschieden!
Allerdings schadet Anna nur sich selbst.
Es liegt also noch keine Sicherheitsverletzung vor.
Aber:
Kann Anna durch „ähnlich verrückte“ Eingaben beim
Server oder anderen Klienten Schaden anrichten?
WS 13/14
ALP 5 - Web-Anwendungen
32
Cross-Site Scripting (XSS) :
Angreiferin Anna kann eine Seite mit Schwachstellen von Sven
dazu benutzen, einem Dritten Carsten, der diese Seite besucht,
bösartigen Skriptcode unterzuschieben.
Die Mehrzahl aller Sicherheitsverletzungen im Netz ist auf
XSS (oder ähnliche code-injection-Techniken) zurückzuführen.
Ältere Server- und Browser-Software ist wesentlich anfälliger
für XSS als neuere Versionen.
WS 13/14
ALP 5 - Web-Anwendungen
33
Svens schwache Webseite http://cool.tools.com/sven.php :
<html><head><title>Welcome!</title></head><body><br> !
Hello!
<?
!$name = $_GET['name'];! PHP code !
!if($name!='') { !
!
!echo "<script>document.write('$name');";!
!
!echo "</script>!"; }
?>!
<br><br>You can choose from:<br>....<br>....</body></html>!
WS 13/14
ALP 5 - Web-Anwendungen
34
Angreiferin Anna lockt Carsten auf ihre Webseite anna.html:
!
<html><title>Welcome!</title><br>!
anna.html
Hello friend!<br> <br>!
Get cool tool from!
<a href="sven.php?name=');alert('Sorry, expired Dec. 2010!"> !
Sven! !
document.write('');alert('Sorry, expired Dec. 2010!')
</a>!
</html>
Ärgerlich für Carsten und geschäftsschädigend
für Sven! („Geschieht ihm recht!“)
Wenn ein Web Server Daten entgegennimmt,
die später eventuell wieder ausgeliefert werden,
sollten diese Daten „codefrei“ gemacht werden
(„sanitizing“, z.B. durch escaping mit \ )
WS 13/14
ALP 5 - Web-Anwendungen
35
Vermischtes:
Ø  JavaScript-Code wird häufig von Entwicklungsumgebungen
automatisch erzeugt.
Ø  JavaScript kann als Web-unabhänge Skriptsprache verwendet
werden. Beliebte Interpretierer sind Rhino und SpiderMonkey
Ø  Server-Side JavaScript (SSJS):
<server> write("<br>hello"); ..... </server>
Ø  Java-Programm kann JavaScript-Code ausführen:
package javax.script, class ScriptEngine, eval(...), !
Ø  JavaScript-Code kann Java-Objekte erzeugen, benutzen:
„LiveConnect“
WS 13/14
ALP 5 - Web-Anwendungen
36
11.6 Applets etc.!
Ø  Applets sind (kleinere) Java-Programme, die in einem
Java-fähigen Web Browser gestartet werden können.
Ø  Ein HTML-Element <object> oder <applet> in
einem Dokument enthält den Namen einer Datei,
aus der das Applet nachgeladen werden kann, z.B.
! <applet code="xyz.class" ... (HTML 4.01)!
Ø  Applets waren einmal ein großer Hype, sind jetzt wegen
leistungsfähiger JavaScript-Implementierungen weniger
populär - aber immer noch für viele Zwecke geeignet.
WS 13/14
ALP 5 - Web-Anwendungen
37
Dokument-Struktur mit Applets (HTML 5):
<!DOCTYPE html>!
<html><head> ..... </head>!
<body>!
.....!
<object ..... >!
!<param ... >!
!<param ... >
belegt einen Bereich im Browser-Fenster !
!.....!
</object>!
.......!
<object ..... >!
! .....
!
belegt einen Bereich im Browser-Fenster
</object>
weiter unten!
.......!
</body></html>!
WS 13/14
ALP 5 - Web-Anwendungen
38
Ein Applet ist eine Unterklasse von java.applet.Applet
oder javax.swing.JApplet.
Nach dem Laden eines Applet erzeugt der Browser ein
entsprechendes Objekt und „steuert“ es über bestimmte
Methoden, die in Applet vordefiniert sind:
void init()
!Initialisierung, Übernahme von Parametern
aus <param> (ähnlich Konstruktor).
[vordefiniert als Leeroperation]
void destroy()!Finalisierung, Freigabe von Ressourcen.
[vordefiniert als Leeroperation]
Beachte: Die Lebensdauer eines Applet ist i.d.R. länger als die
des einbettenden Dokuments. Der Browser entscheidet,
wann er es löscht (mit vorangehender Finalisierung).
WS 13/14
ALP 5 - Web-Anwendungen
39
public void start()
§  wird vom Browser nach init aufgerufen
§  und immer dann, wenn der Benutzer zur Seite zurückkehrt,
die das Applet enthält
§  wird insbesondere für das Starten von Animation eingesetzt
public void stop()
§  wird vom Browser vor destroy aufgerufen
§  und immer dann, wenn der Benutzer die Seite verlässt,
die das Applet enthält
§  wird insbesondere für das Stoppen von Animation eingesetzt
WS 13/14
ALP 5 - Web-Anwendungen
40
public void paint(Graphics g)
§  stammt aus der Oberklasse java.awt.Container
§  wird zur Darstellung von Graphik verwendet
§  das Graphics-Objekt stellt der Browser zur Verfügung
§  wird nach jedem start aufgerufen
§  ... und immer dann, wenn durch manuelle Änderungen am
Fenster (Größenveränderung, Ikonisierung) der Inhalt
neu angezeigt werden muss
§  ... und immer dann, wenn das Applet repaint() aufruft
Diverse weitere Methoden, u.a. vom Applet aufzurufende
- für Parameterübernahme, Kontextinformation etc.
WS 13/14
ALP 5 - Web-Anwendungen
41
Ø  Die Klasse Applet ist eine mittelbare Unterklasse der
Klasse Component - und damit ein GUI-Fenster !
Ø  Somit stehen alle Methoden der Klasse Component zur
Bearbeitung von Ereignissen zur Verfügung !
!
Ø  Beispiele für Ereignisklassen: KeyEvent, MouseEvent, ...
(Unterklassen von AWTEvent)
WS 13/14
ALP 5 - Web-Anwendungen
42
import
import
import
public
!
!
public
!
!
}
!
!
!
!
!
!
!
//
java.awt.*; // simple GUI applet!
java.awt.event.*;
!!
java.applet.*;
!
class Interaction extends Applet { !
private TextField text = new TextField(); !
private Button button = new Button("show"); !
void init() {
!
this.setLayout(new GridLayout(2,1));!
this.add(text); this.add(button);!
text.setForeground(Color.red);!
text.setBackground(Color.yellow);!
Rectangle r = this.getBounds();// from <object..>!!
this.setFont(new Font(!
"Helvetica", Font.PLAIN, r.height/5));!
ActionListener action = new ActionListener() { !
!public void actionPerformed(ActionEvent e) { !
!
! showStatus(text.getText()); } };
!
button.addActionListener(action); } // end init!
end class!
WS 13/14
ALP 5 - Web-Anwendungen
43
... und das einbettende Dokument interact.html:
!
<html><title>Applet interaction</title>!
<br>!
<h2>Here comes an Applet</h2>!
<font size="5">Please enter text and press "copy". <br>!
Text will be copied into status line. <br>!
</font><br>!
<object type="application/x-java-applet" height="100" width="200“>!
<param name="code" value="Interaction" />!
Applet failed to run. No Java plug-in was found.!
</object>!
</body></html> !
!
!
!Beachte: Test auch mit $ appletviewer interact.html
oder Java-main mit init()- und start()-Aufrufen.
WS 13/14
ALP 5 - Web-Anwendungen
44
Beliebt ist die Implementierung von Animationen mit Applets:
Ø  !public class MyMovie extends Applet !
!
!
!
implements Runnable!
Ø  !public void run() { ..... } bereitstellen
Ø  Thread erzeugen mit new Thread(this)!
Ø  Es empfiehlt sich, start/stop geeignet zu implementieren.
WS 13/14
ALP 5 - Web-Anwendungen
45
Beispiele:
einfach:
https://eyeasme.com/Shayne/HTML5_APPLETS/index.html
graphisch:
http://docs.oracle.com/javase/tutorial/deployment/applet/examples/
dist/applet_ComponentArch_DynamicTreeDemo/AppletPage.html
dynamisch:
http://cs.gmu.edu/cne/workbenches/ricart/ricart.html
sehr dynamisch:
http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/
examples/dist/depltoolkit_Java2Demo/DeployUsingNameValuePairs.html
WS 13/14
ALP 5 - Web-Anwendungen
46
11.6.1 Un/sicherheit!
Welchen Schaden können Trojanische Applets anrichten?
Applet kann auf Ressourcen der Umgebung nur sehr beschränkt
zugreifen, sofern es nicht signiert ist und weiterreichende
Rechte erhält. Ein Applet
Ø  kann nur an das System, von dem es geladen wurde,
HTTP-Anfragen schicken (same-origin policy, vgl. S. 29)
Ø  kann nur wenige system properties lesen
Ø  (und einige weitere harmlose Dinge).
WS 13/14
ALP 5 - Web-Anwendungen
47
Beispiel: Gewinnen Sie hier eine Reise nach Hawaii
<applet codebase="http://page.mi.fu-berlin.de/lohr/classes/"!
code="Write.class" width="1000" height="100">!
<param name="file" value="/Users/lohr/tmp/text" >!
</applet>!
public void init() { file = getParameter("file"); }!
public void paint(Graphics g) { out = new PrintWriter(file); ... }!
(bösartiges Applet versucht, in Datei zu schreiben. Effekt:)
java.security.AccessControlException: access denied !
(java.io.FilePermission /Users/lohr/tmp/text write)!
Aber: signierte Applets können weiterreichende Zugriffsrechte haben.
(Vorsicht mit appletviewer: .java.policy entscheidet!)
WS 13/14
ALP 5 - Web-Anwendungen
48
WS 13/14
ALP 5 - Web-Anwendungen
49
Meldung beim Laden eines signierten Applets:
Erläuterungen, Zertifikat
WS 13/14
ALP 5 - Web-Anwendungen
Vertrauen??
50
11.6.2 Java Network Launch Protocol (JNLP)!
ist Web-basierte Technologie für das Herunterladen von
§  Applets und
§  freistehenden Java-Anwendungen mit Java Web Start
von einem Web Server:
Ø  ermöglicht flexible Steuerung der Zugriffsrechte;
Ø  erlaubt Java-Code entweder als Applet oder als
freistehende Anwendung laufen zu lassen.
Ø  Sun/Oracle: „Rich Internet Application“ (RIA)
(siehe aber 11.8.2, S. 76)
WS 13/14
ALP 5 - Web-Anwendungen
51
<object type="application/x-java-applet" height="300" width="300"> !
<param name="code"
value="MyApplet" /> !
<param name="archive" value="MyApplet.jar" />!
</object>!
!
wird ersetzt durch
!
<script src="https://www.java.com/js/deployJava.js"></script> !
<script> !
var attributes = { code:'MyApplet', width:300, height:300,!
archive: 'MyApplet.jar' };!
var parameters = { jnlp_href: 'myApplet.jnlp'}; !
deployJava.runApplet(attributes, parameters, '1.7'); !
</script>!
XML-Text beschreibt – Applet
- Java-Version
- permissions
- .....
WS 13/14
ALP 5 - Web-Anwendungen
52
Java Web Start
ü  ist Bestandteil der Java-Plattform und wird zum Interpretieren
von .jnlp–Ressourcen eingesetzt:
ü  www.xyz.com/cool.jnlp herunterladen und speichern.
ü  cool.jnlp durch Doppelklick öffnen.!
ü  è Java Web Start veranlasst Beschaffung der aktuellen Version
des Programms über dessen Web Server.
WS 13/14
ALP 5 - Web-Anwendungen
53
11.6.3 LiveConnect!
LiveConnect: Applets mit JavaScript und DOM
Œ JavaScript kann auf public-Elemente von Applets
zugreifen.
 <applet mayscript ...> kann JavaScript Code
ausführen, die JavaScript-Funktionen im Dokument
aufrufen und auf die DOM-Objekte zugreifen.
WS 13/14
ALP 5 - Web-Anwendungen
54
Œ JavaScript kann auf public-Elemente von Applets zugreifen !
!
<html><head><title>Javascript to Applet</title></head>!
<body>
!!
<applet id="applet" code ="Interaction" !
!
width="200" height="100" >!
</applet> !
<script> document.applet.write("hallo") </script>!
</body></html>!
!
public class Interaction extends Applet { !
!
private TextField text = new TextField(); !
!
private Button button = new Button("show"); !
!public void init() { ........(S. 43)........... }
!
!public void write(String s) { text.setText(s); }!
!} !
WS 13/14
ALP 5 - Web-Anwendungen
55
Beispiel Stoppen und Neustarten einer Animation:
<html><head><title>Stoppable drop</title></head>!
<body>!
<applet id="applet" code ="Drop.class" !
!
width="300" height="300" >!
</applet> !
<input type="button" value="Start" !
!onClick="applet.start()">!
<input type="button" value="Stop" !
!onClick="applet.stop()">!
</body>!
</html>!
WS 13/14
ALP 5 - Web-Anwendungen
56
Wen es interessiert:
import java.applet.*;
!
import java.awt.*;
!
public class Drop extends Applet implements Runnable { !
private volatile boolean stop; !
public void start() { stop = false; new Thread(this).start(); } !
public void stop() { stop = true; }!
public void run() {
!
!Graphics g = this.getGraphics(); !
!Rectangle re = this.getBounds();
!// Applet-Bereich
!
!int r=0,
!
!// aktueller Radius
!
!
d,
!
!
!// aktueller Durchmesser
!
width=re.width/2, !
!
!// halbe Applet-Breite
!
height=re.height/2;
!
!// halbe Applet-Höhe!
!while(true) { !
!
if(stop) return;!
!
if(r>Math.max(width,height)) r = 0; !
!
d = 2*r;
!
!
g.clearRect(0,0,re.width,re.height); !// Kreis löschen!
!
g.drawOval(width-r,height-r,d,d);
!// neuer Kreis!
!
g.drawOval(width-(r-1),height-(r-1),d-2,d-2); !
!
r++;
!
!
!// 2 Kreise für "Linienbreite 2"!
!
try { Thread.sleep(50); } !
!
catch (InterruptedException e) { }
} // end loop !
!} // end run() !
13/14
ALP 5 - Web-Anwendungen
57
} //WS
end
class Drop!
!
!
 <applet mayscript ...> kann JavaScript Code
ausführen, die JavaScript-Funktionen im Dokument
aufrufen und auf die DOM-Objekte zugreifen ! Diese
haben den Typ netscape.javascript.JSObject.
($ javac -cp .:$JAVAHOME/lib/plugin.jar ... !)
.....!
window
= JSObject.getWindow(this);
!
document = (JSObject)window.getMember("document");!
.....!
window.eval(" ..... JavaScript code ..... ");!
window.call(". JavaScript function name .", argArray);!
.....!
JSObject node = (JSObject)!
document.call(".. document method name ..", argArray);!
.....!
!
!(Alternative: Common DOM API - siehe Quellen)
WS 13/14
ALP 5 - Web-Anwendungen
58
11.6.4 <object> für andere Medientypen!
Viele andere MIME Types (Format type/subtype) neben
application/java-vm sind möglich, etwa
!
!
!
!audio/midi !(veraltet)
!application/x-shockwave-flash!
!image/vnd.adobe.photoshop!
!text/plain !
!und viele andere!
!
Typisches Beispiel:!
!
<object data="http://ingeb.org/Lieder/freudesc.mid" !
! type="audio/midi"!
! width="100" height="50" !
.....!
</object>!
WS 13/14
ALP 5 - Web-Anwendungen
59
<html><body><br> !
!Beispiel mit 3 Objekten !
<h4>An die Freude</h4>!
<object data="schiller.txt" !
!
type="text/plain" !
!
width="300" height="100" border="1">!
</object>!
<object data="http://ingeb.org/Lieder/freudesc.mid" !
!
type="audio/midi"!
!
width="100" height="50" >!
</object><br>
!
!
<object data="http://www.youtube.com/v/NKusg6Jyc9Y&rel=1" !
!
type="application/x-shockwave-flash" !
!
width="700" height="520">!
</object>!
</body></html>!
!
!
!type ist entbehrlich, wenn die Dateierweiterung
hinreichend Aufschluss gibt (so hier).
WS 13/14
ALP 5 - Web-Anwendungen
60
Microsoft ActiveX Controls
§ 
§ 
§ 
§ 
§ 
können ähnlich wie Applets eingesetzt werden:
ursprünglich nur Maschinencode für Intel,
mit .NET auch für die virtuelle CLR-Maschine,
heruntergeladen vom MS Internet Information Server,
durch den MS Internet Explorer.
Beispiel Media Player:!
<object codebase=" (URL - hier entbehrlich, weil Media Player lokales Plugin) "!
! classid="CLSID:05589FA1-C356-11CE-BF01-00AA0055595A"!
! width="200" height="45" >!
! <param name="filename" !
!
! value="http://ingeb.org/Lieder/freudesc.mid"> !
</object>!
WS 13/14
ALP 5 - Web-Anwendungen
61
11.6.5 Resümee und Reflexion!
über „Web-Anwendung“ mit mobilem Code (vgl. 10, S. 42):
Ø  verteilte Anwendung mit Benutzerschnittstelle, für die
ein Browser als Plattform fungiert (URL-Eingabe, HTML,
Java, JavaScript, ...,
Ø  identifiziert durch URL.
Ø  Benutzerschnittstelle wird in den Browser geladen und
wird teils lokal, teils durch neue HTTP-Anfragen verändert.
Ø  Anwendungslogik wird teils lokal, teils beim Web Server
realisiert, der als Plattform für die Anwendung fungiert.
Ø  Dürftige Interaktionsmöglichkeiten zwischen Frontend
und Backend: nur HTTP-Anfragen, oft mit Warten auf
vollständig neues Dokument.
WS 13/14
ALP 5 - Web-Anwendungen
62
Zum Vergleich: Fernaufrufe (z.B. Java RMI)
Ø  verteilte Anwendung mit Benutzerschnittstelle benötigt
keine aufwendigen Plattformen (außer JVM),
Ø  identifiziert durch host, port, app (RMI registry).
Ø  Benutzerschnittstelle mit awt/Swing anstatt mit
HTML/DOM/JavaScript
Ø  Beliebige Interaktion in beiden Richtungen zwischen
Frontend und Backend, einschließlich Objektübertragung
Ø  Eine Sprache (oder mehrere: CORBA).
WS 13/14
ALP 5 - Web-Anwendungen
63
„Browser“ und „Server“ für RMI statt HTTP ?
Ø  Browser: Entgegennahme einer „URL“, Fernaufruf an Server.
Ø  Server: Starten der gewünschten Anwendung,
Auslieferung der Benutzerschnittstelle an den Browser !
Ø  Hyperlinks: objektgebunden; beliebig in Text eingestreut
nicht möglich.
Ø  Sicherheit: mit Richtlinien steuerbar, daher aber riskant.
Ø  Konzeptionelles Manko (kein prinzipielles!): aktuelles RMI
setzt bereits konventionellen Web Server voraus!
WS 13/14
ALP 5 - Web-Anwendungen
64
Beispielsweise mit einfacher Anwendung „Akkumulator“:
$ java ServerImpl &!
[1] 24703!
$ Server ready on 56789!
$ java Browser!
enter URL: localhost 56789 acc!
!
!
Akkumulator sitzt im Backend!
enter URL: localhost 56789 acc!
enter URL: !
!
Achtung – URL identifiziert Objekt,
nicht Klasse !
WS 13/14
ALP 5 - Web-Anwendungen
65
// THIS IS THE "RMI BROWSER“!
import java.rmi.Naming;!
import java.awt.*;!
public class Browser{!
public static void main(String[] arg) throws Exception {!
for(;;) { !
System.out.print("enter URL: ");!
String input = System.console().readLine();!
if(input==null) System.exit(0);!
String url[] = input.split(" ");!
if(url.length!=3) {!
System.out.println("URL format: host port app"); continue; }!
String host = url[0];!
String port = url[1];!
String app = url[2];!
Server server = null;!
String rmiurl = "rmi://" + host + ":" + port + "/" + app;!
try { server = (Server)Naming.lookup(rmiurl); }!
catch(Exception e) { System.out.println("failure"); continue; }!
Frame front = server.get(); // GUI from remote backend!
front.setVisible(true);
// show GUI!
} // end for!
} // end main!
}!
!
WS 13/14
ALP 5 - Web-Anwendungen
66
11.7 AJAX!
(„Asynchronous JavaScript and XML“)
Im letzten Resümee:
Ø  „Dürftige Interaktionsmöglichkeiten zwischen Frontend
und Backend: nur HTTP-Anfragen, oft mit Warten auf
vollständig neues Dokument.“
Stimmt nicht ganz:
JavaScript Code kann explizit eine HTTP-Anfrage starten,
deren Antwort das aktuelle Dokument nicht ersetzt –
aber für dessen Modifikation beliebig benutzt werden kann
(allerdings mit same-origin policy!).
WS 13/14
ALP 5 - Web-Anwendungen
67
AJAX :
Ø  Anfrage vorbereiten: XMLHTTP-Objekt erzeugen
(Konstruktorfunktion hängt von der Umgebung ab)
if(window.ActiveXObject)
// Internet Explorer
request = new ActiveXObject("Microsoft.XMLHTTP");!
!else if(window.XMLHttpRequest)// Firefox, Safari, ...
request = new XMLHttpRequest();!
Ø  Eine Listener-Funktion f definieren, die festlegt, was beim
Eintreffen der Antwort zu tun ist, und damit:
request.onreadystatechange = f!
WS 13/14
ALP 5 - Web-Anwendungen
68
Asynchrone Anfrage starten:
request.open('GET', !
'http://www.xyz/some.file', true);
!
!
!
!
!
!
!!
request.send(null);
!
!
!
(asynchron)!
(auch query string statt null bei Verwendung von POST)
!
Reaktion auf die Antwort:
request.readyState von 0 bis 4 !
Bei jeder Zustandsänderung wird die Funktion f aufgerufen;
sie muss den aktuellen Zustand prüfen:
if(request.readyState == 4) {!
!
. . . . . }// response received!
else { . . . . . }// still not ready!
WS 13/14
ALP 5 - Web-Anwendungen
0
1
2
3
4
(uninitialized)
(loading)
(loaded)
(interactive)
(complete)
69
var request;!
function makeRequest(url) { ! !
!
request = new XMLHttpRequest();!
!
request.onreadystatechange = updateDocument;!
request.open("GET", url, true);!
request.send(null);!
}
!!
function updateDocument() {!
if(request.readyState != 4) return;!
if(request.status == 200) {!
var div = document.createElement("div");!
div.innerHTML = request.responseText;!
var span = document.getElementById("span");!
span.appendChild(div); }!
else alert("failure - illegal request");!
}!
WS 13/14
ALP 5 - Web-Anwendungen
70
<span id="span"!
ajax.html
!style="cursor: pointer; !
font-size: 20;!
background-color: aqua"!
!onclick=" makeRequest('pingpong.html') " >!
Make a request!!
</span>
<p
id="pingpong" !
onclick=" firstChild.nodeValue = 'pong' ">!
ping <br> pong!
</p>
WS 13/14
ALP 5 - Web-Anwendungen
71
Ein „universelles“ getResponse für verschiedene Formate:
!
function getResponse(request) {!
switch(request.getResponseHeader("Content-Type")) {!
case "text/plain":!
case "text/html":!return request.responseText;!
case "text/xml": !return request.responseXML; // liefert DOM!
case "application/json": !
return jsonParse(request.responseText);!
// http://code.google.com/p/json-sans-eval/
case "application/javascript":!
!
!
!return eval(request.responseText);!
// potentiell unsicher (Daten als Code)!
default:
!
!return request.responseText; }!
}!
WS 13/14
ALP 5 - Web-Anwendungen
72
Beispiel mit XML:
.....!
function updateDocument() {!
if(request.readyState != 4) return;!
if(request.status == 200) {!
var xmldoc = request.responseXML;!
var root = xmldoc.getElementsByTagName('root').item(0);!
alert(root.firstChild.data); }!
else alert("failure - illegal request");!
}!
<span style="cursor:pointer; font-size:30; background-color:aqua"
onclick="makeRequest('xmltest.xml')" >!
Make a request!!
</span>!
</body></html>!
<?xml version="1.0" ?>!
<root>!
!Test successful.!
</root>!
WS 13/14
ALP 5 - Web-Anwendungen
73
11.8 Web-Anwendungen!
- gängige Terminologie -
Web-Anwendung (Web application): benutzt einen Web Browser
Ø  ohne Interaktion mit Web Server: kann wahlweise über Server
oder aus lokaler HTML/Javascript-Datei gestartet werden;
Ø  wenig Interaktion mit Web Server: „Rich Internet Application“;
typischerweise aufwendige Multimedia-Anwendungen;
Ø  viel Interaktion mit Web Server: AJAX ist hilfreich;
typische Anwendungen: Internet-Handel, Cloud Computing.
WS 13/14
ALP 5 - Web-Anwendungen
74
11.8.1 „Web-Anwendungen“ ohne Server!
Vier Alternativen für einfache Desktop-Anwendungen:
Œ awt/Swing/... programmieren für JVM
  awt/Swing/... mit GUI Builder für JVM
w HTML/JavaScript/DOM für Browser
ç
x HTML/JavaScript/DOM mit GUI Builder
WS 13/14
ALP 5 - Web-Anwendungen
75
11.8.2 Rich Internet Applications (RIA)!
Schwammiger Begriff!
„Web-Anwendung mit reichhaltiger Benutzerschnittstelle,
aber wenig Interaktion zwischen Frontend und Backend“
Unterschiedliche Konkretisierungen:
Œ „heftig multimedial“,
z.B. mit Flash, Silverlight (MS), JavaFX, ... -> HTML 5
 Java-bezogen: „Applets + Java Web Start“
WS 13/14
ALP 5 - Web-Anwendungen
76
11.8.3 Web-Anwendungen ohne Browser!
è Web-Dienste (Web services) è Kap. 13
WS 13/14
ALP 5 - Web-Anwendungen
77
Zusammenfassung!
Ø  Mobiler Code: der Web Server kann nicht nur Daten
liefern, sondern auch Code - vorzugsweise JavaScript der im Browser ausgeführt wird.
Ø  Document Object Model (DOM): JavaScript kann auf
Elemente des Dokuments als vordefinierte Objekte in
einem Objektbaum zugreifen.
Ø  Sicherheit: Web-Anwendungen sind berühmt-berüchtigt
für Sicherheitslücken, von denen viele auf Probleme mit
Skriptsprachen zurückzuführen sind.
WS 13/14
ALP 5 - Web-Anwendungen
78
Ø  Mobiler Code: Applets sind „kleine“ Java-Programme,
die wie Bilder und andere Objekte nachgeladen werden.
Typische Browser sind „Java-fähig“, d.h. sie führen das
Applet in einer JVM aus.
Ø  Sicherheit: Ein Applet wird in der Regel in einer „sandbox“
ausgeführt und darf auf „fast keine“ externen Ressourcen
zugreifen. Ausgenommen sind signierte Applets, denen
über JNLP weitergehende Rechte zugestanden werden
können.
Ø  JavaScript Code kann die öffentlichen Methoden von
Applets aufrufen. Umgekehrt (aber weniger verbreitet)
können Applets vom der umgebenden JavaScript-Welt
Gebrauch machen (Interpretierer und Code).
WS 13/14
ALP 5 - Web-Anwendungen
79
Ø  AJAX: Nachladen von HTML-Fragmenten mit HTTP
GET oder POST über ein XMLHttpRequest-Objekt;
auch andere Medientypen als HTML sind möglich.
Ø  Die für das Web verfügbaren Technologien erlauben
verteilte Anwendungen mit reichhaltigen Benutzerschnittstellen und beliebig gestalteten Backends.
Ø  Verbleibende Nachteile:
§  nachrichtenbasierte Interaktion Frontend/Backend
§  Sicherheitsgefährdung durch Skriptsprachen
§  Sicherheitsgefährdung durch mobilen Code
WS 13/14
ALP 5 - Web-Anwendungen
80
Quellen!
St. Münz: Web-Seiten professionell erstellen (3.Aufl.). Addison-Wesley 2008
(und SelfHTML: http://de.selfhtml.org/javascript)
D. Flanagan: JavaScript (5.ed.). O‘Reilly 2006
Mozilla Developer Center: JavaScript.
https://developer.mozilla.org/en/JavaScript
W3C: Document Object Model (DOM)
http://www.w3.org/TR/DOM-Level-3-Core
http://www.w3schools.com/jsref/
http://www.w3schools.com/htmldom/default.asp
Mozilla Developer Center: JavaScript Security.
http://www.mozilla.org/projects/security/components/jssec.html
WS 13/14
ALP 5 - Web-Anwendungen
81
Applets:
docs.oracle.com/javase/tutorial/deployment/applet/
en.wikipedia.org/wiki/Java_applet
www.oracle.com/technetwork/java/javase/plugin2-142482.html
mit HTML5:
eyeasme.com/Shayne/HTML5_APPLETS/
LiveConnect:
jdk6.java.net/plugin2/liveconnect/
Java RIA:
docs.oracle.com/javase/7/docs/technotes/guides/jweb/
Common DOM API: docs.oracle.com/javase/7/docs/jre/api/plugin/dom/
docs.oracle.com/javase/6/docs/technotes/guides/
plugin/developer_guide/java_js.html
Appletviewer:
docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/appletviewer.html
Applet security: docs.oracle.com/javase/tutorial/deployment/applet/security.html
docs.oracle.com/javase/tutorial/security/index.html
WS 13/14
ALP 5 - Web-Anwendungen
82
Java Web Start: www.oracle.com/technetwork/java/javase/javawebstart
docs.oracle.com/javase/6/docs/technotes/
guides/javaws/developersguide/contents.html docs.oracle.com/javase/6/docs/technotes/guides/jweb/
MS ActiveX:
www.fpoint.com/support/whitep/fp-ActiveX-toWeb.pdf
AJAX:
www.w3schools.com/ajax/
www.w3.org/TR/XMLHttpRequest/
en.wikipedia.org/wiki/Ajax_(programming)
WS 13/14
ALP 5 - Web-Anwendungen
83
Herunterladen