Webbasierte Anwendungen - AvA

Werbung
Webbasierte Anwendungen
Organisatorisches
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Mobiltelefone bitte ausschalten!
G. Mühl
Webbasierte Anwendungen / Organisatorisches
2
Zur Person
Name
Prof. Dr.-Ing. habil. Gero Mühl
Adresse
Architektur von Anwendungssystemen
Fakultät für Elektrotechnik und Informatik
Universität Rostock
Albert-Einstein-Str. 21
Büro
Telefon
E-Mail
WWW
Sprechstunde
Raum 316
0381 / 498 7621
[email protected]
http://kbs.cs.tu-berlin.de/~gmuehl
Dienstag, 15:00 – 16:00 Uhr und
nach Vereinbarung
G. Mühl
Webbasierte Anwendungen / Organisatorisches
3
Motivation
> Das Internet und das WWW haben die Informatik durch die
weltweite Vernetzung von Rechnern revolutioniert
>
>
>
>
>
>
Zugriff auf entfernte Rechner
E-Mail
Zugriff auf entfernte Dokumente und Verlinkung derselben
Abruf aktueller Informationen mit dynamischen Webseiten
Webbasierte E-Commerce-Anwendungen
…
> Webbasierte Anwendungen
> haben das alltägliche Leben durchdrungen und
> verdrängen zum Teil bereits Desktop-Anwendungen
(z.B. Google Docs)
> Was genau ist aber eine webbasierte Applikation?
G. Mühl
Webbasierte Anwendungen / Organisatorisches
4
Motivation
> Eine webbasierte Anwendung
ist eine Anwendung, mit der
der Benutzer über einen
gängigen Webbrowser
(Internet Explorer, Mozilla
Firefox etc.) interagiert.
> Der Webbrowser stellt also die
Oberfläche der Anwendung.
> Teile der Anwendungsfunktionalität werden
üblicherweise durch einen
entfernten Webserver erbracht,
mit dem mittels HTTP
kommuniziert wird.
G. Mühl
Webbasierte Anwendungen / Organisatorisches
5
Inhalt und Lehrziele der Vorlesung
> Inhalt
> Die Vorlesung gibt einen Überblick über die Grundlagen
webbasierter Anwendungen sowie die verschiedenen
Möglichkeiten diese zu realisieren.
> Lehrziele
> Die Studierenden sollen
> die Architektur webbasierter Anwendungen verstehen,
> Protokolle, Dienste und Techniken kennen lernen sowie
> Anwendungen mit verschiedenen Techniken implementieren
können.
G. Mühl
Webbasierte Anwendungen / Organisatorisches
6
Voraussetzungen und Materialien
> Voraussetzungen
> Informatik-Grundkenntnisse,
> Gute Programmierkenntnisse (z.B. in Java)
> Grundkenntnisse im Bereich Verteilte Systeme
> Materialien
> werden im Stud.IP bereitgestellt
G. Mühl
Webbasierte Anwendungen / Organisatorisches
7
Gliederung der Vorlesung
0
Organisatorisches
1 Einführung
1.1 Geschichte des Internets
1.2 Geschichte des WWW
2
2.1
2.2
2.3
2.4
2.5
2.6
G. Mühl
Grundlagen
Netzwerk-Referenzmodelle
Vermittlungsschicht
Transportschicht
Socket-Schnittstelle
Dienstgüteanforderungen
Zeichenkodierung
3
3.1
3.2
3.3
3.4
Grundlegende Dienste und
Anwendungen des Internet
Domain Name Service
E-Mail
FTP
Telnet/SSH
4
4.2
4.3
4.4
4.5
4.6
World Wide Web (WWW)
Client/Server-Architektur
Hypertext Transfer Protocol
Transport Layer Security
Hypertext Markup Language
Cascading Style Sheets
Webbasierte Anwendungen / Organisatorisches
8
Gliederung der Vorlesung
5 Techniken
5.1 Clientseitige Techniken,
(z.B. JavaScript, Applets)
5.2 Serverseitige Techniken
(z.B CGI, PHP, Java Servlets)
5.3 Rich Internet Applications
(z.B. Ajax, GWT)
6 Middleware
6.1 Java Platform, Enterprise
Edition (JEE)
6.2 Microsoft .NET
G. Mühl
7 Web Services
7.1 eXtensible Markup Language
(XML)
7.2 SOAP
7.3 Web Services Description
Language (WSDL)
7.4 Universal Description,
Discovery and Integration
(UDDI)
Webbasierte Anwendungen / Organisatorisches
9
Literatur
> Cristian Ullenboom. Java ist auch eine Insel. Galileo
Computing, 2003.
> Sun Microsystems. The Java Tutorials.
> Sun Microsystems. Java SE APIs & Documentation.
> Sun Microsystems. Java EE Tutorials.
> Sun Microsystems. Java EE APIs & Documentation.
> W3C Technical Reports and Publications.
> Internet Engineering Task Force (IETF), Requests for
Comments (RFCs)
> Andrew S. Tanenbaum. Computer Networks, 4th Edition.
Pearson Education, 2002.
> Andrew S. Tanenbaum und Maarten van Stehen. Distributed
Systems: Principles and Paradigms, 2nd Edition. Prentice Hall
International, 2006
G. Mühl
Webbasierte Anwendungen / Organisatorisches
10
Webbasierte Anwendungen
Historie
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
> Vom ARPANET zum Internet
> Evolution und Struktur des Internet
> Evolution des World Wide Web (WWW)
G. Mühl
Webbasierte Anwendungen / Historie
2
Das Netz der Netze – Logische Sicht
Internet
Subnetz
Router,
Gateway
G. Mühl
Webbasierte Anwendungen / Historie
3
Das Netz der Netze – Physische Sicht
Subnetz
Router,
Gateway
G. Mühl
Webbasierte Anwendungen / Historie
4
Logische vs. Physische Sicht
Logische Sicht
Physische Sicht
> Netzwerk ist „Black Box“
> Interne Struktur und
Funktionsweise brauchen den
Nutzern nicht bekannt sein
> Nutzer benötigen nur
Kenntnisse über die
Interaktion mit dem Netz
⇒ Notwendigkeit von Schnittstellen und Protokollen, die
auch ohne Kenntnis von
Implementierungsdetails zu
funktionsfähigen Netzen
führen
> „Interconnected Networks“
> Internet besteht aus vielen
Teilnetzen (Subnetze), die
durch Router miteinander
verbunden werden
> Hierarchische Anordnung der
Subnetze, wobei „Backbone“Netze nationale, kontinentale
und transkontinentale
Verbindungen bieten
⇒ Größe und Komplexität
erzwingen dezentrale
Administration
G. Mühl
Webbasierte Anwendungen / Historie
5
Historischer Hintergrund
> 1957: Sowjetunion startet die ersten Satelliten Sputnik I + II
> Sputnikschock in USA und Westeuropa
> Verlust der Technologieführerschaft
> Atomare Bedrohung durch Interkontinentalraketen
> 1958: Gründung der Advanced Research Projects Agency
(ARPA) – später Defense Advanced Research Projects
Agency (DARPA) – zum Ausbau und zur Sicherung des
Technologievorsprungs
> Förderung bestehender militärischer und universitärer
Forschungseinrichtungen
> Militärische Nutzbarkeit sowie wirtschaftliche Verwertbarkeit
der Ergebnisse
G. Mühl
Webbasierte Anwendungen / Historie
6
Der Weg zum ARPANET
> 1961: Grundlegende Arbeiten von
Leonard Kleinrock als PhD-Student am
MIT zur Paketvermittlung und
Queueing-Theorie
> 1962: Aufbau des Information
Processing Techniques Office (IPTO)
der ARPA durch Joseph C.R. Licklider
mit der Vision des „Galactic Network“
> 1966: Entwurf des ARPANETS durch
Lawrence („Larry“) G. Roberts mit dem
Ziel der Vernetzung der Universitäten
(Ressource-Sharing, Paketvermittlung)
G. Mühl
Leonard.
Kleinrock
Joseph C:R.
Licklider
Lawrence G.
Roberts
Webbasierte Anwendungen / Historie
7
Design des ARPANETs
> Unterscheidung der genutzten Rechner
> Hosts sind die zu verbindenden Benutzerrechner (beispielsweise
SDS Sigma 7, SDS 940, IBM 360/75, DEC PDP-10)
> IMPs (Interface Message Processors) sind dedizierte
Netzrechner zur Nachrichtenzerlegung und Paketweiterleitung
> TIPs (Terminal IMPs, später eingeführt) sind spezielle IMPs die
einen direkten Terminalzugang zum Netz erlauben
> Benutzung angemieteter Leitungen mit 56 Kbps
> Entwicklung von Übertragungs- und Steuerungsprotokollen
> Host-to-Host-Protokoll
> Host-to-IMP-Protokoll
> IMP-to-IMP-Protokoll
G. Mühl
Webbasierte Anwendungen / Historie
8
Design des ARPANETs
Host–Host
H
O
S
T
H
O
S
T
Quell-IMP–Ziel-IMP
Host–Imp
H
O
S
T
I
M
P
I
M
P
IMP-Subnetz
I
M
P
T
I
P
Remote
Terminal
IMP–IMP
H
O
S
T
G. Mühl
Local
Terminal
H
O
S
T
Webbasierte Anwendungen / Historie
9
Interface Message Processor (IMP)
> Hergestellt von BBN (Bolt,
Beranek and Newman),
Cambridge, MA
> Basiert auf Honeywell
DDP-516 Minicomputer
mit 24 KB Speicher ohne
Magnetplatte
> Software umfasste nur
150 Lines of Code
> Max. Nachrichtenlänge
von 8063 Bit (Host-to-IMP)
bei max. Paketlänge von
1008 Bit (IMP-to-IMP)
Leonard Kleinrock
am IMP 1 @ UCLA
G. Mühl
Webbasierte Anwendungen / Historie
10
The Day the Infant Internet Uttered its
First Words
»Below is a record of the first message ever sent over the ARPANET. It took
place at 22:30 hours on October 29, 1969. This record is an excerpt from the
"IMP Log" that we kept at UCLA1). I was supervising the student / programmer
Charley Kline (CSK) and we set up a message transmission to go from the
UCLA SDS Sigma 7 Host computer to the SRI2) SDS 940 Host computer. The
transmission itself was simply to "login" to SRI from UCLA. We succeeded in
transmitting the "l" and the "o" and then the system crashed! Hence, the first
message on the Internet was "lo"! We were able to do the full login about an
hour later.«
Leonard Kleinrock
Professor, UCLA
1)
2)
G. Mühl
University of California in Los Angeles
Stanford Research Institute
Webbasierte Anwendungen / Historie
11
The Day the Infant Internet Uttered its
First Words
Excerpt from the IMP log at UCLA
G. Mühl
Webbasierte Anwendungen / Historie
12
Wachstum des ARPANETs
G. Mühl
Dez. 1969 (Los Angeles, Stanford,
Santa Barbara, Salt Lake City)
Jun. 1970 (9 Knoten)
Sep. 1971 (Knoten bei ARPA,
Erste TIPs)
Aug. 1972 (29 Knoten)
Webbasierte Anwendungen / Historie
13
Wachstum des ARPANETs
G. Mühl
Sep. 1973 (Verbindungen u.a. nach
Hawaii, Norwegen, England)
Jun. 1974
Jul. 1975
Jul. 1976
Webbasierte Anwendungen / Historie
14
Entwicklung von TCP/IP
> 1972: Erste Anwendungen
> FTP (Dateitransfer)
> E-Mail (SNDMSG, READMAIL, RD)
> Transmission Control Protocol (TCP) /
Internet Protocol (IP)
> 1974: Spezifikation von TCP durch Robert
E. (Bob) Kahn and Vinton G. Cerf
> 1977: Einsatz im ARPANET
> 1978: Entwurf eines eigenständigen Internet
Protocols (IP) durch Vinton G. Cerf,
Jon Postel und Danny Cohen
> Domain Name System (DNS)
> Entwurf durch Jon Postel, Paul Mockapetris
und Craig Partridge zur Unterstützung der
E-Mail-Adressierung
G. Mühl
Robert E.
(Bob) Kahn
Vinton G.
Cerf
Webbasierte Anwendungen / Historie
15
ARPANET Æ INTERNET
> 1983: Abkoppelung des MILNET (45 Knoten) vom
ARPANET (68 Knoten)
> 1986: National Science Foundation baut NSFNet auf
> Ausbau eines Backbones hoher Kapazität
(bis 1995, danach dezentral organisiert)
> Bereitstellung von Netzzugängen für Universitäten
> 1989: Abschaltung des ARPANETs
> 1991: Öffnung des NSFNets / Internets zur kommerziellen
Nutzung
G. Mühl
Webbasierte Anwendungen / Historie
16
Europäische Netze
> Ab 1980: Einzelne proprietäre Netze wie EARN und Bitnet
(Förderung durch IBM) sowie Transpac (Frankreich)
> 1986: Gründung des Réseaux Associés pour la Recherche
Européenne zur Koordinierung der Netzaktivitäten
> Initiierung des Projekts COSINE zur Bereitstellung einer
Netzinfrastruktur auf ISO/OSI Basis Æ europäische X.25-Netz
> Stetig steigender „TCP/IP-Druck“ aus USA
> 1989: Gründung des Réseaux IP Européens (RIPE) zur
Netzkoordinierung Æ Aufbau eines europäischen
Backbones ähnlich wie NSFNet
G. Mühl
Webbasierte Anwendungen / Historie
17
Rechner im Internet
G. Mühl
Webbasierte Anwendungen / Historie
18
Webserver-Marktanteile
Quelle: netcraft.com
G. Mühl
Webbasierte Anwendungen / Historie
19
Nutzer des Internet
G. Mühl
Webbasierte Anwendungen / Historie
20
Nutzer des Internet
G. Mühl
Webbasierte Anwendungen / Historie
21
Domänen im Internet
Quelle: DENIC eG
G. Mühl
Webbasierte Anwendungen / Historie
22
.de-Domänen im Internet
Quelle: DENIC eG
G. Mühl
Webbasierte Anwendungen / Historie
23
.de-Domänen im Internet
Quelle: DENIC eG
G. Mühl
Webbasierte Anwendungen / Historie
24
Quelle: DENIC eG
Verteilung der .de-Domänen
G. Mühl
Webbasierte Anwendungen / Historie
25
Quelle: CAIDA (Cooperative Association for Internet Data Analysis)
Struktur des Internets (IPv4)
G. Mühl
Webbasierte Anwendungen / Historie
26
Quelle: CAIDA (Cooperative Association for Internet Data Analysis)
Struktur des Internets (IPv6)
G. Mühl
Webbasierte Anwendungen / Historie
27
Visualisierungen des Internets
> Dunkelblau: net, ca, us
> Grün: com, org
> Rot: mil, gov, edu
> Gelb: jp, cn, tw, au, de
> Magenta: uk, it, pl, fr
> Blaugrün: br, kr, nl
> Weiß: unbekannt
Quelle:Wikipedia, http://en.wikipedia.org/
wiki/Image:Internet_map_1024.jpg
G. Mühl
Webbasierte Anwendungen / Historie
28
World Wide Web (WWW)
> 1989: Vorschlag von Tim Berners-Lee zur
Entwicklung eines Hypertext Systems zur
Dokumentation von Projekten am CERN
> Entwurf von HTTP und HTML
> 1991: Öffentlicher Start des WWW
> 1993: Veröffentlichung des Mosaic-Browsers
durch Marc Andreessen am National Center
for Supercomputing Applications
> 1994: Gründung der Netscape Communications
Corporation durch Marc Andreessen und
Jim Clark
> 1994: Gründung des World Wide Web
Consortiums mit Tim Berners-Lee als Direktor
G. Mühl
Tim
Berners-Lee
Marc
Andreessen
Webbasierte Anwendungen / Historie
29
Webbrowser
G. Mühl
Webbasierte Anwendungen / Historie
30
Webbrowser Marktanteile
(Stand 08/2009)
G. Mühl
Webbasierte Anwendungen / Historie
31
Evolution des Webs – Webseiten
> Statische Webseiten bieten Zugang zu sich nicht bzw. nur
selten ändernden Informationen
> Realisierung durch Zugriff auf statische, verlinkte
HTML-Dokumente mittels URL und HTTP
> Übertragung des angeforderten Dokuments vom Web Servers
zum Web Client (z.B. Web Browser)
> Dynamische Webseiten ermöglichen den Zugang zu
ausgewählten oder sich ändernden Informationen
> Realisierung: HTML-Dokument wird teilweise erst beim Zugriff
vom Server generiert (serverseitige Techniken) und/oder nach
der Übertragung beim Client erzeugt bzw. (evtl. auch fortlaufend)
verändert (clientseitige Techniken)
G. Mühl
Webbasierte Anwendungen / Historie
32
Evolution des Webs –
Webbasierte Anwendungen
> Kennzeichen
> Gehen über den reinen Abruf von Informationen weit hinaus
> Realisieren teils vollständige Anwendungen
(z.B. Web Shop, Textverarbeitung, Tabellenkalkulation)
> Interaktion mit dem Benutzer mittels komplexer Oberfläche
> Ähnlichkeit mit Desktopanwendungen
> Erfordern
> Zustandsverwaltung für Benutzer
> Authentifizierung/Autorisierung
> Personalisierung
> Realisierung mittels geeigneter Frameworks (z.B. Ajax, Google Web
Toolkit) in Verbindung mit Middleware wie JEE oder .NET
G. Mühl
Webbasierte Anwendungen / Historie
33
Fragen?
G. Mühl
Webbasierte Anwendungen / Historie
34
Webbasierte Anwendungen
Internet Protocol Suite (TCP/IP)
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
>
>
>
>
G. Mühl
TCP/IP-Referenzmodell
Internetschicht
Transportschicht
Dienstgüte
Webbasierte Anwendungen / Internet Protocol Suite
2
TCP/IP-Referenzmodell
Schichtenmodelle
> In hierarchischen Architekturen lassen sich Hierarchieebenen
mit unterschiedlichen Funktionen identifizieren Æ Schichten
> Jede Schicht
>
>
>
>
>
hat bestimmten Zweck und Funktion
bietet den jeweils höheren Schichten Dienste an
besitzt Schnittstelle zum Zugriff auf angebotene Dienste
abstrahiert von Details der Implementierung
nutzt Dienste tieferer Schichten zur Funktionserbringung
> Ziel: Reduzierung der Komplexität
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
4
Protokollhierarchien
Schicht 3
Schicht 3-Protokoll
Schicht 3
Schicht 2/3Schnittstelle
Schicht 2
Schicht 2/3Schnittstelle
Schicht 2-Protokoll
Schicht 2
Schicht 1/2Schnittstelle
Schicht 1
Schicht 1/2Schnittstelle
Schicht 1-Protokoll
Schicht 1
Physikalisches Medium
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
5
Protokollhierarchien – Beispiel
G. Mühl
Philosoph
Philosoph/ÜbersetzerIn/
SekretärIn-Architektur
I like
rabbits.
Nachricht
Deutsch
Ich mag
Kaninchen.
Information
für entfernte
Übersetzerin
Übersetzerin
Deutsch
Ich mag
Kaninchen.
Fax # ----Deutsch
Ich mag
Kaninchen.
Information
für entfernten
Sekretär
Sekretär
Fax # ----Deutsch
Ich mag
Kaninchen.
J‘aime
les lapins.
Webbasierte Anwendungen / Internet Protocol Suite
6
Protokoll
> Ein Protokoll legt die Regeln und Konventionen fest,
wie die Schicht n der Maschine A mit Schicht n der
Maschine B kommuniziert
> Beim Senden leitet jede Schicht die Daten an die unterliegende
Schicht weiter, bis die physikalische Schicht erreicht ist
> In jeder Schicht können die Daten transformiert
(z.B. aufgeteilt) sowie zusätzliche Informationen
(z.B. Header, Trailer) hinzugefügt werden
> Der Empfang erfolgt entsprechend umgekehrt
> Eine Protokollhierarchie wird auch Protocol Stack genannt
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
7
Informationsfluss
M
M
M: Gesamte Nachricht
Mi:Teilnachricht i
Hi: Header der Schicht i
H3
H2
H1
G. Mühl
H2
H3
H3
M
M1
M1
H3
H2
H1
M2
H2
H2
M2
H1
H2
H3
H3
M
M1
M1
H2
H1
M2
H2
M2
Webbasierte Anwendungen / Internet Protocol Suite
8
Leitungsvermittelt vs. Paketvermittelt
> Leitungsvermittelt
> Bevor zwei Rechner kommunizieren wird ein Weg festgelegt,
über den alle Pakete vom Sender zum Empfänger und vice
versa übertragen werden
> Oft wird Bandbreite reserviert
> Analog zur ursprünglichen Realisierung des Telefonnetzes
> Paketvermittelt
> Jedes Paket reist unabhängig von anderen Paketen und nimmt
potentiell einen anderen Weg
> Einfachere Realisierung, aber Pakete können in einer anderen
Reihenfolge ankommen als sie gesendet wurden
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
9
Verbindungslos vs. Verbindungsorientiert
> Verbindungslos
> Direkter Austausch von Nutzdaten ohne vorige Abstimmung
> Unidirektionale Kommunikation möglich
> Verbindungsorientiert
> Vor dem Austausch von Nutzdaten wird eine Verbindung
zwischen den Rechnern aufgebaut
> Setzt bidirektionale Kommunikation voraus
> Voraussetzung für zuverlässige Ende-zu-Ende Kommunikation
und Ende-zu-Ende Flusssteuerung
> 2 Variationen zuverlässiger Ende-zu-Ende Kommunikation:
Nachrichtenfolgen und Byteströme
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
10
Kombinationsmöglichkeiten
Leitungsvermittelt Paketvermittelt
Verbindungslos
Verbindungsorientiert
G. Mühl
Rohrpost
UDP/IP
Analoges Telefon
TCP/IP
Webbasierte Anwendungen / Internet Protocol Suite
11
TCP/IP-Referenzmodell
> Verarbeitung
> Stellt Anwendungsprotokolle wie HTTP, FTP
oder SMTP zur Verfügung
> Transport
> Kommunikation zwischen Anwendungen
> TCP: verbindungsorientierte, zuverlässige,
Kommunikation auf Basis von Byteströmen
> UDP: unzuverlässige, verbindungslose
Kommunikation auf Basis von Nutzdatenpaketen
> Internet
> Ende-zu-Ende Senden und Empfangen einzelner
Pakete zwischen kommunizierenden Rechnern
Verarbeitung
Transport
Internet
Host-an-Netz
> Host-an-Netz
> Senden, Weiterleiten u. Empfangen von Paketen
zwischen direkt kommunizierenden Rechnern
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
12
TCP/IP-Referenzmodell
Verarbeitung
Verarbeitung
Transport
Transport
Internet
Internet
Internet
Host-an-Netz
Host-an-Netz
Host-an-Netz
Gateway (Router)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
13
TCP/IP-Referenzmodell
HTTP, SMTP, DNS, IMAP
Protokolle
TCP, UDP
Transport
IP
Netze
Verarbeitung
Internet
LAN, ATM, FDDI, WLAN
Host-an-Netz
> Internet-Schicht /Internet-Protokoll (IP)
> Verbirgt verschiedenste Netzwerke und Netztechnologien
> Bildet Basis verschiedenster Dienste und Anwendungen
Æ Stundenglas-Architektur
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
14
TCP/IP-Referenzmodell
> Internet Protocol (IP)
> Einheitliches, internetweit gültiges Adressierungsschema
> Verbindungslose Weiterleitung (Routing) von Datenpaketen
> Best Effort-Kommunikation ohne weitere Garantien (Pakete
können verändert / dupliziert werden, verloren gehen, etc.)
Æ Datentransport zwischen verschiedenen, heterogenen Netzen
> Transmission Control Protocol (TCP)
> Verbindungsorientierte Transportbeziehung sichert Übertragung,
so dass Daten wie gesendet ankommen
> Multiplexen/Demultiplexen mehrerer Transport-Beziehungen
pro Host für verschiedene Anwendungen Æ Ports
> Flusssteuerung (Überlastvermeidung)
Æ Datentransport zwischen Endprozessen (verschiedenen Hosts)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
15
TCP/IP – Kommunikationsbeispiel
IP-Adresse
192.168.0.3
Applikation Port
Mail-Client 50123
Browser 52987
> Internet-Protokoll (IP)
> IP-Adresse identifiziert Rechner
> Transport-Protokoll (TCP, UDP)
> Port-Nummer identifiziert
Dienst/Anwendung
IP-Adresse
192.168.0.1
IP-Adresse
192.168.0.2
Applikation Port
Browser 49654
Netz
Client
G. Mühl
Port
25
80
Dienst
Mail
WWW
Server
Webbasierte Anwendungen / Internet Protocol Suite
16
Fragen?
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
17
Internetschicht
INTERconnected NETworks
> Internet = Verbund heterogener Netze mit DatenpaketTransport zwischen beliebigen Rechnern
US Backbone
Europa Backbone
Nationale
Netze
LAN
LAN
G. Mühl
Nationale
Netze
LAN
Webbasierte Anwendungen / Internet Protocol Suite
19
Internet Protocol (IPv4)
> IP ermöglicht als „kleinster gemeinsamer Nenner“ aller Netze
den Austausch von Datenpaketen zwischen beliebigen
Rechnern bei heterogenen Netzen
Æ unterste Schicht mit Ende-zu-Ende Bedeutung
> Einheitliches, internetweit gültiges Adressierungsschema
> Jeder Rechner (strenggenommen jede Netzwerkkarte in jedem
Rechner) erhält eindeutige Kennung (IP-Adresse)
> Verbindungslose Weiterleitung (Routing) von Datenpaketen
vom der Quelle zum Ziel
> Best Effort-Kommunikation ohne weitere Garantien
> Pakete können verändert oder dupliziert werden, verloren
gehen, etc.
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
20
IP-Adressen
>
>
>
>
Jeder Anschluss bekommt eigene 32-bittige IP-Adresse
4.294.967.296 Adressen Æ etwa 8 Adressen pro km2
Notation als Folge von vier 8-Bit Dezimalzahlen 139.30.5.204
5 Netzklassen: A, B, C, D und E
0 1 2 3 4 5 6 7
G. Mühl
A
0
B
1 0
C
1 1 0
D
1 1 1 0
E
1 1 1 1
15
Netz-ID (7 Bits)
31
23
Rechner-ID (24 Bits)
Netz-ID (14 Bits)
Rechner-ID (16 Bits)
Netz-ID (21 Bits)
R.-ID (8 Bits)
Multicast
reserviert
Webbasierte Anwendungen / Internet Protocol Suite
21
IP-Paket
IHL
TOS
Total Length
D MF
F
Identification
TTL
Protocol
Fragment Offset
Header Checksum
Source Address
Destination Address
Header
Version
Data
Content
Options
32 Bit
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
22
IP-Paket
>
>
>
>
>
Version des IP Protokolls
Länge des Headers
Gesamtlänge des Paketes
Wert identifiziert das Paket
1. Flag: unbenutzt
2. Flag – DF (don't fragment)
3. Flag – MF (more fragments)
> Offset
Position des Fragments im Datagramm
> Time to Live
Teilstreckenzähler mit Default = 64
> Protocol
Darüber liegendes Transportprotokoll
> Header Checksum Header-Prüfsumme zur Fehlererkennung
> Source Address
IP-Adresse des Absenders
> Destination Addr. IP Adresse des Empfängers
> Options
optional, z.B. Sicherheit, Source Routing
G. Mühl
Version
IHL
Total Length
Identification
Flags
Webbasierte Anwendungen / Internet Protocol Suite
23
Fragmentierung bei IP
> Jedes Paket trägt die notwendige Information, um von der Quelle
zum Ziel zu gelangen (d.h. Quell- und Zieladresse)
> Pakete, die für das physikalische Netzwerk zu groß sind, werden in
kleinere Fragmente aufgeteilt
> Die Fragmente werden unterwegs nicht mehr zusammengesetzt,
sondern jedes Fragment reist als eigenständiges IP-Datagramm
1
x
Ethernet
ETH 1400
0
1400
0
Punkt-zu-Punkt
2
P2P
P2P
P2P
x
1
x
512
More Framents-Flag
G. Mühl
3
512
512
376
0
FDDI
512
FDDI
FDDI
FDDI
512
512
376
1 512
x
4
0 1024
376
Offset
Webbasierte Anwendungen / Internet Protocol Suite
24
IP-Subnetze
> Ermöglichen eine für die Außenwelt transparente Aufteilung eines
größeren Netzes in mehrere kleinere
> Interpretation eines Teils der Rechneradresse als Subnetz-Adresse
> Erkennung, ob Zieladresse eigenes Subnetz durch logische
Verundung mit der Subnetzmaske
> Ergebnis gleich der eigenen Subnetznummer, dann direktes
Senden; sonst indirektes Senden über Router
> Beispiel: Klasse B-Adresse
214 = 16384 Klasse B Netze
1 1
1 0
14
Netz
27 = 128 Subnetze
7
Subnetz
9
Rechner
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
Subnetzmaske = 255.255.254.0
Alternative Notation: /23
G. Mühl
29 - 2 = 510 Rechner
Webbasierte Anwendungen / Internet Protocol Suite
25
IP-Routing
> Wie gelangen IP-Pakete durch evtl. mehrere Netze zum Ziel?
> Routing-Tabellen
> Ordnen IP-Adressen die nächste zu wählende Teilstrecke zu
> Direktes Routing (im selben Netz)
> Indirektes Routing (über Router)
> Tabelle enthält IP-Adressen, keine physischen Adressen
> Routing-Entscheidungen unabhängig von physischen Adressen
> Verbirgt Details der Netze vor IP, klare Separation
> Isoliert Routing-Information in Routing-Tabellen
> IP-Routing ändert nicht die Adressen von Quelle und Ziel
> Paket wird „hopweise“ weitergereicht, bis es sein Ziel erreicht
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
26
IP-Routing-Protokolle
> Aktualisieren die Routing-Tabellen
> Intradomain- vs. Interdomain-Routing
> Beispiele für Intradomain-Routing-Protokolle
> Routing Information Protocol (RIP)
[RFC 1058]
> Router tauschen periodisch Distanzvektoren untereinander aus
> Vektor beinhaltet, Entfernung zu anderen Netzen in „Hops“
> Open Shortest Path First (OSPF)
[RFC 1247]
> Jeder Router kennt Netzwerk und berechnet kürzesten Pfad
> Beispiel für Interdomain Routing-Protokolle
> Border Gateway Protocol (BGP)
G. Mühl
[RFC 1654]
Webbasierte Anwendungen / Internet Protocol Suite
27
Fragen?
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
28
Transportschicht
Transportschicht
> Aufgaben der Transportschicht
> Ende-zu-Ende-Kommunikation zwischen Anwendungen
> Weitere Abstraktion von spezifischen Netzeigenschaften
> Unterstützung mehrerer Endpunkte auf einem Rechner durch
Multiplexen und Demultiplexen von Transportbeziehungen
> Verbindungsorientierte Transportbeziehungen Æ TCP
>
>
>
>
Fehlerfreie Übertragung
Einhaltung der Reihenfolge
Keine Verluste oder Duplizierungen
Flusssteuerung
> Verbindungslose Transportbeziehungen Æ UDP
> Best Effort-Auslieferung
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
30
Transmission Control Protocol (TCP)
> RFCs 793, 1122, 1323
> Bereitstellung eines zuverlässigen bidirektionalen Bytestroms
zwischen 2 Endpunkten in unzuverlässigem Netzverbund
> Endpunkt: IP-Adresse + TCP-Portnummer
(z.B. 139.30.1.211:80)
> Verbindungsorientierter Transportdienst
> Teilt Anwendungsdaten in Blöcke (Segments) à max. 64 K Bytes
(meistens ca. 1500 Bytes)
> Jeder Block wird als ein IP-Paket versandt
> Sliding Window Protocol zur Fehlerbehandlung u. Flusskontrolle
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
31
Zuverlässiger Bytestrom
> Die Anwendungsdaten (Bytestrom) werden fehlerfrei
empfangen, ohne Datenverluste oder -duplikate, in der
Reihenfolge, in der sie gesendet wurden
> Dies wird durch das Versenden von Pakten mit
Checksummen und Sequenznummern erreicht
> Die Anwendung selbst sieht keine Paketgrenzen
> ein send kann zu mehreren receives führen und umgekehrt!
> z.B. send( 170 Bytes ) + send( 230 ) Æ receive( 400 )
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
32
Aufbau eines TCP-Pakets
Header
8
16
24
Source Port
Destination Port
Sequence Number
Acknowledgement Number
HLen
Flags
Window Size
Checksum
Urgent Pointer
32
20 Byte
0
Options
Body
G. Mühl
Data
Webbasierte Anwendungen / Internet Protocol Suite
33
Aufbau eines TCP-Pakets
> Source- und Destination Port
> Identifizieren die lokalen Endpunkte der Verbindung
> Sequence- and Acknowledgement Number
> Bytenummerierung und Empfangsbestätigung
> HLen (TCP Header Length)
> Anzahl der 32-Bit-Wörter des Headers
> Flags
>
>
>
>
>
>
G. Mühl
URG:
ACK:
PSH:
RST:
SYN:
FIN:
dringende Daten liegen vor (siehe Urgent Pointer)
Bestätigung der Daten (siehe Acknowledgement Number)
Daten sofort an Anwendung weiterleiten (nicht puffern)
Reset einer Verbindung
Signalisiert Verbindungsaufbau
Signalisiert Verbindungsabbau
Webbasierte Anwendungen / Internet Protocol Suite
34
Aufbau eines TCP-Pakets
> Window Size (Fenstergröße)
> Größe des Empfangsfensters beim Sliding Window Protocol
> Checksum (Prüfsumme)
> Gebildet über TCP-Header + Daten + IP-Pseudo-Header
> Urgent Pointer (Dringend-Zeiger)
> Zeigt auf dringende Daten (vgl. Interrupt)
> Erlaubt Verarbeitung außerhalb der Reihenfolge
> Options (Optionen)
> 32-Bit-Wörter
> Aushandlung der TCP-Segmentgrößen
> Aushandlung skalierter Fenstergrößen
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
35
TCP-Segmente
> Beide Seiten können ihre maximale Segmentgröße (MSS)
bekannt geben
> Größere Segmente sind effizienter
> MSS ≤ MTU des Netz
– IP-Header – TCP-Header
(20 Byte)
(20 Byte)
> Z.B. Ethernet MTU = 1500 Byte Æ MSS = 1460 Byte
> Z.B. Berkeley UNIX Implementierung Æ MSS = 1024 Byte
> Voreinstellung MSS = 536 Byte Æ IP-Pakete mit 576 Byte
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
36
Sliding Window Protocol
Fenstergröße
Sender
gesendet und
bestätigt
gesendet aber
nicht bestätigt
kann gesendet
werden
send_base
kann noch nicht
gesendet werden
send_next
Fenstergröße
Empfänger
ausgeliefert an
Anwendung
empfangen und
bestätigt
erwartet
rec_base
G. Mühl
Kann noch nicht
empfangen werden
Webbasierte Anwendungen / Internet Protocol Suite
37
TCP-Retransmission Timer
> Problem: Wahl des Timeouts für
Wiederholungen bei fehlender Bestätigung?
> Timeout zu kurz Æ unnötige Wiederholung
> Timeout zu lang Æ unnötige Verzögerung
von Wiederholungen
> Idee: Orientierung an der Round Trip Time
Übertragung
Timeout
Wiederholung
A CK
> Round Trip Time („Rundreisezeit“)
> Zeit für eine Nachricht vom Sender zum Empfänger und zurück
> Sich (evtl. schnell) ändernder Parameter
> Dynamische Algorithmen zur Anpassung des Time-outIntervalls (Jacobsen, 1988)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
38
Jacobsen Algorithmus
> Round Trip Time (RTT) sowie Schwankungen der RTT
zur Wahl des Timeouts heranziehen
> Schätzung der Round Trip Time (RTT)
RTT = α1 · RTT + (1 – α1) · M
> Berechnung der durchschnittlichen Abweichung (D)
D = α2 · D + (1 – α2) · |RTT – M|
> Wahl des Timeouts
Timeout = RTT + 4·D
M: RTT des letzten bestätigten Segments
α1, α2: Glättungsfaktoren (typisch α1 = α2 = 7/8)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
39
TCP-Überlastkontrolle
> Durch Überlast entsteht Paketverlust
> Ursachen
> Überlasteter Empfängerprozess liest Daten zu langsam
> Überlastete Strecken bzw. Router
Sender
Überlauf nach
Netzüberlastung
Empfänger
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
40
TCP-Überlastkontrolle
> TCP führt Überlastkontrolle aus (engl.: Flow Control)
> Ziel: Überlast durch dynamische Anpassung der Senderate
möglichst vermeiden
> Verwendung eines Empfängerfensters beim Empfänger sowie
eines Überlastungsfenster beim Sender
> Aktuelle Größe des Sendefensters ergibt dann sich aus dem
Minimum von Empfänger- und Überlastungsfenster
> Anforderung: Muss auch dann funktionieren, wenn potentiell
viele TCP-Verbindungen zwischen verschiedenen Rechnern
aktiv sind, die sich physikalische Verbindungen teilen
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
41
Empfängerfenster
> Entspricht der Anzahl an Bytes, die der Empfänger bereit ist,
max. als nächstes zu akzeptieren
> Angabe der Größe des Empfängerfensters bei Bestätigungen
> 16 Bit Größe Æ max. 64KB (Skalierungsfaktor i. Header mgl.)
CK = x+1)
SYN (SEQ = y, A
024
win 4096, mss 1
48
ACK = z, win 20
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
42
Überlastungsfenster
> „Slow-Start“- Algorithmus zur Adaption des Überlastungsfensters
[Jacobsen, 1988] Æ Unterstützung durch alle TCP-Implementierungen
> Ausgehend von Initialwert exponentielle Vergrößerung des
Überlastungsfensters bis zu einem Schwellwert, ab dort lineare Steigerung
> Bei Überlast Zurücksetzen des Schwellwerts auf das halbe aktuelle
Überlastungsfenster und des Überlastungsfensters auf den Initialwert
Schwelle
Größe des Überlastungsfenster
initial 1 KB ( = MSS)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
43
Überlastungsfenster
8
4
2
1
R1
G. Mühl
R2
R3
R4
Webbasierte Anwendungen / Internet Protocol Suite
44
TCP–Effizienz: Senderseite
> Tinygrams
> Eine Anwendung sendet ständig kleinste Datenmengen
(z.B. 1 Byte) Æ enormes Verkehrsaufkommen
> 1 Byte Daten + 20 Byte TCP Header + 20 Byte IP Header
= 41 Byte Übertragungslast für 1 Byte Nutzlast
> Zusätzlicher Aufwand durch z.B. darunter liegendes Ethernet
(14 Bytes Header + 4 Bytes Checksumme)
> Lösung: Nagle-Algorithmus
> Leistungsverbesserung durch Sammeln von Sendedaten
> Allerdings: Bei interaktiven Anwendungen (z.B. SSH, X
Windows) muss Nagle‘s Algorithmus deaktiviert werden
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
45
TCP–Effizienz: Empfängerseite
> Silly Window Syndrome
> Nur kleine Segmente werden geschickt, obwohl der Sendepuffer
genügend Daten für ein größeres Segment enthält
> Ursache
> Anwendung beim Empfänger liest Daten, z.B. byteweise
> Speicher im vollen Puffer wird byteweise frei
> Empfänger bietet zu kleines Empfängerfenster (hier 1 Byte) an, anstatt
zu warten, bis ein größeres Fenster möglich wäre
> Lösung: Clark-Algorithmus
> Empfänger aktualisiert das Fenster nur, wenn Erhöhung um definierte
Mindestmenge möglich ist
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
46
User Datagram Protocol (UDP)
> Verbindungsloser Transportdienst [RFC 768]
> Ermöglicht das Senden einzelner Pakete an einen Endpunkt
(IP-Adresse + UDP-Portnummer)
> Empfänger empfängt einzelne UDP-Pakete
> UDP-Pakete können verloren gehen und in beliebiger
Reihenfolge beim Empfänger eingehen
> Bietet größtmögliche Freiheit und Flexibilität bei weniger
Overhead als bei TCP
> Die Anwendung kümmert sich selbst, falls notwendig, um
Fehlerbehandlung und Flusssteuerung
> Unterstützt auch Multicast-Kommunikation auf Basis von
IP-Multicast
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
47
Aufbau eines UDP Pakets
0
8
UDP-Quellport
Länge
16
24
UDP-Zielport
Prüfsumme
32
Daten
Header
Body
Quell- und Zielport wie bei TCP
G. Mühl
Länge
Länge des Datagramms in Bytes
(inkl. 8 Byte Header)
Prüfsumme
Fehlerüberprüfung für Header, Daten und
wichtige IP-Informationen
Webbasierte Anwendungen / Internet Protocol Suite
48
Well-Known TCP/UDP-Ports
> Well-Known Ports (Portnummern < 1024) reserviert für
bestimmte Dienste
[http://www.iana.org/assignments/port-numbers]
> TCP- und UDP-Portnummern sind unabhängig voneinander!
FTP
20
21
SSH
22
Telnet
23
SMTP
25
HTTP
DNS
80
111
53
TCP
NFS
SNMP
161
162
UDP
IP
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
49
Literatur
1. V. Jacobson. Congestion Avoidance and Control.
In Symposium Proceedings on Communications Architectures
and Protocols, pages 314–329, Stanford, CA, USA, 1988.
ACM Press.
2. W. R. Stevens. TCP/IP Illustrated, Volume 1: The Protocols.
Addison-Wesley, 1991.
3. G. R. Wright and W. R. Stevens. TCP/IP Illustrated, Volume 2: The
Implementation. Addison-Wesley, 1995.
4. J. Nagle. Congestion Control in IP/TCP Internetworks. RFC 896,
January 1974.
5. D. D. Clark. Window and Acknowledgement Strategy in TCP. RFC
813, July 1982.
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
50
Fragen?
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
51
Dienstgüte
World Wide Wait
> Synonym für Probleme im heutigen Internet
> Das Internet ist „best-effort“ – „so gut es eben geht“
> Es gibt keine Garantien für Leistung und Zuverlässigkeit
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
53
Neue Anwendungen und Anforderungen
> Neue Anwendungen
>
>
>
>
>
Audio
Video
Internet Telephony
Tele Learning
...
Dienst
Bitrate
Audio MP3
MPEG Video
Standard Video
HDTV (1080i50/MPEG-2)
100-200 Kbit/s
2 Mbit/s
140 Mbit/s
27 Mbit/s
> Neue Anforderungen
>
>
>
>
G. Mühl
Echtzeit
Synchronisation
Multicast („Fernsehen“ per Internet)
...
Webbasierte Anwendungen / Internet Protocol Suite
54
Dienstgüte
> Dienstgüte (engl.: Quality of Service (QoS))
> wird vom Empfänger bzw. Kunden festgestellt
> erfordert Ende-zu-Ende-Sicht
> betrifft alle Schichten
> Beispiele für Diensteigenschaften aus Benutzersicht
> Wiedergabequalität, Antwortzeit, Zuverlässigkeit,
Verschlüsselung, ...
> Anforderungen eines Dienstes an das Netzwerk
> Fehlerrate, Verzögerung, Jitter (Schwankungen), Bandbreite
> Synchronisation (z.B. „Lippen-Synchronisation“ bei
Videokonferenz)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
55
Anwendungen und QoS-Parameter
G. Mühl
Anwendung
Fehlerrate
Verzögerung
Schwankung
Bandbreite
E-Mail
Hoch
Niedrig
Niedrig
Niedrig
Dateitransfer
Hoch
Niedrig
Niedrig
Mittel
Web–Zugriff
Hoch
Mittel
Niedrig
Mittel
Remote Login
Hoch
Mittel
Mittel
Niedrig
Audio on demand
Niedrig
Niedrig
Hoch
Mittel
Video on demand
Niedrig
Niedrig
Hoch
Hoch
Telephonie
Niedrig
Hoch
Hoch
Niedrig
Video-Konferenz
Niedrig
Hoch
Hoch
Hoch
Webbasierte Anwendungen / Internet Protocol Suite
56
Allgemeine QoS-Techniken
> Überdimensionierung
> Pufferung beim Empfänger
> Gleicht Schwankungen aus
> Üblich sind ca. 10 sec Pufferung
Senden
Ankunft
Wiedergabe
> Eingangssteuerung
(Admission Control)
> „Türsteher“ entscheidet,
ob Datenstrom akzeptiert wird
Übertra- Pufferung
gungszeit
t
> Verkehrsformung (Traffic Shaping)
> „Glätten“ des Datenstroms nach vorheriger Vereinbarung
> Reservierung von Ressourcen
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
57
Verkehrsformung (Traffic Shaping)
> Eine vorrangige Ursache für Überlastsituationen
sind Verkehrspitzen
> Diese entstehen beispielsweise, wenn Rechner mit stark
ungleichmäßig Rate senden
> Ziel
> Beeinflussung sendender Rechner, so dass sie gleichmäßiger
senden und damit weniger Überlastsituationen auftreten
> Vorgehen
> Beim Sender werden Algorithmen ausgeführt, die den
Verkehr formen
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
58
„Leaky Bucket“
> Begrenzt maximale
Senderate
> Gesendete Pakete
kommen in den Eimer
> Die Pakete verlassen
Eimer mit
konstanten Rate
> Eimer hat
gewisse Kapazität
> Bei vollem Eimer werden Pakete verworfen
> Implementierung des
Eimers als Warteschlange
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
59
„Token Bucket“
> Begrenzt durchschnittliche
Senderate
> Token werden mit
> Konstanter Rate in
den Eimer gelegt
> Bis zu n Token können
gesammelt werden
> Jede Nachricht nimmt
ein Token
> Bursts bis zu n
Nachrichten gehen durch
> Es werden keine
Nachrichten verworfen,
stattdessen wird der
Sender blockiert
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
60
Verkehrsformung
> Ohne Verkehrsformung (a)
> 2 MB/sec Leaky Bucket (b)
> 25 MB/sec Token Bucket
> mit Kapazität von 250 KB (c)
> mit Kapazität von 500 KB (d)
> mit Kapazität von 750 KB (e)
> 25 MB/sec Token Bucket mit
500 KB Kapazität und
nachfolgendem 10 MB/sec
Leaky Bucket (f)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
61
Real-Time Transport Protocol (RTP)
> Basiert (üblicherweise) auf UDP
> Router sehen keine „RTP-Pakete“
> Nutzung von Unicast oder Multicast
> Multiplexen mehrerer Datenströme
> Wird u. a. bei IP-Telefonie
(H.323 und SIP) eingesetzt
> Sehr einfaches Protokoll [RFC 3550]
Verarbeitung
RTP
UDP
IP
Host-an-Netz
> Sequentielle Nummerierung der Pakete
> Zeitstempel zur Abstandsregelung der Pakete
> Keine Flusssteuerung, Fehlerbehandlung,
Bestätigungen, Wiederholungsanforderungen
> Keine Reservierungen oder QoS-Garantien
> Steuerung und Feedback durch RTCP
(Real-Time Transport Control Protocol)
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
62
Einige RTP Audio-Nutzdatentypen
G. Mühl
Typnummer
Format
Abtastrate
Durchsatz
0
PCM
8 KHz
64 Kbps
1
1016
8 KHz
4,8 Kbps
3
GSM
8 KHz
13 Kbps
7
LPC
8 KHz
2,4 Kbps
14
MP3
90 KHz
96-128 Kbps
Webbasierte Anwendungen / Internet Protocol Suite
63
QoS-Erweiterungen für das Internet
Integrated Services (IntServ)
> Annahme: Knappe Ressourcen
> Feingranulare Reservierung von Ressourcen per „Flow“
auf jedem Knoten des Pfades zwischen Sender u. Empfänger
> Umsetzung durch Resource reSerVation Protocol (RSVP)
[RFC 2205, 1997]
> Bietet Garantien
> Nicht skalierbar, nur für Intranets geeignet
1. Path
Empfänger
2. Resv
Sender
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
64
QoS-Erweiterungen für das Internet
Differentiated Services (DiffServ)
> Annahme: Genügend Ressourcen
> Grobgranulare Verteilung der
Ressourcen auf Basis von
Verkehrsklassen
(Flow-Aggregation)
> Bevorzugung von Paketen aufgrund ihrer Klassifikation
> Minimierung des Verwaltungsaufwand
> Bietet keine Garantien
> Keine dynamische Anpassung
> Skalierbarkeit gegeben
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
65
Kombination von IntServ und DiffServ
Subnetz A
Backbone
Subnetz B
IntServ
DiffServ
IntServ
> Endsysteme
> Reservieren
> Garantien
G. Mühl
> Weitverkehr
> Klassen zuteilen
> Einfache - schnelle! Bearbeitung
Webbasierte Anwendungen / Internet Protocol Suite
66
Fragen?
G. Mühl
Webbasierte Anwendungen / Internet Protocol Suite
67
Webbasierte Anwendungen
Socket-Programmierung
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
> Socket-Schnittstelle
> Zeichenkodierung
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
2
Socket-Schnittstelle
Programmierschnittstelle für TCP/IP?
> Protokolle definieren
> Protokolle definieren nicht
> Aufbau der Nachrichten
(Adresse, Port, etc.)
> Ablauf und Regeln des
Nachrichtenaustausches
> Schnittstelle zur
Anwendung (API)
TCP
UDP
IP
Anwendung
Schnittstelle (API)
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
4
Sockets als Programmierschnittstelle
> Socket (engl. für Steckdose) als zentrale Abstraktion
> Repräsentieren einen Kommunikationsendpunkt
> Berkley Sockets / BSD Socket API
> Ursprung in 4.2BSD Unix Operating System (1983)
> De facto Standard Netzwerk API
> Teil des Portable Operating System Interface (POSIX) Standards
Æ Unterstützung durch fast alle Betriebssysteme
> API besteht aus Menge von C-Funktionen und -Datentypen
> Senden/Empfangen von Daten
> Verbindungsmanagement
> Tiefgreifendere Einstellungen (Puffergrößen, etc.)
> Anbindungen für viele andere Sprachen
> Cobol, Fortran, Haskell, Java, Lisp, Python, Ruby, …
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
5
Sockets in Java (Client-Seite)
> Klasse java.net.Socket
> Endpunkt einer TCP-Verbindung
> Bietet zuverlässigen, bidirektionalen Byte-Strom
> Erzeugen und Binden
> public Socket(InetAddress address, int port)
public Socket(String host, int port)
> Bindet Socket an IP-Adresse address (bzw. aufgelösten
Namen host) und Portnummer port des entfernten Rechners
sowie an einen freien Port des lokalen Rechners
> Ein-/Ausgabe
> public InputStream getInputStream()
> public OutputStream getOutputStream()
> public void close()
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
6
Beispiel (Client-Seite)
// set up a connection to Uni Rostocks‘s webserver
Socket socket = new Socket("www.uni-rostock.de", 80);
// get associated input and output streams
InputStream in = socket.getInputStream();
OutputStreamWriter out = new OutputStreamWriter(
socket.getOutputStream(), "US-ASCII");
// send HTTP request
out.write("GET / HTTP/1.0\r\n\r\n");
out.flush();
HTTP-Anfrage
senden
// read reply and print it
for( int read=in.read(); read!=-1; read=in.read() ) {
System.out.print((char)read);
}
// free system resources
in.close();
out.close();
socket.close();
G. Mühl
Antwort byteweise
lesen und ausgeben
Webbasierte Anwendungen / Socket-Programmierung
7
Sockets in Java (Server-Seite)
> Klasse java.net.ServerSocket
> Dient dem „Warten auf eingehende Verbindungen“
> Erzeugen und Binden
> public ServerSocket(int port)
> Bindet Server-Socket an Port port des lokalen Rechners
> Annehmen eingehender Verbindungen
> public Socket accept()
> Liefert „Client“-Socket zur eingegangenen Verbindung
> Über den neuen Socket erfolgt die exklusive Kommunikation
mit dem Client
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
8
Beispiel (Echo-Server)
// create a server socket and bind it to port 8080
ServerSocket server = new ServerSocket(8080);
// wait for client connection to accept
Socket socket = server.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
Server-Socket an Port 8080
binden und eingehende
Verbindungen annehmen
// echo data that is read from the socket
for( int read=in.read(); read!=-1; read=in.read() ) {
System.out.print((char)read);
out.write(read);
Byteweises Kopieren
}
gelesener Daten
// free system resources
in.close(); out.flush(); out.close();
socket.close(); server.close();
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
9
Threads
Als normale Java-Objekte
> Motivation: „Mehrere Dinge
gleichzeitig tun“
> Aktivitätseinheit für
nebenläufige Ausführung
> Teilt sich den Speicher mit
anderen Threads
> Besitzen Konstruktoren,
Methoden, Attribute
> Kommunikation durch
gegenseitige Methodenaufrufe
> Vorsicht: Synchronisation
beachten
G. Mühl
Accept new connections
Handle client #1
…
Java Virtual Machine
Als leichtgewichtige Prozesse
Handle client #n
Shared
object
Shared
object
Shared
object
Shared
object
Webbasierte Anwendungen / Socket-Programmierung
10
Erzeugen von Threads (Variante A)
>
>
>
>
Klasse java.lang.Thread erweitern
Überschreiben der Methode void run() mit eigener Logik
Objekt mit eigenem Konstruktor erzeugen
Starten des Threads durch Methode void start()
> Alter Thread setzt Ausführung nach start() fort
> Neuer Thread beginnt Ausführung in run()
public class SimpleThread1 extends Thread {
Welche Ausgabe
erzeugt das
Programm?
public void run() {
try{Thread.sleep(1000);} catch(InterruptedException e) {}
System.out.println(„World!");
}
public static void main(String[] args) {
new SimpleThread1().start();
System.out.print(„Hello “);
} }
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
11
Erzeugen von Threads (Variante B)
> Schnittstelle java.lang.Runnable implementieren
> Methode void run() mit eigener Logik füllen
> Objekt-Instanz der eigenen Klasse erzeugen und
dem Konstruktor der Klasse Thread übergeben
> Starten des Thread-Objektes durch Methode void start()
> Alter Thread setzt Ausführung nach start() fort
> Neuer Thread beginnt Ausführung in run()
public class SimpleThread2 implements Runnable {
Warum ist
Variante A nicht
ausreichend?
public void run() {
try{Thread.sleep(1000);} catch(InterruptedException e) {}
System.out.println(„Thread!");
}
public static void main(String[] args) {
new Thread(new SimpleThread2()).start();
System.out.print(„Hello “);
} }
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
12
Beispiel (Multithreaded-Echo)
public class MultithreadedEcho extends Thread {
private Socket socket;
public MultithreadedEcho(Socket socket) {
this.socket = socket;
}
Behandlung eines
einzelnen Clients.
public void run() {
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
...
}
public static void main(String[] args) {
Eingehende Verbindungen
akzeptieren und in neuem
...
Thread behandeln.
while (true) {
Socket client = serverSocket.accept();
new MultithreadedEcho(client).start();
} } }
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
13
Java New I/O
”Any problem in computer science
can be solved with another layer
of indirection.“
“Any performance problem can
be solved by removing a layer
of indirection.”
> Stream-Konzept bietet
hohen Abstraktionsgrad
Æ bequeme Programmierung
> Blockierende Operationen
zwingen zu aufwendigem
Multithreading
> Pufferklassen ermöglichen
Nutzung von Systemspeicher
> Kanäle und nicht-blockierende
Operationen
> Auswahl (Selection) sendeund empfangsbereiter Kanäle
Æ Konventionelle Java I/O
Æ New Java I/O ab J2SE 1.4
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
14
Kanäle
> Neue Programmierabstraktion
> Repräsentieren eine Verbindung zu einer Ressource
(z.B. Datei, Socket) für I/O-Operationen (z.B. Lesen, Schreiben)
> „Java-Version eines Dateideskriptors“
> Socket-Kanäle öffnen und binden
> Client-Seite
SocketChannel sc = SocketChannel.open();
sc.connect(new InetSocketAddress(host, port));
> Server-Seite
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.socket().bind(new InetSocketAddress(port));
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
15
(Nicht-)Blockierende Operationen
> Kanäle sind entweder blockierend oder nicht-blockierend
> Blockierend (Default):
channel.configureBlocking(true);
> Nicht-blockierend:
channel.configureBlocking(false);
> Lesen von einem Kanal
> int read(ByteBuffer dst)
> Liest verfügbare Bytes in den Puffer dst ein
> Liefert Anzahl gelesener Bytes oder -1 bei End-of-File
> Schreiben in einen Kanal
> int write(ByteBuffer src)
> Schreibt Bytes aus dem Puffer src in den Kanal
> Liefert Anzahl geschriebener Bytes
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
16
Selektoren
> Dienen dem Multiplexen von Kanälen
> Bestimmung der I/O-Bereitschaft von Kanälen
> Erzeugung und Registrierung
Selector selector = Selector.open()
SelectionKey key = channel.register(selector, interests)
> Interest Set (interests)
> Angabe der zu testenden I/O-Operationen pro Kanal/Key
> Integer-Wert durch bitweise Oder-Verknüpfung gebildet aus
> SelectionKey.OP_READ
> SelectionKey.OP_WRITE
> SelectionKey.OP_CONNECT > SelectionKey.OP_ACCEPT
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
17
Selected-Key Set
> Auswahl der I/O-bereiten Kanäle
> int select()
> Aktualisiert das Selected-Key Set der bereiten Kanäle
> Liefert Anzahl der Änderungen (möglicherweise 0)
> Ergebnis der Auswahl: Selected-Key Set
> Set<SelectionKey> selectedKeys()
> Enthält die Keys der bereiten Kanäle zum Zeitpunkt des
letzten select Aufrufs Æ Gefahr veralteter Informationen
> Testen des Ready-Sets eines Keys
> boolean isReadable()
> boolean isConnectable()
> boolean isWriteable()
> boolean isAcceptable()
> Explizites Entfernen der Keys nach Behandlung notwendig
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
18
Beispiel (New I/O – Echo-Server)
// bind a non-blocking server socket channel to port 8080
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
InetSocketAddress port = new InetSocketAddress(8080);
ssc.socket().bind(port);
// create a selector and register for accepting new connections
Selector sel = Selector.open();
ssc.register(sel, SelectionKey.OP_ACCEPT);
while( true ) { // main loop
sel.selectedKeys().clear();
sel.select();
Auswahl IObereiter Kanäle
Iteriere über bereite
Kanäle und arbeite
jeden einzeln ab
for( SelectionKey key : sel.selectedKeys() ) {
// handle channel/key
...
} }
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
19
Beispiel (New I/O – Verbindungen)
// accept new client connections
if (key.isAcceptable()) {
SocketChannel sc = ssc.accept();
sc.configureBlocking(false);
// register new client connection
sc.register(sel,
SelectionKey.OP_READ,
ByteBuffer.allocate(2048) );
}
G. Mühl
Beliebige Objekte
können einem Key
beigefügt werden
Æ Kanalkontext
Webbasierte Anwendungen / Socket-Programmierung
20
Beispiel (New I/O – Lesen)
// read client data into a buffer
if (key.isReadable()) {
SocketChannel sc = (SocketChannel)key.channel();
ByteBuffer buf = (ByteBuffer)key.attachment();
int read = sc.read(buf);
// EOF detected?
if (read < 0) {
client.close(); continue;
}
Kanal und assoziierter Kontext
Interest-Set fürs
// read successful?
Schreiben erweitern
if (read > 0) {
key.interestOps(key.interestOps() | SelectionKey.OP_WRITE);
}
Lesen aus dem
// buffer full?
Interest-Set löschen
if (!buf.hasRemaining()) {
key.interestOps(key.interestOps() & (~SelectionKey.OP_READ));
} }
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
21
Beispiel (New I/O – Schreiben)
// write data into channel
if (key.isWritable()) {
SocketChannel sc = (SocketChannel)key.channel();
ByteBuffer buf = (ByteBuffer)key.attachment();
buf.flip();
int write = sc.write(buf);
Puffer zum Schreiben vorbereiten
Interest-Set fürs
// write successful?
Lesen erweitern
if (write > 0) {
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
}
Schreiben aus
// buffer completely written?
Interest-Set löschen
if (!buf.hasRemaining()) {
key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
}
buf.compact();
}
G. Mühl
Geschriebene Daten entfernen
und Puffer zum Lesen vorbereiten
Webbasierte Anwendungen / Socket-Programmierung
22
Literatur
> Java API Specification
> http://java.sun.com/javase/6/docs/api/
> Java I/O Tutorial
> http://java.sun.com/docs/books/tutorial/essential/io/
> Java Socket Tutorial
> http://java.sun.com/docs/books/tutorial/networking/sockets/
> Java Concurrency Tutorial
> http://java.sun.com/docs/books/tutorial/essential/concurrency/
> Java New I/O
> Ron Hitchens: Java NIO. O‘Reilly, 2002.
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
23
Fragen?
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
24
Zeichenkodierung
Daten = Informationen?
0xCE 0xB1?
01
1001
110101
10 0 0
1
Wie lässt sich 0xCE 0xB1 interpretieren?
45 518
52 913
(Big Endian)
(Little Endian)
α
(UTF-8)
N1
(7 Bit ASCII)
α
(ISO-Latin-1)
Îą
(ISO-Latin-2)
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
26
Zeichenkodierung
> Zeichenvorrat (Character Repertoire)
> Endliche, ungeordnete Menge an Zeichen
> Verschiedene Sprachen und Kulturen
Æ verschiedene Alphabete (Buchstaben, Ziffern und Symbole)
> Zeichensatz (Character Set oder Charset)
> Anordnung der Zeichen (z.B. in einer Tabelle)
> Zeichen Æ Nummer (Code Point)
> Zeichenkodierung (Character Encoding)
> Abbildung der Zeichennummer in Speicher-/Übertragungsformat
> Nummer (Code Point) Æ Bitmuster
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
27
ASCII
> American Standard Code for Information Interchange (ASCII)
>
>
>
>
…0
1967 veröffentlichter 7-Bit Zeichensatz
128 Zeichen (95 druckbare Zeichen und 33 Steuerzeichen)
Entspricht dem Zeichenvorrat einer engl. Schreibmaschine
Grundlage (vieler) späterer Zeichensätze
…1
…2
…3
…4
…5
…6
…7
…8
…9
…A
…B
…C
…D
…E
…F
0…
NUL SOH STX ETX EOT ENQ ACK BEL
BS
HT
LF
VT
FF
CR
SO
SI
1…
DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM
FS
GS
RS
US
SUB ESC
2…
SP
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
3…
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
4…
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
5…
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
6…
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
7…
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL
ASCII Zeichensatz inkl. Steuerzeichen
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
28
Latin-1
> ISO/IEC 8859-1 (Latin-1)
>
>
>
>
8-Bit Zeichensatz für viele westeuropäische Sprachen
Zeichen 0 – 127 identisch zu ASCII Æ Kompatibilität
Zeichen 128 – 159 unbelegt (bzw. Steuerzeichen in ISO-8859-1)
Zeichen 160 – 255 mit sprachspezifische Sonderzeichen
…0
…1
…2
…3
…4
…5
…6
…7
…8
…9
…A
…B
…C
8… PAD HOP BPH NBH IND NEL SSA ESA HTS HTJ VTS PLD PLU
9… DCS PU1 PU2 STS CCH MW SPA EPA SOS SGCI SCI
A… NBSP
CSI
ST
…D
RI
…E
…F
SS2 SS3
OSC PM
APC
¡
¢
£
¤
¥
¦
§
¨
©
ª
«
¬
SHY
®
¯
B…
°
±
²
³
´
µ
¶
·
¸
¹
º
»
¼
½
¾
¿
C…
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Ê
Ë
Ì
Í
Î
Ï
D…
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ú
Û
Ü
Ý
Þ
ß
E…
à
á
â
ã
ä
å
æ
ç
è
é
ê
ë
ì
í
î
ï
F…
ð
ñ
ò
ó
ô
õ
ö
÷
ø
ù
ú
û
ü
ý
þ
ÿ
ISO-8859-1 (inkl. Steuerzeichen).
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
29
Latin-2
> ISO/IEC 8859-2 (Latin-2)
>
>
>
>
8-Bit Zeichensatz für viele (süd)osteuropäische Sprachen
Zeichen 0 – 127 identisch zu ASCII Æ Kompatibilität
Zeichen 128 – 159 unbelegt (bzw. Steuerzeichen in ISO-8859-1)
Zeichen 160 – 255 mit sprachspezifische Sonderzeichen
…0
…1
…2
…3
…4
…5
…6
…7
…8
…9
…A
…B
…C
8… PAD HOP BPH NBH IND NEL SSA ESA HTS HTJ VTS PLD PLU
9… DCS PU1 PU2 STS CCH MW SPA EPA SOS SGCI SCI
A… NBSP
CSI
ST
…D
RI
…E
…F
SS2 SS3
OSC PM
APC
Ą
˘
Ł
¤
Ľ
Ś
§
¨
Š
Ş
Ť
Ź
SHY
Ž
Ż
B…
°
ą
˛
ł
´
ľ
ś
ˇ
¸
š
ş
ť
ź
˝
ž
ż
C…
Ŕ
Á
Â
Ă
Ä
Ĺ
Ć
Ç
Č
É
Ę
Ë
Ě
Í
Î
Ď
D…
Đ
Ń
Ň
Ó
Ô
Ő
Ö
×
Ř
Ů
Ú
Ű
Ü
Ý
Ţ
ß
E…
ŕ
á
â
ă
ä
ĺ
ć
ç
č
é
ę
ë
ě
í
î
ď
F…
đ
ń
ň
ó
ô
ő
ö
÷
ř
ů
ú
ű
ü
ý
ţ
˙
ISO-8859-2 (inkl. Steuerzeichen).
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
30
Unicode
Zeichen
Nummer
(Codepunkt)
Repräsentation (UTF-8)
a (lat. A)
α (Alpha)
‫( א‬Alef)
U+0061
U+03B1
U+05D0
0x61
0xCE 0xB1
0xD7 0x90
> Unicode
> Gibt jedem Zeichen eine Nummer (Code Point)
> Sprach- und plattformunabhängiger, universeller Zeichensatz
> Unicode Transformation Format (UTF)
> Bildet Nummern auf Bytesequenzen ab
> Verschiedene Möglichkeiten: UTF-7, UTF-8, UTF-16, UTF-32, …
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
31
UTF-8 Kodierung
Unicode Bereich
UTF-8 Kodierung
0000 0000 – 0000 007F
0xxxxxxx
0000 0080 – 0000 07FF
110xxxxx 10xxxxxx
0000 0800 – 0000 FFFF
1110xxxx 10xxxxxx 10xxxxxx
0001 0000 – 0010 FFFF
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Startbyte
> 0xxxxxxx
Äquivalent zu ASCII
Folgebyte(s)
> 10xxxxxx
> Anzahl: so viele wie nötig
> 1...10x...x
Anzahl der führenden 1 =
Anzahl der Bytes gesamt
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
32
Charsets in Java
> Klasse java.nio.charset.Charset
> Liste der auf der Plattform verfügbaren Zeichensätze
public static SortedMap<String,Charset>
availableCharsets()
> Zeichensatz unter kanonischem Namen anfordern
public static Charset forName(String charsetName)
> (Indirekte) Nutzung durch andere Klassen
> Charset-Objekte besitzen Methoden zum
> Kodieren: public ByteBuffer encode(CharBuffer cb)
> Dekodieren: public CharBuffer decode(ByteBuffer bb)
> Charset-Objekte erlauben die Erzeugung von
> Kodierern: public abstract CharsetEncoder newEncoder()
> Dekodierern: public abstract CharsetDecoder
newDecoder()
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
33
Kodieren / Dekodieren
> Klassen java.io.{InputStreamReader | OutputStreamWriter}
> Angabe des zu nutzenden Zeichensatzes bei Objekterzeugung
> Kodieren:
public OutputStreamWriter(OutputStream out,
String charsetName)
> Dekodieren:
public InputStreamReader(InputStream in,
String charsetName)
> Klasse java.lang.String
> Kodieren:
public byte[] getBytes(String charsetName)
> Dekodieren:
public String(byte[] bytes, String charsetName)
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
34
Literatur
> Registrierte Character Sets
> http://www.iana.org/assignments/character-sets
> Unicode
> http://unicode.org/
G. Mühl
Webbasierte Anwendungen / Socket-Programmierung
35
Webbasierte Anwendungen
Grundlegende Dienste
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
>
>
>
>
G. Mühl
Domain Name Service (DNS)
E-Mail
File Transfer Protocol (FTP)
Secure Shell (SSH)
Webbasierte Anwendungen / Grundlegende Dienste
2
Domain Name Service (DNS)
Namen und Namensräume
> Namen identifizieren Objekte in verteilten Systemen
> Ressourcen wie Rechner, Drucker und Dateien
> Benutzer und Benutzergruppen
> Dienste und Prozesse, etc.
> Namenssyntax legt Aufbau der Namen fest
>
>
>
G. Mühl
Unstrukturiert (z.B. DHDIBM1)
Strukturiert (z.B. kbs.cs.tu-berlin.de)
Attributiert
> Reihe von [Attributname, Attributwert]-Paaren
(z.B. [country=de, org=tub, department=cs, group=kbs])
Webbasierte Anwendungen / Grundlegende Dienste
4
Namen und Namensräume
> Namensraum
> Menge aller möglichen Namen bei gegebener Namenssyntax
> Struktur und Aufbau
> Flach
Æ unstrukturiert
> Hierarchisch Æ hierarchische Anordnung von Kontexten,
relative Namen
> Wegorientiert Æ Namenskomponenten bestimmen Weg
zum Objekt
/
usr
bin
…
cat
host2
host3
etc
src
…
/usr/bin/cat
G. Mühl
host1
start
mail
…
…
host1!host2!host3!mail
Webbasierte Anwendungen / Grundlegende Dienste
5
Verzeichnis (Namensdienst)
> Entwurfsfragen
> Struktur der Namen und Namensraum
> Generierung und Eindeutigkeit von Namen
> Auflösung von Namen durch Namensdienst, d.h. Umsetzung auf
andere Namen oder Adressen
> Namensdienst (Name Service, Directory Service)
> Bildet Namen auf Adressen ab
> Finden einer Adresse bei vorgegebenem Namen
Æ weiße Seiten
> Finden einer Adresse auf Basis bestimmter Attributwerte
Æ gelbe Seiten
> Verwaltung von Querverweisen Æ Alias
> Verwaltung von Gruppen von Namen Æ Verteilerliste
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
6
Domain Name Service (DNS)
> Skalierbarer Dienst zur Abbildung von Namen auf
IP-Adressen
> Skalierbarkeit von DNS beruht auf
> Replikation Æ Robustheit
> Caching Æ Performance
> Hierarchische Organisation Æ dezentrale Namensvergabe
> Hierarchisches Domänen-Konzept
> Beispiel: informatik.uni-rostock.de
> uni-rostock ist Subdomain von de
> Syntax der Namen
> <256 Zeichen, Teile <64 Zeichen
> Groß-/Kleinschreibung unerheblich
> Benennung beliebiger Objekttypen
> Domänen unabhängig von physischen Netzen
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
7
DNS Namensraum – Top Level Domains
> Organisatorisch
> Geographisch
COM, EDU, GOV, MIL, ORG, NET, INT, ...
DE, UK, US, AU, TO, ...
root
ibm
com
edu
...
...
purdue
...
ee
db
G. Mühl
cs
de
tu-berlin
...
ai
Top Level Domains
org
...
focus
cs
kbs
...
...
Webbasierte Anwendungen / Grundlegende Dienste
8
Name Server
> Domänen nutzen miteinander kooperierende Name Server
> Bilden ein Verteiltes System
> Replikation der Name Server steigert die Zuverlässigkeit
> Jeder Name Server kennt mindestens einen übergeordneten
Name Server
> Primary Name Server kennen die Root Name Server
> Anfragen der Clients an den Name Service
> Per UDP an Port 53 des lokalen Name Servers
> Anfrage nach Name, Objekttyp, ..., iterativ / rekursiv
> Caching der Namensinformation im Name Server
> Einträge im Cache: Name / IP-Adresse / Name Server
> Möglichkeit veralteter Information wird mitgeteilt
> Bereinigung des Caches mit TTL (time-to-live) für Einträge
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
9
Datenbank im Name Server
> Name Server speichert seine Information in einer Datenbank
> Einträge heißen Resource Records (RR)
> Neue Resource Records sind in Antworten auf Resolve()Anfragen an Name Server enthalten
> Jeder Resource Record ist ein 5-Tupel
> Domain Name Domain-Name, für den dieser RR gilt
> Class
Klassifizierung der Information
(meist „IN“ = Internet)
> Type
Typ des Eintrags
> Value
Datenwert (abhängig vom Typ)
> Time-to-Live
Lebensdauer des Eintrags (in Sekunden)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
10
Resource Record Typen (Beispiele)
Typ
Bedeutung
Wert
SOA
A
MX
NS
CNAME
PTR
HINFO
TXT
NS zuständig für
IP-Adresse f. Namen
E-Mail Knoten
Name Server
Alias
inverse Abbildung
Host-Beschreibung
Beliebiger Text
mehrere Parameter
32-Bit-Integer
Priorität, Empfänger für ...
Name eines NS
Name einer Domäne
Name
ASCII-Text
ASCII-Text
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
11
Platzierung von Name Servern
> DNS-Namensraum wird in nicht überlappende Zonen eingeteilt
> Jede Zone enthält einen Primary Name Server und evtl. weitere
Secondary Name Server
root
com
ibm
...
princeton
ee
db
G. Mühl
...
edu
cs
de
tu-berlin
...
...
ai
org
...
cs
kbs
heise
physik
...
...
Webbasierte Anwendungen / Grundlegende Dienste
12
Namensdienst
.edu
> Iterative Kooperation der Name Server
> Beispiel
ci c
1
cicada.cs.princeton.edu
Client
192.12.69.60
8
Æ
Æ
G. Mühl
ad
Root
Name
Server
2
in
.pr
s
c
a.
du,
e
.
ton
ton
ce
.e
du
233
.
8
2
6.1
3
9
1
.
8
2
1
.princeton.edu
4
ce
prin cicada.cs.princeton.edu
Lokaler
Name
cs.princeton.edu, 192.12.69.5
Server
5
ci c
Princeton
Name
Server
ad
a.c
cic
s.p
a
rin
6
19 da .
ce
2.1 cs.
.cs.princeton.edu
ton
2.6 prin
.ed
9.6 ce
u
t on
0
.ed
CS
u,
Caching des Ergebnisses im
lokalen Name Server
Bereinigung des Caches entsprechend der
Time-to-Live des Eintrags
7
Name
Server
Webbasierte Anwendungen / Grundlegende Dienste
13
Namensdienst
> Beispiel: E-Mail an „[email protected]“
Benutzer
[email protected]
2 cs.princeton.edu
Name
Server
1
Mail
Mail
Program
program
3 192.12.69.5
192.12.69.5
4
TCP
Die Anwendung, nicht TCP,
löst den Namen auf!
192.12.69.5
5
IP
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
14
Weitere Aspekte
> LDAP (= Lightweight Directory Access Protocol)
> Modifizierter OSI X.500 Namensdienst über TCP/IP
> Bietet sehr viel mehr Funktionalität als DNS
(weiße Seiten, gelbe Seiten, …)
> DNS Datenbank wurde ursprünglich statisch vom
Administrator angelegt
> Neue UPDATE-Option im DNS-Protokoll [RFC 2136]
> Dynamische Erweiterung und Modifikation der
Datenbankeinträge
> IPv6 verlangt auch eine neue Version von DNS
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
15
E-Mail
E-Mail Anforderungen
> Zuverlässiges Verschicken von Text und Daten
> Entkoppelte, Store-and-Forward-Übertragung
(ggf. mit Auslieferungsbestätigung)
> Adressierung von Einzelpersonen und Gruppen
> Strukturierte Nachrichten mit klarer Trennung der Einheiten
> Weiterleiten und Kopieren von Nachrichten
Thunderbird, Outlook,
pine, mutt, mail, …
User
Agent
Transfer
Agent
User
Agent
Transfer
Agent
Transfer
Agent
Postfix, Exim,
Sendmail, …
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
17
Simple Mail Transfer Protocol (SMTP)
> Spezifiziert in RFC 821 bzw. 2821
> Auslieferung von Mail über eine TCP-Verbindung (Port 25)
> Der Absender (= SMTP Client) kommuniziert mit dem
SMTP Daemon des Empfängers (= Server)
> SMTP ist ein einfaches ASCII-Protokoll
> Client-Kommandos als Zeichen
> Replies als Ziffern und Text
> Client-Kommandos
> HELO, MAIL FROM, DATA, QUIT, ...
> Server-Antworten
>
>
>
>
G. Mühl
220 (= service ready)
250 (= other party OK)
354 (= send mail)
....
Webbasierte Anwendungen / Grundlegende Dienste
18
SMTP – Beispieldialog
Client
Server
220 fritz.com SMTP service ready
HELO otto.edu
250 fritz.com says hello to otto.edu
MAIL FROM: <[email protected]>
250 sender OK
RCPT TO: <[email protected]>
250 recipient OK
DATA
354 send mail; end with "."-line
text text text text ......
.
250 message accepted
QUIT
221 fritz.com closing connection
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
19
Nachrichtenformate [RFC 822, 2822]
> Aufbau einer Nachricht
> Umschlag (Envelope) + Briefkopf (Header) + Rumpf (Body)
Body
> Umschlag wird von den Transfer Agents benutzt und gebildet
> Header-Felder werden für den Transport benötigt
>
>
>
>
>
>
>
G. Mühl
To:
Cc:
Bcc:
From:
Sender:
Received:
Return-Path:
(primäre) Empfänger
(sekundäre) Empfänger
(unsichtbare) Empfänger
Briefschreiber
Absender (falls unterschiedlich von From)
pro Zwischen-Transfer-Agent eine Zeile
Rückweg für Antworten
Webbasierte Anwendungen / Grundlegende Dienste
20
Nachrichtenformate [RFC 822, 2822]
> Zusätzliche Felder im Header (optional)
>
Date:
Datum und Zeit des Abschickens
>
Reply-To:
Adresse für Antworten
>
Message-Id:
eindeutige Nummer
>
In-Reply-To:
Bezug ("Message-Id")
>
References:
andere relevante Message-Ids
>
Keywords:
vom Benutzer angegebene Keywords
>
Subject:
Betreff
>
X-?????:
benutzerdefinierte Felder
> Leerzeile trennt Header-Felder vom Inhalt (Body)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
21
MIME
> MIME = Multipurpose Internet Mail Extensions
> SMTP ist ein (7 Bit) ASCII Protokoll
> E-Mails bestehen aus Text im US-ASCII-Format
> Problem: Versenden von Nachrichten
> Mit Texten anderer Sprachen
(die nicht in US-ASCII darstellbar sind)
> Mit (beliebigen) binären Inhalten
(z.B. Grafik, Audio, Video)
> Lösung: Multipurpose Internet Mail Extensions (MIME)
>
>
>
>
G. Mühl
Vorgeschlagen RFC 1341 und überarbeitet in RFC 2045
Transport von (Binär)daten als US-ASCII Æ Kodierung
Keine Änderung des SMTP Æ Kompatibilität zu Mail-Servern
Aber: Anpassung der Mail-Clients erforderlich
Webbasierte Anwendungen / Grundlegende Dienste
22
MIME Header
> Erweiterung des E-Mail Headers um 5 neue Felder
> MIME-Version:
> Erkennung einer MIME Nachricht
> Aktuelle Version 1.0 (trotz mehrfacher Erweiterungen)
> Content-Description:
> Optionale, menschen-lesbare Beschreibung des Inhalts
> Content-Id:
> Optionaler eindeutiger Bezeichner für den Inhalt
> Content-Transfer-Encoding:
> Bezeichnet die Kodierung (Art der Verpackung) des Inhalts
> Content-Type:
> Art des Inhalts (z.B. Text, Bild, Audio, etc.)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
23
Content-Transfer-Encoding
> 7Bit
> Bezeichnet ursprüngliches SMTP E-Mail Format
> ASCII Zeichen (Oktetts im Bereich 0x00 – 0x7F) angeordnet
in Zeilen mit max. 1000 Zeichen (inkl. abschließendes CRLF)
> 8Bit
> Beliebige Oktetts in Zeilen mit max. 1000 Zeichen (inkl. CRLF)
> Verletzt ursprünglichen Standard
Æ vorgesehen für SMTP Erweiterung 8BITMIME
> Binary
> Beliebige Oktetts (für 8BITMIME) ohne Zeilen
> Quoted-Printable
> Lesbare Kodierung für ASCII-Text mit wenigen Sonderzeichen
> Base64
> Dichte Kodierung für binäre Daten
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
24
Quoted-Printable [RFC 2045]
Hüte
H=FCte
(Latin-1)
(Quoted-Printable)
> Kompromiss zwischen Lesbarkeit und Zuverlässigkeit
> Beliebige Oktetts werden als Gleichheitszeichen (=) gefolgt
vom Hexadezimalwert des Oktetts kodiert
> Beispiel: ä (Latin-1) Æ =E4, ü (Latin-1) Æ =FC
> Druckbare Zeichen (ASCII 32–126) dürfen erhalten bleiben
> Ausnahme Gleichheitszeichen (=) Æ =3D
> Ausnahme Leerzeichen/Tabulator vor Zeilenumbruch
Æ =20 / =09
> Harte Zeilenumbrüche (mit Bedeutung) stets als CRLF kodiert
> Einfache Werte 10 und 13 Æ =0A bzw. =0D
> Zeilen umfassen max. 76 Zeichen
> Einfügen weicher Zeilenumbrüche Æ = gefolgt von CRLF
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
25
Base64 [RFC 2045]
Hüte
SPx0ZQ==
(Latin-1)
(Base64)
> 24 Bit (3 Oktetts) werden in vier 6-Bit-Einheiten zerlegt
Æ 26=64 Werte
> Jede 6-Bit-Einheit erhält nach ihrem Wert ein Zeichen
> 0ÆA,
> 26Æa,
> 52Æ0,
1ÆB, …, 25ÆZ,
27Æb, …, 51Æz,
53Æ1, …, 61Æ9, 62Æ+, 63Æ/
> Markierungen = und == kennzeichnen die letzte
Eingabegruppe, sofern diese nur aus 16 bzw. 8 Bit besteht
> Nach 76 Zeichen wird ein Zeilenumbruch CRLF eingefügt
> Bei Dekodierung werden Zeichen außerhalb des obigen
Alphabets ignoriert (z.B. eingefügte Zeilenumbrüche CRLF)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
26
Base64 Beispiel
Text
M
a
n
ASCII
0x4D (77)
0x61 (97)
0x6E (110)
Bit Pattern
Index
Base64
G. Mühl
010011010110000101101110
0x13 (19) 0x15 (22)
T
W
0x05 (5)
0x2E (46)
F
u
Webbasierte Anwendungen / Grundlegende Dienste
27
Base64 Tabelle
Wert
Zeichen
Wert
Zeichen
Wert
Zeichen
Wert
Zeichen
0x00 (00)
A
0x10 (16)
Q
0x20 (32)
g
0x30 (48)
w
0x01 (01)
B
0x11 (17)
R
0x21 (33)
h
0x31 (49)
x
0x02 (02)
C
0x12 (18)
S
0x22 (34)
i
0x32 (50)
y
0x03 (03)
D
0x13 (19)
T
0x23 (35)
j
0x33 (51)
z
0x04 (04)
E
0x14 (20)
U
0x24 (36)
k
0x34 (52)
0
0x05 (05)
F
0x15 (21)
V
0x25 (37)
l
0x35 (53)
1
0x06 (06)
G
0x16 (22)
W
0x26 (38)
m
0x36 (54)
2
0x07 (07)
H
0x17 (23)
X
0x27 (39)
n
0x37 (55)
3
0x08 (08)
I
0x18 (24)
Y
0x28 (40)
o
0x38 (56)
4
0x09 (09)
J
0x19 (25)
Z
0x29 (41)
p
0x39 (57)
5
0x0A (10)
K
0x1A (26)
a
0x2A (42)
q
0x3A (58)
6
0x0B (11)
L
0x1B (27)
b
0x2B (43)
r
0x3B (59)
7
0x0C (12)
M
0x1C (28)
c
0x2C (44)
s
0x3C (60)
8
0x0D (13)
N
0x1D (29)
d
0x2D (45)
t
0x3D (61)
9
0x0E (14)
O
0x1E (30)
e
0x2E (46)
u
0x3E (62)
+
0x0F (15)
P
0x1F (31)
f
0x2F (47)
v
0x3F (63)
/
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
28
Content-Type [RFC 2046]
> Charakterisieren den Inhalt Æ Bestimmen Art der Darstellung
> Registrierung der Medientypen bei der IANA [RFC 4288,4289]
> Liste registrierter Typen: http://www.iana.org/assignments/media-types/
Typ / Subtyp
text
image
audio
video
application
message
multipart
G. Mühl
html
plain
jpeg
png
basic
mpeg
octet-stream
postscript
external-body
partial
rfc822
alternative
digest
mixed
parallel
Beschreibung
HTML-Dateien
Reintext
JPEG-Dateien
PNG-Dateien
Sound-Dateien
MPEG-Dateien
Unbekannte Anwendungsdaten
Postscript
Nachricht referenziert externen Inhalt
Nachricht mit Teilinhalt
Nachricht nach RFC 2822
Mehrteilige Daten alternativ
Mehrteilige Daten auswahl
Mehrteilige Daten gemischt
Mehrteilige Daten parallel
Webbasierte Anwendungen / Grundlegende Dienste
29
X-Typen
> Verwendung nicht-standardisierter Subtypen ist zulässig
> Kennzeichnung mit Präfix „x-“
> Keine Eindeutigkeit
> Aber viele Subtypen im Gebrauch
Typ / Subtyp
application
audio
video
G. Mühl
x-dvi
x-framemaker
x-gzip
x-latex
x-shockwave-flash
x-tar
x-ms-wma
x-wav
x-ms-wmv
Beschreibung
DVI-Dateien
Framemaker-Dateien
gzip-Archive
Latex-Dateien
Adobe Flash-Dateien
tar-Archive
Windows Media Audio
WAV Dateien
Windows Media Video
Webbasierte Anwendungen / Grundlegende Dienste
30
Multipart Beispiel (Message Parts)
MIME-Version: 1.0
Eine eindeutige Zeichenkette als
From: Alice Alisson <[email protected]>
Begrenzer trennt einzelne
Nachrichtenteile voneinander ab.
TO: Bob Bobington <[email protected]>
Subject: A multipart example
Content-Type: multipart/mixed; boundary=unique-boundary-1
This is the preamble area of a multipart message. Mail readers
that understand multipart format should ignore this preamble.
--unique-boundary-1
Some text appears here... Since no header fields were given the
text is assumed to be US-ASCII.
--unique-boundary-1
Content-type: text/plain; charset=US-ASCII
This could have been part of the previous part, but illustrates
explicit versus implicit typing of body parts.
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
31
Multipart Beispiel (Transfer Encodings)
--unique-boundary-1
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
This is Latin-1 text which is encoded using quoted printable=20=
in order to preserve German Umlaute: H=FCte and H=E4user.
--unique-boundary-1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: Base64
This is UTF-8 text which is Base64
encoded to preserve German
Umlaute: Hüte and Häuser.
VGhpcyBpcyBVVEYtOCB0ZXh0IHdoaWNoIGlzIEJhc2U2NCBlbmNvZGVkIHRvIHByZXN
lcnZlIEdlcm1hbiBVbWxhdXRlOiBIw7x0ZSBhbmQgSMOkdXNlci4=
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
32
Multipart Beispiel (Nesting)
--unique-boundary-1
Content-Type: multipart/parallel; boundary=unique-boundary-2
--unique-boundary-2
Content-Type: audio/basic
Content-Transfer-Encoding: base64
... base64-encoded 8000 Hz audio data goes here ...
--unique-boundary-2
Content-Type: image/png
Content-Transfer-Encoding: base64
... base64-encoded image data goes here ...
Verschachtelung von
Multipart Nachrichten.
--unique-boundary-2
--unique-boundary-1
Content-type: text/richtext
This is richtext. Isn't it cool?
--unique-boundary-1
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
33
JavaMail API
> API und Referenzimplementierung von Sun
> Versenden von E-Mails (SMTP)
> Empfangen/Abrufen von E-Mails (POP3, IMAP)
> JavaMail API
> URL: http://java.sun.com/products/javamail/
> Aufnehmen der mail.jar Bibliothek in den Klassenpfad
(java -classpath /path/to/mail.jar MyProgram)
> JavaBeans Activation Framework
> Notwendig für Java SDK 5 und älter
> URL: http://java.sun.com/products/javabeans/glasgow/jaf.html
> Aufnehmen der activation.jar Bibliothek in den Klassenpfad
(java -classpath /path/to/activation.jar MyProgram)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
34
Verbindungen
> Klasse javax.mail.Session
> Repräsentiert eine Verbindung zum Server (SMTP, POP3, IMAP)
> Angabe der Konfiguration bei Objekterzeugung
> Einstellungen werden in Form von Schlüssel / Wert-Paaren in einem
Properties-Objekt (Hash-Tabelle) abgelegt
> Übersicht relevanter Schlüssel in Dokumentation der Pakete
com.sun.mail.{smtp | pop3 | imap | dsn} und javax.mail
> Versenden von Nachrichten erfolgt über TransportMechanismus der Verbindung
> Beispiel
Properties props = new Properties();
props.setProperty("mail.smtp.host", "mail.cs.tu-berlin.de");
Session session = Session.getDefaultInstance(props);
Message msg = ...
Transport.send( msg );
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
35
MIME-Nachrichten
> Klasse javax.mail.MimeMessage
> Repräsentiert eine einfache MIME-Nachricht
> Bietet Methoden zum Setzen
> des Absenders und der Empfänger
> des Betreffs und weiterer Header-Felder
> des Nachrichteninhalts
> Beispiel
InternetAddress from = new InternetAddress("[email protected]");
InternetAddress to = new InternetAddress("[email protected]");
msg = new MimeMessage(session);
msg.setFrom(from);
msg.setRecipient(Message.RecipientType.TO, to);
msg.setSubject("JavaMail API example");
msg.setContent("It works! Isn't it cool?", "text/plain");
Transport.send(msg);
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
36
MIME Multipart-Nachrichten
> Klasse javax.mail.internet.MimeMultipart
> Container für mehrere MIME Nachrichtenteile
> Angabe des Subtyps (mixed, alternative, …) bei Erzeugung
> Klasse javax.mail.internet.MimeBodyPart
> Repräsentiert einen MIME Nachrichtenteil
> Beispiel
MimeBodyPart txt = new MimeBodyPart();
txt.setContent("This is plain text.", "text/plain");
MimeBodyPart html = new MimeBodyPart();
html.setContent("<html><body>This is <b>HTML</b>.</body></html>",
"text/html");
MimeMultipart content = new MimeMultipart("alternative");
content.addBodyPart(txt); content.addBodyPart(html);
Message msg = ...
msg.setContent(content);
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
37
Base64 Kodierung in Java
> JavaMail API
> Selbständige Wahl passender Transfer-Kodierung Æ Transparenz
> Manuelle Vorgabe durch explizites Setzen des MIME Headers:
msg.setHeader("Content-Transfer-Encoding", "Base64")
> Java SDKs
> Klassen sun.misc.{BASE64Encoder | BASE64Decoder}
> Nicht öffentliches Paket Æ keine Garantien für die Zukunft
> Alternative: Commons-Bibliothek des Apache Jakarta Projekts:
http://commons.apache.org/codec/
> Beispiel
byte[] bytes1 = {0x08, 0x15, 0x47, 0x11};
String s = new BASE64Encoder().encode(bytes1);
byte[] bytes2 = new BASE64Decoder().decodeBuffer(s);
System.out.println(Arrays.equals(bytes1,bytes2));
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
38
Literatur
> Simple Mail Transport Protocol (SMTP)
> http://tools.ietf.org/html/rfc821, http://tools.ietf.org/html/rfc2821
> E-Mail Message Format
> http://tools.ietf.org/html/rfc822, http://tools.ietf.org/html/rfc2822
> Multipurpose Internet Mail Extensions (MIME)
> http://tools.ietf.org/html/rfc1341, http://tools.ietf.org/html/rfc2045
> Quoted Printable
> http://tools.ietf.org/html/rfc1521
> Base64
> http://tools.ietf.org/html/rfc2045
> JavaMail API
> http://java.sun.com/products/javamail/
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
39
File Transfer Protocol (FTP)
File Transfer Protocol (FTP) [RFC 959]
> Ermöglicht den Transfer ganzer Dateien zwischen Systemen
> Einfacher als die Einbindung von entfernten Dateien
in das lokale Dateisystem (z.B. mittels NFS)
> Bietet einfache Möglichkeit auf gemeinsame Daten zuzugreifen
> Wird meistens für nur lesbare Dateien benutzt
> Falls die Datei verändert wird, muss sie explizit per erneutem
Transfer zurückgeschrieben werden
> Zugang über Benutzerkonto (Name + Passwort)
> Benutzerkonto, Passwort und Daten werden im Klartext übertragen
> Bietet interaktiven Zugang als auch Programmierschnittstelle
> Verschiedene Datenformate (ASCII und binär)
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
41
FTP-Verbindungen
> Arbeitet mit TCP
> 2 Verbindungen pro Übertragung
> Kontrollport = 21
> Datenport = 20
Daten
Steuerung
Client
Server
Steuerung
Daten
TCP
> Zusätzlich existiert ein Trivial File Transfer Protocol (TFTP)
> Aufbauend auf UDP, kleiner Umfang, einfache Implementierung
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
42
FTP-Sitzung
$ ftp diamant.vsb.informatik.uni-frankfurt.de
Connected to diamant.vsb.informatik.uni-frankfurt.de
220 diamant.vsb.informatik.uni-... FTP server ready.
Name (diamant:otto): anonymous
331 Guest login ok, send ident as password.
Password: [email protected]
230 Guest login ok, access restrictions apply.
ftp> cd pub
200 PORT command ok.
ftp> get some.file.data my.local.data
150 Opening data connection for /bin/ls (141.2.2.1, 2363)
(290455 bytes).
226 Transfer complete.
300000 bytes received in 99 seconds (30 Kbytes/s)
ftp> close
221 Goodbye.
ftp> quit
$
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
43
FTP mit Java
URL url = new URL(
"ftp://user01:[email protected]/README.txt;type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
44
Telnet, SSH
Telnet [RFC 854]
> Telnet liefert interaktiven Terminalzugang über das Netz
> Unsicher, da Daten, Benutzerkennungen und Passwörter im
Klartext übertragen werden Æ Secure Shell (SSH), Port 22
> Client verbindet sich mittels TCP zu Port 23 des Servers
> Client registriert Tastaturanschläge, schickt sie zum Server,
empfängt die Ergebnisse und leitet sie zum Bildschirm
> Was geschieht bei Ctrl-c oder bei CR/LF? Æ OS-Integration
> Server leitet alle Daten an das lokale System weiter und gibt
Ergebnisse zurück
Terminal
telnet
Client
Server
telnet
TCP
Betriebssystem
G. Mühl
Betriebssystem
Webbasierte Anwendungen / Grundlegende Dienste
46
Jakarta Commons Net
> Sammlung von Java-Klassen unter Open Source-Lizenz für
den Bereich Internetprotokolle
http://commons.apache.org/net
> Unterstützte Protokolle
>
>
>
>
>
>
G. Mühl
FTP/FTPS
NNTP
SMTP
POP3
Telnet
…
Webbasierte Anwendungen / Grundlegende Dienste
47
Fragen?
G. Mühl
Webbasierte Anwendungen / Grundlegende Dienste
48
Webbasierte Anwendungen
World Wide Web
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
>
>
>
>
>
>
G. Mühl
Architektur des World Wide Web (WWW)
Hypertext Transfer Protocol (HTTP)
Hypertext Markup Language (HTML)
Cascading Style Sheets (CSS)
Serverseitige Techniken
Clientseitige Techniken
Webbasierte Anwendungen / World Wide Web
2
Architektur des WWW
World Wide Web (WWW)
> Verteiltes Hypertext/Hypermedia-System
> Dezentrale Speicherung von Dokumenten, die aus Text, Grafik,
Audio, Video, etc. bestehen
> Netzartige Verknüpfung der Dokumente mittels Hyperlinks
> Dokumente
>
>
>
>
G. Mühl
Beschrieben durch Hypertext Markup Language (HTML)
Adressierung mittels Uniform Resource Locators (URL)
Bereitstellung durch Webserver
Übertragung zum Webclient (z.B. Webbrowser) mittels
Hypertext Transfer Protocol (HTTP)
Webbasierte Anwendungen / World Wide Web
4
Architektur
HTML
Dokument
FTP
E-Mail
News
HTTP
Telnet
WWW
Browser
Benutzer
G. Mühl
Webclient
(HTTP-Client)
…
Webserver
(HTTP-Server)
Gateways
Webbasierte Anwendungen / World Wide Web
5
Webclients
Grafische Browser
Zeilenorientierte Browser
> Direkt darstellbar sind
> Reine Textdarstellung ohne
Bilder, Audio, Video, etc.
> Bedienung über Tastatur
> Geeignet für Verbindungen mit
geringer Übertragungsrate
> Beispiele
> HTML-, ASCII-Dokumente
> Verbreitete Grafikformate wie
GIF, XPM, JPEG, PNG, etc.
> Einbindung externer Betrachter
>
>
>
>
Postscript, PDF
Audio (WAV, MP3, etc)
Video (MPEG, QuickTime, etc.)
…
> Beispiele
> Firefox
> Konqueror
> Internet Explorer
G. Mühl
> Lynx
> Emacs
Clients ohne Darstellung
> wget
> cURL
Webbasierte Anwendungen / World Wide Web
6
Webserver
> Bsp.: Apache, Microsoft Internet Information Services (IIS)
> Meist über TCP-Port 80 erreichbar
> Normalerweise eine TCP-Verbindung pro HTTP-Auftrag
> Für die Übertragung von eingebetten Bildern, Audio, Video,
etc. werden zusätzliche TCP-Verbindungen aufgebaut
> Typische Fehlermeldungen
> 401
> 404
> 500
G. Mühl
unauthorized
not found
server error
// keine Zugangsberechtigung
// Dokument nicht gefunden
// Fehler mit Fehlermeldung
Webbasierte Anwendungen / World Wide Web
7
Laden und Anzeigen einer Webseite
> Ausgangspunkt: Eingabe der URL einer Seite im Browser
> Aufbau einer Verbindung zwischen Webbrowser und Webserver
> Browser schickt HTTP-Anfrage an den Server
> Server liefert HTTP-Antwort mit HTML-Dokument bzw. einem
Fehlercode zurück
> Browser interpretiert das HTML-Dokument und zeigt es an
> Schließen der Verbindung
> Beim Klicken auf einen Link (= URL) läuft der gleiche Vorgang
mit der neuen URL ab
G. Mühl
Webbasierte Anwendungen / World Wide Web
8
WWW Proxy
GET …
HTTP/1.1 …
HTTP Client
Cache
Proxy
HTTP Server
> Engl. Bevollmächtigter, Stellvertreter
> Wird zwischen Webbrowser (Client) und Server geschaltet
> Einstellung in Browser-Konfiguration
> Leicht geändertes Format im Request
Æ komplette URL wird gesendet (mit Hostname)
> Proxy kann Seiten cachen, filtern, protokollieren
> Schnellerer Zugriff, mehr Sicherheit, Schutz vor ungewünschten
Inhalten, Strafverfolgung, ...
G. Mühl
Webbasierte Anwendungen / World Wide Web
9
Webserver Log-Dateien
> Server sammeln statistische Zugriffsinformationen
> Erstellung von Nutzungsprofilen möglich Æ Datenschutz
> Access Log
> Pro Anfrage eine Zeile
> Statistische Auswertung durch entsprechende Tools
> Beispiel (Common Access Log Format)
> wc.yale.edu -- [16/Jun/1997:04:29:55-0100]
GET /index.html/ HTTP1.0 200 733
> Error Log
> pro Fehler eine Zeile
> Beispiel (Error Log)
> [16/Jun/1997:04:55:29-0100] [NOT AUTHORIZED]
[host: cs.yale.edu referer: http://hera.gmd.de/]
/index.html
> Andere Error Log-Formate sind möglich
G. Mühl
Webbasierte Anwendungen / World Wide Web
10
Webserver Performanz
> Webserver werden häufig aus Performancegründen
multithreaded implementiert
> Alle Kerne des Prozessors können so verwendet werden
> Während einer IO-Operation (z.B. Plattenzugriff) kann dann ein
anderer Request bearbeitet werden
> Ziel ist volle Auslastung der CPU
Wie viele Threads werden hierfür benötigt?
G. Mühl
Webbasierte Anwendungen / World Wide Web
11
Einstufiger Cache
> Parameter
> Cache Hit Rate p
> Rechenzeit t1
> Wartezeit t2 bei Cache Miss
Hauptspeicher
(Cache)
Festplatte
1
p
1-p
> Annahmen
> Zufällige Anfragen/Zugriffe der Clients
> Zeit für Entscheidung Cache Hit/Miss vernachlässigbar
> Durchschnittliche Bearbeitungszeit t eines Requests
t = p * t1 + (1 - p) * (t1 + t2) = t1 + (1 - p) * t2
> Auslastung U (Rechenzeit / durchschnittliche Bearbeitungszeit)
U = t1 / t
> Anzahl n der notwendigen Threads
G. Mühl
n = ⌈1 / U⌉
Webbasierte Anwendungen / World Wide Web
12
Einstufiger Cache (Beispiel)
> p = 70%
> t1 = 400µs
> t2 = 7ms
> Durchschnittliche Bearbeitungszeit
t = 0.4ms + 0.3 * 7ms = 2.5ms
> Auslastung
U = 0.4ms / 2.5ms = 0.16
> Anzahl der notwendigen Threads
n = 1 / 0.16 = 6.25
Æ 7 Threads pro Kern notwendig
G. Mühl
Webbasierte Anwendungen / World Wide Web
13
Zweistufiger Cache
> Parameter
> Cache Hit Rate p1
und p2 mit p2 > p1
> Rechenzeit t1
> Wartezeiten t2 bzw.
t3 bei Cache Miss
1
Hauptspeicher
(1st Level Cache)
Silicon Disk
(2nd Level Cache)
Festplatte
p1
1-p1
p2
1-p2
> Seite nicht im First Level Cache, aber im Second Level Cache
Æ Wartezeit t2
> Seite auch nicht im Second Level Cache
Æ Wartezeit t3
> Durchschnittliche Bearbeitungszeit t
t = p1 * t1 + (1 - p1) * p2 * (t1 + t2) + (1 - p1) * (1 - p2) * (t1 + t3)
G. Mühl
Webbasierte Anwendungen / World Wide Web
14
Zweistufiger Cache (Beispiel)
> p1 = 70%, p2 = 90%
> t1 = 0.4ms, t2= 1ms, t2 = 7ms
>
>
>
t = 0.7 * 0.4ms + 0.3 * 0.9 * 1.4ms + 0.3 * 0.1 * 7.4ms
= 0.28ms + 0.378ms + 0.222ms
= 0.88ms
U = t1 / t = 0.4ms / 0.88ms = 0.45
n = ⌈1 / U⌉ = 3
> Durch den zweiten Cache Level wird ein Kern mit weniger
Threads voll ausgelastet
> Gleichzeitig sinkt die Bearbeitungszeit signifikant
G. Mühl
Webbasierte Anwendungen / World Wide Web
15
Universal Resource Locator (URL)
> Fragen beim Zugriff auf WWW Seiten
>
>
>
>
Wie kann auf die Seite zugegriffen werden?
Wo liegt die Seite?
Wie lautet der lokale Name der Seite beim Server?
Wie können weitere Parameter übergeben werden?
> URL [RFC 1738] besteht aus Protokoll, Host und Datei
> Protokolle können sein http, ftp, file, news, telnet, mailto, etc.
> Parameter können als Query am Ende übergeben werden
> Beispiel
http://kbs.cs.tu-berlin.de/cgi-bin/anmeldung.cgi?LV=IPA
Protocol Host Name [ :Port ] [Path (and File Name)]
G. Mühl
[Query]
Webbasierte Anwendungen / World Wide Web
16
URL-Encoding
> In einem Query-String werden Sonderzeichen und
Non-ASCII-Zeichen URL-kodiert
> Beispiel
„10% von 25$ = 2,50$“ wird zu
„10%25+von+25%24+%3D+2%2C50%24“
> Siehe auch
http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
G. Mühl
Webbasierte Anwendungen / World Wide Web
17
URL Beispiele
> http://www.kbs.tu-berlin.de/
> http://www.mit.edu:8001/people/dshapiro/macsites.html
> http://www.google.de/search?q=kbs+tu-berlin
> file://WWW/beispiel.html
> ftp://ftp.cs.mit.edu/README
> telnet://[email protected]/
> mailto:[email protected]
> news:comp.infosystems.www.users
> news:[email protected]
> gopher://gopher.tc.umn.edu/11/Libraries
G. Mühl
Webbasierte Anwendungen / World Wide Web
18
Literatur
1. RFC 1738 Uniform Resource Locators (URL)
> http://www.ietf.org/rfc/rfc1738.txt
2. RFC 3986 Uniform Resource Identifier (URI): Generic Syntax
> http://www.ietf.org/rfc/rfc3986.txt
3. Online-Tool zur URL-Kodierung/Dekodierung
> http://netzreport.googlepages.com/online_tool_zur_url_kodierun
g_de.html
G. Mühl
Webbasierte Anwendungen / World Wide Web
19
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
20
Hypertext Transfer Protocol (HTTP)
Hypertext Transfer Protocol (HTTP)
> RFC 1945 (HTTP 1.0) und RFC 2616 (HTTP 1.1)
> Textbasiertes Protokoll zum Transfer von Dateien (hauptsächlich)
vom Webserver zum Webclient (Encoding: US-ASCII)
> Trotz seines Namens nicht auf HTML-Dokumente beschränkt
> Setzt meist auf TCP auf (Standard lässt auch anderes zu)
> Benutzt Elemente von MIME Æ Deklaration des Medientyps
> Folgt Request/Response-Interaktion
> Zugriff stets vom Client initiiert Æ HTTP-Request
> Server antwortet mit HTTP-Response
> Ist zustandslos
> Aufeinanderfolgende Zugriffe sind unabhängig voneinander
> HTTP-Server merkt sich keine Daten bezüglich der Zugriffe
> Wichtige Einschränkung für komplexere Anwendungen!
G. Mühl
Webbasierte Anwendungen / World Wide Web
22
HTTP-Request
> Request-Zeile
<Method> <Ressource> <HTTP-Version><CR><LF>
> Methode: Request-Anweisung (GET, HEAD, POST, ...)
> Beispiel: GET /index.html?lang=en HTTP/1.0
> Header (optional)
> Beliebig viele Zeilen bestehend aus Name/Wert-Paaren
> Leerzeile signalisiert das Ende des Headers
> Jedes Zeilenende wird mit <CR><LF> kodiert (Java-String: "\r\n")
> Body
> Inhalt (z.B. für POST-Methode)
G. Mühl
Webbasierte Anwendungen / World Wide Web
23
HTTP-Methoden (HTTP 1.0)
> GET
> Holt Ressource vom Server
> HEAD
> Ähnlich wie GET, liefert aber nur den HTTP-Header
> Wird für Caching von Seiten im Client und in Proxies verwendet
> POST
> Sendet Daten an den Server, z.B. Daten aus HTML-Formularen
G. Mühl
Webbasierte Anwendungen / World Wide Web
24
Beispiel HTTP-Request
GET /index.html HTTP/1.1\r\n
Host: localhost:8080\r\n
User-Agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8.1.11)
Gecko/20071127 Firefox/2.0.0.11\r\n
Accept: text/xml,application/xml,application/xhtml+xml,
MIME-Type
text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3\r\n
Accept-Encoding: gzip,deflate\r\n
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 300\r\n
Connection: keep-alive\r\n
Pragma: no-cache\r\n
Charset
Cache-Control: no-cache\r\n
G. Mühl
Webbasierte Anwendungen / World Wide Web
25
HTTP-Response
> Statuszeile
<HTTP-Version> <Code> <Phrase><CR><LF>
> Beispiel: HTTP/1.0 200 OK
> Header (optional)
> Name/Wert-Paare wie bei Request
> Diverse vordefinierte Felder werden üblicherweise mitgeschickt
> Content-Type: Art des Inhalts
> Content-Length: Größe des Body
> …
> Body
> Die eigentliche Ressource z.B. HTML-Datei, Bild, Audio, Video, …
> Body besteht aus Bytes Æ Interpretation abhängig von Typ und
Kodierung des Inhalts
G. Mühl
Webbasierte Anwendungen / World Wide Web
26
HTTP-Status-Codes
> Informational 1xx
100 Continue
101 Switching Protocols
> Success 2xx
200 OK
201 Created
202 Accepted
204 No Content
> Redirection 3xx
> Client Error 4xx
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
> Server Error 5xx
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
304 Not Modified
G. Mühl
Webbasierte Anwendungen / World Wide Web
27
Beispiel HTTP-Response
HTTP/1.1 200 OK\r\n
Server: Apache-Coyote/1.1\r\n
ETag: W/"8144-1201556374000"\r\n
Last-Modified: Mon, 28 Jan 2008 21:39:34 GMT\r\n
Content-Type: text/html\r\n
Content-Length: 8144\r\n
MIME-Type
Date: Sat, 03 May 2008 13:02:20 GMT\r\n
Charset im Body
\r\n
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
…
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
28
HTTP 1.1 (Aktueller Stand)
> Definiert neue Methoden
> TRACE, PUT, DELETE, CONNECT, OPTIONS
> Definiert neue Header-Felder
> Keep-Alive, Connection, ETag, …
> In Beispiel-Request und -Response bereits gesehen
> Verbindungsmanagement
> „Offenhalten“ von Verbindungen Æ Keep-Alive
> Kürzere Antwortzeiten, verringerter Ressourcenverbrauch
> Verbessertes Caching
> Eindeutige IDs der Dokumentversion Æ ETag
G. Mühl
Webbasierte Anwendungen / World Wide Web
29
URLs in Java
> Klasse java.net.URL
> Repräsentiert einen URL Æ Zeiger auf Ressource im WWW
> String-Repräsentation eines URL für HTTP
"http:" "//" host [":" port] [abs_path ["?" query]]
> Erzeugen eines URL-Objektes
> Diverse Konstruktoren (meist basierend auf Strings)
> Absolute URLs
URL kbs1 = new URL("http://www.kbs.tu-berlin.de/index.html");
URL kbs2 = new URL("http","www.kbs.tu-berlin.de","index.html");
URL kbs3 = new URL("http","www.kbs.tu-berlin.de",
80,"index.html");
> Relative URLs
URL domainUrl
= new URL("http://www.kbs.tu-berlin.de");
URL indexUrl
= new URL(domainUrl, "index.html");
URL teachingUrl = new URL(domainUrl, "teaching.html#ipa");
G. Mühl
Webbasierte Anwendungen / World Wide Web
30
Informationen über URLs
> Attribute eines URL-Objekts
> Nur lesender Zugriff via Getter-Methoden
> Entsprechen den Bestandteilen der URL
Æ Protokoll, Host, Port, File, Query, Anker
> Beispiel URL
String spec = "http://www.kbs.tuberlin.de:80/index.html?lang=en#info");
URL url = new URL(spec);
System.out.println(url.getProtocol());
System.out.println(url.getHost());
System.out.println(url.getPort());
System.out.println(url.getFile());
System.out.println(url.getPath());
System.out.println(url.getQuery());
System.out.println(url.getRef());
G. Mühl
//
//
//
//
//
//
//
http
www.kbs.tu-berlin.de
80
/index.html?lang=en
/index.html
lang=en
info
Webbasierte Anwendungen / World Wide Web
31
Direktes Lesen von einer URL
URL yahoo = new URL("http://www.yahoo.com");
BufferedReader in =
new BufferedReader(
new InputStreamReader(
yahoo.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
G. Mühl
Webbasierte Anwendungen / World Wide Web
32
URLConnection
> Klasse java.net.URLConnection
> Repräsentiert eine Verbindung zu einer URL
> Erzeugung
> Methode openConnection() der Klasse URL
URL url = new URL("http://www.kbs.tu-berlin.de/index.html");
URLConnection con = url.openConnection();
> Verbindungsablauf
> Objekt-Erzeugung etabliert noch keine Verbindung Æ Möglichkeit zum
Setzen von Request-Eigenschaften (z.B. Header)
> Expliziter Verbindungsaufbau mittels connect()
> Impliziter Verbindungsaufbau bei Zugriff auf Ressource
> Kommunikation mittels Ein-/Ausgabeströmen sowie
Abfrage von Header-Informationen
> Schließen der Verbindung Æ Schließen der Ein-/Ausgabeströme
G. Mühl
Webbasierte Anwendungen / World Wide Web
33
Empfang von Daten
> Lesen der Header-Felder nach Verbindungsaufbau
> Universelle Methode für alle Felder
public String getHeaderField(String fieldName)
> Spezifische Methoden für gebräuchliche Felder wie
public String getContentType()
public int getContentLength()
public String getContentEncoding()
> Eingabestrom zum Lesen des Inhalts
> public InputStream getInputStream()
> Content-Handler
> public Object getContent()
> erzeugt ein Objekt anhand des Content-Typs (MIME-Typ)
(z.B. java.awt.ImageProducer bei GIF oder JPEG)
G. Mühl
Webbasierte Anwendungen / World Wide Web
34
Senden von Daten
> Setzen von Header-Feldern vor Verbindungsaufbau
> public void setRequestProperty(String key, String value)
> Belegt das Header-Feld key mit dem Wert value
> Senden der Daten vorbereiten
> public void setDoOutput(boolean dooutput)
> Ändert bei HTTP die Methode von GET zu POST
> Ausgabestrom zum Senden von Daten
> public OutputStream getOutputStream()
> Liefert Ausgabestrom zur Datenübertragung zum Server
G. Mühl
Webbasierte Anwendungen / World Wide Web
35
Beispiel URLConnection
String stringToReverse = URLEncoder.encode(args[1], "UTF-8");
URL url = new URL(args[0]); // "http://<location of reverse servlet>"
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out =
new OutputStreamWriter(connection.getOutputStream());
out.write("string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
G. Mühl
Webbasierte Anwendungen / World Wide Web
36
HttpURLConnection
> Klasse java.net.HttpURLConnection
> Repräsentiert eine HTTP Verbindung zu einer URL
> HttpURLConnection erweitert die Klasse URLConnection
> public void setRequestMethod(String method)
> Methoden GET, POST, HEAD, PUT, OPTIONS, DELETE und
TRACE
> URLConnection erlaubt hingegen nur Methoden GET und POST
> Abfragen des Status-Codes der Antworten des Servers
> public int getResponseCode() liefert Zahlencode
> public String getResponseMessage() liefert Statusnachricht
> Erzeugung (durch Casting einer URLConnection)
URL url; HttpURLConnection http;
url = new URL("http://www.tu-berlin.de");
http = (HttpURLConnection)(url.openConnection());
G. Mühl
Webbasierte Anwendungen / World Wide Web
37
Beispiel HttpURLConnection
URL url = new URL("http://server/uri");
HttpURLConnection conn =
(HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setAllowUserInteraction(false);
conn.setDoOutput(true);
conn.setRequestProperty("Content-type","text/xml" );
conn.setRequestProperty("Content-length",
Integer.toString(body.length()));
OutputStreamWriter out =
new(OutputStreamWriter(conn.getOutputStream());
out.print(body);
out.flush();
out.close();
G. Mühl
Webbasierte Anwendungen / World Wide Web
38
Literatur
1. RFC 1945 Hypertext Transfer Protocol – HTTP/1.0
> http://www.ietf.org/rfc/rfc1945.txt
2. RFC 2616 Hypertext Transfer Protocol – HTTP/1.1
> http://www.ietf.org/rfc/rfc2616.txt
3. The Manual Page - The HTTP protocol
> http://www2.themanualpage.org/http/
G. Mühl
Webbasierte Anwendungen / World Wide Web
39
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
40
HTTPS
HTTPS
> HTTP Secure (HTTPS)
HTTP
> = HTTP + SSL/TLS
> = HTTP + Authentifizierung + Verschlüsselung
SSL/TLS
TCP
> Transport Layer Security (TLS) [RFC 2246, 4346, 5246]
> Standardisierte Weiterentwicklung von
Secure Sockets Layer (SSL) von Netscape
IP
Ethernet
> Authentifizierung
> Basierend auf ITU X.509 Zertifikate für Public Key-Infrastrukturen
> Authentisierung des Webservers (Webserver-Zertifikat)
> Authentisierung des Clients ebenfalls möglich (Client-Zertifikat)
> Verschlüsselung
> Symmetrische Verschlüsselung oberhalb der Transportschicht
> Verfahren u. a. RC2, RC4, DES, 3-DES, IDEA, AES
G. Mühl
Webbasierte Anwendungen / World Wide Web
42
HTTPS Verbindungsaufbau
Zertifikat
der CA
Prüfung der Signatur des Webserver-Zertifikats
1
https://www.example.com
2
Übertragung des
3
Privater
Schlüssel
des Webservers
Webserver-Zertifikats
Öffentlicher Schlüssel des Webservers
4
Erzeugung
des Sitzungsschlüssels
Webbrowser
des Clients
G. Mühl
WebserverZertifikat
Übertragung des verschlüsselten Sitzungsschlüssels
Verschlüsselter Datenaustausch mit
ausgehandeltem Sitzungsschlüssel
6
5
Sitzungsschlüssel
Webserver von
www.example.com
Webbasierte Anwendungen / World Wide Web
43
HTTPS Verbindungsaufbau
1. Verbindungsaufbau zu www.example.com auf Port 443
2. Übertragung des Webserver-Zertifikats zum Browser
3. Prüfung der Signatur des Zertifikats anhand des von der CA
hinterlegten öffentlichen Schlüssels (aus CA-Zertifikat)
> Bei Erfolg ist Identität des Webservers festgestellt
4. Übertragung des verschlüsselten Sitzungsschlüssels
> Erzeugung eines temporären Sitzungsschlüssels zur
symmetrischen Verschlüsselung der Verbindung
> Verschlüsselung des Sitzungsschlüssels mit dem öffentlichen
Schlüssel des Webservers (aus Webserver-Zertifikat)
5. Entschlüsselung des Sitzungsschlüssels mit privatem
Schlüssel des Webservers
6. Verschlüsselter Datenaustausch mit ausgehandeltem
Sitzungsschlüssel
G. Mühl
Webbasierte Anwendungen / World Wide Web
44
Java Secure Socket Extension (JSSE)
> Java API zu Sicherheitsprotokollen, -algorithmen und -tools
> Unterstützung von SSL/TLS
> Seit Java 1.4 im Standard enthalten
> Secure Sockets und Secure Server Sockets
> Socket Factories
> Gekapselte Erzeugung und Konfiguration von Sockets
> Secure Socket Context
> Konfiguration der Socket Factories
> Key Manager und Trust Manager
> Verwaltung und Prüfung der Schlüssel und Zertifikate
> Sichere HTTP-Verbindung mittels HttpsURLConnection
G. Mühl
Webbasierte Anwendungen / World Wide Web
45
SocketFactory & ServerSocketFactory
> Klassen javax.net.SocketFactory und
javax.net.ServerSocketFactory
> Factories zur Erzeugung sicherer Sockets
> Konfigurationsmöglichkeiten wie Schlüssel, Zertifikate,
Kryptoalgorithmen, …
> Default Factories über statische Methoden erreichbar
> SSLSocketFactory.getDefault()
> SSLServerSocketFactory.getDefault()
> Standardkonfiguration enthält keine Client-Authentifikation
G. Mühl
Webbasierte Anwendungen / World Wide Web
46
SSLSocket und SSLServerSocket
> Klassen javax.net.ssl.SSLSocket und
javax.net.sslSSLServerSocket
> Repräsentieren sichere Verbindungsendpunkte
> Funktionalität analog zu normalen Sockets
> Erzeugung mittels Socket Factories
> createSocket(String host, int port)
> createServerSocket(int port)
> Schlüsselpaar muss vom Aufrufenden angelegt
und mitgegeben werden
G. Mühl
Webbasierte Anwendungen / World Wide Web
47
Beispiel SSLSockets
...
int port = 443;
Default Socket
Factory holen
SSLServerSocketFactory sslFactory =
(SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
ServerSocket sslServerSocket =
sslFactory.createServerSocket(port);
Socket client = sslServerSocket.accept();
Sicherer Serverbzw. Client-Socket
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
...
G. Mühl
Webbasierte Anwendungen / World Wide Web
48
Beispiel SSLSockets
> Schlüsselpaar für Server erzeugen
> keytool -genkey –alias=mykey
-dname "cn=Gero Muehl, ou=AVA, o=UHRO, c=DE"
-keystore ServerKeystore
-storepass 123456 -keypass 123456 -validity 180
> Serverzertifikat aus Keystore exportieren
> keytool -export -alias mykey -keystore
ServerKeystore -rfc -file mykey.cer
> Serverzertifikat in neuen Keystore importieren
> keytool -import -alias mycert -file mykey.cer
-keystore ClientTruststore -storepass abcdef
G. Mühl
Webbasierte Anwendungen / World Wide Web
49
Beispiel SSLSockets
> keytool -list -v -keystore ClientTruststore
Geben Sie das Keystore-Passwort ein:
Keystore-Typ: JKS
Keystore-Provider: SUN
Ihr Keystore enthält 1 Eintrag/-äge.
Aliasname: mycert
Erstellungsdatum: 24.11.2009
Eintragstyp: trustedCertEntry
Eigner: CN=Gero Muehl, OU=AVA, O=UHRO, C=DE
Aussteller: CN=Gero Muehl, OU=AVA, O=UHRO, C=DE
Seriennummer: 4b0c0e0a
Gültig von: Tue Nov 24 17:47:06 CET 2009 bis: Sun May 23 18:47:06 CEST 2010
Digitaler Fingerabdruck des Zertifikats:
MD5: 20:21:85:69:B0:12:CA:53:DF:80:2A:52:D2:62:82:12
SHA1: E8:63:E1:99:46:AC:B2:26:7C:4D:7C:86:52:4E:56:EE:00:6F:C0:B0
Unterschrift-Algorithmusname: SHA1withDSA
Version: 1
*******************************************
*******************************************
G. Mühl
Webbasierte Anwendungen / World Wide Web
50
Beispiel SSLSockets
> Server starten
> java -Djavax.net.ssl.keyStore=ServerKeystore
-Djavax.net.ssl.keyStorePassword=123456
EchoServerSSL
> Client starten
> java -Djavax.net.ssl.trustStore=ClientTruststore
EchoClientSSL
G. Mühl
Webbasierte Anwendungen / World Wide Web
51
Literatur
1. RFC 2246 The Transport Layer Security (TLS) Protocol Version 1.0
>
http://www.ietf.org/rfc/rfc2246.txt
2. RFC 4346 The Transport Layer Security (TLS) Protocol Version 1.1
>
http://www.ietf.org/rfc/rfc4346.txt
3. RFC 5246 The Transport Layer Security (TLS) Protocol Version 1.2
>
http://www.ietf.org/rfc/rfc5246.txt
4. Java Secure Socket Extension (JSSE) Reference Guide for Java
Platform Standard Edition 6
>
G. Mühl
http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSE
RefGuide.html
Webbasierte Anwendungen / World Wide Web
52
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
53
HTTP Session Management
Zustandsbehaftete Anwendungen
> HTTP ist ein zustandloses Protokoll!
> Einfache Request/Reply-Interaktion
> Über eine einzelne Interaktion hinaus werden keine
Zustandsinformationen gehalten
> Viele Webanwendungen benötigen Zustandsinformationen
> Workflows (z.B. Bestellvorgang) über mehrere Klicks hinweg
Æ Erkennung u. Verwaltung zusammengehöriger HTTP-Requests
> Warenkörbe jeglicher Art
> Wiedererkennung von Benutzern/Kunden beim nächsten Besuch
der Webseite
> Verhaltensanalyse von Webseitenbesuchern
Æ Marketing/Werbung
G. Mühl
Webbasierte Anwendungen / World Wide Web
55
Sitzungen (engl. Sessions)
> Folge von Kommunikationsvorgängen, die sich auf einen
gemeinsamen Zustand beziehen
> Beispiel Webshop
> Führen eines virtuellen Einkaufswagens
> Ausgewählte Produkte werden stets in den
Einkaufswagen desselben Benutzers abgelegt
> Anmelden als registrierter Benutzer
> Bestellen der Produkte in mehreren Schritten
Wie kann dies mit HTTP umgesetzt werden?
G. Mühl
Webbasierte Anwendungen / World Wide Web
56
Realisierungsmöglichkeiten von Sitzungen
1. Versteckte Felder eines HTML-Formulars
> Server schreibt Daten in versteckte Formularfelder der
generierten HTML-Seite
> Auswertung, wenn Formulardaten zurückgesendet werden
2. Zustand in der URI
> Ähnlich zu versteckten Feldern
> Server kodiert Daten im Query- o. Pfad-Teil der Links einer Seite
> Auswertung durch Server beim Aufruf eines Links
3. HTTP-Cookies
> Setzen und Weitergabe von Daten im HTTP-Header als Teil der
HTTP-Response bzw. des HTTP-Requests
G. Mühl
Webbasierte Anwendungen / World Wide Web
57
Versteckte Formularfelder
> HTML-Formularen werden unsichtbare Informationen
hinzugefügt, die beim Absenden mit übertragen werden
> Server fügt bei Generierung der Seite ein
verstecktes Formularfeld mit einer ID ein
<input type="hidden" name="SessionID" value="<id>">
> Auslesen der Session-ID aus Formulardaten bei jeder Anfrage
> Session-Management auf HTML-Ebene
> Einfache Realisierung
> Benutzer bewegt sich von Formular zu Formular
G. Mühl
Webbasierte Anwendungen / World Wide Web
58
URI Rewriting
> Zustand/Status wird in der URI abgelegt
> Server fügt beim Generieren der Seite in jede URI,
die in die Session verwickelt ist, eine ID ein
> ID im Query-Teil der URI
http://www.abc.example/servlets/MyServlet?session=ID
> ID im File Path der URI
http://www.abc.example/servlets/MyServlet/ID
> Auswertung des Query Strings bzw. des Pfades bei Anfrage
> Universelle Möglichkeit für Sessions
> URI Rewriting funktioniert mit jedem Browser
> Benutzer kann URI mit Session speichern oder weitergeben
> Gültigkeit der URI meist zeitlich begrenzt
> Möglichkeit des Missbrauchs
G. Mühl
Webbasierte Anwendungen / World Wide Web
59
Cookies [RFC 2965]
“Cookies are a general mechanism which server side connections
(such as CGI scripts) can use to both store and retrieve information
on the client side of the connection. The addition of a simple,
persistent, client-side state significantly extends the capabilities of
Web-based client/server applications.”
Auszug aus http://wp.netscape.com/newsref/std/cookie_spec.html
> Text der beim Client unter gewähltem Namen abgelegt wird
> Übertragung erfolgt im HTTP-Header
> Browserunterstützung (sofern Cookies akzeptiert werden)
> Textgröße bis 4KB
> mind. 20 Cookies pro Domäne
> mind. 300 Cookies insgesamt
G. Mühl
Webbasierte Anwendungen / World Wide Web
60
Aufbau eines Cookies
> Name und Wert
> Inhalt in Form eines Name=Wert-Paares
> Max-Age / Expires
> Verfallsdatum
> Domain, Path und Port
> Einschränkung der URIs an die das Cookie gesendet wird
> Comment und CommentURL
> Für Menschen lesbare Informationen zum Zweck des Cookies
> Optionen Discard und Secure
> Discard: Löschen beim Schließen des Browsers
> Secure: Nur über sichere HTTPS-Verbindungen senden
> Version
> (1 oder) 2
G. Mühl
Webbasierte Anwendungen / World Wide Web
61
Arbeiten mit Cookies
> Setzen von Cookies
> Webserver sendet Set-Cookie im Header der HTTP-Response
Set-cookie: Session=123; domain=abc.example; path=/
Set-Cookie2: User=XYZ; path=/servlets; secure
> HTTP-Response kann mehrere Set-Cookie-Header enthalten
> Lesen von Cookies
> Browser vergleicht URI mit gespeicherten Cookies
> Sendet alle für Domäne und Pfad passende Cookies
im Cookie Header des HTTP-Requests
Cookie: Session=123; User=XYZ
> Testen und Löschen
> Testen des Browsers durch Setzen und anschließendes Lesen
> Löschen erfolgt durch Setzen eines abgelaufenen Cookies
G. Mühl
Webbasierte Anwendungen / World Wide Web
62
Cookies und Datenschutz
“Unfortunately, the original intent of the cookie has been subverted by
some unscrupulous entities who have found a way to use this process
to actually track your movements across the Web. They do this by
surreptitiously planting their cookies and then retrieving them in such a
way that allows them to build detailed profiles of your interests,
spending habits, and lifestyle. […] It is rather scary to contemplate how
such an intimate knowledge of our personal preferences and private
activities might eventually be used to brand each of us as members of
a particular group.”
Auszug aus http://www.cookiecentral.com/cookie5.htm
> Werbevermarktung
> Wie kommen Cookies (z.B. von doubleclick.net) in den
Browser ohne deren Webseite zu besuchen?
> Welche Informationen speichern sie und wofür?
G. Mühl
Webbasierte Anwendungen / World Wide Web
63
Cookies mit Java (Clientseite)
// Receive cookie with session ID in server response
URL url = new URL(
"http://www.a.com/login.cgi?uid=gmuehl&pwd=4711");
HttpURLConnection conn =
(HttpURLConnection)url.openConnection();
Object obj = conn.getContent();
String cookie = conn.getHeaderField("Set-Cookie");
String sessionId =
cookie.substring(0, cookie.indexOf(";"));
...
// Send cookie with session ID to server in request
URL url = new URL("http://www.a.com/secret.html");
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
conn.setRequestProperty("Cookie", sessionId);
obj = conn.getContent();
G. Mühl
Webbasierte Anwendungen / World Wide Web
64
Cookies mit Java (Clientseite)
String urlString = "http://www.sun.com";
CookieManager manager = new CookieManager();
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
CookieHandler.setDefault(manager);
URL url = new URL(urlString);
HttpURLConnection connection =
(HttpURLConnection)url.openConnection();
Object obj = connection.getContent();
connection.disconnect();
CookieStore cookieJar = manager.getCookieStore();
List<HttpCookie> cookies = cookieJar.getCookies();
for (HttpCookie cookie: cookies) {
System.out.println(cookie);
};
url = new URL(urlString);
connection = (HttpURLConnection)url.openConnection();
obj = connection.getContent();
connection.disconnect();
G. Mühl
Webbasierte Anwendungen / World Wide Web
65
Literatur
1. RFC 2965 - HTTP State Management Mechanism,
http://www.ietf.org/rfc/rfc2965.txt
2. The Java Tutorials, Trail: Custom Networking, Working with
Cookies, http://java.sun.com/docs/books/tutorial/networking/cookies
G. Mühl
Webbasierte Anwendungen / World Wide Web
66
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
67
Hypertext Markup Language (HTML)
Hypertext Markup Language (HTML)
> Textbasierte Auszeichnungsprache zur Beschreibung von
Dokumenten
> Beschreibt logische Struktur eines Dokumentes
> Markierungen (Tags) zur Bezeichnung von Dokumentteilen
> Beispiel: <p>Ein Paragraph</p>
> Vordefinierte, nicht erweiterbare Menge an Tags
Æ logische Struktur nur bedingt abbildbar
> Beschreibt Layout eines Dokuments
> Unpräzise Formatierungstags Æ konkretes Layout bestimmt Client
> Beispiel: <b>Fettgedruckter Text</b>
> Genauere Layoutdefinitionen mittels Cascading Stylesheet (CSS)
> Vernetzung von Dokumenten
> Verweise auf Seiten/Dokumente/Objekte Æ Link
> Einbinden von (Multimedia-) Objekten (Grafik, Animation, Audio,…)
> Basiert auf Standard Generalized Markup Language (SGML)
> ISO Standard 8879 mit flexibel erweiterbarer Tag-Menge
G. Mühl
Webbasierte Anwendungen / World Wide Web
69
HTML Standards
> HTML 4.01 [http://www.w3.org/TR/html401/]
> 3 Document Type Definitions (DTDs)
> Strict:
Keine veralteten (deprecated) Elemente
> Transitional: Veraltete Elemente, jedoch keine Rahmen
(Frames)
> Frameset:
Veraltete Elemente und Rahmen
> Empfohlene Version 4.01 / Arbeitsversion 5.0
> XHTML 1.0 [http://www.w3.org/TR/xhtml1/]
> Basiert auf XML
> Empfohlene Version 1.0 / modulare Arbeitsversion 1.1
> Entwicklung von XHTML 2.0 wird Ende 2009 zugunsten von
HTML 5.0 eingestellt
> Validation (Prüfung der Konformität zum Standard)
> W3C-Online-Validator [http://validator.w3.org/]
G. Mühl
Webbasierte Anwendungen / World Wide Web
70
HTML-Tags
> Im Allgemeinen paarweise (öffnend und schließend)
<tag> … </tag>
> Keine Unterscheidung von Groß- und Kleinschreibung
<TitlE> … <tITle>
> Beliebige Verschachtelung, aber keine teilweise Überlappung
<h1>Ein <b>ungueltiges HTML-Konstrukt.</h1></b>
> Manche Tags können/müssen zusätzliche Attribute enthalten
<a href="http://www.tu-berlin.de">
> Browser-Hersteller versuch(t)en eigene Tags „durchzusetzen“
Æ Kompatibilitätsprobleme
G. Mühl
Webbasierte Anwendungen / World Wide Web
71
Beispiele (HTML-Tags)
<html> …… </html>
<head> …… </head>
<title> …… </title>
<body> …… </body>
<hn> …… </hn>
<b> …… </b>
<ul> …… </ul>
<ol> …… </ol>
<li> …… </li>
<br>
<a href="url"> …… </a>
<img src="url">
<pre> …… </pre>
G. Mühl
Start einer HTML-Seite
Kopf der Seite
Titel der Seite
Rumpf der Seite
Überschrift der Stufe n
Text fett drucken
Ungeordnete Liste
Geordnete Liste
Listenelement
Neue Zeile
Hyperlink auf andere Seite
Laden eines Bildes
Vorformatierter Text
Webbasierte Anwendungen / World Wide Web
72
HTML Grundstruktur
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="author" content="user@kbs">
<title>Titel der Seite</title>
</head>
<body>
<h1>Überschrift</h1>
Eigentlicher Text
</body>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
73
Elemente zur Textstrukturierung
> Überschriften
<h1>Titel</h1>
<h2>Abschnitt 1</h2>
> Hervorhebung
<b>fett</b>, <i>kursiv</i>, ...
<em>emphatisch</em>
<code>private int getX()</code>
> Trennlinie: <hr>
> Zeilenumbruch: <br>
> Kommentar: <!-- Beschreibung -->
G. Mühl
Webbasierte Anwendungen / World Wide Web
74
Tabellen
> Aufteilung in Zeilen und Spalten
<table>
<tr>
<td>Eins</td>
<td>Zwei</td>
<td>Drei</td>
</tr>
<tr>
<td>One</td>
<td>Two</td>
<td>Three</td>
</tr>
</table>
G. Mühl
Eins
Zwei
Drei
One
Two
Three
Webbasierte Anwendungen / World Wide Web
75
Listen
> Aufzählung
<ul>
<li>HTML</li>
<li>XHTML</li>
<li>XML</li>
</ul>
> Nummerierung
<ol>
<li>Erstens</li>
<li>Zweitens</li>
</ol>
G. Mühl
• HTML
• XHTML
• XML
1. Erstens
2. Zweitens
Webbasierte Anwendungen / World Wide Web
76
Bilder und Verweise (Links)
> Bilder
<img src="dilbert.png" alt="Dilbert Cartoon">
> Verweise
<a href="http://www.google.com">Google</a>
<a href="#anhang">Anhang</a> ...
<a name="anhang">Anhang</a>
<a href="mailto:[email protected]">E-Mail</a>
www.dilbert.com
G. Mühl
Webbasierte Anwendungen / World Wide Web
77
Formulare I
> Dynamische Interaktion des Nutzers mit einem Webserver
> Programm auf dem Webserver verarbeitet Eingaben
> Formulareingaben per HTTP-GET senden
<form action="cgi-bin/forum.pl" method="get"
accept-charset="ISO-8859-1">
...
</form>
> Formulareingaben per POST versenden
<form action="mailto:[email protected]"
method="post" enctype="text/plain">
...
</form>
G. Mühl
Webbasierte Anwendungen / World Wide Web
78
Formulare II
> Einzeilige Eingabefelder
<input name="vorname" type="text" size="30"
maxlength="30">
> Mehrzeilige Eingabebereiche
<textarea name="eingabe" cols="50"
rows="10"></textarea>
> Mit Vorbelegung
<input name="vorname" type="text" value="Bill">
<textarea name="eingabe">Vor langer, langer
Zeit...</textarea>
G. Mühl
Webbasierte Anwendungen / World Wide Web
79
Formulare III
> Auswahllisten
<select name="Tarifzone" size="3">
<option>ABC</option>
<option>AB</option>
<option>BC</option>
</select>
> Vorselektieren und Absendewert bestimmen
<option value="111">ABC</option>
<option value="110" selected>AB</option>
<option value="011">BC</option>
G. Mühl
Webbasierte Anwendungen / World Wide Web
80
Formulare IV
> Radiobuttons
<input type="radio" name="antwort" value="1"
checked>Ja<br>
<input type="radio" name="antwort"
value="0">Nein<br>
> Checkboxes
<input type="checkbox" name="zutat"
value="tomatoes" checked>Tomaten<br>
<input type="checkbox" name="zutat"
value="paprika" checked>Paprika<br>
<input type="checkbox" name="zutat"
value="zucchini">Zucchini<br>
G. Mühl
Webbasierte Anwendungen / World Wide Web
81
Formulare V
> Dateien hochladen
<form action="file.cgi" method="post"
enctype="multipart/form-data">
<p>Wählen Sie eine Datei aus:<br>
<input name="Datei" type="file" size="50"></p>
</form>
> Versteckte Elemente
<input type="hidden" name="session_id"
value="423914556">
> Buttons zum Absenden oder Zurücksetzen
<input type="submit" value="Absenden">
<input type="reset" value="Abbrechen">
<input type="image" src="absenden.png">
G. Mühl
Webbasierte Anwendungen / World Wide Web
82
Kodierung der Formulardaten
> Bei GET im Header des HTTP-Requests
> UTF-8
GET /cgi-bin/forum.pl?input=H%C3%BCte+und+H%C3%A4user.
HTTP/1.1
> ISO-8859-1
GET /cgi-bin/forum.pl?input=H%FCte+und+H%E4usern
HTTP/1.1
> Bei POST im Body des HTTP-Requests
POST /cgi-bin/forum.pl HTTP/1.1
Content-Type: application/x-www-form-urlencoded
...
vorname=Gero&nachnname=M%FChl
G. Mühl
Webbasierte Anwendungen / World Wide Web
83
Kodierung der Formulardaten
POST /cgi-bin/forum.pl HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Content-Type: multipart/form-data; boundary=--------------------------19547468711225981001167730729
Content-Length: 478
-----------------------------19547468711225981001167730729
Content-Disposition: form-data; name="vorname"
Gero
-----------------------------19547468711225981001167730729
Content-Disposition: form-data; name="nachname"
Mühl
-----------------------------19547468711225981001167730729
Content-Disposition: form-data; name="Datei"; filename="test.txt"
Content-Type: text/plain
Dies ist eine Textdatei.
-----------------------------19547468711225981001167730729--
G. Mühl
Webbasierte Anwendungen / World Wide Web
84
Frames
> Mit Frames kann der Anzeigebereich des Browsers in
horizontale und vertikale Bereiche aufgeteilt werden
> Frameset-Definition:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>…</head>
<frameset cols="200,*">
<frame src="menu.html" name="Menü" scrolling="no"
noresize>
<frame src="start.html" name="Inhalt">
<noframes><body>Alternativer Inhalt für Browser ohne
Frameunterstützung</body></noframes>
</frameset>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
85
Frames
> Frame-Definition (Datei menu.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>…</head>
<body>
<a href="start.html" target="Inhalt">Home<br>
<a href="forschung.html" target="Inhalt">Forschung<br>
<a href="lehre.html" target="Inhalt">Lehre<br>
</body>
</html>
> Alternativ: Angabe des Ziel-Frames im <head>-Element
<base target="RechtesFenster">
G. Mühl
Webbasierte Anwendungen / World Wide Web
86
Inline-Frames
<html>
<head>
...
</head>
<body>
...
<iframe src="frame.html" width="90%"
height="400" name="a_frame">
<p>Ihr Browser kann leider keine
eingebetteten Frames anzeigen</p>
</iframe>
...
</body>
G. Mühl
Webbasierte Anwendungen / World Wide Web
87
Objekte einbetten
<html>
<head>
<object data="test.mp3" type="audio/mpeg"
width="0" height="0"></object>
</head>
<body>
<h1>test</h1>
<object data="test.svg" type="image/svg+xml"
width="200" height="200">
<p>Ihr Browser kann das Objekt leider nicht
anzeigen!</p>
</object>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
88
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
89
Cascading Style Sheets (CSS)
Cascading Style Sheets (CSS)
> Ergänzender Standard zu HTML
> Aktuelle Version CSS 2.0 http://www.w3.org/TR/REC-CSS2
> Working Drafts zu CSS 2.1 Æ vielfach (teilweise) unterstützt
> Working Drafts zu CSS 3 Modulen Æ flexibler, modularer Aufbau
> Definieren die Formatierung einzelner HTML-Elemente
> Abstände, Schriftart, Größe, Farbe, Fettdruck, etc.
> Definition entweder
> zentral für ein Dokument im <head> Element,
> für einzelne Elemente (inline) oder
> in einer extra Datei (z.B. style.css), die eingebunden wird.
> Alle Möglichkeiten können auch kombiniert werden
> Vorrang: inline vor zentral vor extern
> Validation
> W3 Validator http://jigsaw.w3.org/css-validator
G. Mühl
Webbasierte Anwendungen / World Wide Web
91
Zentrale CSS-Definition im Header
<html>
<head>
<style type="text/css"> <!-h1 { font-size:24pt; color:#FF0000;
font-style:italic; }
h1.hinterlegt { background-color:#FFFF00;}
*.hinterlegt { background-color:#FF0000;} -->
</style>
</head>
<body>
<h1 class="hinterlegt">Überschrift</h1>
<p class="hinterlegt">Paragraph</p>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
92
Einbindung einer CSS-Datei und
Inline-Definition
<html>
<head>
<title>Titel der Datei</title>
<link rel="stylesheet" type="text/css“
href="style.css">
<style type="text/css"><!-h1 { font-size:48pt; } -->
</style
</head>
<body>
<p class="normal" style="color:#FF0000;">
Element-bezogene Definition
</p>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
93
Unterschiedliche Formatierung je
nach Ausgabemedium
> Viele Webseiten sehen nur auf dem Bildschirm gut aus, lassen sich aber
nicht gut ausdrucken
> Separate Stylesheets ermöglichen Formatierung speziell abgestimmt auf
das Ausgabemedium
<head>
<link rel="stylesheet" media="screen" href="web.css">
<link rel="stylesheet" media="print" href="druck.css">
</head>
> Alternative Deklaration innerhalb eines Style-Elements
<style type="text/css">
@media print { … }
@media screen, handheld { … }
</style>
G. Mühl
Webbasierte Anwendungen / World Wide Web
94
CSS-basierte Layouts
> Bessere Alternative zu Frames und Tabellen
<html>
<head>
<title>Lehrstuhl AVA</title>
<link rel="stylesheet" type="text/css"
href="style.css">
</head>
<body>
<ul id="Navigation">
<li><a href="home">Start</a></li>
<li><a href="forschung">Forschung</a></li>
<li><a href="lehre">Lehre</a></li>
<li><a href="lehre">Mitarbeiter</a></li>
</ul>
<div id="Inhalt"><h1>Forschung</h1>
<p>Der Lehrstuhl AVA ...</p></div>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / World Wide Web
95
CSS-basierte Layouts
ul#Navigation {
float: left; width: 22em;
margin: 0; padding: 0;
border: 1px dashed silver;
}
ul#Navigation li {
list-style: none;
margin: 0; padding: 0.5em;
}
ul#Navigation a {
display: block;
padding: 0.2em;
font-weight: bold;
}
ul#Navigation a:link {
color: black; backgroundcolor: #eee;
}
G. Mühl
ul#Navigation a:visited {
color: #666; backgroundcolor: #eee;
}
ul#Navigation a:hover {
color: black; backgroundcolor: white;
}
ul#Navigation a:active {
color: white; backgroundcolor: gray;
}
div#Inhalt {
margin-left: 22em;
padding: 0 1em;
border: 1px dashed silver;
min-width: 16em;
}
Webbasierte Anwendungen / World Wide Web
96
CSS-basierte Layouts
G. Mühl
Webbasierte Anwendungen / World Wide Web
97
Literatur
> Spezifikationen
> HTML 4.01: http://www.w3.org/TR/html401
> XHTML 1.0: http://www.w3.org/TR/xhtml1
> CSS 2.1: http://www.w3.org/TR/CSS21
> Validatoren
> HTML: http://validator.w3.org
> CSS: http://jigsaw.w3.org/css-validator
> Einführung in HTML, CSS und mehr
> SELFHTML: http://de.selfhtml.org
> Browser Add-ons
> Firebug (Firefox): http://getfirebug.com
> Developer Toolbar (IE): http://go.microsoft.com/fwlink/?LinkId=92716
G. Mühl
Webbasierte Anwendungen / World Wide Web
98
Fragen?
G. Mühl
Webbasierte Anwendungen / World Wide Web
99
Webbasierte Anwendungen
Client- und Serverbasierte Techniken
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
> Einführung
> Klassifikation von Techniken
> Serverseitige Techniken
> Server Side Includes (SSI)
> Common Gateway Interface (CGI)
> Hypertext Preprocessor (PHP)
> Clientseitige Techniken
> JavaScript
> Java Applets + Java RMI
G. Mühl
Webbasierte Anwendungen / Techniken
2
Anforderungen für Webanwendungen
> Dynamische Inhalte
> Zustandsverwaltung
> Authentifizierung/Autorisierung
> Personalisierung
> …
Statische Hypertextdokumente sind für interaktive
Anwendungen nicht ausreichend.
G. Mühl
Webbasierte Anwendungen / Techniken
3
Techniken für Webanwendungen
> Vielzahl verschiedener Ansätze und Techniken
> Unterschied in Details Æ klare Klassifizierung schwer
> Großes Potential durch Kombination mehrerer Techniken
> Klassifizierung in verschiedenen Dimensionen möglich
>
>
>
>
>
Client vs. Server
Abstraktion
Funktionsumfang
Sicherheit
…
Der folgende Überblick über existierende Technologien
erhebt keinen Anspruch auf Vollständigkeit.
G. Mühl
Webbasierte Anwendungen / Techniken
4
Client vs. Server
Client
Server
> Nutzen der „eingebauten“
Fähigkeiten des Browsers
> Einbindung nachladbarer/
installierbarer Plugins
> Programmierung der Plugins
> Beispiele
> Delegation des HTTP Request an
externe Komponenten
> Weiterleitung aufgrund URL
Æ Dispatching
> Komponenten erzeugen Response
> Beispiele
>
>
>
>
>
DHTML/JavaScript
ActiveX
Java Applets
Flash
…
>
>
>
>
>
Server Side Includes (SSI), PHP
Common Gateway Interface (CGI)
Java Server Pages (JSP), Servlets
ASP.NET
…
Die Dynamik der Anwendung kann sowohl im Client
als auch auf dem Server realisiert werden.
G. Mühl
Webbasierte Anwendungen / Techniken
5
Laufzeitumgebung
Mit Laufzeitumgebung
Ohne Laufzeitumgebung
> Container bietet zusätzliche
Funktionalität
> Systemprozesse
> Verantwortung des
Programmierers für
> Sitzung
> Authentifizierung und
Autorisierung
> Ressourcenüberwachung
> …
> Beispiele
> Servlets/JSP
> ASP.NET
> …
G. Mühl
> Sitzungsverwaltung
> Sicherheit
> …
> Beispiele
> CGI
> FCGI
> …
Webbasierte Anwendungen / Techniken
6
Abstraktion
Objekt-/Komponentenorientiert
Request/Response
Seitenbeschreibung
> Komponente analysiert Request
> Komponente erzeugt
Response direkt
(z.B. HTML)
> Spezieller Markup für
dynamische Elemente
> Wird bei jeder Anfrage
bearbeitet und im
HTML Dokument
ersetzt
> Seite besteht aus
vorgefertigten
Komponenten
> Ereignisbasiertes
Ausführungsmodell
> Beispiele
> CGI
> Java Servlets
> Beispiele
> JSP
> PHP
> Beispiele
> ASP.NET
> JSF
G. Mühl
Webbasierte Anwendungen / Techniken
7
Komponierbarkeit
Niedrige Komponierbarkeit
Hohe Komponierbarkeit
> Konkatenation verschiedener
Ausgabeströme
> Reiches Typsystem ermöglicht
Orchestrierung einzelner
Komponenten
> Beispiele
> Beispiele
> Servlets
> CGI
G. Mühl
> ASP.NET
> JSP
Webbasierte Anwendungen / Techniken
8
Fragen?
G. Mühl
Webbasierte Anwendungen / Techniken
9
Serverseitige Technologien
Überblick Serverseitige Technologien
> Server Side Includes (SSI)
> Common Gateway Interface (CGI)
> Hypertext Preprocessor (PHP)
> Servlets1
> Java Server Pages (JSP)1
> Active Server Pages (ASP.NET)2
1
Besprechung als Teil von J2EE
2 Besprechung als Teil von .Net
G. Mühl
Webbasierte Anwendungen / Techniken
11
Server Side Includes (SSI)
> Anweisungen in HTML-Seiten, die vom Webserver
interpretiert und durch HTML ersetzt werden
> Einbettung der Anweisungen in HTML-Kommentare
> Syntax
<!--#element attribute=value
attribute=value ... -->
> Datum/Zeit einblenden
<!--#echo var="DATE_LOCAL" -->
> CGI-Skript ausführen
<!--#include virtual="/cgi-bin/counter.pl" -->
> Befehl ausführen
<!--#exec cmd="ls" -->
G. Mühl
Webbasierte Anwendungen / Techniken
12
Server Side Includes (SSI)
> Änderungsdatum einblenden
<!--#echo var="LAST_MODIFIED" -->
> Einbinden einer Datei auf dem gleichen Server
<!--#include virtual="/footer.html" -->
> If-then-else
<!--#if expr='"$DOCUMENT_URI" = "/foo.html"' -->
in foo
<!--#elif expr='"$DOCUMENT_URI" = "/bar.html"' -->
in bar
<!--#else -->
in neither
<!--#endif -->
G. Mühl
Webbasierte Anwendungen / Techniken
13
Common Gateway Interface (CGI)
> CGI definiert Schnittstelle für Aufruf von Programmen durch
den Webserver und Übergabe von Argumenten
> Aufruf durch Starten eines Prozesses mit den Client-Parametern
> Standardausgabe des Prozesses ist Response
> Meist wird eine dynamisch generierter Webseite zurückgegeben
Anbieter
Webbrowser
Praktikum in Grönland !
Formular anfordern
anmelden
HTTP
Client
Formular liefern
Daten senden
HTTP
Server
Antwort empfangen
/cgi-bin/anmelden.tcsh
G. Mühl
Webbasierte Anwendungen / Techniken
14
Common Gateway Interface (CGI)
> Per Konvention liegen CGI-Skripte meist
im Verzeichnis /cgi-bin
> Viele Programmiersprache werden unterstützt
> Häufig Skriptsprachen: Shells, Perl, Python, ...
> Aber auch: C, C++, etc.
> Skript antwortet mit neuer Seite (zumindest HTTP-Header)
echo "Content-type: text/html" ; echo
> Einfaches Beispiel
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";
G. Mühl
Webbasierte Anwendungen / Techniken
15
Aufruf eines CGI-Skriptes
> Formular
<form action="/cgi-bin/guestbk.pl" method="get">
<form action="/cgi-bin/stats.pl" method="post">
> Verweis
<a href="/cgi-bin/statistik.pl">
Tagesstatistik</a>
> Grafikreferenz
<img src="/cgi-bin/counter.pl">
> Server Side Include (SSI)
<!-- #exec cgi="/cgi-bin/counter.pl" -->
> Automatisches Laden
<meta http-equiv="refresh"
content="0;URL=/cgi-bin/welcome.pl">
G. Mühl
Webbasierte Anwendungen / Techniken
16
CGI Parameterübergabe
> GET
> $QUERY_STRING (Umgebungsvariable) wird übergeben
> Zum Beispiel
?vorname=Hans&nachname=M%FCller&...
?query=CGI+Tutorial
> Beinhaltet alle Parameter in einem String
(Leerzeichen durch + ersetzt)
> Wird vom Skript geparst und entsprechend verarbeitet
> POST
> Einlesen der Parameter aus der Standardeingabe
G. Mühl
Webbasierte Anwendungen / Techniken
17
CGI Beispiele
#!/bin/sh
cat - <<EOF
Content-type: text/html
<HTML><HEAD><TITLE>Datum und Zeit</TITLE></HEAD>
<BODY><H1>Zeit und Datum:
EOF
date
cat - <<EOF
</H1></BODY></HTML>
EOF
G. Mühl
Webbasierte Anwendungen / Techniken
18
CGI Beispiele
> Zugriff auf Umgebungsvariablen
#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}
> Query-String an Java übergeben, um GET-Request zu verarbeiten
#!/bin/bash
echo $QUERY_STRING | java CGI
> Java-Programm mit Standardeingabe aufrufen (POST-Request)
#!/bin/bash
cat /dev/stdin | java CGI
G. Mühl
Webbasierte Anwendungen / Techniken
19
CGI Sicherheit
> CGI-Programme sind „von jedem“ aufrufbar
> Ausführung eines Programms ohne Benutzerkonto auf der
Maschine Æ Berechtigung des CGI-Programms ist die
Berechtigung des WWW-Servers
> Server nicht als root starten, sondern als wwwuser
> Alternativ kann CGI-Programm mit UID ihres Besitzers laufen
> Problem der Ausführung dynamisch erzeugter
Systemkommandos (Injection)
G. Mühl
Webbasierte Anwendungen / Techniken
20
CGI Diskussion
> Vorteile
> Geringe Anforderungen
> Verfügbarkeit auf Server
> Hohe Flexibilität
> Nachteile
>
>
>
>
G. Mühl
Niedrige Abstraktion
Sicherheit dem Anwendungsentwickler überlassen (anfällig)
Hoher Ressourcenverbrauch (Prozess pro Request)
Keine Ressourcenüberwachung
Webbasierte Anwendungen / Techniken
21
Hypertext Preprocessor (PHP)
> Viel verwendete serverseitige Skriptsprache
> PHP ist Open Source Software [http://www.php.net]
> Oft in Verbindung mit MySQL verwendet [http://www.mysql.com]
> Verfügbar für viele Plattformen (Windows, Linux, Unix, etc.)
> Einfaches Beispiel
<html>
<head>
<title>PHP-Test</title>
</head>
<body>
<?php echo "<p>Hallo Welt</p>"; ?>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / Techniken
22
PHP und HTML gemischt
<?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
?>
<h3>strstr muss true zurückgegeben haben</h3>
<center><b>Sie benutzen Internet Explorer</b></center>
<?php
} else {
?>
<h3>strstr muss false zurückgegeben haben</h3>
<center><b>Sie benutzen nicht Internet
Explorer</b></center>
<?php
}
?>
G. Mühl
Webbasierte Anwendungen / Techniken
23
HTML Forms und PHP
> Form
<form action="welcome.php" method="POST">
Enter your name: <input type="text" name="name" />
Enter your age: <input type="text" name="age" />
<input type="submit" />
</form>
> Verarbeiten der Formulardaten
<html>
<body>
Welcome <?php echo $_POST["name"]; ?>.
You are <?php echo $_POST["age"]; ?> years old!
</body>
</html>
G. Mühl
Webbasierte Anwendungen / Techniken
24
PHP Cookies
> Cooky setzen
<?php
setcookie("uname", $name, time()+36000);
?>
> Cooky abfragen
<?php
if (isset($uname))
echo "Welcome " . $uname . "!<br />";
else
echo "You are not logged in!<br />";
?>
G. Mühl
Webbasierte Anwendungen / Techniken
25
ODBC-Datenbankzugriff mit PHP
<?php
$conn=odbc_connect('northwind','','');
if (!$conn) { exit("Connection Failed: " . $conn); }
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs) {exit("Error in SQL");}
echo "<table><tr><th>Firma</th><th>Kontakt</th></tr>";
while (odbc_fetch_row($rs)) {
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>
G. Mühl
Webbasierte Anwendungen / Techniken
26
CSS mit PHP
...
<style type="text/css"> <!-.row_0 { background-color: #FFFFFF;}
.row_1 { background-color: #777777;}
} --> </style>
...
<table width="300">
<?PHP for($i=0;$i<=9;$i++){ ?>
<tr>
<td class="row_<?PHP echo $i % 2; ?>">
Reihe <?PHP echo $i; ?></td>
</tr>
<?PHP } ?>
</table>
G. Mühl
Webbasierte Anwendungen / Techniken
27
Literatur
1. Apache Tutorial: Introduction to Server Side Includes
>
http://httpd.apache.org/docs/2.2/howto/ssi.html
2. Apache Tutorial: Dynamic Content with CGI
>
http://httpd.apache.org/docs/2.2/howto/cgi.html
3. RFC 3875 The Common Gateway Interface (CGI) Version 1.1
>
http://www.ietf.org/rfc/rfc3875
4. PHP-Handbuch
>
http://www.php.net/manual
5. SELFPHP
>
G. Mühl
http://www.selfphp.de
Webbasierte Anwendungen / Techniken
28
Fragen?
G. Mühl
Webbasierte Anwendungen / Techniken
29
Clientseitige Technologien
Überblick Clientseitige Technologien
> JavaScript
> Java Applets
> LiveConnect
> Pushlets
G. Mühl
Webbasierte Anwendungen / Techniken
31
JavaScript
> Von Netscape lizenzierte objektorientierte Skriptsprache;
aktuelle Version 1.5 (Microsoft Pendant ist JScript)
> Auch als ECMA (European Computer Manufacturers
Association)-Standard (ECMA-262) Æ ECMASkript
> Aus Sicherheitsgründen eingeschränkte Rechte bei der
Ausführung durch den JavaScript-Interpreter Æ Sandbox
> Kein Zugriff auf das Dateisystem
> Keine Arbeitsspeicherverwaltung
> …
> Leider viele Inkompatibilitäten zwischen den Browsern
> HTML + CSS + JavaScript = Dynamic HTML (DHTML)
G. Mühl
Webbasierte Anwendungen / Techniken
32
Möglichkeiten von JavaScript
> Erzeugen von Teilen der Webseite erst beim Client
(z.B. aktuelles Datum einblenden)
> Test von Formulardaten vor dem Absenden
> Identifizieren des Browsers
> Reagieren auf Ereignisse (z.B. Mausbewegung oder -klick)
> Zugriff auf alle HTML-Elemente einer Webseite mittels des
Document Object Model (DOM)
> DOM-Elemente einfügen, löschen, ändern
>
>
>
>
G. Mühl
Animationen
Kommunikation mit dem Webserver, der die Seite geliefert hat
Cookie-Management
…
Webbasierte Anwendungen / Techniken
33
HTML Document Object Model (DOM)
> Objekt- und Programmiermodell
für HTML
> Plattform- und Sprachunabhängig
> Standard des W3Cs
document
html
<html>
head
<head>
<title>HTML DOM</title>
</head>
title
<body>
<h1>A Heading</h1>
HTML DOM
<p>Some text</p>
</body>
</html>
G. Mühl
body
h1
p
A Heading
Some text
Webbasierte Anwendungen / Techniken
34
HTML Document Object Model (DOM)
>
Zugriff auf das <html>-Element
document.documentElement
>
Direkter Zugriff auf das <body>-Element
document.body
>
>
>
>
>
>
>
>
>
>
>
Properties und Methoden eines Elements
e.innerHTML
Der Text von e
e.nodeName
Der Name von e
e.nodeValue
Der Wert von e
e.parentNode
Der Elternknoten von e
e.childNodes
Die Kinderknoten von e
e.attributes
Die Attribute von e
e.getElementById(id)
Element mit ID id
e.getElementsByTagName(name) Elemente mit Tagnamen name
e.appendChild(node)
Kindknoten node einfügen
e.removeChild(node)
Kindknoten node löschen
G. Mühl
Webbasierte Anwendungen / Techniken
35
JavaScript einbinden
> JavaScripts werden wahlweise direkt in der HTML-Datei
oder in separaten Dateien notiert
> Beispiel für Inline-Skript
<script type="text/javascript">
var d = new Date();
document.write(d.getHours()+":"+d.getMinutes());
</script>
<noscript>Bitte JavaScript einschalten</noscript>
> Einbindung externer JavaScript-Dateien
> Ermöglicht die Wiederverwendung von Code
> Darf nur JavaScript enthalten
> Beispiel: product.js:
function Produkt(x,y) {
var z = x*y;
return z;
}
G. Mühl
Webbasierte Anwendungen / Techniken
36
JavaScript Beispiel 1
> Funktionsaufruf sowie Zugriff auf Formulardaten
<html>
<head>
<title>JavaScript-Taschenrechner</title>
<script src="produkt.js"
type="text/javascript"></script>
</head>
<body>
<form name="Form" action="">
<input type="text" name="x" size="3">*
<input type="text" name="y" size="3">
<input type="button" value="=" onClick=
"document.Form.p.value=Produkt(
document.Form.x.value,
document.Form.y.value)">
<input type="text" name="p" size="3">
</form>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / Techniken
37
JavaScript Beispiel 2
> Zugriff auf HTML-Elemente mittels getElementById
> Regelmäßige Ausführung einer Funktion
<h1 id="header" onmouseover="Farbe()">My blinking header</h1>
<script type="text/javascript">
var aktiv = window.setInterval("Farbe()", 1000);
var i = 0, farbe = 1;
function Farbe () {
if (farbe == 1) {
document.getElementById("header").style.color="blue"
farbe = 2;
} else {
document.getElementById("header").style.color="red"
farbe = 1;
}
i = i + 1;
if (i >= 10) window.clearInterval(aktiv);
}
</script>
G. Mühl
Webbasierte Anwendungen / Techniken
38
JavaScript Beispiel 3
> Einmaliger Aufruf einer Funktion nach Timeout
var t=setTimeout("alert('5 seconds!')",5000);
> Neu Seite in Frame schreiben
<html>
<head><title>JavaScript</title></head>
<body>
<iframe width="100%" height="100%"
name="myframe"></iframe>
<script type="text/javascript">
w=window.frames['myframe'].document;
w.open();
w.writeln("<html><head><title>Test</title>
</head><body><h1>Test</h1></body></html>");
w.close();
</script>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / Techniken
39
JavaScript Beispiel 4
> Animation eines drehenden Kreises aus Punkten
<style type='text/css'>div{position: absolute;
font-size:48px;}</style>
<script language="JavaScript">
for(i=0;i<100;i++)
document.write("<div id='P" + i + "'>.</div>");
window.setInterval("move()", 50);
var alpha=0;
var x=2*Math.PI/100;
function move() {
for(i=0;i<100;i++) {
p=document.getElementById("P"+i).style;
p.left=125+100*Math.cos(alpha+x*i);
p.top=110+100*Math.sin(alpha+x*i);
}
alpha=alpha-0.1;
}
</script>
G. Mühl
Webbasierte Anwendungen / Techniken
40
JavaScript Eventhandler
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
G. Mühl
onblur
onclick
ondblclick
onfocus
onkeydown
onkeypress
onkeyup
onmousedown
onmousemove
onmouseout
onmouseover
onmouseup
onreset
onselect
onsubmit
Verlassen
einfaches Anklicken
doppeltes Anklicken
Aktivieren
gedrückte Taste
gedrückt gehaltene Taste
losgelassene Taste
gedrückte Maustaste
weiterbewegte Maus
Verlassen des Elements mit der Maus
Überfahren des Elements mit der Maus
losgelassene Maustaste
Zurücksetzen des Formulars
Selektieren von Text
Absenden des Formulars
Webbasierte Anwendungen / Techniken
41
JavaScript Beispiel 5
> Dynamische grafische Buttons
<img src="button1.jpg"
onmouseover="src='button2.jpg'"
onmouseout="src='button1.jpg'">
> Auf- und zuklappen von Paragraphen
<script type="text/javascript">
function Click(x) {
y=document.getElementById(x).style;
if (y.display=="none") {
y.display="block";
} else {
y.display="none";
}
}
</script>
<h1 onclick="Click('Test')">Test</h1>
<p id="Test">Dies ist der Text zu Test.</p>
G. Mühl
Webbasierte Anwendungen / Techniken
42
JavaScript Beispiel 5
> Kommunizieren mit dem Server mittels XMLHttpRequest
> Grundlage für z.B. AJAX (Asynchronous JavaScript and XML)
xmlHttp = new XMLHttpRequest();
if (xmlHttp) {
xmlHttp.open('GET',aktie.xml?id=DTE', true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
newQuote(xmlHttp.responseText);
}
};
xmlHttp.send(null);
}
G. Mühl
Webbasierte Anwendungen / Techniken
43
Server-to-Client Push
> Ziel: Automatische Aktualisierung
von Webseiten bei Änderungen der
zugrunde liegenden Informationen
> Aktienkurse
> Nachrichtenschlagzeilen
> Andere Kunden betrachten gleiches
Produkt im Webshop
> Freunde gehen online
oder offline
> …
G. Mühl
WWW
Browser
Webbasierte Anwendungen / Techniken
44
Server-to-Client Push: Ersatzlösungen
> Manuelles Pull per Reload Button
> Periodisches Pull der gesamten Seite per HTML-Refresh
<META HTTP-EQUIV="Refresh" CONTENT="4;
URL=http://wwwava.informatik.uni-rostock.de">
> Periodisches Pull der gesamten Seite mittels JavaScript
function neuladen () {
window.location.reload();
}
window.setTimeout("neuladen()", 1000);
> Periodisches Pull von Daten und Aktualisierung der Seite mittels
JavaScript Æ kein kompletter Neuaufbau der Seite notwendig
G. Mühl
Webbasierte Anwendungen / Techniken
45
Server-to-Client Push: Realisierungen
> Serverseitige Callbacks
> Server ruft Methoden eines Java Applets auf
> Funktioniert z.B. mit Java RMI und CORBA IIOP
> (Unsichtbares) Applet setzt JavaScript-Kommandos ab oder
nutzt eigene GUI zur Darstellung
> Messaging
> Server schickt UDP-Pakete (Unicast oder Multicast) oder Daten
mittels TCP-Streams an ein Java Applet
> Pushlets
> Server schickt per HTTP-Streaming JavaScript-Kommandos an
den Client in einen unsichtbaren Frame
G. Mühl
Webbasierte Anwendungen / Techniken
46
Pushlets (www.pushlets.com)
> Bauen auf HTTP-Streaming auf
> HTTP-Verbindung wird dauerhaft offengehalten
> Über die Verbindung können weiterhin Daten gesendet werden
> Wird von Multimediaanwendungen genutzt (QuickTime, Real Audio etc.)
> Nutzen Dokument mit zwei Frames
> Unsichtbarer Frame zum Empfang von JavaScript-Code
> Sichtbarer Frame zur Darstellung
> Nutzen optional zweiten unsichtbaren Frame als Ziel für
HTTP-GET/POST, um Daten zum Server zu übertragen
window.frames['GetFrame'].location=‚
http://wwwava.informatik.unirostock.de/servlets/aktien.jsp?s=ibm&a=add'
G. Mühl
Webbasierte Anwendungen / Techniken
47
Pushlets: Client Seite
<HTML><HEAD>
<script LANGUAGE="JavaScript">
var pageStart="<HTML><HEAD></HEAD><BODY><H1>";
var pageEnd="</H1></BODY></HTML>";
function push(content) {
window.frames['displayFrame'].document.open();
window.frames['displayFrame'].document.
writeln(pageStart+content+pageEnd);
window.frames['displayFrame'].document.close();
}
</script>
...
</HEAD>
<FRAMESET BORDER="0" COLS="*,0">
<FRAME SRC="display.html" NAME="displayFrame">
<FRAME SRC="pusher.jsp"
NAME="pushletFrame">
</FRAMESET>
</HTML>
G. Mühl
Webbasierte Anwendungen / Techniken
48
Pushlets: Server Seite
<HTML>
<HEAD>...</HEAD>
<BODY>
<%
String jsPre =
"<scriptlanguage=JavaScript>parent.push('";
String jsPost = "')</script> ";
for (int i=1; i < 10; i++) {
out.print(jsPre+"Page "+i+jsPost);
out.flush();
try {Thread.sleep(3000);}
catch (InterruptedException e) {}
}
out.print(jsPre+"DONE"+jsPost);
%>
</BODY>
</HTML>
Pusher.jsp
G. Mühl
Webbasierte Anwendungen / Techniken
49
Java
> Objekt-orientierte Sprache mit Einfachvererbung von Klassen
sowie Mehrfachvererbung von Schnittstellen
> Java-Programme werden meist in Bytecode übersetzt und
von einer virtuellen Maschine (VM) mittels eines
Bytecode-Interpreters ausgeführt
⇒ Lediglich die VM muss auf dem Zielsystem implementiert sein
> Hierdurch wird (zu einem gewissen Grad)
Plattformunabhängigkeit sichergestellt
> Keine neue Idee, siehe z.B. p-code bei UCSD Pascal
> Evtl. Kompilierung in Maschinensprache, z.B. mittels
Just in Time Compiler (JITC)
> Gut geeignet für mobilen Code (mobile Agenten etc.)
G. Mühl
Webbasierte Anwendungen / Techniken
50
Java-basierte Internet-Technologien
> Java Applets
> In Webseiten eingebettete Java-Programme
> Werden vom Java-fähigen Browser geladen und ausgeführt
> Java Servlets
>
>
>
>
CGI auf „Java-Art“
Erweitern Webserver um dynamische, Java-basierte Webseiten
Werden über URLs angesprochen und liefern Seiteninhalt
Werden vom Webserver instanziiert und ausgeführt
> Java Server Pages (JSP)
> Erweiterung der Servlet-Technologie zur einfachen Anfertigung
von Webseiten, die statischen und dynamischen Inhalt mischen
G. Mühl
Webbasierte Anwendungen / Techniken
51
Java Applets
Ermöglichen Aktivität auf Client-Seite
Haben (meist) eine GUI (AWT, Swing, etc.)
Können (fast) die gesamte Java-API nutzen
Werden in Webseiten eingebettet und vom Browser in einem
Java Runtime Environment (JRE) ausgeführt
Java Runtime
Environment
>
>
>
>
G. Mühl
JavaPlugin
1. HTML-Seite laden
2. Java Applet laden
Webbrowser
Webserver
Webbasierte Anwendungen / Techniken
52
Einbettung in HTML-Seite
> HTML-Tag <applet> (deprecated!)
<applet code="chess.class"
codebase="http://wwwava.inforamtik.unirostock.de/applets"
archive="games.jar" width="400" height="400">
<param name="color" value="0xFF0000">
Your Browser ignores the APPLET tag!
</applet>
> Alternativ: Nutzung des <object>-Tags
G. Mühl
Webbasierte Anwendungen / Techniken
53
Klasse Applet
> Applets leiten von java.applet.Applet ab, welches von Panel,
Container und Component abgeleitet ist
> Geerbte, überschreibbare Grafik-Methoden, z.B.
public void paint(Graphics g)
// does nothing by default
// is overridden to do some drawing
public void update(Graphics g)
// default implementation clears area and calls paint()
// causes a lot of flickering
public void repaint()
// called by the Applet itself
// to trigger call of update()
> Methoden zur Ereignisbehandlung (Listener-Modell), z.B.
public void addMouseListener(MouseListener l)
public void removeMouseListener(MouseListener l)
protected void processMouseEvent(MouseEvent e)
G. Mühl
Webbasierte Anwendungen / Techniken
54
Lebenszyklus eines Java Applets
start
destroy
init
stop
> Entsprechende Methoden können überschrieben werden
public
public
public
public
G. Mühl
void
void
void
void
init()
start()
stop()
destroy()
Webbasierte Anwendungen / Techniken
55
Java Applet Beispiel
public class Simple extends Applet {
StringBuffer buffer = new StringBuffer();
public
public
public
public
void
void
void
void
init()
start()
stop()
destroy()
{
{
{
{
addItem("init... ");
addItem("start... ");
addItem("stop... ");
addItem("destroy...");
}
}
}
}
void addItem(String newWord) {
buffer.append(newWord);
repaint();
}
public void paint(Graphics g) {
g.drawString(buffer.toString(), 5, 15);
}
}
G. Mühl
Webbasierte Anwendungen / Techniken
56
Applet-spezifische Methoden
> Häufig genutzte Applet-spezifische Methoden
public String[][] getParameterInfo()
public AppletContext getAppletContext()
public String getParameter(String name)
public URL getCodeBase()
public URL getDocumentBase()
public Image getImage(URL url)
public AudioClip getAudioClip(URL url)
public void showStatus(String msg)
G. Mühl
Webbasierte Anwendungen / Techniken
57
Klasse JApplet
> Erweiterte, von Applet abgeleitet Klasse
> Abgestimmt auf die Nutzung der Java Swing-API
public class HelloWorld extends JApplet {
public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() { // Create GUI
add(new JLabel("Hello World"));
}
});
} catch (Exception e) {
System.err.println("Error creating GUI");
}
}
}
G. Mühl
Webbasierte Anwendungen / Techniken
58
Sicherheit von Java Applets
> Ausführung geladener Applets birgt offensichtliche Risiken
> Java enthält einige Sicherheitsvorkehrungen
>
>
>
>
Keine Zeiger
Typsicherheit zur Laufzeit (nicht zum Zeitpunkt der Übersetzung)
Echte Feldgrenzen mit Überprüfung
Byte Code Verifier kann geladenen Byte Code verifizieren
> Applets unterliegen standardmäßig weiteren
Sicherheitsvorkehrungen
>
>
>
>
>
G. Mühl
Kein Zugriff auf Dateien
Kommunikation nur mit dem Ursprungsrechner des Applets
Bestimmte Systemparameter können nicht ausgelesen werden
Applet-Fenster sehen anders aus, als normale Fenster
...
Webbasierte Anwendungen / Techniken
59
LiveConnect
> Ermöglicht die Kommunikation zwischen Java, Javascript und
anderen Plugins
> Von Netscape entwickelt und ab Version 3.0 unterstützt vom
Netscape Navigator
> Wird mittlerweile auch von anderen Browsern unterstützt
(z.B. Internet Explorer, Firefox)
> Anwendungsbeispiele
> Von JavaScript aus auf Java-Klassen von Java-Applets
(Variablen, Methoden) zugreifen
> Mit JavaScript Applets und Plugins (z.B. Flash) steuern
> Von Java-Applets aus JavaScript-Methoden aufrufen und auf
Properties zugreifen
G. Mühl
Webbasierte Anwendungen / Techniken
60
LiveConnect: Java Æ JavaScript
<APPLET CODE="MyApplet1.class" NAME="MyApplet"
WIDTH=150 HEIGHT=25 MAYSCRIPT></APPLET>
import netscape.javascript.*;
...
public class MyApplet1 extends Applet {
...
public writePage(String page) {
JSObject win = JSObject.getWindow(this);
win.eval("document.open();");
win.eval("document.write('"+page+"');");
win.eval("document.close();");
}
}
G. Mühl
Webbasierte Anwendungen / Techniken
61
LiveConnect: JavaScript Æ Java
public MyApplet2 extends Applet {
public void setString(String s) {...}
...
}
<APPLET CODE="MyApplet2.class" NAME="MyApplet"
WIDTH=150 HEIGHT=25></APPLET>
<FORM NAME="form">
<INPUT TYPE="button" VALUE="Set"
onClick="document.MyApplet.setString(
document.form.str.value)">
<INPUT TYPE="text" SIZE="20" NAME="str">
</FORM>
G. Mühl
Webbasierte Anwendungen / Techniken
62
Java Remote Method Invocation
> Ermöglicht Methodenaufrufe auf Java Objekten, die sich in anderen
Java Virtual Machines (JVMs) befinden
> Verbirgt Komplexität entfernter Kommunikation hinter normalem
Methodenaufruf Æ Netzwerkkommunikation ist transparent
JVM 2
JVM 1
...
x = calculator.
add(7.5, 9.5);
...
7.5, 9.5
calculator
17
Remote-Objekt
G. Mühl
Webbasierte Anwendungen / Techniken
63
Exemplarisches Anwendungsszenario
> Benutzer lädt Webseite mit eingebettetem TaschenrechnerApplet mittels HTTP von einem Webserver (1.)
> Applet übernimmt Interaktion per GUI mit dem Benutzer
> Eigentliche Funktionalität wird aber auf Serverseite erbracht
> Hierfür ruft das Applet die Methoden des Taschenrechners
mit den Eingaben des Benutzers per Java RMI auf (2.)
•
4
1
0
8
5
2
.
9
6
3
=
+
−
*
/
Webbrowser
G. Mühl
1. HTTP
2. Java RMI
Webserver
Webbasierte Anwendungen / Techniken
64
Terminologie und Realisierung
> Server bietet Objekt zum entfernten Aufruf an
> Client ruft Methode auf Stub-Objekt auf
> Stub repräsentiert Remote-Objekt auf Clientseite (gleiches Interface!);
setzt Aufruf ab und nimmt Antwort entgegen
> Skeleton nimmt Aufruf entgegen, ruft das Objekt auf und setzt Antwort ab
> Stub und Skeleton übernehmen die Serialisierung/Deserialisierung der
Parameter sowie die Netzwerkkommunikation
....
x = calculator.
add(7.5, 9.5);
....
Stub
Skeleton
calculator
Netz
Client
G. Mühl
Server
Webbasierte Anwendungen / Techniken
65
Java RMI Eigenschaften
> Bietet Verteilungs- und Lokationstransparenz für Clients
> Java Security Mechanismen finden Anwendung
> Dynamisches Laden von Klassen (Bytecode) über das
Netzwerk bei Bedarf
> Garbage Collection unreferenzierter Objekte
> HTTP-Tunneling zur Überwindung von Firewalls möglich
G. Mühl
Webbasierte Anwendungen / Techniken
66
Parameterübergabe
> Remote-Objekte werden per Referenz übergeben
> Empfänger wird Instanz der Stub-Klasse übergeben
> Übergabe anderer Objekte und primitiver Typen per Kopie
> Serialisierung/Deserialisierung: Umwandlung der Objekte in
Bytes zur Übertragung und vice versa durch Stub und Skeleton
> Vgl. Klassen ObjectOutputStream, ObjectInputStream
> Zu übergebende Objekte müssen serialisierbar sein, d.h., das
Markerinterface java.io.Serializable implementieren
> Bytecode von lokal nicht verfügbaren Klassen wird dynamisch
(z.B. über Netzwerk) nachgeladen
G. Mühl
Webbasierte Anwendungen / Techniken
67
Vorgehensweise
1. Schnittstelle definieren und implementieren
(Remote-Schnittstelle und Remote-Klasse)
2. Stubs und Skeletons mit rmic kompilieren sofern für
Abwärtskompatibilität benötigt
> Skeletons seit Java 1.2 nicht mehr erforderlich
> Stubs seit Java 1.5 nicht mehr erforderlich
3. RMI Registry starten
4. Server implementieren, kompilieren und starten
5. Client implementieren, kompilieren und starten
G. Mühl
Webbasierte Anwendungen / Techniken
68
Java RMI Beispiel: Klassen
_______Remote________
RemoteSchnittstelle
_________Calculator_______ _
double add(double a, double b)
throws RemoteException;
…
___SimpleCalculator_Stub___
double add(double a, double b);
…
_____RemoteServer_____
___UnicastRemoteObject___
_____SimpleCalculator______
double add(double a, double b);
…
RemoteKlasse
Stub-Klasse
G. Mühl
Webbasierte Anwendungen / Techniken
69
Java RMI Registry
> Speichert Informationen über Remote-Objekte
(nicht persistent)
> Start der RMI Registry
> Von Kommandozeile: rmiregistry [port]
> Durch Server: LocateRegistry.createRegistry(port);
> Benutzt URL-basierte Namen, z.B.
[rmi://]myhost:port/someJavaobject
> Server registrieren Remote-Objekte
bind(),
unbind(),
rebind()
> Clients lösen Namen auf oder suchen Remote-Objekte
lookup(),
G. Mühl
list()
Webbasierte Anwendungen / Techniken
70
Java RMI Beispiel – Schnittstelle
import java.rmi.*;
import java.rmi.server.*;
Marker-Schnittstelle
// Defining a Remote Interface
public interface Calculator extends Remote {
double add(double a,double b)
throws RemoteException;
…
}
G. Mühl
Webbasierte Anwendungen / Techniken
71
Java RMI Beispiel – Remote-Klasse
import java.rmi.*;
import java.rmi.server.*;
// Implementing a Remote Interface
public class SimpleCalculator
extends UnicastRemoteObject
implements Calculator {
public SimpleCalculator
throws RemoteException {};
public double add(
double a, double b) {
return a + b;
}
…
}
G. Mühl
UnicastRemoteObject-Klasse
> Bietet Unterstützung zur
Erzeugung und zum Export von
Remote-Objekten
> Default-Konstruktor exportiert
erzeugtes Objekt
> Nur exportierte Objekte können
eingehende Aufrufe entgegen
nehmen
> Objekte können auch manuell
exportiert werden
Webbasierte Anwendungen / Techniken
72
Java RMI Beispiel – Server
import java.rmi.*;
import java.rmi.server.*;
public class CalculatorServer {
public static void main(String[] args) {
// Set SecurityManager
System.setSecurityManager(new RMISecurityManager());
try {
// Create remote object
SimpleCalculator calc = new SimpleCalculator();
// Register remote object with RMI Registry
Naming.rebind("//myhost/Calculator", calc);
} catch (Exception e) { … }
// Process keeps running!
}
}
G. Mühl
Webbasierte Anwendungen / Techniken
73
Java RMI Beispiel – Client Applet
import java.applet.*;
import java.rmi.*;
public class HelloApplet extends Applet {
Calculator calc;
public void init() {
try {
calc = (Calculator)Naming.lookup(
"//" + getCodeBase().getHost() +
"/Calculator");
} catch (Exception e) { … }
…
}
protected double add(double a, double b) {
return calc.add(a,b);
}
…
}
G. Mühl
Webbasierte Anwendungen / Techniken
74
Java RMI Beispiel – Client Application
import java.rmi.*;
public class CalculatorClient {
public static void main(String args[]) {
// Set SecurityManager
System.setSecurityManager(new RMISecurityManager());
try {
// obtain URL for remote object and
String name = "//" + args[0] + "/Calculator";
// lookup remote object (stub is loaded
// automatically, if not available)
Calculator calc = (Calculator)Naming.lookup(name);
// call method on remote object
double r = calc.add(5,5);
} catch (Exception e) { … }
}
}
G. Mühl
Webbasierte Anwendungen / Techniken
75
Dynamisches Nachladen von Bytecode
> Objekte werden vor ihrer Übertragung serialisiert und beim
Empfänger wieder deserialisiert, d.h., neu instanziiert
> Hierfür wird der Bytecode der jeweiligen Klasse benötigt
> Die Codebase enthält eine Liste kommaseparierter URLs, von
denen der Empfänger den Bytecode der serialisierten Klassen
nachlädt, sofern dieser nicht lokal verfügbar ist
> Z. B. notwendig, wenn eine unbekannte Subklasse eines
deklarierten Parameters oder Rückgabewertes übergeben wird
> RMI annotiert serialisierte Objekte mit der Codebase, die
beim Aufruf der JVM gesetzt wurde
java –Djava.rmi.server.codebase=http://myhost/mydir
G. Mühl
Webbasierte Anwendungen / Techniken
76
Java RMI Security
> Java Security Manager
> Kontrolliert Zugang zu sicherheitskritischen Ressourcen wie dem
Dateisystem, dem Netzwerk, der GUI, …
> Kontrolliert Restriktionen für das dynamische Laden von Klassen
> Bei einem Applet erlaubt der Default Security Managers das
Herunterladen von Java Bytecode vom ursprünglichen Webserver
> Bei einer Java-Applikation (hier: Server und Client Application)
erlaubt der Default Security Manager standardmäßig kein
dynamisches Nachladen von Code
> In diesem Fall muss ein RMI Security Manager mit den
entsprechenden Sicherheitsrichtlinien installiert werden
> System.setSecurityManager(new RMISecurityManager())
G. Mühl
Webbasierte Anwendungen / Techniken
77
Sicherheitsrichtlinien
> Sicherheitsrichtlinien werden durch eine Policy-Datei gesetzt
grant {
permission java.net.SocketPermission
"*:1024-65535", "connect,accept";
permission java.net.SocketPermission
"*:80", "connect";
};
> Werkzeug zum Erstellen einer Policy-Datei Æ policytool
> Setzen der Policy-Datei für eine JVM
java –Djava.security.policy=mypolicyfile …
G. Mühl
Webbasierte Anwendungen / Techniken
78
Literatur
1. Standard ECMA-262 ECMAScript Language Specification 3rd edition
(December 1999)
>
http://www.ecma-international.org/publications/standards/Ecma-262.htm
2. Document Object Model Level 1
>
http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001
3. LiveConnect Support for JavaSE 6u10
>
http://java.sun.com/javase/6/docs/technotes/guides/jweb/applet/liveconnect_sup
port.html
4. The Java Tutorials: Invoking JavaScript Code From an Applet
>
http://java.sun.com/docs/books/tutorial/deployment/applet/invokingJavaScriptFr
omApplet.html
5. The Java Tutorials: Invoking Applet Methods From JavaScript Code
>
http://java.sun.com/docs/books/tutorial/deployment/applet/invokingAppletMetho
dsFromJavaScript.html
6. Sun Microsystems, Inc. Java Remote Method Invocation Specification,
Revision 1.10, 2004.
>
http://java.sun.com/j2se/1.5/pdf/rmi-spec-1.5.0.pdf
7. Sun Microsystems, Inc. The Java Tutorials, Trail RMI
>
G. Mühl
http://java.sun.com/docs/books/tutorial
Webbasierte Anwendungen / Techniken
79
Fragen?
G. Mühl
Webbasierte Anwendungen / Techniken
80
Webbasierte Anwendungen
Ajax, Wicket und GWT
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
> AJAX
> Wicket
> GWT
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
2
AJAX
(Asynchronous JavaScript and XML)
Klassische Webanwendungen
> Synchrones Request/Reply-Kommunikationsmodell
> Klicken und Warten (Seite neu laden und anzeigen)
> Server in jede Interaktion involviert
Æ Anwendungen häufig wenig responsiv
> Unterbrechung der Benutzerinteraktion mit Kontextverlust
> Keine weiteren Operationen möglich, während neue Seite
geladen wird Æ kein unmittelbares Feedback
> Verlust von Seiteninformationen (z.B. Formularinhalte bei
Fehlern) sowie der Scrollposition
> Seitengetriebener Workflow
> Navigation durch Server vorgegeben
> Auf HTML beschränkt Æ wenige nutzbare Bedienelement
hauptsächlich Formulare und Links
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
4
Klassische Webanwendungen
1.
2.
4.
3.
Webserver
Webbrowser
1.
4.
1.
1. Benutzeraktion
2. HTTP-Request
3. HTTP-Response
(HTML + CSS)
4. Anzeigen der Seite
4.
1.
4.
Client
2.
3.
2.
3.
2.
3.
Netzwerk
Server
G. Mühl
Zeit
Webbasierte Anwendungen / Wicket, Ajax und GWT
5
Dynamic HTML (DHTML)
> DHTML = JavaScript + DOM + CSS
> JavaScript (≠ Java)
> Clientseitige Scriptsprache vom Browser interpretiert
> Auch unter ECMAScript bekannt (ECMA-262 Spezifikation)
> Genutzt zur Manipulation des DOMs der HTML-Seite
> Document Object Model (DOM)
> Objektmodel zur Repräsentation von HTML/XML-Dokumenten
> Sprach- und plattformunabhängige API
> Ermöglicht interaktive Webanwendungen
> Clientseitiges Reagieren auf clientseitige Ereignisse
Æ teilweise unmittelbares Feedback
> Realisierung neuartiger Bedienelemente und -konzepte
> Aber noch synchrone Request/Reply-Kommunikation mit Server
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
6
AJAX
> AJAX = Asynchronous JavaScript and XML
> DHTML + asynchrone Kommunikation mittels XMLHttpRequest
> Gezieltes (Nach)laden von Informationen im Hintergrund
⇒ Kürzere Antwortzeiten wegen geringerer Datenmenge
⇒ Bessere Interaktivität
> Selektive Aktualisierung, Hinzufügen oder Löschen von Elementen
einer Webseite ohne kompletten Neuaufbau
> Nur geänderte Seitenelemente werden vom Browser neu gerendert
Æ Kein Flackern o. ä. wie beim kompletten Neuaufbau
> Restliche Elemente bleiben unverändert Æ Wahrung des Kontexts
> Trennung der Benutzer- von der Datenschnittstelle
> Datengetriebener Workflow
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
7
AJAX
Darstellung der
geladenen Seite
Aktualisierung der
dargestellten Seite
Client
Ajax Engine
asynchroner
XMLHttpRequest
synchroner
HTTP-Request
Server
Zeit
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
8
AJAX Beispiel: Google Maps
Nachladen fehlender Kartenteile im
Hintergrund
Ziehen der Karte
mit der Maus
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
9
Google Docs and Google Calendar
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
10
Google Mail
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
11
Weitere AJAX Beispiele
>
>
>
>
>
>
>
>
G. Mühl
Auto-Complete bei Suchanfragen
Überprüfung der Rechtschreibung bei Texteingaben
Simultane Übersetzung von Texteingaben in andere Sprache
Aktualisierung von Seitenteilen per Polling bei Informationen
(Nachrichten, Aktienkurse, etc.)
Visualisierung von Aktionen (z.B. durch Ladebalken)
Drag-and-Drop von Text
Validierung von Formulardaten mit Fehlermeldungen bei
Falscheingaben
…
Webbasierte Anwendungen / Wicket, Ajax und GWT
12
XMLHttpRequest
> API für asynchrone HTTP-Aufrufe
> Zugriff via JavaScript
> Konzept ursprünglich von Microsoft entwickelt Æ XMLHTTP
function ajaxPOST(url, vars, callbackFunction) {
Request-Objekt erzeugen
var request = new XMLHttpRequest();
und HTTP Methode &
request.open("POST", url, true);
Header setzen
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
if (request.responseText) {
callbackFunction(request.responseText);
} } };
request.send(vars);
Callback-Funktion
ausführen, wenn Antwort
}
erhalten (4) und
erfolgreich (HTTP 200)
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
13
Suchvorschläge à la Google Suggest
<html>
<head>
<script src="suggest.js"></script>
</head>
<body>
<form>
Name: <input type="text"
onkeyup="suggest(this.value)"/>
</form>
<p>Suggestion: <span id="suggestion"></span></p>
</body>
</html>
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
14
Suchvorschläge à la Google Suggest
suggest.js:
function suggest(str) {
var xmlhttp= new XMLHttpRequest();
var url="suggest.cgi" + "?q=" + str;
xmlhttp.open("GET", url, true);
request.onreadystatechange = function() {
if (xmlhttp.readyState==4) {
document.getElementById("suggest").
innerHTML = xmlhttp.responseText;
}
xmlhttp.send(null);
}
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
15
AJAX Bilanz
Vorteile
Nachteile
> Rich Internet Applications
(RIA), die ähnlich zu DesktopAnwendungen sind
> Javascript-Programmierung
durch den Web-Entwickler
> Keine Plugins
(vgl. Applets, Flash, etc.)
> Rahmenwerke und Toolkits
(z.B. Dojo)
> Browserinkompatibilitäten
> Debugging
> Wartung
> Polling
> Netzverkehr
> Serverbelastung
> Große Beachtung und
Industrieunterstützung
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
16
Literatur
1. XMLHttpRequest
> http://www.w3.org/TR/XMLHttpRequest
2. W3Schools AJAX Tutorial
> http://www.w3schools.com/Ajax
3. The Dojo Toolkit
> http://www.dojotoolkit.org
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
17
Fragen?
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
18
Apache Wicket
Web-Entwicklung in Java?
Servlets
Java Server Pages (JSP)
> Java-Programme mit
HTML-Ausgaben
> Ausführbar durch Webserver
im Servlet-Container
> Grundlage vieler
Web-Frameworks
> HTML-Seiten mit spezifischen
Tags und Java-Code
> Skriptlets, JSP-Aktionen und
Ausdrücke mit
Programmfluss-Bedeutung
> Kompilierung zu Servlets
Vermischung von Markup (HTML) mit Applikationslogik (Java)
Æ Wartbarkeit?
Æ Alternativen?
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
20
Apache Wicket
> Model / View / Controller (MVC)Architektur
> „Just Java and HTML“
> Insbesondere auch keine
spezielle HTML-Syntax
> XML-free (bis auf web.xml)
> Separation of Concerns
> Klare Trennung von Java & HTML
> Komponentenbasiert
> Wiederverwendbarkeit
> Große Komponentenbibliothek
> Objektorientiert
> Kapselung
> Erweiterbarkeit (Vererbung)
> Ereignisorientiert
> Webseiten als GUI (Swing-like)
> Eingebaute Testunterstützung
G. Mühl
Aktuelle Version: 2.0
> Transparente Unterstützung des
„Back Buttons“
> Typsichere Sessions für transparentes Zustandsmanagement
> Flexible Lokalisierung (Sprache)
> HTML, Bilder, Label, etc.
> Formularvalidierung
> Umfangreiche Ajax-Unterstüzung
ohne JavaScript-Programmierung
(vom Webentwickler) zu erfordern
> Bibliotheksintegration für
> Logging Æ SLF4J
> Objektrelationale Abbildung
(ORM) Æ Hibernate
> Dependency Injection
Æ Spring, Guice
Webbasierte Anwendungen / Wicket, Ajax und GWT
21
Model / View / Controller-Architektur
re
tz en
u
n ab
e
B ing
e
Controller
(Steuerung)
rw
ve
et
t
l
a
än
greift zu
View
(Präsentation)
de
rt
Model
(Modell)
Modelländerungen
Model
View
Controller
> Beinhaltet die Geschäftsobjekte und -daten
> Informiert Beobachter
(z.B. Views) über
Änderungen
> Darstellung der
Geschäftsdaten
> Informiert Beobachter
(z.B. Controller) über
Benutzereingaben
> Verwaltet Präsentationen
> Verarbeitet
Benutzereingaben
> Tätigt Modelländerungen
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
22
Wicket Architektur
Wicket
Component
Container
*
Session
+ render()
Wicket
Servlet
Filter
G. Mühl
Simple
Component
<<use>>
Container
Component
WebPage
<<use>>
Markup
File
<<use>>
HTML
File
Webbasierte Anwendungen / Wicket, Ajax und GWT
23
Komponenten und Container
> Servlet-Filter
> Einstiegspunkt für Wicket durch Abfangen des Requests
> Bestimmen der darzustellenden Komponente (Webseite)
> Komponenten
> Wieder verwendbare Bausteine (inklusive Logik und Layout)
> Objektorientierung ermöglicht Kapselung und Vererbung
> Darstellung (Æ Rendering) erfolgt durch Komponente selbst
> Container-Komponenten
> Beinhalten Kind-Komponenten Æ Entwurfsmuster Kompositum
> Webseiten sind selbst Container-Komponenten mit hierarchisch
angeordneten Kindern (z.B. Seite Æ Formular Æ Textfeld)
> Assoziierte Markup / HTML-Datei bestimmt Layout der Kinder
Æ Separation of Concerns durch Trennung von Logik und Layout
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
24
HelloWorld Beispiel
public class HelloWorldApplication extends WebApplication {
Platz für eigene Initialisierungen
@Override
protected void init() {
mountBookmarkablePage("/hello", HelloWorldPage.class);
}
Zuweisung von
(kurzen) URLs zu
Webseiten
@Override
public Class getHomePage() {
return HelloWorldPage.class;
}
}
Startseite der
Webanwendung
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
25
HelloWorld Beispiel
<html>
<body>
<span wicket:id="message">
this text gets replaced
</span>
</body>
</html>
public class HelloWorldPage
extends WebPage {
public HelloWorldPage() {
Label label =
new Label( "message",
"Hello World!" );
add( label );
} }
HelloWorldPage.html
HelloWorldPage.java
> Trennung von Markup und Logik
> Separate HTML-Datei für Layout und Styling (via CSS)
> Separate Java-Datei für Applikationslogik und Verhalten
> Dynamische Verknüpfung zur Laufzeit
> Identischer Dateiname (unterschiedliche Endung)
> Komponenten-ID
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
26
HelloWorld Beispiel – Deployment
(web.xml)
<web-app>
<display-name>AVA</display-name>
<filter>
<filter-name>WicketFilter</filter-name>
Wicket-Interceptor
für HTTP-Requests
<filter-class>
org.apache.wicket.protocol.http.WicketFilter
</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>ava.wicket.ExampleApplication</param-value>
</init-param>
Einstiegspunkt der
Webanwendung
</filter>
<filter-mapping>
<filter-name>WicketFilter</filter-name>
<url-pattern>/wicket/*</url-pattern>
</filter-mapping>
</web-app>
G. Mühl
URLs für die Wicket
zuständig ist
Webbasierte Anwendungen / Wicket, Ajax und GWT
27
Ereignisbehandlung
<html>
<body>
<form wicket:id="form">
...
<input type="submit"/>
</form>
</body>
</html>
FormPage.html
public class FormPage
extends WebPage {
public FormPage() {
Form form = new Form("form") {
protected void onSubmit() {
// handle submit event
...
} };
add( form );
} }
FormPage.java
> Ausgelöst durch Benutzeraktion Æ HTTP-Request
> Betroffene Komponenten werden mittels Ereignis-Methoden
informiert Æ onClick, onSubmit, …
> Ereignisbehandlung durch Überschreiben der jeweiligen Methode
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
28
Datenbindung
Wicket Formular
Vorname:
Nachname:
Formular Registrierung
Person
+ vorname
+ nachname
Klasse Person
> Verbindung zwischen Geschäftsdaten (Model)
und darstellenden Komponenten (View)
> Monodirektionale und bidirektionale Bindungen möglich
> View Å Data / View Æ Data / View ÅÆ Data
> Wicket Datenbindungen implementieren Schnittstelle IModel
> PropertyModel, CompoundPropertyModel,
ResourceModel
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
29
Datenbindung
Klasse PropertyModel
> Bindet Komponente an ein Attribut eines Geschäftsobjektes
> Beispiel
Form form = new Form("form");
form.add(new TextField("vorname",
new PropertyModel(person, "vorname")));
form.add(new TextField("nachname",
new PropertyModel(person, "nachname")));
Klasse CompoundPropertyModel
> Bindet Kindkomponenten an gleichnamige Attribute eines Objektes
> Beispiel
Form form = new Form("form", new CompoundPropertyModel(person) );
form.add( new TextField("vorname") );
form.add( new TextField("nachname") );
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
30
Validation
> Verarbeitung von Benutzereingaben
>
>
>
>
>
Prüfen ob Eingabe erforderlich Æ Required-Property
Konvertieren der Eingabe (String Æ erwarteter Typ)
Ausführen registrierter Validatoren
Übertragen konvertierter und validierter Werte ins Modell
Aufrufen der Methoden onSubmit bzw. onError Æ Ereignisse
> Bibliothek vorhandener Validatoren
>
>
>
>
>
G. Mühl
Zahlen Æ Minimum, Maximum, Bereich, …
String Æ Länge, regulärer Ausdruck, …
Datum Æ Minimum, Maximum, Bereich, …
Web Æ Email-Adresse, URL, Kreditkarte, …
Custom Æ Erweitern/Implementieren AbstractValidator
Webbasierte Anwendungen / Wicket, Ajax und GWT
31
Beispiel Validation
Form form = new Form("form", new CompoundPropertyModel(user));
...
TextField<String> userName = new TextField<String>(“userName");
form.add( userName );
Feld ist erforderlich
userName.setRequired(true);
StringValidator min = StringValidator.minimumLength(4);
StringValidator max = StringValidator.maximumLength(10);
userName.add(min,max);
Benutzernamen sind zwischen
...
4 und 10 Zeichen lang
ComponentFeedbackPanel feedback =
new ComponentFeedbackPanel("feedback",userName);
form.add(feedback);
Komponente zum Anzeigen
von Fehlermeldungen
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
32
Markup Inheritance
<html>
<head></head>
<body>
BasePage before<br>
<wicket:child />
BasePage after<br>
</body>
</html>
BasePage.html
public class ChildPage
extends BasePage { … }
Output
ChildPage.html
<html>
<head></head>
<body>
ChildPage before<br>
<wicket:extend>
This is the child markup<br>
</wicket:extend>
ChildPage after<br>
</body>
</html>
G. Mühl
ChildPage.java
<html>
<head></head>
<body>
BasePage before<br>
This is the child markup<br>
BasePage after<br>
</body>
</html>
Webbasierte Anwendungen / Wicket, Ajax und GWT
33
Unit-Tests
> Klassen WicketTester und FormTester
> Unit-Tests von Wicket-Seiten ohne Servlet-Container
Æ Out-of-Container-Test
> Simulation von Benutzereingaben
> Link-Klicks zur Seitennavigation
> Formulareingaben
> Prüfen von Zusicherungen Æ Assertions
>
>
>
>
G. Mühl
Typ der Webseite und enthaltener Komponenten
Sichtbarkeit, Labeltexte, Listenelemente
Werte assoziierter Modell-Objekte
Validationsergebnisse mittels Fehler- und Info-Nachrichten
Webbasierte Anwendungen / Wicket, Ajax und GWT
34
Web-Frameworks
Nicht überzeugt? Gibt es Alternativen?
Action Framework Baritus Barracuda Bento Bishop
Cameleon Canyamo Cassandra Chiba Click
Cocoon Dinamica Dovetail Echo Expresso Folium
Genie GWT Helma Jacquard Jaffa Japple JATO
JBanana Jeenius JFormular JPublish jStatemachine
Jucas JWAA JWarp jZonic Macaw Maverick
Melati Milestone MyFaces Nacho Niggle
OpenEmcee OXF RIFE Scope Shocks Smile
SOFIA Spring MVC Stripes Struts Tapestry
TeaServlet Turbine Verge Warfare WebOnSwing
WebWork wingS Xoplon
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
35
Literatur
> Apache Wicket Project
> Homepage Æ http://wicket.apache.org/
> Wiki Æ http://cwiki.apache.org/WICKET/
> Wicket Komponenten
> Docs Æ http://www.wicketstuff.org/wicket14/
> Beispiele Æ http://www.wicketstuff.org/wicket14/
> Wicket Bücher
> Roland Förther, Carl-Eric Menzel and Olaf Siefart.
Komponentenbasierte Webanwendungen in Java. dpunkt.verlag.
> Martijn Dashorst, Eelco Hillenius: Wicket in Action. Manning
Publications.
> Kent Tong: Enjoying Web Development with Wicket.
http://www.agileskills2.org/, (Kapitel 1-3 frei)
> Michael Mosmann: Praxisbuch Wicket – Professionelle Web-2.0Anwendungen entwickeln. Hanser.
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
36
Fragen?
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
37
Google Web Toolkit (GWT)
Google Web Toolkit (GWT)
> Werkzeugsammlung zur Entwicklung von
Cross-Browser AJAX-Applikationen in Java
Aktuelle Version: 2.0
> http://code.google.com/webtoolkit
> Implementieren und Testen in gewohnter Java-IDE
Æ Developer Mode
> Google Plugin for Eclipse ermöglicht komfortable Entwicklung
> Darstellung der Anwendung im Browser (z.B. Firefox Æ Firebug)
während der Entwicklung mittels GWT developer plugin
> Plugins kommunizieren per TCP Æ Browser kann entfernt sein
> Testen mittels HtmlUnit (Simuliert populäre Browser ohne GUI)
> Deployment in JavaScript Æ Produktion Mode
> GWT-Compiler konvertiert Java-Quelltext zu JavaScript-Quelltext
Write
G. Mühl
Debug
Optimize
Run
Webbasierte Anwendungen / Wicket, Ajax und GWT
39
GWT Bestandteile
JRE Emulationsbibliothek
(java.lang und java.util)
GWT
Java Æ JavaScript
Compiler
G. Mühl
GWT Web UI
Klassenbibliothek
GWT
Developer Plugin
Klassenbibliotheken
Entwicklungswerkzeuge
Webbasierte Anwendungen / Wicket, Ajax und GWT
40
Architekturkomponenten
> GWT Java Æ JavaScript-Compiler
> Übersetzt GWT Java-Programme nach JavaScript
> GWT Developer Pluging
> Ausführung von GWT-Programmen innerhalb des Browsers
ohne Kompilierung zu JavaScript
> JRE Emulationsbibliothek
> JavaScript-Implementierungen wichtiger Java-Klassen
> GWT Web UI Klassenbibliothek
> Bibliothek häufig genutzter Bedien- und Eingabeelemente
Æ Widgets
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
41
GWT Java Æ JavaScript Compiler
> Vollständiger Parser für original Java-Quelltexte
> Nahezu alle Java-Konstrukte werden verstanden
> Erzeugung eines Abstrakten Syntaxbaumes
> Echter Code-Parser und Cross-Compiler
> Keine Musterersetzung oder Template-Bibliothek
> Durchführung von Code-Optimierungen
> Dead-Code-Eliminierung, Datenflussanalyse, etc.
> Komprimierung und Obfuskation
> Erzeugtes JavaScript ist effizient
Æ meist schneller als handgeschriebenes JavaScript
> Browserkompatibilität
> Inkludiert Browserhacks und Workarounds automatisch
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
42
GWT GUI Klassen
> GUI-Klassen vergleichbar mit Desktop-Frameworks
wie beispielsweise Java Swing
> Ereignisorientiert Æ Listener Pattern (Events und EventHandler)
> Darstellung mittels dynamisch generiertem HTML
> Styling mittels CSS
> Widget-Bibliothek
> Beinhaltet viele häufig genutzte Elemente
> Widgets sind komponierbar
Æ Erzeugung wieder verwendbarer, neuer Elemente
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
43
Widget-Beispiele
Boxes
Panels
Menüs, Bäume,
Buttons & Popups
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
44
GWT Programmbeispiel
package ava.gwt.client;
import com.google.gwt.core.client.*;
import com.google.gwt.event.dom.client.*;
Einstiegspunkt
import com.google.gwt.user.client.*;
der Anwendung
import com.google.gwt.user.client.ui.*;
public class HelloWorld implements EntryPoint, ClickHandler {
TextBox text;
public void onModuleLoad() {
text = new TextBox();
Button button = new Button("Show text", this);
VerticalPanel panel = new VerticalPanel();
panel.add(text);
panel.add(button);
Handler für geRootPanel.get().add(panel);
klickten Button
}
public void onClick(ClickEvent event) {
Window.alert("You entered: " + text.getText());
} }
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
45
GWT RPC (Remote Procedure Call)
> Mechanismus um serverseitige Methoden aufzurufen
> Beispielsweise um Daten vom Server nachzuladen
> Wird auf AJAX abgebildet
Æ Asynchrone Aufrufe und Callbacks
> Unterstützung von (serialisierbaren) Java-Objekten als
Aufrufparameter und Rückgabewerte
> GWT übernimmt Marshalling / Unmarshalling
> Unterstützung von Exceptions
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
46
GWT RPC Übersicht
Clientseite
ServiceDefTarget
(interface)
YourServiceAsync
(interface)
related
Serverseite
RemoteService
(interface)
RemoteServiceServlet (class)
extends
extends
YourService
(interface)
implements
YourServiceImpl
(class)
YourServiceProxy
(class)
Übersetzter Java-Code ausgeführt
als JavaScript auf dem Client
Framework Klassen
bzw. Interfaces
G. Mühl
Java-Code ausgeführt als
Bytecode auf dem Server
Automatisch generierte Klassen
Selbstgeschriebene Klassen
bzw. Interfaces
Webbasierte Anwendungen / Wicket, Ajax und GWT
47
1. Schnittstellen implementieren
> Synchrone Schnittstelle (serverseitig)
public interface EchoService extends RemoteService {
public String echo(String s);
}
> Asynchrone Schnittstelle (clientseitig)
// Has to be named <SynchroneSchnittstelle>Async.
// Has to pass AsyncCallback object as last parameter.
// Has to return void.
//
public interface EchoServiceAsync {
public void echo(String s, AsyncCallback<String> callback);
}
Typ des
Rückgabewertes
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
48
2. Dienst implementieren
> Dienstimplementierung
> Implementierung erfolgt im Paket server
> Klasse von RemoteServiceServlet ableiten
> Eigene synchrone Dienstschnittstelle implementieren
package ava.gwt.server;
…
public class EchoServiceImpl extends RemoteServiceServlet
implements EchoService {
public String echo(String s) {
return "Echo: " + s;
} }
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
49
3. Konfiguration
> Dienste sind Servlets
> Konfiguration erfolgt in web.xml-Datei
> Angabe der Servlet-Klasse und der Aufruf-URL erforderlich
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
...
<servlet>
<servlet-name>EchoService</servlet-name>
<servlet-class>ava.gwt.server.EchoServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>EchoService</servlet-name>
<url-pattern>/echo</url-pattern>
</servlet-mapping>
</web-app>
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
50
4. Dienstaufruf
> Erzeugung eines Proxy-Objektes des Dienstes
EchoServiceAsync echoService =
(EchoServiceAsync) GWT.create(EchoService.class);
> Angabe der Aufruf-URL des Dienst-Servlets
ServiceDefTarget endpoint = (ServiceDefTarget) echoService;
String moduleRelativeURL = GWT.getModuleBaseURL()+"echo";
endpoint.setServiceEntryPoint(moduleRelativeURL);
> Erzeugung eines Callback-Objektes für das Ergebnis
AsyncCallback<String> callback = new AsyncCallback<String>() {
@Override public void onSuccess(String result)
{ … }
@Override public void onFailure(Throwable caught) { … }
};
> Aufruf ausführen
echoService.echo("Hello World", callback);
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
51
Anmerkungen
> Google Eclipse Plugin
> Webseite Æ http://code.google.com/eclipse
> Eclipse-Integration für Anwendungen basierend auf
Google Web Toolkit und Google App Engine
> GWT Kommandozeilen-Werkzeuge
> Projekt-, Compile-, und Launch-Skripte für Webmodul erstellen
webAppCreator [-out folder] <ModuleName>
> GWT RPC-Hinweise
> Servlet-Klassen werden nicht vom GWT kompiliert
Æ manuell kompilieren oder automatisch von Eclipse
> Servlet-Pfad in der web.xml-Datei und ServiceDefTarget
für Aufruf müssen übereinstimmen
> Dokumentation
> http://code.google.com/intl/de-DE/webtoolkit/doc/latest/DevGuide.html
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
52
Literatur
1. Google Web Toolkit
> http://code.google.com/intl/de-DE/webtoolkit
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
53
Fragen?
G. Mühl
Webbasierte Anwendungen / Wicket, Ajax und GWT
54
Webbasierte Anwendungen
Java Enterprise Edition (JEE)
Prof. Dr.-Ing. habil. Gero Mühl
Architektur von Anwendungssystemen (AVA)
Fakultät für Informatik und Elektrotechnik (IEF)
Universität Rostock
Überblick
> Einführung und Architektur
> Java Servlets
> Java Server Pages (JSP)
> Java Server Faces (JSF)
> Enterprise Java Beans (EJB)
G. Mühl
Webbasierte Anwendungen / JEE
2
Einführung und Architektur
Java Enterprise Edition (Java EE)
> Rahmenwerk für Design, Entwicklung und Deployment
mehrschichtiger verteilter Enterprise-Anwendungen
Aktuelle
Version
6
> Anwendungsschichten von Java EE
>
>
>
>
Client-Tier Æ Client-Rechner
Web-Tier
Java EE Application Server
Business-Tier
Enterprise Information System (EIS)-Tier Æ Datenbank-Server
> Technologien von Java EE
> Webclients, Clientanwendungen und Applets Æ Client Tier
> Servlets, Java Server Pages (JSPs) und
Java Server Faces (JSF) Æ Web Tier
> Enterprise Java Beans (EJBs) Æ Business Tier
G. Mühl
Webbasierte Anwendungen / JEE
4
Java EE Architektur
Java EE Application Server
Client
Client
Servlet
JSP
JSF
G. Mühl
EJB
EJB
Client
Client Tier
RDBMS
TM
Legacy
EJB
Web Container
EJB Container
Enterprise
Information
Systems
Web Tier
Business Tier
EIS Tier
Webbasierte Anwendungen / JEE
5
Java Servlets
Java Servlets
> Serverseitige Java-Programmschnipsel
> Servlet = Zusammenziehung der Worte Server und Applet
> „Servlets sind für den Server das, was Applets für den
Client (Webbrowser) sind“
> „CGI auf Java-Art“
Aktuelle
Version
3.0
> Plattformunabhängige Alternative zu CGI
> Einfacher zu schreiben
> Schneller und sicherer in der Ausführung
> Java-API steht zur Verfügung (außer GUI)
> Servlet-Container fungiert als Laufzeitumgebung und
stellt Dienste bereit
>
>
>
>
>
>
G. Mühl
Lifecycle Management
Session Management
Authentifizierung und Autorisierung
Transaktionen und Persistenz
Verwaltung von Ressourcen
…
Webbasierte Anwendungen / JEE
7
Architektur
> Servlets werden über
Webserver mittels URL
angesprochen
WebBrowser
1. HTTP-Request
> Webserver übergibt
HTTP-Request mit
„passender“ URL an
Servlet-Container, der
das anzusprechende
Servlet instanziiert
> Servlet wird mit
HTTP-Request aufgerufen
und erzeugt HTTP-Response
G. Mühl
2. HTTP-Response
Apache
WebServer
Connector
Apache JServ
Protocol (AJP)
Servlet
Tomcat
ServletContainer
Webbasierte Anwendungen / JEE
8
Schnittstellen und Klassen
______javax.servlet.Servlet______
void init(ServletConfig config)
void service(ServletRequest req,
ServletResponse res)
void destroy()
Interface
Class
____javax.servlet.ServletRequest____
_javax.servlet.http.HttpServletRequest_
___javax.servlet.GenericServlet___
___javax.servlet.ServletResponse___
__javax.servlet.http.HTTPServlet__
doGet(HttpServletRequest req,
HttpServletResponse resp)
doPost(HttpServletRequest req,
HttpServletResponse resp)
______MySimpleServlet________
G. Mühl
_javax.servlet.http.HttpServletResponse_
Vom Servlet-Entwickler
zu implementieren
Webbasierte Anwendungen / JEE
9
Schnittstelle Servlet /
Klasse GenericServlet
init
> Interface Servlet
>
>
>
>
Von jeder Servlet-Klasse implementiert
Klassenlader des Containers lädt Servlet-Klasse
Container delegiert Client-Anfrage an Servlet
Abarbeitung findet in eigenem Thread statt
> Wichtige Methoden der Schnittstelle
service
destroy
> void init(ServletConfig config)
> Einmaliger Aufruf durch Container zur Initialisierung
> void service(ServletRequest req, ServletResponse res)
> Verarbeiten einer Anfrage und Erzeugen der zugehörigen Antwort
> void destroy()
> Einmaliger Aufruf durch Container am Lebensende
> Freigabe von Ressourcen
> Klasse GenericServlet unabhängig vom verwendeten Protokoll
> Vorgehen
> Eigenes Servlet von GenericServlet ableiten
> service-Methode überschreiben
G. Mühl
Webbasierte Anwendungen / JEE
10
Klasse HTTPServlet
> Klasse javax.servlet.http.HttpServlet
> Verarbeitung von HTTP-Anfragen durch doMethod()-Methoden,
die den Methoden des HTTP-Protokolls entsprechen
> doGet(), doPost(), doHead(), doPut(), doDelete(),
doOptions() und doTrace()
> doMethod(HttpServletRequest req,
HttpServletResponse res)
> Aufrufparameter sind HTTP-spezifische
Request- und Response-Objekte
> Vorgehen
> Eigenes Servlet von HttpServlet ableiten
> Benötigte doMethod()-Methode(n) überschreiben
G. Mühl
Webbasierte Anwendungen / JEE
11
Klasse HttpServletRequest
> Repräsentiert HTTP-Request des Clients
> Methoden
> String getHeader(String field)
> Abfragen von HTTP-Header-Feldern
> String getQueryString()
> Liefert Query String bei GET-Requests
> String getParameter(String name)
> Parameter GET- oder POST-Request holen
> BufferedReader getReader()
ServletInputStream getInputStream()
> Zum Lesen von Zeichen bzw. Binärdaten aus dem Body
> Cookie[] getCookies()
> Liefert alle Cookies des Requests
> …
G. Mühl
Webbasierte Anwendungen / JEE
12
Klasse HttpServletResponse
> Repräsentiert HTTP-Response für den Client
> Methoden
> void setHeader(String field, String value)
> Setzen beliebiger HTTP-Header-Felder
> Für die wichtigsten Header-Felder existieren eigene Methoden
> void setContentType(String type)
> Setzt Typ des Bodys der Response (z.B. auf text/html)
> void sendError(int sc, String msg)
> Fehlermeldung senden (z.B. 404, „Seite nicht gefunden“)
> PrintWriter getWriter()
ServletOutputStream getOutputStream()
> Zum Schreiben von Zeichen bzw. Binärdaten
> …
G. Mühl
Webbasierte Anwendungen / JEE
13
Servlet Beispiel
Annotation kennzeichnet Klasse
als Servlet und gibt URL an
HttpServlet erweitern und benötigte Methoden überschreiben
@WebServlet("/hello")
public class MySimpleServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html><head>“);
out.println("<title>Response</title></head>");
out.println("<body><h1>HelloWorld</h1>");
out.println("</body></html>");
out.close();
HTML-Ausgabe erzeugen
}
}
G. Mühl
Webbasierte Anwendungen / JEE
14
Servlet Beispiel 2
<FORM METHOD="POST" ACTION="/servlet/FormServlet">
<INPUT NAME="firstname" TYPE="text" SIZE="30">
<INPUT NAME="lastname" TYPE="text" SIZE="30">
<INPUT NAME="age"
TYPE="text" SIZE="3">
<INPUT TYPE="SUBMIT">
HTML-Formular
</FORM>
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
firstname = request.getParameter("firstname");
lastname = request.getParameter("lastname");
ageString = request.getParameter("age");
…
Servlet
}
Formularparameter
aus Request herausholen
G. Mühl
Webbasierte Anwendungen / JEE
15
Deployment einer Web-Anwendung
> Eine Web-Applikation besteht typischerweise aus einem
einzelnem Web Archive (.WAR)
> ist im Prinzip eine JAR-Datei
> bildet einen Applikationskontext
> Struktur des Archivs
index.html
META-INF/
MANIFEST.MF
WEB-INF/
web.xml
lib/
classes/
ava/
Metainformationen über
den Inhalt des Archivs
Optionaler
Deployment Descriptor
Bibliotheken
Klassen
MySimpleServlet.class
G. Mühl
Webbasierte Anwendungen / JEE
16
Servlets und Threads
> Zusammenspiel von Container und Servlets
> Container bearbeitet jede Client-Anfrage in der Regel
in einem eigenen Thread
> Er hält meist jedoch nur eine Servlet-Instanz pro Servlet-Klasse
vor, die sich die Threads teilen müssen
⇒ Ohne weitere Vorkehrungen sind Probleme bei gleichzeitigem
Zugriff mehrerer Threads auf ein Servlet zu erwarten
> Lösungen für durch Multithreading verursachte Probleme
> Servlets zustandslos implementieren
> Methoden synchronisieren Æ Schlüsselwort synchronized
> Kritische Auswirkungen auf Performanz möglich
> Schnittstelle javax.servlet.SingleThreadModel
implementieren (deprecated) Æ immer nur ein Request
gleichzeitig auf einer Servlet-Instanz aktiv
G. Mühl
Webbasierte Anwendungen / JEE
17
Servlets Sessions
> Sessions repräsentieren Client/Server-Beziehung
> Servlet Container bietet Session Management als Service an
> Verwendet Cookies wenn möglich, sonst URI Rewriting
> Sessions sind im gesamten ServletContext sichtbar
> Klasse javax.servlet.http.HttpSession
> Abstrahiert von Cookies und URI Rewriting
> Dient als Container für beliebige serialisierbare Objekte, die auf dem
Server liegen Æ Client bekommt nur eine Identifikation
> HttpServletRequest#getSession()
> Erzeugt neue Session, falls noch keine vorhanden
> Anwendungsdaten werden als Attribute an Sessions gebunden
> session.setAttribute(name,value)
> value = session.getAttribute(name)
G. Mühl
Webbasierte Anwendungen / JEE
18
Servlets Sessions
> Sessions „fressen“ Betriebsmittel (z.B. Speicher)
> Explizite Invalidierung der Session
> session.invalidate()
> Globaler Timeout in web.xml einstellbar
> Einstellbarer Per-Session-Timeout
> session.setMaxInactiveTimeout()
G. Mühl
Webbasierte Anwendungen / JEE
19
Servlet Cookie API
> Klasse javax.servlet.http.Cookie repräsentiert
einen Cookie
> Konstruktor
> public Cookie(String name, String value)
> Setzen im Response Header (HTTPServletRequest)
> response.addCookie(userCookie);
> Lesen aus Request Header (HTTPServletRequest)
> Cookie[] cookies = request.getCookies();
G. Mühl
Webbasierte Anwendungen / JEE
20
Getter/Setter-Methoden von
javax.servlet.http.Cookie
> boolean isHttpOnly()
void setHttpOnly(boolean only)
> Cookie nicht an clientseitige Scripts übergeben (Setzen und Testen)
> boolean getSecure()
void setSecure(boolean flag)
> Cookie darf nur per HTTPS übertragen werden (Setzen und Testen)
> String getName()
void setName(String name)
> String getValue()
void setValue(String value)
> String getDomain()
void setDomain(String domain)
G. Mühl
Webbasierte Anwendungen / JEE
21
Ereignisse
> Ereignisbehandlung folgt dem Listener-Modell
Æ Tritt ein Ereignis auf, so wird der Listener aufgerufen
> Definition von Listenern mittels Annotationen, im Deployment
Descriptor oder explizite Registrierung mittels einer der
addListerer-Methoden im ServletContext
@WebListener
public class SessionCounter
implements HTTPSessionListener {
privat int activeSessions = 0;
@Override
void sessionCreated(HttpSessionEvent se) {
@Override
void sessionDestroyed(HttpSessionEvent se)
int getActiveSessions() { return sessions;
}
G. Mühl
Listener-Definition
durch Annotation
sessions++; }
{sessions-- ; }
}
Webbasierte Anwendungen / JEE
22
Ereignisse: Klassen und Schnittstellen
_____java.util.EventListener_____
_____HttpSessionListener_____
void sessionDidActivate(
HttpSessionEvent hse)
void sessionWillPassivate(
HttpSessionEvent hse)
__HttpSessionBindingListener__
void valueBound (
HttpSessionBindingEvent hsbe)
void valueUnbound (
HttpSessionBindingEvent hsbe)
_HttpSessionActivationListener_
void sessionCreated(
HttpSessionEvent hse)
void sessionDestroyed(
HttpSessionEvent hse)
_HttpSessionAtributeListener_
void attributeAdded (
HttpSessionBindingEvent hsbe)
void attributeRemoved (
HttpSessionBindingEvent hsbe)
void attributeReplaced (
HttpSessionBindingEvent hsbe)
______HttpSessionEvent______
HttpSession getSession()
G. Mühl
____HttpSessionBindingEvent____
HttpSession getSession()
String getName()
Object getValue()
Webbasierte Anwendungen / JEE
23
Ereignisse: Sessions
> HttpSessionActivationListener-Interface
void sessionDidActivate(HttpSessionEvent hse)
void sessionWillPassivate(HttpSessionEvent hse)
> Implementiert von Attribut-Objekten, die benachrichtigt werden wollen,
wenn zugeordnete Session aktiviert oder passiviert wird
> HttpSessionListener-Interface
void sessionCreated(HttpSessionEvent hse)
void sessionDestroyed(HttpSessionEvent hse)
> Implementiert von Objekten, die benachrichtigt werden wollen, wenn
eine Session erzeugt oder zerstört wird
> HttpSessionEvent-Klasse
HttpSession getSession()
G. Mühl
Webbasierte Anwendungen / JEE
24
Ereignisse: Session-Attribute
> HttpSessionBindingListener-Interface
void valueBound (HttpSessionBindingEvent hsbe)
void valueUnbound (HttpSessionBindingEvent hsbe)
> Implementiert von Attribut-Objekten, die benachrichtigt werden wollen,
wenn sie gebunden oder entfernt werden
> HttpSessionAttributeListener-Interface
void attributeAdded (HttpSessionBindingEvent hsbe)
void attributeRemoved (HttpSessionBindingEvent hsbe)
void attributeReplaced (HttpSessionBindingEvent hsbe)
> Implementiert von Objekten, die benachrichtigt werden wollen, wenn ein
Attribut einer Session hinzugefügt, entfernt oder ersetzt wird
> HttpSessionBindingEvent-Klasse
HttpSession getSession()
String getName()
Object getValue()
G. Mühl
Webbasierte Anwendungen / JEE
25
Asynchrone Request-Verarbeitung
> Bei synchroner Request-Verarbeitung muss der Request
abgeschlossen sein, wenn doMethod() returniert
⇒ Langlaufende Aktionen blockieren ausführenden Thread
⇒ Threads werden knapp
⇒ Performanzdegradierung
> Asynchrone Request-Verarbeitung
> Ermöglicht aus doMethod() zurückzuspringen, ohne den
Request abzuschließen
> Spätere Wiederaufnahme der Ausführung des Requests, um
diesen zum Abschluss zu bringen (evtl. auch mehrfach)
> Weitere Anwendungsmöglichkeit: Server-Side Push
> Auch bekannt als Reverse Ajax, Comet, …
G. Mühl
Webbasierte Anwendungen / JEE
26
Asynchrone Request-Verarbeitung
> Servlet für asynchrone Requests konfigurieren
> @WebServlet("/chat", asyncSupported=true)
> Request in asynchronen Modus versetzen
> AsyncContext ac = req.startAsync(req, res);
> Request oder Response aus asynchronem Kontext holen
> ac.getRequest();
> ac.getResponse();
> Request abschließen und Response schließen
> ac.complete();
G. Mühl
Webbasierte Anwendungen / JEE
27
Servlet Chat Beispiel
@WebServlet("/chat", asyncSupported=true)
public class MyServlet extends HttpServlet {
private static final Queue<AsyncContext> acQueue =
new ConcurrentLinkedQueue<AsyncContext>();
private static final BlockingQueue<String> messageQueue =
new LinkedBlockingQueue<String>();
@Override
public void init(ServletConfig config) throws ServletException {
Runnable notifierRunnable = new Runnable() {
public void run() {
Chat-Nachricht an alle
while (true) {
Requests weiter geben
message = messageQueue.take();
for (AsyncContext ac : acQueue) {
PrintWriter acWriter = ac.getResponse().getWriter();
acWriter.println(message); acWriter.flush();
}}}
new Thread(notifierRunnable).start();
Thread starten, der
}
Chat-Nachrichten an
G. Mühl
Clients weitergibt
Webbasierte Anwendungen / JEE
28
Servlet Chat Beispiel
@Override
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
req.setAsyncTimeout(10 * 60 * 1000);
AsyncContext ac = req.startAsync();
acQueue.add(ac);
Request in asynchronen Modus
}
schalten und in Queue speichern
@Override
public void doPost (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
String message = req.getParameter("message“);
messageQueue.put(message);
}
}
G. Mühl
Neue Chat-Nachricht entgegen
nehmen und in Queue speichern
Webbasierte Anwendungen / JEE
29
Literatur
1. Sun Microsystems, Inc., Java Servlet Specification,
Version 3.0
> http://java.sun.com/products/servlet
G. Mühl
Webbasierte Anwendungen / JEE
30
Fragen?
G. Mühl
Webbasierte Anwendungen / JEE
31
Java Server Pages (JSP)
Java Server Pages (JSP)
> Erweiterung der Servlet Technologie
> Ermöglicht „komfortablere“ Notation eines Servlets
> Gemischte Seitenbeschreibung
Aktuelle
Version
2.2
> Statische Inhalte (Static Template Code)
> Dynamische Inhalte (JSP Elements)
> JSP umfasst Direktiven, Scripting und Aktionen
> JSP wird in Servlet-Klasse kompiliert
Java
Server
Page
G. Mühl
Page Compilation
Java
Servlet
Webbasierte Anwendungen / JEE
33
Model 1 Architecture
Nur für einfachste
Anwendungen
sinnvoll!
> JSP
> Behandelt Request
> Übernimmt Steuerung
> Generiert Response
> Datenzugriff wird in Java Beans ausgelagert
1.
4.
WebBrowser
JSP
2.
3.
Java Bean
G. Mühl
DB
Webbasierte Anwendungen / JEE
34
Model 2 Architecture (MVC Pattern)
Für nichttrivialen
Anwendungen
vorzuziehen!
> Serverseitige Realisierung des MVC Patterns
> Model: Java Beans, View: JSP, Controller: Servlet
> Servlet leitet Request an passende JSP weiter:
ServletContext sc = getServletContext();
RequestDispatcher rd =
sc.getRequestDispatcher(forwardURL);
rd.forward(req, res);
1.
5.
WebBrowser
Servlet
2.
3.
JSP
G. Mühl
Java Bean
4.
DB
Webbasierte Anwendungen / JEE
35
JSP Beispiel – HTML + Java Code
<html>
<head>
<title>JSP Beispiel</title>
</head>
<body>
Datum und Zeit:<%= new java.util.Date()%><br/>
<% for (int i=0; i<5; i++) { %>
Das Quadrat von <%= i %> ist <%= i*i %><br/>
<% } %>
</body>
In dieser Syntax ist ein JSP kein
</html>
valides HTML-Dokument! Es ist
aber möglich, XML-konforme JSPs
in einer alternativen Syntax zu erstellen.
G. Mühl
Webbasierte Anwendungen / JEE
36
JSP Direktiven
> <%@ directive {attribute="value"}* %>
> page-Direktive:
<%@ page … %>
> Importieren von Bibliotheken
<%@ page import="java.util.*" %>
> Einstellungen für die Seite festlegen
<%@ page language="java" %>
> HTTP-Session erzeugen ja/nein
<%@ page session="true" %>
> Von Servlet-Basisklasse ableiten
<%@ page extends="myservlet" %>
> Fehlerseite festlegen
<%@ page errorPage="error.jsp" %>
> Ist Fehlerseite
<%@ page isErrorPage="true" %>
G. Mühl
Webbasierte Anwendungen / JEE
37
JSP Direktiven
> include-Direktive:
<%@ include … %>
> Einbindung statischer Dokumente
<%@ include file="companyBanner.html" %>
> taglib-Direktive:
<%@ taglib … %>
> Erweiterung der vorhandenen Actions
<%@ taglib uri="/taglib" prefix="mytaglib" %>
<mytaglib:cooltag>
...
</mytaglib:cooltag>
G. Mühl
Webbasierte Anwendungen / JEE
38
JSP Scripting
> Deklarationen: <%! declarations %>
> Definieren und überschreiben von Methoden,
z.B. jspInit() and jspDestroy()
<%! public void jspInit()
{ ... } %>
<%! public void jspDestroy() { ... } %>
> Scriptlets: <% java code fragment %>
> Wird in den Rumpf der service-Methode eingefügt
<% java.util.Date date = new java.util.Date();
out.println(date); %>
> Ausdrücke: <%= expression %>
> Ausdruck auswerten und Ergebnis in String umwandeln
> String in Seite einfügen
<%= date %>
G. Mühl
Webbasierte Anwendungen / JEE
39
JSP Deklarationen
Achtung: Mehrere Threads
<HTML>
können gleichzeitig auf einer
<HEAD>
JSP-Instanz arbeiten!
<TITLE>Current Date</TITLE>
</HEAD>
<BODY>
Member-Deklaration
<%!
double number = Math.random();
Date computeDate() {
return new Date();
}
Methoden-Deklaration
%>
The time is now <%= getDate() %>
Random number is <%= number %>
</BODY>
</HTML>
G. Mühl
Webbasierte Anwendungen / JEE
40
JSP Implizite Objekte
Name
> request
> response
> session
> out
> application
> config
> page
> exception
Typ
> HttpServletRequest
> HttpServletResponse
> HttpSession
> JspWriter
> ServletContext
> ServletConfig
> äquivalent zu this
> java.lang.Throwable
> Innerhalb von Scriptlets und Ausdrücken kann
auf diese Objekte zugegriffen werden, z.B.
<% out.println(request.getRemoteHost()); %>
G. Mühl
Webbasierte Anwendungen / JEE
41
JSP Sessions
<HTML><BODY>
<FORM METHOD=POST ACTION="Save.jsp">
What's your name?
<INPUT TYPE="TEXT" NAME="username" SIZE="20">
<INPUT TYPE="TEXT" NAME="email" SIZE="20">
<INPUT TYPE="SUBMIT">
</FORM>
Form.html
</BODY></HTML>
<%
String name = request.getParameter( "username" );
session.setAttribute( "username", name );
String email = request.getParameter( "email" );
session.setAttribute( "email", email );
Save.jsp
%>
G. Mühl
Webbasierte Anwendungen / JEE
42
JSP Actions
> Starten zusätzliche Funktionalität zur Laufzeit
> Syntax
> mit Body
> ohne Body
<jsp:tag>body</jsp:tag>
<jsp:tag {attribute="name"}*/>
> Einfügen einer HTML- oder JSP-Seite
<jsp:include page="rurl" flush="true"/>
> Weiterleiten auf andere Seite
<jsp:forward page="errorPage.jsp"/>
<jsp:forward page="<%= ... %>"/>
G. Mühl
Webbasierte Anwendungen / JEE
43
Java Beans
> Komponentenmodell für Java
> Ursprünglich GUI-Komponenten erdacht
> Heute beliebige Java-Klasse, die Konventionen gehorcht
> Abstraktionsschicht für Logik und Datenzugriff
> Konventionen
> Parameterloser Konstruktor vorhanden
> Zugriff auf Properties mit Getter- und Setter-Methoden
> Instanzen sind serialisierbar Æ Persistenz
> Implementieren die Schnittstelle java.io.Serializable
G. Mühl
Webbasierte Anwendungen / JEE
44
JSP <useBean>-Tag
public class UserData {
public void setUsername(String value){username = value;}
public void setEmail(String value) {email = value;}
public String getUsername() {return username;}
public String getEmail() {return email;}
Bean
}
<jsp:useBean id="user" class="UserData" scope="session"/>
<jsp:setProperty name="user" property="*"/>
Save.jsp
</jsp:useBean>
<HTML><BODY>
<jsp:useBean id="user" class="UserData" scope="session"/>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
</jsp:useBean>
</BODY></HTML>
G. Mühl
Load.jsp
Webbasierte Anwendungen / JEE
45
JSP <useBean>-Tag
> Aufruf einer JavaBean
<jsp:useBean id="user" class="userData"
scope="session">
> Ermitteln und Ändern von Eigenschaften einer JavaBean
<jsp:getProperty name="user" property="name"/>
<jsp:setProperty name="user" property="name"
value="Peter"/>
> Mapping eines bzw. aller gleichnamigen Request-Parameter
<jsp:setProperty name="user" property="name"
param="nachname"/>
<jsp:setProperty name="user" property="*"/>
G. Mühl
Webbasierte Anwendungen / JEE
46
JSP XML View
Type of Element
Direktiven
Deklarationen
Ausdrücke
Codefragmente
G. Mühl
Non-XML Syntax
XML Tag
<%@ directive %>
<jsp:directive.page ... />
<jsp:directive.include ... />
<%! declarations %>
<jsp:declaration>
…
</jsp:declaration>
<%= expression %>
<jsp:expression>
…
</jsp:expression>
<% code fragment %>
<jsp:scriptlet>
…
</jsp:scriptlet>
Webbasierte Anwendungen / JEE
47
JSP Standard Tag Library (JSTL)
> Nicht Teil der JSP-Spezifikation, sondern eigene Spezifikation
> Ersetzt Scriptlets bei einfachen Aufgaben
> Iteration: <c:foreach>
> Bedingungen: <c:if>
> Alternativen: <c:choose>, <c:when>, <c:otherwise>
Aktuelle
Version
1.2
<%@ page isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
...
Your shopping cart:
<table>
<c:forEach var="product" items="${cart}">
<tr><td>${product}</td></tr>
</c:forEach>
</table>
...
</html>
G. Mühl
Webbasierte Anwendungen / JEE
48
JSP Expression Language (EL)
Aktuelle
Version
2.2
<html>
...
Selected CPU has TDP:
<%= ((CPU) request.getAttribute("computer")).getCPU().getTDP() %> W
...
Scriptlet
</html>
<html>
...
<jsp:useBean id="computer" class="Computer" scope="request" />
Selected CPU has TDP:
<jsp:getProperty name="computer" property="CPU" /> kW
...
</html>
JSTL
<html>
...
Your CPU has TDP: ${computer.CPU.TDP} W
...
</html>
Geht wegen fehlender Unterstützung
für Verschachtelung nicht
EL
G. Mühl
Webbasierte Anwendungen / JEE
49
Literatur
1. Sun Microsystems, Inc., Java Server Pages Specification,
Version 2.2, 2009
> http://java.sun.com/products/jsp
2. Sun Microsystems, Inc., Java Server Pages Standard Tag
Library, Version 1.2, 2006
> http://java.sun.com/products/jsp/jstl
3. Sun Microsystems, Inc., Java Server Pages Expression
Language Specification, Version 2.2, 2009
> http://java.sun.com/products/jsp
G. Mühl
Webbasierte Anwendungen / JEE
50
Fragen?
G. Mühl
Webbasierte Anwendungen / JEE
51
Java Server Faces (JSF)
Java Server Faces (JSF)
> Serverseitiges Komponentenmodell für die
Entwicklung Java-basierter Webapplikationen
Aktuelle
Version
2.0
> Baut auf Java Servlets auf
> Eigenschaften
>
>
>
>
>
>
>
Framework für interaktive Web-Anwendungen
Wiederverwendbare Komponenten für Benutzeroberfläche
Datenbindung zwischen Komponenten und Java Beans
Event-Modell bindet Browser-Events an Servermethoden
Konfigurierbare Ablaufsteuerung (Navigation)
AJAX-Support
„Zusammenklicken“ mittels geeigneter Tools möglich
> Zentrales Konzept: Facelets
> Definieren XML-basierte view templates
> Erzeugen XHTML-Ausgabe
G. Mühl
Webbasierte Anwendungen / JEE
53
JSF Beispiel
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml“
xmlns:h="http://java.sun.com/jsf/html">
<h:head>…</h:head>
<h:body>
<h:form>
<fieldset>
<legend>User Login</legend>
User ID:
<h:inputText value="#{userBean.userId}"/><br/>
Password:
<h:inputSecret value="#{userBean.password}"/><br/>
<h:commandButton value="Show Start Page"
action="#{userBean.showStartPage}"/>
</fieldset>
</h:form>
login.xhtml
</h:body>
Button wird mit
wird über URL
</html>
Bean assoziiert
G. Mühl
login.jsf
angesprochen
Webbasierte Anwendungen / JEE
54
JSF Beispiel
Bean wird durch
Annotation deklariert
@ManagedBean
public class UserBean implements Serializable {
private String userId, password;
private User user;
public String getUserId() { return(userId); }
public void setUserId(String userId) { … }
public String getPassword() { … }
public void setPassword(String password) { … }
public User getUser() { … }
public void setUser() { … }
}
G. Mühl
public String showStartPage() {
user = UserLookup.getUser(userId);
if (user == null)
return("wrong-userid");
if (!user.password.equals(password)) {
return("wrong-password");
}
return("show-start");
}
Rückgabewert bestimmt
Seitennavigation
Webbasierte Anwendungen / JEE
55
JSF Beispiel
> show-start.xhtml
<h1>Welcome</h1>
<ul>
<li>First name: #{userBean.user.firstName}</li>
<li>Last name: #{userBean.user.lastName}</li>
<li>ID: #{userBean.user.id}</li>
</ul>
> wrong-userid.xhtml
<p>No user found with id "#{userBean.userId}“</p>
> wrong-password.xhtml
<p>Wrong password.
G. Mühl
Please try again.</p>
Webbasierte Anwendungen / JEE
56
faces-config.xml
<?xml version="1.0"?>
Aktuell dargestellte Seite
<faces-config version="2.0">
<navigation-rule>
<from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>wrong-userid</from-outcome>
<to-view-id>/page-for-wrong-userid.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>wrong-password</from-outcome>
<to-view-id>/page-for-wrong-password.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>show-start</from-outcome>
<to-view-id>/start-page.jsp</to-view-id>
</navigation-case>
Rückgabewert der Bean-Methode und
</navigation-rule>
zugeordnete, darzustellende Seite
</faces-config>
G. Mühl
Webbasierte Anwendungen / JEE
57
JSF Beispiel 2
<h:form id="bookForm">
<fieldset>
<legend>Book Info</legend>
ISBN Number of Book:
<h:inputText value="#{bookBean.isbn}"/><br/>
<h:commandButton value="Show Book Information"
action="#{userBean.showBookInfoPage}">
<f:ajax execute="@form"
render="bookForm:ajaxMessage"/>
</h:commandButton>
Formulardaten zum Server schicken
<br/>
und angegebenes Element aktualisieren
<h:outputText
value="#{bookBean.message}"
id="ajaxMessage"/>
</fieldset>
Zu aktualisierendes
</h:form>
Element
G. Mühl
Webbasierte Anwendungen / JEE
58
JSF Beispiel 2
@ManagedBean(name="bookBean")
@SessionScoped
public class ARX27 implements Serializable {
private String message;
private String isbn;
public String getmessage() {…}
public void setMessage(String message) {…}
public String getISBN() {…}
public void setISBN(String message) {…}
…
public String showBookInfoPage() {
Book book = db.lookupBook(isbn);
Durch Aktualisierung
if (book != null)
anzuzeigende Nachricht
message = book.getInfo();
else
message = "Sorry, book not found!"
return null;
}
…
}
G. Mühl
Rückgabewert null, da
gleiche Seite
Webbasierte Anwendungen / JEE
59
Facelet Templating
> Ermöglicht die Wiederverwendung von Faceletcode
> template-file-1.xhtml
<h:body>Content shared by all client files
<h2><ui:insert name="title">Default Title</ui:insert></h2>
More content shared by all clients
<ui:insert name="body">Default Body</ui:insert>
</h:body>
> client-file-1.xhtml
<ui:composition template="/templates/template-1.xhtml">
<ui:define name="title">Title text</ui:define>
<ui:define name="body">
Content to go in "body" section of template
</ui:define>
</ui:composition>
G. Mühl
Webbasierte Anwendungen / JEE
60
Literatur
1. Sun Microsystems, Inc., Java Server Faces Specification,
Version 2.0, 2009
> http://java.sun.com/javaee/javaserverfaces
G. Mühl
Webbasierte Anwendungen / JEE
61
Fragen?
G. Mühl
Webbasierte Anwendungen / JEE
62
Enterprise Java Beans (EJBs)
Enterprise Java Beans (EJBs)
Aktuelle
Version
3.1
> Server-side component model for multi-tier applications
> Not to be confused with Java Beans
> Client-side component model for desktop GUI and web components
> EJBs run in a container which servers as a runtime environment
within the Application Server
> Container provides transparent support for
>
>
>
>
>
>
Lifecycle Management
Naming
Persistence Management
Transactions
Security Mechanisms
…
⇒ Bean developer can concentrate on solving business problems
> Greatly “simplifies” the development of large, distributed applications
G. Mühl
Webbasierte Anwendungen / JEE
64
Two Types of EJBs
> Session beans
> Model business processes without persistent state
> Message-driven beans
> Execute on receipt of asynchronous messages
G. Mühl
Webbasierte Anwendungen / JEE
65
Session Beans
> Model business processes
> Are similar to interactive sessions
> Represent an interaction with a client
> Are not stored persistently
> Lifecycle controlled by the EJB container
> Can either be
> stateful (e.g. shopping cart) or
> stateless (e.g. calculate a discount)
across multiple invocations.
G. Mühl
Webbasierte Anwendungen / JEE
66
Stateless Session Beans
> Do not maintain a conversational state for the client
> No state that persists across method invocations
> Except during method invocation, all instances of a stateless
bean are equivalent
> EJB container can assign an instance to any client Æ pooling
> One bean can manage several clients
> Usually provide better performance and scalability than
stateful session beans
> Fewer beans can support the same number of clients
> Stateless session beans are never written to secondary storage
G. Mühl
Webbasierte Anwendungen / JEE
67
Stateful Session Beans
> Maintain a conversational state for one client
> Unique instance for each client
> State retained for the duration of the interaction
> May be written to secondary storage
> When client removes the bean or terminates, the session
ends and the state disappears
G. Mühl
Webbasierte Anwendungen / JEE
68
Message-Driven Beans
> Message-Driven Beans (MDBs) enable messaging in EJB
> The only EJBs that can receive messages asynchronously
> Designed for using Java Messaging Service (JMS)
> But can also support other messaging middleware through
Java Connector Architecture (JCA)
> Cannot be invoked directly
> Execute on the receipt of a single message
> onMessage() method is called
G. Mühl
Webbasierte Anwendungen / JEE
69
Message-Driven Beans
> Similar to stateless session beans wrt. several aspects
> they are stateless (but can call other session or entity beans)
> all instances of a MDB class are equivalent
> a message is delivered to any instance of a MDB class and
processed concurrently
> a single MDB can process messages from different sources
> Transactions, pooling, and message acknowledgement
usually handled by the container
G. Mühl
Webbasierte Anwendungen / JEE
70
Entities
> Model persistent business objects
(such as a customer, products, orders)
> Data-oriented objects that are stored persistently in a
database as a data record
> Long-living: survive a container crash
> Uniquely identified by a primary key (e.g. customer number)
> Enables the client to locate a particular entity bean
> Lifecycle independent of that of clients
> Potentially shared access by many clients Æ transactions
> Can have relations with other entities
G. Mühl
Webbasierte Anwendungen / JEE
71
Beispiel Stateless Session Bean
@Stateless
public class ConverterBean {
private BigDecimal euroRate =
new BigDecimal("1.43711");
Methode per JAX-WS
als Webservice bereitstellen
@WebMethod
public BigDecimal dollarToEuro(BigDecimal dollars) {
BigDecimal result = dollars.multiply(euroRate);
return result.setScale(2, BigDecimal.ROUND_UP);
}
}
@WebServlet
public class ConverterServlet extends HttpServlet {
@EJB
ConverterBean converter;
Servlet benutzt Session Bean
…
BigDecimal euroAmount =
converter.dollarToEuro(dollarAmount);
…
}
G. Mühl
Webbasierte Anwendungen / JEE
72
Beispiel Stateful Session Bean
1. Remote-Schnittstelle definieren
@Remote
public interface Cart {
public void initialize(String id)
throws BookException;
public void addBook(String title);
public void removeBook(String title)
throws BookException;
public List<String> getContents();
public void remove();
}
G. Mühl
Webbasierte Anwendungen / JEE
73
Beispiel Stateful Session Bean
2. Bean-Klasse implementieren
@Stateful
public class CartBean implements Cart {
String customerId;
List<String> contents;
public void initialize(String id) throws BookException {
IdVerifier idChecker = new IdVerifier();
if (idChecker.validate(id)) {
customerId = id;
} else {
throw new BookException("Invalid id: " + id);
}
contents = new ArrayList<String>();
}
G. Mühl
Webbasierte Anwendungen / JEE
74
Beispiel Stateful Session Bean
public void addBook(String title) {
contents.add(title);
}
public void removeBook(String title) throws BookException {
boolean result = contents.remove(title);
if (result == false) {
throw new BookException(title + " not in cart.");
}
}
public List<String> getContents() {
return contents;
}
@Remove
public void remove() {
contents = null;
}
}
G. Mühl
Webbasierte Anwendungen / JEE
75
Beispiel Entity
@Entity
public class Address {
protected long id
String street;
String city;
String zipCode;
Kennzeichnet Primary Key
@Id
public
public
public
public
{
…
long getId() { return id; }
void setId() { this.id = id; }
String getStreet() { return street; }
void setStreet(String street)
this.street = street; }
}
G. Mühl
Webbasierte Anwendungen / JEE
76
Object Relational Mapping
> Entities are mapped to tuples in database tables
_______Address_________
long getId()
void setId(long id)
String getStreet()
void setStreet(String street)
String getCity()
void setCity(String city)
…
G. Mühl
id
street
city
1
A-Street 5
London
2
B-Street 7
Berlin
3
X-Avenue 9
New York
Webbasierte Anwendungen / JEE
77
Bibliography
1. Sun Microsystems, Inc. Enterprise JavaBeans Specification,
Version 3.1, 2009
> http://java.sun.com/products/ejb
G. Mühl
Webbasierte Anwendungen / JEE
78
Fragen?
G. Mühl
Webbasierte Anwendungen / JEE
79
Herunterladen