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&auml;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