Webbasierte Anwendungen Organisatorisches Univ.-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! Gero Mühl Webbasierte Anwendungen / Organisatorisches 2 Dozent Name Univ.-Prof. Dr.-Ing. habil. Gero Mühl Adresse Architektur von Anwendungssystemen Fakultät für Elektrotechnik und Informatik Universität Rostock Albert-Einstein-Str. 22 Büro Telefon E-Mail WWW Sprechstunde Raum 267 0381 / 498 7621 [email protected] http://wwwava.informatik.uni-rostock.de Dienstag, 15:00 – 16:00 Uhr und nach Vereinbarung Gero 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? Gero 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. Gero 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. Gero 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 > Modulprüfung > voraussichtlich mündliche Prüfung > erfolgreiche Bearbeitung der Übungsaufgaben Voraussetzung für die Zulassung zur Prüfung Gero Mühl Webbasierte Anwendungen / Organisatorisches 7 Vorlesung > Freitag, 11-13 Uhr c.t., Raum SR 110, A.-Einstein-Str. 22, Beginn 19.10.12 > Folien teilweise in englischer Sprache > In der Regel (kurz) vor der Vorlesung im Stud.IP verfügbar > Vortrag auf Deutsch > Zwischenfragen erwünscht! > Prüfungsrelevante Inhalte können sich aus Diskussionen und Tafelanschrieben ergeben! > Auf Literatur wird im jeweiligen Foliensatz verwiesen > Kapitel in Büchern, Artikel in Zeitschriften oder Papiere bei Konferenzen und Workshops, Webseiten etc. Gero Mühl Webbasierte Anwendungen / Organisatorisches 8 Übung > Montag, 15-17 Uhr c.t., Raum SR 110, A.-Einstein-Str. 22, Beginn 22.10.10 > Inhalt > > > > > Vertiefung des Vorlesungsstoffes Rechenaufgaben Programmieraufgaben Kennenlernen von Produkten und Standards Vorbereitung auf die Abschlussprüfung > Übungsblätter im Stud.IP verfügbar Gero Mühl Webbasierte Anwendungen / Organisatorisches 9 Gliederung der Vorlesung 0 Organisatorisches 3 1 Einführung 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 1.1 Geschichte des Internets 1.2 Geschichte des WWW 2 Grundlagen 2.1 2.2 2.3 2.4 2.5 2.6 Netzwerk-Referenzmodelle Vermittlungsschicht Transportschicht Socket-Schnittstelle Zeichenkodierung Dienstgüteanforderungen Gero Mühl Webbasierte Anwendungen / Organisatorisches 10 Gliederung der Vorlesung 5 Client-seitige Techniken 7 5.1 5.2 5.3 5.4 JavaScript Ajax Java Applets Java RMI 7.1 Apache Wicket 7.2 Google Web Toolkit 6 Server-seitige Techniken 6.1 6.2 6.3 6.4 6.5 6.6 Common Gateway Interface PHP Java Servlets Java Server Pages Java Server Faces Enterprise Java Beans Gero Mühl Toolkits Webbasierte Anwendungen / Organisatorisches 11 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 Gero Mühl Webbasierte Anwendungen / Organisatorisches 12 AVA-Veranstaltungen im WS 2012/13 > Verteilte Informationssysteme (Bachelor WIN, 2IV = 3CP) > Integrierte Veranstaltung: dienstags, 13-15 Uhr c.t., Raum 037, A.-Einstein-Straße 22 Beginn 23.10.12 > Webbasierte Anwendungen (Bachelor, 2VL + 2UE = 6CP) > Vorlesung: freitags, 11-13 Uhr c.t., Raum SR 110, A.-Einstein-Straße 22, Beginn 19.10.12 > Übung: montags, 15-17 Uhr c.t., Raum SR 110, A.-Einstein-Str. 22 Beginn 22.10.12 Gero Mühl Webbasierte Anwendungen / Organisatorisches 13 AVA-Veranstaltungen im WS 2012/13 > KSWS Anwendungssysteme (Master, 2VL + 2Ü + 2P) > Vorlesung: dienstags, 11-13 Uhr c.t., A.-Einstein-Str. 3, Raum SR 204 Beginn 16.10.12 > Middleware-Konzepte (Master, 2VL = 3CP) > Vorlesung: donnerstags, 13-15 Uhr c.t., Raum SR 109, A.-Einstein-Str. 22 Beginn 18.10.12 Gero Mühl Webbasierte Anwendungen / Organisatorisches 14 Lehrangebot des Lehrstuhls AVA 1./2. Semester 4. Semester Veranstaltungen in Bachelor-Studiengängen Gero Mühl Algorithmen und Datenstrukturen Vortragsseminar Verteilte Informationssysteme Webbasierte Anwendungen 6./7. Semester Applikationsserver und Anwendungsintegration Literatur-/ Bachelor-Arbeit 1./2. Semester Verteilte Algorithmen MiddlewareKonzepte 1. oder 2. Semester KSWS Anwendungssysteme Projekt-Arbeit 3. Semester Master-Arbeit 5. Semester Veranstaltungen in Master-Studiengängen Abstrakte Datentypen Middleware-Konzepte / Organisatorisches 15 Forschung am Lehrstuhl AVA > Forschungsbereiche > > > > > > > > > Verteilte Anwendungssysteme Middleware, Algorithmen und Protokolle für verteilte Systeme Organic Computing und Selbstorganisation Energieeffizienter Betrieb von Rechensystemen Sekundärspeichersysteme mit neuartigen Speichergeräten Publish/Subscribe-Systeme Event-Driven Architecture (EDA) Complex Event Processing (CEP) Komposition von Webservices > Promotion > AVA bietet Stellen in Forschungsprojekten an > Ideale Vorbereitung: Abschlussarbeit im selben Themengebiet Gero Mühl Webbasierte Anwendungen / Organisatorisches 16 Studentische Arbeiten > Abschlussarbeiten haben immer Bezug zu den aktuellen Forschungsthemen des Lehrstuhls > Aufgabenstellung entsteht im Dialog, basierend auf Interessen und Vorkenntnissen des Studierenden > Bearbeitung der Aufgabenstellung mittels wissenschaftlicher Methoden steht im Vordergrund > Vorheriger Besuch von Lehrveranstaltungen des Lehrstuhls ist hilfreich, aber nicht Voraussetzung > Beispiele für mögliche Themen siehe AVA-Webseite > http://wwwava.informatik.uni-rostock.de/ava_studarb.html Gero Mühl Webbasierte Anwendungen / Organisatorisches 17 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Organisatorisches 18 Webbasierte Anwendungen Historie Univ.-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) Gero Mühl Webbasierte Anwendungen / Historie 2 Vom ARPANET zum Internet Gero Mühl Webbasierte Anwendungen / Historie 3 Historischer Hintergrund > 1957: Sowjetunion startet die ersten Satelliten Sputnik I + II > Sputnik-Schock 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 der USA > Förderung bestehender militärischer und universitärer Forschungseinrichtungen > Militärische Nutzbarkeit sowie wirtschaftliche Verwertbarkeit der Ergebnisse Gero Mühl Webbasierte Anwendungen / Historie 4 Der Weg zum ARPANET > 1961: Grundlegende Arbeiten von Leonard Kleinrock als PhD-Student am MIT zur Paketvermittlung und Warteschlangentheorie > 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) Gero Mühl Leonard. Kleinrock Joseph C:R. Licklider Lawrence G. Roberts Webbasierte Anwendungen / Historie 5 Design des ARPANETs > Unterscheidung der genutzten Rechner > Hosts sind die zu verbindenden Benutzerrechner (z.B. 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 > Nutzung angemieteter Leitungen mit 56 Kbps > Entwicklung von Übertragungs- und Steuerungsprotokollen > Host-to-Host-Protokoll > Host-to-IMP-Protokoll > IMP-to-IMP-Protokoll Gero Mühl Webbasierte Anwendungen / Historie 6 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 Gero Mühl Local Terminal H O S T Webbasierte Anwendungen / Historie 7 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 Gero Mühl Webbasierte Anwendungen / Historie 8 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) University of California in Los Angeles 2) Stanford Research Institute Gero Mühl Webbasierte Anwendungen / Historie 9 The Day the Infant Internet Uttered its First Words Excerpt from the IMP log at UCLA Gero Mühl Webbasierte Anwendungen / Historie 10 Wachstum des ARPANETs Gero 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 11 Wachstum des ARPANETs Gero Mühl Sep. 1973 (Verbindungen u.a. nach Hawaii, Norwegen, England) Jun. 1974 Jul. 1975 Jul. 1976 Webbasierte Anwendungen / Historie 12 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 und 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 Gero Mühl Robert E. (Bob) Kahn Vinton G. Cerf Webbasierte Anwendungen / Historie 13 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 Gero Mühl Webbasierte Anwendungen / Historie 14 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äisches X.25-Netz > Stetig steigender „TCP/IP-Druck“ aus den USA > 1989: Gründung des Réseaux IP Européens (RIPE) zur Netzkoordinierung Aufbau eines europäischen Backbones ähnlich wie NSFNet Gero Mühl Webbasierte Anwendungen / Historie 15 Struktur des Internets Gero Mühl Webbasierte Anwendungen / Historie 16 Das Netz der Netze – Logische Sicht Internet Subnetz Router, Gateway Gero Mühl Webbasierte Anwendungen / Historie 17 Das Netz der Netze – Physische Sicht Subnetz Router, Gateway Gero Mühl Webbasierte Anwendungen / Historie 18 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 Gero Mühl Webbasierte Anwendungen / Historie 19 Rechner im Internet Gero Mühl Webbasierte Anwendungen / Historie 20 Nutzer des Internet Gero Mühl Webbasierte Anwendungen / Historie 21 Nutzer des Internet Gero Mühl Webbasierte Anwendungen / Historie 22 Domänen im Internet Quelle: DENIC eG Gero Mühl Webbasierte Anwendungen / Historie 23 .de-Domänen im Internet Quelle: DENIC eG Gero Mühl Webbasierte Anwendungen / Historie 24 .de-Domänen im Internet Quelle: DENIC eG Gero Mühl Webbasierte Anwendungen / Historie 25 Quelle: DENIC eG Verteilung der .de-Domänen (absolut) Gero Mühl Webbasierte Anwendungen / Historie 26 Quelle: DENIC eG Verteilung der .de-Domänen (relativ) Gero Mühl Webbasierte Anwendungen / Historie 27 Quelle: CAIDA (Cooperative Association for Internet Data Analysis) Struktur des Internets (IPv4) Gero Mühl Webbasierte Anwendungen / Historie 28 Quelle: CAIDA (Cooperative Association for Internet Data Analysis) Struktur des Internets (IPv6) Gero Mühl Webbasierte Anwendungen / Historie 29 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 Gero Mühl Webbasierte Anwendungen / Historie 30 Evolution des World Wide Webs Gero Mühl Webbasierte Anwendungen / Historie 31 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 Gero Mühl Tim Berners-Lee Marc Andreessen Webbasierte Anwendungen / Historie 32 Webbrowser Gero Mühl Webbasierte Anwendungen / Historie 33 Webbrowser Marktanteile Gero Mühl Webbasierte Anwendungen / Historie 34 Webserver-Marktanteile Quelle: netcraft.com Gero Mühl Webbasierte Anwendungen / Historie 35 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) Gero Mühl Webbasierte Anwendungen / Historie 36 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 Gero Mühl Webbasierte Anwendungen / Historie 37 Exemplarische Fragen zur Lernkontrolle 1. 2. 3. 4. 5. Beschreiben Sie die historische Entwicklung des Internets! Welches Netz war der Vorläufer des Internets? Was unterschied das Internet vom damaligen Telefonnetz? Woher kommt der Begriff Internet? Beschreiben Sie die logische und die physische Sicht auf das Internet! 6. Erläutern Sie die Evolution des WWW von seinen Anfängen bis zu heutigen webbasierten Anwendungen! 7. Worin unterscheiden sich Internet und WWW bzw. welchen Dienst stellen beide jeweils bereit? 8. Beschreiben Sie den Unterschied zwischen statischen und dynamischen Webseiten! Gero Mühl Webbasierte Anwendungen / Historie 38 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Historie 39 Webbasierte Anwendungen Internet Protocol Suite (TCP/IP) Univ.-Prof. Dr.-Ing. habil. Gero Mühl Architektur von Anwendungssystemen (AVA) Fakultät für Informatik und Elektrotechnik (IEF) Universität Rostock Überblick > TCP/IP-Referenzmodell > Internetschicht > Transportschicht > Dienstgüte Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 2 TCP/IP-Referenzmodell Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 3 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 Gero 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 Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 5 Protokollhierarchien – Beispiel Gero Mühl Philosoph Philosoph/ÜbersetzerIn/ SekretärIn-Architektur I like rabbits. Nachricht J‘aime les lapins. 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. Webbasierte Anwendungen / Internet Protocol Suite 6 Protokoll > Ein Protokoll legt die Regeln und Konventionen fest, wie Schicht n der Maschine A mit Schicht n der Maschine B kommuniziert > Eine Protokollhierarchie (engl. Protocol Stack) besteht aus der Schichtung mehrerer Protokolle, bei der ein Protokoll der Schicht n > 1 auf dem Dienst aufbaut, den das Protokoll der Schicht n – 1 erbringt, ohne dessen Implementierungsdetails zu kennen > 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 Gero 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 Gero 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 Daten vom Sender zum Empfänger und vice versa übertragen werden > Oft wird Bandbreite für die Übertragung 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 Gero 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 > Zwei Variationen zuverlässiger Ende-zu-Ende Kommunikation: Nachrichtenfolgen und Byteströme Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 10 Kombinationsmöglichkeiten Leitungsvermittelt Paketvermittelt Verbindungslos Verbindungsorientiert Gero 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 Gero 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) Gero 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 Quelle: Wikipedia > Internet-Schicht/Internet-Protokoll (IP) > Verbirgt verschiedenste Netzwerke und Netztechnologien > Bildet Basis unterschiedlichster Dienste und Anwendungen Stundenglas-Architektur Gero 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) Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 15 TCP/IP – Kommunikationsbeispiel > Internet-Protokoll (IP) IP-Adresse 192.168.0.3 > IP-Adresse identifiziert Rechner > Transport-Protokoll (TCP, UDP) Applikation Port Mail-Client 50123 Browser 52987 > Port-Nummer identifiziert Dienst/Anwendung IP-Adresse 192.168.0.1 IP-Adresse 192.168.0.2 Applikation Port Browser 49654 Netz Client Gero Mühl Port 25 80 Dienst Mail WWW Server Webbasierte Anwendungen / Internet Protocol Suite 16 Fragen? Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 17 Internetschicht Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 18 INTERconnected NETworks > Internet = Verbund heterogener Netze mit Datenpaket-Transport zwischen beliebigen Rechnern US Backbone Europa Backbone Nationale Netze LAN LAN Gero 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. Gero 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 > Beispielsweise 139.30.5.204 > 5 Netzklassen: A, B, C, D und E 0 1 2 3 4 5 6 7 A 0 B 1 0 C 1 1 0 D 1 1 1 0 E 1 1 1 1 Gero Mühl 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 Gero 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 Gero 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 Gero 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 UND-Verknüpfung 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 Gero 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 Gero 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) Gero Mühl [RFC 1654] Webbasierte Anwendungen / Internet Protocol Suite 27 Fragen? Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 28 Transportschicht Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 29 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 Gero 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), die als IP-Paket versandt werden > Sliding Window Protocol zur Fehlerbehandlung und Flusskontrolle Gero 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) Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 32 Aufbau eines TCP-Pakets Header 24 8 16 Source Port Destination Port Sequence Number Acknowledgement Number HLen Flags Window Size Checksum Urgent Pointer 32 20 Byte 0 Options Body Gero 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 > > > > > > Gero 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 Gero 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 Gero 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 Gero 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 Timeout > 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-out-Intervalls (Jacobsen, 1988) Gero 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) Gero 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 Gero 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 Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 41 Empfängerfenster > Entspricht der Anzahl an Bytes, die der Empfänger bereit ist, maximal 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.) Gero 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) Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 43 Überlastungsfenster 8 4 2 1 R1 Gero 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 Gero 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 Gero 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 Gero 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 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 Gero Mühl 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 Gero 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. Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 50 Fragen? Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 51 Dienstgüte Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 52 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 Gero 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 > > > > Gero 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, Schwankungsbreite (Jitter), Bandbreite > Synchronisation (z.B. „Lippen-Synchronisation“ bei Videokonferenz) Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 55 Anwendungen und QoS-Parameter Gero 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 Senden > Pufferung beim Empfänger Ankunft > Gleicht Schwankungen aus > Üblich sind ca. 10 sec Pufferung Wiedergabe > Eingangssteuerung (engl. Admission Control) Übertra- Pufferung gungszeit > „Türsteher“ entscheidet, ob Datenstrom akzeptiert wird t > Verkehrsformung (engl. Traffic Shaping) > „Glätten“ des Datenstroms nach vorheriger Vereinbarung > Reservierung von Ressourcen Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 57 Verkehrsformung (Traffic Shaping) > Eine vorrangige Ursache für Überlastsituationen sind Verkehrsspitzen > Diese entstehen beispielsweise, wenn Rechner mit stark ungleichmäßig Rate senden > Ziel > Beeinflussung der sendenden Rechner, so dass sie gleichmäßiger senden und damit weniger Überlastsituationen auftreten > Vorgehen > Beim Sender werden Algorithmen ausgeführt, die den Verkehr formen Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 58 „Leaky Bucket“ > Begrenzt die maximale Senderate > Zu sendende Pakete kommen in den Eimer > Die Pakete verlassen Eimer mit konstanter Rate und werden gesendet > Eimer hat beschränkte Kapazität > Bei vollem Eimer werden Pakete verworfen > Implementierung des Eimers als Warteschlange Gero Mühl © Tanenbaum, Computer Networks 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 beim Senden ein Token > Bursts bis zu n Nachrichten gehen durch > Es werden keine Nachrichten verworfen, stattdessen wird der Sender blockiert Gero Mühl © Tanenbaum, Computer Networks Webbasierte Anwendungen / Internet Protocol Suite 60 Verkehrsformung > Ohne Verkehrsformung (a) > 2 MB/sec Leaky Bucket (b) > 2 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) > 2 MB/sec Token Bucket mit 500 KB Kapazität und nachfolgendem 10 MB/sec Leaky Bucket (f) © Tanenbaum, Computer Networks Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 61 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 Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 62 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 Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 63 Kombination von IntServ und DiffServ Subnetz A Backbone Subnetz B IntServ DiffServ IntServ > Endsysteme > Reservieren > Garantien Gero Mühl > Weitverkehr > Klassen zuteilen > Einfache - schnelle! Bearbeitung Webbasierte Anwendungen / Internet Protocol Suite 64 Exemplarische Fragen zur Lernkontrolle TCP/IP-Referenzmodell 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Gero Mühl Was ist ein Protokoll? Was ist eine Protokollhierarchie (engl.: protocol stack)? Aus welchen zwei Hauptbestandteilen besteht ein Paket? Welche Struktur hat ein Paket der Schicht n? Erklären Sie den Unterschied zwischen verbindungsorientierter und verbindungsloser Kommunikation! Erläutern Sie den Unterschied zwischen leitungsvermittelter und paketvermittelter Kommunikation! Erläutern/skizzieren Sie das TCP/IP-Referenzmodell! Nennen Sie Beispiele für Protokolle der einzelnen Schichten! Welchen Dienst erbringt eine Schicht der nächst höheren Schicht? Auf welcher Schicht arbeiten die Router bei TCP/IP? Welches ist die unterste Schicht mit Ende-zu-Ende Bedeutung? Webbasierte Anwendungen / Internet Protocol Suite 65 Exemplarische Fragen zur Lernkontrolle IP 1. 2. 3. 4. 5. 6. Welche Funktionalität bietet IP? Wie ist eine IPv4-Addresse aufgebaut? Was sind Klasse A/B/C-Netze? Was sind Subnetze und warum werden sie verwendet? Erläutern Sie das Konzept der Netzmasken! Wovon hängt die maximal mögliche Rechneranzahl in einem Subnetz ab? 7. Wie viele Rechner unterstützt ein Subnetz mit der Maske 255.255.255.128? Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 66 Exemplarische Fragen zur Lernkontrolle TCP und UDP 1. 2. 3. 4. 5. Welchen Dienst bietet TCP bzw. UDP? Unterstützt TCP Multikast-Kommunikation? Was ist ein Port? Erläutern Sie das Sliding Window Protocol! Wie wird verhindert, dass interaktive Anwendungen wie z.B. Telnet zu enormen Datenverkehr durch sogenannte Tinygrams führen? 6. Wie wird bei TCP vermieden, dass ein schneller Sender den Empfänger überlastet? Zu welchen Problemen kann dieser Mechanismus führen? 7. Warum sind zu kurze und zu lange Timeouts beim TCP Retransmission Timer problematisch? Erläutern Sie den Vorschlag von Karn! Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 67 Exemplarische Fragen zur Lernkontrolle Dienstgüte 1. Was versteht man unter Dienstgüte? 2. Nennen Sie Beispiele für Netzwerkeigenschaften, die die Dienstgüte beeinflussen können! 3. Welche Garantien gibt das Internet? 4. Warum hat der Empfänger einen Puffer z.B. beim Abspielen eines Films? 5. Was versteht man unter Verkehrsformung? 6. Erläutern sie die Funktion eines Leaky Buckets bzw. eines Token Buckets? 7. Vergleichen Sie IntServ mit DifServ! Auf welchen Annahmen beruhen beiden Ansätze? Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 68 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Internet Protocol Suite 69 Webbasierte Anwendungen Socket-Programmierung Univ.-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 Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 2 Socket-Schnittstelle Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 3 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) Gero 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, … Gero 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() Gero 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(); Gero 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 Gero 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(); Gero 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 Gero 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() Welche Ausgabe erzeugt das Programm? public class SimpleThread1 extends Thread { public void run() { System.out.println("World!"); } public static void main(String[] args) { new SimpleThread1().start(); System.out.print("Hello "); } } Gero 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 “); } } Gero 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) { ... while (true) { Socket client = serverSocket.accept(); new MultithreadedEcho(client).start(); } } } Gero Mühl Eingehende Verbindungen akzeptieren und in neuem Thread behandeln. 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 aufwändigem 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 Gero 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)); Gero 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 Gero 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 folgenden Werten > SelectionKey.OP_READ > SelectionKey.OP_WRITE > SelectionKey.OP_CONNECT > SelectionKey.OP_ACCEPT Gero 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 Gero 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 ... } } Gero 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) ); } Gero 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)); } } Gero 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(); } Gero 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. Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 23 Fragen? Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 24 Zeichenkodierung Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 25 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) Gero 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 Gero 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 Gero 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 8… …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C 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). Gero 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 8… …1 …2 …3 …4 …5 …6 …7 …8 …9 …A …B …C 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). Gero 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, … Gero 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 Gero 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() Gero 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) Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 34 Literatur > Registrierte Character Sets > http://www.iana.org/assignments/character-sets > Unicode > http://unicode.org/ Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 35 Exemplarische Fragen zur Lernkontrolle Sockets 1. Was ist ein Socket? 2. Worin besteht der Unterschied zwischen einem Server- und einem Client-Socket? 3. Erläutern Sie die prinzipielle Vorgehensweise bei der Socket-Programmierung in Java! 4. Was sind die wesentlichen Unterschiede zwischen dem klassischen Vorgehen unter Java und dem Java New I/O? Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 36 Exemplarische Fragen zur Lernkontrolle Zeichenkodierungen 1. Erläutern Sie die Begriffe Zeichenvorrat, Zeichensatz und Zeichenkodierung! 2. Welche Probleme können auftreten, wenn Kommunikationspartner (unwissentlich) unterschiedliche Zeichensätze oder Zeichenkodierungen verwenden? 3. Was versteht man unter Unicode? 4. Worin unterscheiden sich UTF-8, UTF-16 und UTF-32? 5. Wie werden Zeichensätze in Java unterstützt? Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 37 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Socket-Programmierung 38 Webbasierte Anwendungen Grundlegende Dienste Univ.-Prof. Dr.-Ing. habil. Gero Mühl Architektur von Anwendungssystemen (AVA) Fakultät für Informatik und Elektrotechnik (IEF) Universität Rostock Überblick > Domain Name Service (DNS) > E-Mail > File Transfer Protocol (FTP) > Secure Shell (SSH) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 2 Domain Name Service (DNS) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 3 Domain Name Service (DNS) > Dienst zur Abbildung von Namen auf IP-Adressen > Hierarchisches Domänen-Konzept > Domänen unabhängig von physischen Netzen > Beispiel: informatik.uni-rostock.de > uni-rostock ist Subdomain von de > Syntax der Namen > <256 Zeichen, Teile <64 Zeichen > Groß-/Kleinschreibung unerheblich > Skalierbarkeit von DNS beruht auf > Replikation Robustheit > Caching Performance > Hierarchische Organisation dezentrale Namensvergabe Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 4 DNS – Top Level Domains > Organisatorisch COM, EDU, GOV, MIL, ORG, NET, INT, ... > Geographisch DE, UK, US, AU, TO, ... root ibm com edu ... ... purdue ... ee db Gero Mühl cs ... ai de org uni-rostock ... Top Level Domains heise informatik … ... ... Webbasierte Anwendungen / Grundlegende Dienste 5 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 zur Erhöhung der Zuverlässigkeit > Jeder Name Server kennt mindestens einen übergeordneten Server > Primary Name Server kennen die Root Name Server root com ibm ... princeton ee cs db Gero Mühl ... edu org uni-rostock ... ... ai de ... informatik … ... heise physik ... Webbasierte Anwendungen / Grundlegende Dienste 6 Datenbank im Name Server > Speicherung der Abbildungsinformationen > Einträge heißen Resource Records (RR) > 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) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 7 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 8 Beispiel > dig +nocmd uni-rostock.de any +multiline +noall +answer uni-rostock.de. 86400 IN A 139.30.8.152 uni-rostock.de. 86400 IN A 139.30.8.153 uni-rostock.de. 86400 IN A 139.30.8.196 uni-rostock.de. 86400 IN A 139.30.8.197 uni-rostock.de. 86400 IN A 139.30.8.29 uni-rostock.de. 86400 IN NS ws-kar1.win-ip.dfn.de. uni-rostock.de. 86400 IN NS top.uni-rostock.de. uni-rostock.de. 86400 IN NS hp1.uni-rostock.de. uni-rostock.de. 86400 IN NS deneb.dfn.de. uni-rostock.de. 86400 IN SOA top.uni-rostock.de. hostmaster.uni-rostock.de. ( 2010110801 ; serial 28800 ; refresh (8 hours) 7200 ; retry (2 hours) 604800 ; expire (1 week) 172800 ; minimum (2 days) ) uni-rostock.de. 86400 IN MX 26 ida.uni-rostock.de. uni-rostock.de. 86400 IN MX 11 antivirus.uni-rostock.de. Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 9 Namensdienst .edu > Iterative Kooperation der Name Server > Beispiel Root Name Server 2 3 .princeton.edu 1 4 cicada.cs.princeton.edu Client 128.112.136.60 8 Princeton Lokaler cicada.cs.princeton.edu Name Name cs.princeton.edu, 128.112.136.10 Server Server 5 6 Gero Mühl Caching des Ergebnisses im lokalen Name Server Bereinigung des Caches entsprechend der Time-to-Live des Eintrags 7 .cs.princeton.edu CS Name Server Webbasierte Anwendungen / Grundlegende Dienste 10 Namensdienst > Beispiel: E-Mail an „[email protected]“ Benutzer [email protected] 2 cs.princeton.edu Name Server 1 Mail program Program 3 128.112.136.15 Die Anwendung, nicht TCP, löst den Namen auf! 128.112.136.15 4 TCP 128.112.136.15 5 IP Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 11 E-Mail Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 12 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, … Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 13 Simple Mail Transfer Protocol (SMTP) > > > > Spezifiziert in RFC 821 bzw. RFC 2821 Einfaches ASCII-Protokoll Auslieferung von Mail über TCP-Verbindung (Port 25) Der Absender (= SMTP Client) kommuniziert mit dem SMTP Daemon des Empfängers (= SMTP Server) > Client-Kommandos (Text) > HELO, MAIL FROM, DATA, QUIT, ... > Server-Antworten (Ziffern + Text) > > > > Gero Mühl 220 (= service ready) 250 (= other party OK) 354 (= send mail) .... Webbasierte Anwendungen / Grundlegende Dienste 14 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 15 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 > > > > > > > Gero 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 16 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) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 17 Motivation für MIME > 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) > > > > Gero Mühl Vorgeschlagen RFC 1341 und überarbeitet in weiteren RFCs 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 18 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.) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 19 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 20 Quoted-Printable [RFC 2045] Hüte H=FCte (Latin-1) (Quoted-Printable) > 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 21 Base64 [RFC 2045] Hüte SPx0ZQ== (Latin-1) (Base64) > 3 Oktetts (24 Bits) werden in vier 6-Bit-Einheiten zerlegt 26 = 64 Werte > Jede 6-Bit-Einheit erhält nach ihrem Wert ein Zeichen > 0 A, 1 B, …, 25 Z, > 26 a, 27 b, …, 51 z, > 52 0, 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) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 22 Base64 Beispiel Text M a n ASCII 0x4D (77) 0x61 (97) 0x6E (110) Bit Pattern Index Base64 Gero Mühl 010011010110000101101110 0x13 (19) 0x16 (22) T W 0x05 (5) 0x2E (46) F u Webbasierte Anwendungen / Grundlegende Dienste 23 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) / Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 24 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 Beschreibung text html HTML-Dateien plain Reintext jpeg JPEG-Dateien png PNG-Dateien audio basic Sound-Dateien video mpeg MPEG-Dateien octet-stream Unbekannte Anwendungsdaten postscript Postscript external-body Nachricht referenziert externen Inhalt partial Nachricht mit Teilinhalt rfc822 Nachricht nach RFC 2822 alternative Mehrteilige Daten alternativ digest Mehrteilige Daten auswahl mixed Mehrteilige Daten gemischt parallel Mehrteilige Daten parallel image application message multipart Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 25 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 Gero Mühl Beschreibung x-dvi DVI-Dateien x-framemaker Framemaker-Dateien x-gzip gzip-Archive x-latex Latex-Dateien x-shockwave-flash Adobe Flash-Dateien x-tar tar-Archive x-ms-wma Windows Media Audio x-wav WAV Dateien x-ms-wmv Windows Media Video Webbasierte Anwendungen / Grundlegende Dienste 26 Multipart Beispiel (Message Parts) MIME-Version: 1.0 Eine eindeutige Zeichenkette als From: Alice Alisson <[email protected]> Begrenzer trennt einzelne TO: Bob Bobington <[email protected]> Nachrichtenteile voneinander ab. 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. Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 27 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= Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 28 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 29 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) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 30 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 Transport-Mechanismus der Verbindung > Beispiel Properties props = new Properties(); props.setProperty("mail.smtp.host", "mail.cs.tu-berlin.de"); Session session = Session.getDefaultInstance(props); Message msg = new MimeMessage(session); … Transport.send(msg); Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 31 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); Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 32 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); Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 33 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)); Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 34 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/ Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 35 File Transfer Protocol (FTP) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 36 File Transfer Protocol (FTP) [RFC 959] > Ermöglicht den Transfer von 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 dabei im Klartext übertragen > Bietet interaktiven Zugang als auch Programmierschnittstelle > Verschiedene Datenformate (ASCII und binär) Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 37 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 38 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 $ Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 39 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 Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 40 Telnet, SSH Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 41 Telnet [RFC 854] > Telnet liefert interaktiven Terminalzugang über das Netz > Unsicher, da Daten, Benutzerkennungen und Passwörter im Klartext übertragen werden Secure Shell (SSH) > 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 Gero Mühl Betriebssystem Webbasierte Anwendungen / Grundlegende Dienste 42 SSH [RFC 4250-4254] > Sicherer Ersatz für Telnet (TCP / Port 22) > SSH Suite 1. 2. 3. 4. 5. 6. ssh: "shell" that connects to the remote machine. scp: batch file transfers. sftp: interactive file transfers. ssh-keygen: generates private-public authentication keys ssh-copy-id: copies public key to remote host. ssh-agent: daemon used to automate client's authentications 7. ssh-add: loads private keys into ssh-agent process 8. ssh-keyscan: get public key of remote host 9. sshd: a server program running on the remote machine > Bekannte Implementationen: openSSH, PuTTY Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 43 SSH – Einloggen ohne Passworteingabe > Schlüsselpaar (öffentlicher und privater Schlüssel) mit nicht-leerer Passphrase erzeugen > ssh-keygen –t dsa > Öffentlichen Schlüssel auf entferntem Host hinterlegen > ssh-copy-id [-i identity_file] [user@]machine > Passphrase im ssh-agent hinterlegen (z.B. beim Start von X) > ssh-add [identity_file] > Einloggen ohne Passwort > ssh [-i identity_file] [user@]machine Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 44 SSH – Tunnel / Local Port Forwarding > Einrichtung einer Weiterleitung eines lokalen Ports an einen entfernten Port > ssh -g -N -L 50022:public_host:22 user@public_host > Nutzung der Weiterleitung bewirkt Anmeldung auf Rechner public_host > ssh –p 50022 user@private_host Port 50022 Port 22 private_host Gero Mühl public_host Webbasierte Anwendungen / Grundlegende Dienste 45 SSH – Tunnel / Remote Port Forwarding > Einrichtung einer Weiterleitung eines entfernten Ports auf einen lokalen Port > ssh -g -N -R 50023:localhost:22 user@public_host > Nutzung der Weiterleitung bewirkt Anmeldung auf Rechner private_host > ssh –p 50023 user@public_host Port 22 Port 50023 private_host Gero Mühl public_host Webbasierte Anwendungen / Grundlegende Dienste 46 Jakarta Commons Net Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 47 Jakarta Commons Net > Sammlung von Java-Klassen unter Open Source-Lizenz für den Bereich Internetprotokolle http://commons.apache.org/net > Unterstützte Protokolle > > > > > > Gero Mühl FTP/FTPS NNTP SMTP POP3 Telnet … Webbasierte Anwendungen / Grundlegende Dienste 48 Exemplarische Fragen zur Lernkontrolle DNS und E-Mail 1. Erläutern Sie den Zweck und die Funktionsweise von DNS! 2. Worin besteht der Unterschied zwischen einer rekursiven und einer iterativen DNS-Anfrage? 3. Warum besitzen gecachte DNS-Einträge eine begrenzte Lebensdauer? 4. Welche Faktoren tragen wesentlich zur Skalierbarkeit von DNS bei? 5. Erläutern sie die Funktionsweise von E-Mail? 6. Was ist SMTP und welche Eigenschaften hat dieses Protokoll? 7. Was versteht man unter „Store-and-Forward“? 8. Aus welchen Teilen besteht eine E-Mail? Erläutern Sie MIME! 9. Erklären Sie Quoted Printable sowie Base64! Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 49 Exemplarische Fragen zur Lernkontrolle Telnet, FTP, SSH 1. 2. 3. 4. Was ist Telnet? Was ist FTP? Warum sind Telnet und FTP nicht sicher? Wie viele Verbindungen werden bei einem FTP-Transfer aufgebaut und wozu dienen diese? 5. Was ist SSH und welche Funktionalität umfasst die SSH-Suite? 6. Erläutern Sie die Anwendungsfälle von SSH-Tunneln! 7. Worin besteht der Unterschied zwischen Local Port Forwarding und Remote Port Forwarding? Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 50 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Grundlegende Dienste 51 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 > Architektur des World Wide Web (WWW) > Hypertext Transfer Protocol (HTTP) > Hypertext Markup Language (HTML) > Cascading Style Sheets (CSS) Gero Mühl Webbasierte Anwendungen / World Wide Web 2 Architektur des WWW Gero Mühl Webbasierte Anwendungen / World Wide Web 3 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 > > > > Gero 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 Gero Mühl Webclient (HTTP-Client) … Webserver (HTTP-Server) 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 Gero Mühl > Lynx > Emacs Clients ohne Darstellung > wget > cURL Webbasierte Anwendungen / World Wide Web 6 Webserver > Exemplarische Produkte > Apache, Microsoft Internet Information Services (IIS) > Meist über TCP-Port 80 erreichbar > Normalerweise eine TCP-Verbindung pro HTTP-Auftrag > Für die Übertragung von eingebetteten Bildern, Audio, Video, etc. werden zusätzliche TCP-Verbindungen aufgebaut > Typische Fehlermeldungen > 401 > 404 > 500 Gero Mühl unauthorized // keine Zugangsberechtigung not found // Dokument nicht gefunden server error // Fehler mit Fehlermeldung Webbasierte Anwendungen / World Wide Web 7 Webserver Log-Dateien > Server sammeln statistische Zugriffsinformationen > Erstellung von Nutzungsprofilen möglich Datenschutz > Access Log > Pro HTTP-Anfrage eine Zeile > 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 8 Laden und Anzeigen einer Webseite > Ausgangspunkt: Eingabe der URL einer Seite im Webbrowser 1. Verbindungsaufbau zwischen Webbrowser und Webserver 2. Browser schickt HTTP-Anfrage an den Server 3. Server liefert HTTP-Antwort mit HTML-Dokument bzw. einem Fehlercode zurück 4. Browser interpretiert HTML-Dokument und zeigt es an 5. Schließen der Verbindung > Beim Klicken auf einen Link (= URL) läuft der gleiche Vorgang mit der neuen URL ab Gero Mühl Webbasierte Anwendungen / World Wide Web 9 WWW Proxy GET … HTTP/1.1 … HTTP Client Cache Proxy HTTP Server > Wird zwischen Webbrowser (Client) und Server geschaltet > Einstellung in Browser-Konfiguration > Leicht geändertes Format im Request (komplette URL mit Hostname wird gesendet) > Proxy (englisch für Bevollmächtigter, Stellvertreter) kann Seiten cachen, filtern, protokollieren > Schnellerer Zugriff, mehr Sicherheit, Schutz vor ungewünschten Inhalten, Ermöglichen einer Strafverfolgung, ... Gero Mühl Webbasierte Anwendungen / World Wide Web 10 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 > Beispiel für Protokolle: http, ftp, file, news, telnet, mailto > Parameter können als Query am Ende übergeben werden > Beispiel http://kbs.cs.tu-berlin.de/cgi-bin/anmeldung.cgi?LV=WBA Protocol Host Name [ :Port ] [Path (and File Name)] Gero Mühl [Query] Webbasierte Anwendungen / World Wide Web 11 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 12 URL Beispiele > http://wwwava.informatik.uni-rostock.de > http://www.mit.edu:8001/people/dshapiro/macsites.html > http://www.google.de/search?q=ava+uni+rostock > file://WWW/beispiel.html > ftp://ftp.cs.mit.edu/README > telnet://[email protected]/ > mailto:[email protected] Gero Mühl Webbasierte Anwendungen / World Wide Web 13 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_ko dierung_de.html Gero Mühl Webbasierte Anwendungen / World Wide Web 14 Fragen? Gero Mühl Webbasierte Anwendungen / World Wide Web 15 Hypertext Transfer Protocol (HTTP) Gero Mühl Webbasierte Anwendungen / World Wide Web 16 Hypertext Transfer Protocol (HTTP) > Textbasiertes Protokoll (Encoding: US-ASCII) zum Transfer von Dateien (hauptsächlich) vom Webserver zum Webclient > Spezifiziert in RFC 1945 (HTTP 1.0) und RFC 2616 (HTTP 1.1) > Ist trotz seines Namens nicht auf den Transport von HTML-Dokumenten beschränkt > Setzt meist auf TCP auf, Standard lässt auch anderes zu > Benutzt Elemente von MIME Deklaration des Medientyps Gero Mühl Webbasierte Anwendungen / World Wide Web 17 Hypertext Transfer Protocol (HTTP) > Folgt Request/Response-Interaktion > Zugriff stets vom Client initiiert HTTP-Request > Server antwortet mit HTTP-Response > HTTP ist zustandslos > Aufeinanderfolgende HTTP-Zugriffe sind voneinander unabhängig > HTTP-Server merkt sich über eine HTTP-Interaktion hinaus keine Daten für einen Client > Wichtige Einschränkung für komplexere Anwendungen > Zustand muss daher oberhalb von HTTP realisiert werden Gero Mühl Webbasierte Anwendungen / World Wide Web 18 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 Ende des Headers > Jedes Zeilenende wird mit <CR><LF> kodiert (Java-String: "\r\n") > Body > Inhalt (z.B. für POST-Methode) Gero Mühl Webbasierte Anwendungen / World Wide Web 19 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 20 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 MIME-Type Accept: text/xml,application/xml,application/xhtml+xml, 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 Charset Connection: keep-alive\r\n Pragma: no-cache\r\n Cache-Control: no-cache\r\n Gero Mühl Webbasierte Anwendungen / World Wide Web 21 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 22 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 23 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 MIME-Type Content-Length: 8144\r\n 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 24 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 25 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"); Gero Mühl Webbasierte Anwendungen / World Wide Web 26 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()); Gero Mühl // // // // // // // http www.kbs.tu-berlin.de 80 /index.html?lang=en /index.html lang=en info Webbasierte Anwendungen / World Wide Web 27 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(); Gero Mühl Webbasierte Anwendungen / World Wide Web 28 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.tuberlin.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 Gero Mühl Webbasierte Anwendungen / World Wide Web 29 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) Gero Mühl Webbasierte Anwendungen / World Wide Web 30 Senden von Daten > Setzen von Header-Feldern vor Verbindungsaufbau > public void setRequestProperty (String fieldName, String value) > Belegt das Header-Feld fieldName mit dem Wert value > Senden der Daten vorbereiten > public void setDoOutput(boolean dooutput) > Ausgabestrom zum Senden von Daten > public OutputStream getOutputStream() > Liefert Ausgabestrom zur Datenübertragung zum Server Gero Mühl Webbasierte Anwendungen / World Wide Web 31 Beispiel URLConnection String stringToReverse = URLEncoder.encode(args[1], "UTF-8"); URL url = new URL(args[0]); // "http://<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(); Gero Mühl Webbasierte Anwendungen / World Wide Web 32 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 Statustext > Erzeugung (durch Casting einer URLConnection) URL url; HttpURLConnection http; url = new URL("http://www.tu-berlin.de"); http = (HttpURLConnection)(url.openConnection()); Gero Mühl Webbasierte Anwendungen / World Wide Web 33 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(); Gero Mühl Webbasierte Anwendungen / World Wide Web 34 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/ Gero Mühl Webbasierte Anwendungen / World Wide Web 35 Fragen? Gero Mühl Webbasierte Anwendungen / World Wide Web 36 HTTPS Gero Mühl Webbasierte Anwendungen / World Wide Web 37 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 vom 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 38 HTTPS Verbindungsaufbau Zertifikat der CA 1 Prüfung der Signatur des Webserver-Zertifikats 3 https://www.example.com 2 Übertragung des Privater Schlüssel des Webservers Webserver-Zertifikats Öffentlicher Schlüssel des Webservers 4 Erzeugung des Sitzungsschlüssels Webbrowser des Clients Gero 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 39 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 40 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 41 SocketFactory & ServerSocketFactory > Klassen javax.net.ssl.SSLSocketFactory und javax.net.ssl.SSLServerSocketFactory > 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 42 SSLSocket und SSLServerSocket > Klassen javax.net.ssl.SSLSocket und javax.net.ssl.SSLServerSocket > 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 43 Beispiel SSLSockets ... int port = 443; Default Socket Factory holen SSLServerSocketFactory sslFactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); ServerSocket sslServerSocket = sslFactory.createServerSocket(port); Socket client = sslServerSocket.accept(); Sicherer Server- bzw. Client-Socket InputStream in = client.getInputStream(); OutputStream out = client.getOutputStream(); ... Gero Mühl Webbasierte Anwendungen / World Wide Web 44 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 45 Beispiel SSLSockets > keytool -list -v -keystore ClientTruststore –storepass abcdef 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 ******************************************* ******************************************* Gero Mühl Webbasierte Anwendungen / World Wide Web 46 Beispiel SSLSockets > Server starten > java -Djavax.net.ssl.keyStore=ServerKeystore -Djavax.net.ssl.keyStorePassword=123456 EchoServerSSL > Client starten > java -Djavax.net.ssl.trustStore=ClientTruststore -Djavax.net.ssl.trustStorePassword=abcdef EchoClientSSL Gero Mühl Webbasierte Anwendungen / World Wide Web 47 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 > Gero Mühl http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSE RefGuide.html Webbasierte Anwendungen / World Wide Web 48 Fragen? Gero Mühl Webbasierte Anwendungen / World Wide Web 49 HTTP Session Management Gero Mühl Webbasierte Anwendungen / World Wide Web 50 Zustandsbehaftete Anwendungen > HTTP ist ein zustandsloses 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 51 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? Gero Mühl Webbasierte Anwendungen / World Wide Web 52 Realisierungsmöglichkeiten von Sitzungen 1. Versteckte Felder eines HTML-Formulars > Server schreibt Daten in versteckte Formularfelder der generierten dynamischen 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 53 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 erfolgt hier auf HTML-Ebene > Einfache Realisierung > Benutzer bewegt sich von Formular zu Formular Gero Mühl Webbasierte Anwendungen / World Wide Web 54 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 55 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 4 KB > mind. 20 Cookies pro Domäne > mind. 300 Cookies insgesamt Gero Mühl Webbasierte Anwendungen / World Wide Web 56 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 > Version 1 ist die ursprüngliche von Netscape set-cookie > Version 2 die aktuelle set-cookie2 Gero Mühl Webbasierte Anwendungen / World Wide Web 57 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 Request-URI mit gespeicherten Cookies > Sendet alle für Domäne und Pfad passende Cookies im Cookie Header des HTTP(S)-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 Gero Mühl Webbasierte Anwendungen / World Wide Web 58 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? Gero Mühl Webbasierte Anwendungen / World Wide Web 59 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 new request URL url = new URL("http://www.a.com/secret.html"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("Cookie", sessionId); obj = conn.getContent(); Gero Mühl Webbasierte Anwendungen / World Wide Web 60 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(); Gero Mühl Webbasierte Anwendungen / World Wide Web 61 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 62 Fragen? Gero Mühl Webbasierte Anwendungen / World Wide Web 63 Hypertext Markup Language (HTML) Gero Mühl Webbasierte Anwendungen / World Wide Web 64 Hypertext Markup Language (HTML) > Textbasierte Auszeichnungssprache zur Beschreibung von Dokumenten > Beschreibt logische Struktur eines Dokuments > 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 Layout-Definitionen 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 65 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 wurde Ende 2009 zugunsten von HTML 5.0 eingestellt > Validation (Prüfung der Konformität zum Standard) > W3C-Online-Validator [http://validator.w3.org] Gero Mühl Webbasierte Anwendungen / World Wide Web 66 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 67 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> Gero 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 68 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 69 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 --> Gero Mühl Webbasierte Anwendungen / World Wide Web 70 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> Gero Mühl Eins Zwei Drei One Two Three Webbasierte Anwendungen / World Wide Web 71 Listen > Aufzählung <ul> <li>HTML</li> <li>XHTML</li> <li>XML</li> </ul> > Nummerierung <ol> <li>Erstens</li> <li>Zweitens</li> </ol> Gero Mühl • HTML • XHTML • XML 1. Erstens 2. Zweitens Webbasierte Anwendungen / World Wide Web 72 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 73 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"> Zeichenkodierung ... der Formulardaten </form> > Formulareingaben per POST versenden <form action="mailto:[email protected]" method="post" enctype="text/plain"> ... Formulardaten </form> als E-Mail verschicken Gero Mühl Webbasierte Anwendungen / World Wide Web 74 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 75 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 76 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 77 Formulare V > Dateien hochladen Vorgeschrieben <form action="file.cgi" method="post" für Dateiuploads 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"> Gero Mühl Webbasierte Anwendungen / World Wide Web 78 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; charset=ISO-8859-1 ... vorname=Gero&nachname=M%FChl Gero Mühl Webbasierte Anwendungen / World Wide Web 79 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-- Gero Mühl Webbasierte Anwendungen / World Wide Web 80 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 81 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="Inhalt"> Gero Mühl Webbasierte Anwendungen / World Wide Web 82 Eingebettete Frame (Inline Frames) > Erzeugen keine direkt Aufteilung des Browserfensters, sondern Bereiche innerhalb Webseite, in denen fremde Quellen (z.B. HTMLDokumente, -Schnipsel, Bilder etc.) angezeigt werden können <html> <head> ... </head> <body> ... <iframe src="frame.html" width="90%" height="100" name="a_frame"> <p>Ihr Browser kann leider keine eingebetteten Frames anzeigen</p> </iframe> ... </body> Gero Mühl Webbasierte Anwendungen / World Wide Web 83 Eingebettete Frame (Inline Frames) > frame.html <H2>Inline Frame</H2> <p>Hier ein bisschen Text.</p> Gero Mühl Webbasierte Anwendungen / World Wide Web 84 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 85 Objekte einbetten > Alternativ Einbindung von HTML-Code <object data="frame.html" type="text/html"> Ihr Browser kann das Objekt leider nicht anzeigen! </object> Gero Mühl Webbasierte Anwendungen / World Wide Web 86 Fragen? Gero Mühl Webbasierte Anwendungen / World Wide Web 87 Cascading Style Sheets (CSS) Gero Mühl Webbasierte Anwendungen / World Wide Web 88 Cascading Style Sheets (CSS) > Ergänzender Standard zu HTML > Aktuelle Version CSS 2.1 http://www.w3.org/TR/CSS2 > Working Drafts zu CSS 3 Modulen flexibler, modularer Aufbau > Definieren die Formatierung der HTML-Elemente in einer Webseite > 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 > Auswahl der HTML-Elemente auf die sich eine Formatierung auswirkt mittels Selektoren > W3 Validator http://jigsaw.w3.org/css-validator Gero Mühl Webbasierte Anwendungen / World Wide Web 89 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 90 Einbindung CSS-Datei und Inline-Definition <html> <head> <title>Titel der Datei</title> <link rel="stylesheet" type="text/css“ href="style.css"> Inhalt des style-Elements <style type="text/css"><!-in HTML-Kommentar für h1 { font-size:48pt; } --> ältere Browser, die kein </style> CSS verstehen </head> <body> <p class="normal" style="color:#FF0000;"> Element-bezogene Definition </p> </body> </html> Gero Mühl Webbasierte Anwendungen / World Wide Web 91 Formatierung je nach Ausgabemedium > Viele Webseiten sehen nur auf dem Bildschirm gut aus, lassen sich aber nicht vernünftig 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> Gero Mühl Webbasierte Anwendungen / World Wide Web 92 CSS Selektoren > > > > > * E E.c #myid EF > E>F > E~F > E+F Gero Mühl Selektiert jedes Element Selektiert jedes Element vom Typ E Selektiert jedes Element der Klasse c Selektiert das Element mit der ID myid Selektiert jedes Element F, das ein Nachfahre von Element E ist Selektiert jedes Element F, das ein Kind von E ist Selektiert jedes Element F, das einen Vorgänger E auf gleicher Ebene hat Selektiert jedes Element F, das einen direkten Vorgänger E auf gleicher Ebene hat Webbasierte Anwendungen / World Wide Web 93 CSS Selektoren > E:first-child Selektiert ein Element E, wenn es das erste Kind des direkten Vorfahren ist > E[foo] Selektiert jedes Element E, bei dem das foo-Attribut gesetzt ist (unabhängig vom Wert) > E[foo=bar] Selektiert jedes Element E, bei dem das foo-Attribut mit dem Wert bar gesetzt ist > E[foo^=bar] Selektiert jedes Element E, bei dem das foo-Attribut mit dem Wert bar beginnt > E[foo$=bar] Selektiert jedes Element E, bei dem das foo-Attribut mit dem Wert bar endet > E[foo*=bar] Selektiert jedes Element E, bei dem das foo-Attribut den Wert bar enthält Gero 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="mitarbeiter">Mitarbeiter</a></li> </ul> <div id="Inhalt"><h1>Forschung</h1> <p>Der Lehrstuhl AVA ...</p></div> </body> </html> Gero 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; background-color: #eee; } Gero Mühl ul#Navigation a:visited { color: #666; background-color: #eee; } ul#Navigation a:hover { color: black; background-color: white; } ul#Navigation a:active { color: white; background-color: 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 Gero Mühl Webbasierte Anwendungen / World Wide Web 97 Exemplarische Fragen zur Lernkontrolle WWW 1. Erläutern Sie die Architektur des WWW! 2. Wie werden WWW-Seiten beschrieben/übertragen/adressiert/angezeigt? 3. Welche Schritte laufen beim Laden und Anzeigen einer Webseite ab? 4. Welche Arten von Web Clients kennen Sie? 5. Was ist ein Proxy und wofür werden Proxies eingesetzt? 6. Wie ist eine URL aufgebaut? 7. Was versteht man unter URL Encoding und wofür wird diese Kodierung genutzt? 8. Welche Informationen lassen sich dem Log eines Web Servers gewinnen? Gero Mühl Webbasierte Anwendungen / World Wide Web 98 Exemplarische Fragen zur Lernkontrolle HTTP 1. Erläutern Sie die Funktionsweise von HTTP und die Eigenschaften dieses Protokolls! 2. Können mit HTTP nur HTML-Dokumente übertragen werden? 3. Aus welchen Teilen besteht eine HTTP-Nachricht? 4. Welche Methoden/Befehle gibt es bei HTTP? 5. Welche Kodierungen können für den HTTP-Header und den HTTP-Body verwendet werden? 6. Was bedeutet es genau, dass HTTP zustandslos ist? 7. Welche Möglichkeiten gibt es, in Webanwendungen zustandsbehaftete Sitzungen zu realisieren? 8. Wofür ist HTTPS da und wie funktioniert es? 9. Wie werden HTTP und HTTPS in Java unterstützt? Gero Mühl Webbasierte Anwendungen / World Wide Web 99 Exemplarische Fragen zur Lernkontrolle HTML und CSS 1. Welchen grundlegenden Aufbau hat ein HTML-Dokument? 2. Welche gestalterischen Elemente unterstützt HTML? 3. Welche zwei Methoden gibt es zur Übergabe von Formulardaten und worin unterscheiden sich diese? 4. Was ist bei der Kodierung von Formulardaten zu beachten? 5. Was sind Frames? 6. Beschreiben Sie die Möglichkeiten, die CSS bietet! 7. Wie können CSS-Definitionen in ein HTML-Dokument eingebunden werden? 8. Warum ist es sinnvoll mit CSS mehrere Ausgabemedien zu unterstützten und wie geschieht dies konkret? Gero Mühl Webbasierte Anwendungen / World Wide Web 100 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/CSS2 > 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 Addons > Firebug (Firefox): http://getfirebug.com > Developer Toolbar (IE): http://go.microsoft.com/fwlink/?LinkId=92716 Gero Mühl Webbasierte Anwendungen / World Wide Web 101 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / World Wide Web 102 Webbasierte Anwendungen Client- und Serverseitige Techniken Univ.-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 Gero Mühl Webbasierte Anwendungen / Techniken 2 Techniken für Webanwendungen > Vielzahl verschiedener Ansätze und Techniken > Unterschied in Details klare Klassifizierung schwierig > Großes Potential durch Kombination mehrerer Techniken > Klassifizierung bez. verschiedener Dimensionen möglich > > > > > Client vs. Server Abstraktion Funktionsumfang Sicherheit … Der folgende Überblick über existierende Technologien erhebt keinen Anspruch auf Vollständigkeit. Gero Mühl Webbasierte Anwendungen / Techniken 3 Clientseitig vs. Serverseitig Clientseitig Serverseitig > Nutzen der „eingebauten“ Fähigkeiten des Browsers > Einbindung nachladbarer/ installierbarer Plugins > Programmierung der Plugins > Beispiele > Delegation des HTTP Requests 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 Java Server Faces (JSF), ASP.NET … Die Dynamik der Anwendung kann meist sowohl im Client als auch auf dem Server realisiert werden. Gero Mühl Webbasierte Anwendungen / Techniken 4 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/JSF > ASP.NET > … Gero Mühl > Sitzungsverwaltung > Sicherheit > … > Beispiele > CGI > FCGI > … Webbasierte Anwendungen / Techniken 5 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 Gero Mühl Webbasierte Anwendungen / Techniken 6 Wiederverwendbarkeit Geringe Wiederverwendbarkeit Gute Wiederverwendbarkeit > Konkatenation verschiedener Ausgabeströme durch Weiterleitung möglich > Komponentenmodell und reiches Typsystem ermöglichen Orchestrierung einzelner Komponenten > Beispiele > Beispiele > Servlets > CGI Gero Mühl > ASP.NET > JSP Webbasierte Anwendungen / Techniken 7 Fragen? Gero Mühl Webbasierte Anwendungen / Techniken 8 Teil 1: Serverseitige Technologien Gero Mühl Webbasierte Anwendungen / Techniken 9 Überblick Serverseitige Technologien > Server Side Includes (SSI) > Common Gateway Interface (CGI) > Hypertext Preprocessor (PHP) > Servlets1 > Java Server Pages (JSP)1 > Java Server Faces (JSF)1 1 Gero Mühl Besprechung als Teil von J2EE Webbasierte Anwendungen / Techniken 10 Server Side Includes (SSI) Gero 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 attribute1=value1 attribute2=value2 ... --> > Datum/Zeit einblenden <!--#echo var="DATE_LOCAL" --> > CGI-Skript ausführen <!--#include virtual="/cgi-bin/counter.pl" --> > Befehl ausführen <!--#exec cmd="ls" --> Gero 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-Konstrukt <!--#if expr='"$DOCUMENT_URI" = "/foo.html"' --> in foo <!--#elif expr='"$DOCUMENT_URI" = "/bar.html"' --> in bar <!--#else --> in neither <!--#endif --> Gero Mühl Webbasierte Anwendungen / Techniken 13 Common Gateway Interface (CGI) Gero Mühl Webbasierte Anwendungen / Techniken 14 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 Clientparametern > 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 Gero Mühl Webbasierte Anwendungen / Techniken 15 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) #!/bin/bash echo "Content-type: text/html" ; echo > Einfaches Beispiel #!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World."; Gero Mühl Webbasierte Anwendungen / Techniken 16 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 durch Weiterleitung <meta http-equiv="refresh" content="0;URL=/cgi-bin/welcome.pl"> Gero Mühl Webbasierte Anwendungen / Techniken 17 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 Gero Mühl Webbasierte Anwendungen / Techniken 18 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 Gero Mühl Webbasierte Anwendungen / Techniken 19 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 > Query-String mit Java auslesen, um GET-Request zu verarbeiten String queryString = System.getEnv("QUERY_STRING"); > Java-Programm mit Standardeingabe aufrufen (POST-Request) #!/bin/bash cat /dev/stdin | java CGI Gero Mühl Webbasierte Anwendungen / Techniken 20 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 Gero Mühl Webbasierte Anwendungen / Techniken 21 CGI Diskussion > Vorteile > Geringe Anforderungen > Verfügbarkeit auf Server > Hohe Flexibilität > Nachteile > > > > Gero Mühl Niedrige Abstraktionsebene Sicherheit dem Anwendungsentwickler überlassen Hoher Ressourcenverbrauch (Prozess pro Request) Keine Ressourcenüberwachung Webbasierte Anwendungen / Techniken 22 Hypertext Preprocessor (PHP) Gero Mühl Webbasierte Anwendungen / Techniken 23 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> Gero Mühl Webbasierte Anwendungen / Techniken 24 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 } ?> Gero Mühl Webbasierte Anwendungen / Techniken 25 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> Gero Mühl Webbasierte Anwendungen / Techniken 26 PHP Cookies > Cookie setzen <?php setcookie("uname", $name, time() + 36000); ?> > Cookie abfragen <?php if (isset($uname)) echo "Welcome " . $uname . "!<br />"; else echo "You are not logged in!<br />"; ?> Gero Mühl Webbasierte Anwendungen / Techniken 27 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>"; ?> Gero Mühl Webbasierte Anwendungen / Techniken 28 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> Gero Mühl Webbasierte Anwendungen / Techniken 29 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 > Gero Mühl http://www.selfphp.de Webbasierte Anwendungen / Techniken 30 Fragen? Gero Mühl Webbasierte Anwendungen / Techniken 31 Teil 2: Clientseitige Technologien Gero Mühl Webbasierte Anwendungen / Techniken 32 Überblick Clientseitige Technologien > JavaScript > Ajax > Pushlets > LiveConnect > Java Applets Gero Mühl Webbasierte Anwendungen / Techniken 33 JavaScript Gero Mühl Webbasierte Anwendungen / Techniken 34 JavaScript > Von Netscape lizenzierte objektorientierte Skriptsprache; aktuelle Version 1.8 (Microsoft Pendant 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) Gero Mühl Webbasierte Anwendungen / Techniken 35 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) > Animationen > Kommunikation mit dem Webserver, der die Seite geliefert hat > Cookie-Management > … Gero Mühl Webbasierte Anwendungen / Techniken 36 Eigenschaften von JavaScript > Ist zwar objektorientiert, kennt aber keine Klassen, sondern nur Objekte Prototypenbasierte Programmierung > Lediglich schwache Typisierung > Unterscheidung lediglich zwischen numerisch (für Rechenoperationen) und nicht-numerisch (für zeichenorientierte Operationen) > Automatischen Konvertierungen von Typen soweit erforderlich und möglich > Mögliche Fehlerquelle zur Laufzeit Gero Mühl Webbasierte Anwendungen / Techniken 37 Eigenschaften von JavaScript > Anweisungsblöcke > ähnlich wie in Java: { ... } > if … else, switch, ?: > while, for, do ... while, break, continue (mit Marken) > Funktionen > mit und ohne Rückgabewert (keine Angabe in Signatur) function produkt(a, b) { return a * b; } Gero Mühl Webbasierte Anwendungen / Techniken 38 Erzeugen neuer Objekte // Konstruktur definieren function Komplex(real, imaginaer) { this.real = real; this.imaginaer = imaginaer; this.summe = function() { return this.real + this.imaginaer; } } ... var z = new Komplex(1,5); // neues Objekt erzeugen document.writeln("z = (" + z.real + "," + z.imaginaer + ")"); document.writeln("Summe von z = " + z.summe()); Gero Mühl Webbasierte Anwendungen / Techniken 39 Vererbung über Prototyp function Quaternion(real, imag1, imag2, imag3) { this.constructor(real, imag1); this.imag2 = imag2; this.imag3 = imag3; } Quaternion.prototype = new Komplex(); ... var q = new Quaternion(1,3,6,10); document.writeln("q = (" + q.real + "," + q.imaginaer + "," + q.imag2 + "," + q.imag3 + ")"); document.writeln("Summe von Real- und erstem Imaginärteil = " + q.summe()); Gero Mühl Webbasierte Anwendungen / Techniken 40 JavaScript einbinden > JavaScript-Code kann direkt in der HTML-Datei (inline) notiert oder aus separaten Dateien eingebunden werden > Beispiel für Inline-Skript <script type="text/javascript"> <!-// aktuelle Uhrzeit ausgeben var d = new Date(); document.write(d.getHours() + ":" + d.getMinutes()); //--> </script> <noscript>JavaScript einschalten</noscript> Gero Mühl Webbasierte Anwendungen / Techniken 41 JavaScript einbinden > Einbindung externer JavaScript-Dateien als Teil des <head>-Elements > Ermöglicht die Wiederverwendung von Code > Eingebundene Datei darf nur JavaScript enthalten > Kann bei großen Skriptdateien und langsamer Verbindung die Ladezeit einer Seite erheblich erhöhen <head> ... <script src="script.js" type="text/javascript"></script> ... </head> Gero Mühl Webbasierte Anwendungen / Techniken 42 JavaScript Fehlerverarbeitung > Definition einer Fehlerbehandlungsfunktion > window.onerror bekommt als Wert den Namen der Funktion, die im Fehlerfall aufgerufen wird > Ansonsten werden Fehler im Log gemeldet <script type="text/javascript"> window.onerror = ausnahme; function ausnahme(Nachricht, Datei, Position) { alert("Fehlermeldung:\n" + Nachricht + "\n" + Datei + "\n" + Position); return true; } </script> Gero Mühl Webbasierte Anwendungen / Techniken 43 JavaScript Fehlerverarbeitung > Ausnahmebehandlung mit try/catch > ähnliche Syntax wie in Java > keine verpflichtende Behandlung > Objekte oder Konstanten können geworfen werden try { myFunction(); // kann Ausnahme werfen } catch (e) { ... // Behandlung der Ausnahme } Gero Mühl Webbasierte Anwendungen / Techniken 44 HTML Document Object Model (DOM) > Objekt- und Programmiermodell für HTML-Dokumente > Plattform- und sprachunabhängig > Standard des W3Cs > Ermöglicht interaktive Webanwendungen document html head <html> <head> <title>HTML DOM</title> title </head> <body> <h1>A Heading</h1> HTML DOM <p>Some text</p> </body> </html> Gero Mühl body h1 p A Heading Some text Webbasierte Anwendungen / Techniken 45 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 Element 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 Gero Mühl Webbasierte Anwendungen / Techniken 46 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="5"> </form> </body> </html> Gero Mühl Webbasierte Anwendungen / Techniken 47 JavaScript Beispiel 2 > Zugriff auf HTML-Elemente mittels getElementById > Regelmäßige Ausführung einer Funktion <h1 id="heading" onmouseover="Farbe()">My blinking heading</h1> <script type="text/javascript"> var aktiv = window.setInterval("Farbe()", 1000); var i = 0, farbe = 1; function Farbe () { if (farbe == 1) { document.getElementById("heading").style.color="blue" farbe = 2; } else { document.getElementById("heading").style.color="red" farbe = 1; } i = i + 1; if (i >= 10) window.clearInterval(aktiv); } </script> Gero Mühl Webbasierte Anwendungen / Techniken 48 JavaScript Beispiele 3 + 4 > Einmaliger Aufruf einer Funktion nach Timeout var t = setTimeout("alert('5 seconds!')",5000); > Neue 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> Gero Mühl Webbasierte Anwendungen / Techniken 49 JavaScript Beispiel 5 > Animation eines drehenden Kreises aus Punkten <style type='text/css'>div{position: absolute; font-size:48px;}</style> <script type="text/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> Gero Mühl Webbasierte Anwendungen / Techniken 50 JavaScript Eventhandler > > > > > > > > > > > > > > > Gero 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 51 JavaScript Beispiele 6 + 7 > 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> Gero Mühl Webbasierte Anwendungen / Techniken 52 JavaScript Beispiel 8 > Kommunikation mit dem Server mittels XMLHttpRequest > Grundlage für 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); } Gero Mühl Webbasierte Anwendungen / Techniken 53 AJAX (Asynchronous JavaScript and XML) Gero Mühl Webbasierte Anwendungen / Techniken 54 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 Position des Scrollbalkens > Seitengetriebener Workflow > Navigation durch Server vorgegeben > Auf HTML beschränkt wenige nutzbare Bedienelement, hauptsächlich Formulare und Links Gero Mühl Webbasierte Anwendungen / Techniken 55 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 Gero Mühl Zeit Webbasierte Anwendungen / Techniken 56 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 Gero Mühl Webbasierte Anwendungen / Techniken 57 AJAX Darstellung der geladenen Seite Aktualisierung der dargestellten Seite Client Ajax Engine asynchroner XMLHttpRequest synchroner HTTP-Request Server Zeit Gero Mühl Webbasierte Anwendungen / Techniken 58 AJAX Beispiel: Google Maps 2. Nachladen fehlender Kartenteile im Hintergrund 1. Ziehen der Karte mit der Maus Gero Mühl Webbasierte Anwendungen / Techniken 59 Google Docs and Google Calendar Gero Mühl Webbasierte Anwendungen / Techniken 60 Google Mail Gero Mühl Webbasierte Anwendungen / Techniken 61 Weitere AJAX Beispiele > Autovervollständigung 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 > … Gero Mühl Webbasierte Anwendungen / Techniken 62 XMLHttpRequest > API für asynchrone HTTP-Aufrufe > Zugriff via JavaScript > Konzept ursprünglich von Microsoft entwickelt XMLHTTP function ajaxPOST(url, params, 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(params); Callback-Funktion ausführen, wenn Antwort } Daten, die per Posterhalten (4) und erfolgreich Request übertragen (HTTP 200) werden sollen Gero Mühl Webbasierte Anwendungen / Techniken 63 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> Gero Mühl Webbasierte Anwendungen / Techniken 64 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("suggestion"). innerHTML = xmlhttp.responseText; } xmlhttp.send(null); } Gero Mühl Webbasierte Anwendungen / Techniken 65 AJAX Bilanz Vorteile Nachteile > Rich Internet Applications (RIA), ähnlich zu Desktop-Anwendungen > JavaScript-Programmierung durch den Web-Entwickler > Keine Plugins notwendig (vgl. Applets, Flash, etc.) > Browserinkompatibilitäten > Debugging > Wartung > Polling > Rahmenwerke und Toolkits (z.B. Dojo) > Netzverkehr > Serverbelastung > Große Beachtung und Industrieunterstützung Gero Mühl Webbasierte Anwendungen / Techniken 66 Literatur 1. Christian Wenz, JavaScript und Ajax: Das umfassende Handbuch, 7. Auflage, 2008, Galileo Computing http://openbook.galileocomputing.de/javascript_ajax 2. Christian Wenz, JavaScript: Das umfassende Handbuch, 10. Auflage, 2010, Galileo Computing, ISBN 3836216787 3. XMLHttpRequest http://www.w3.org/TR/XMLHttpRequest 4. W3Schools AJAX Tutorial http://www.w3schools.com/Ajax 5. The Dojo Toolkit http://www.dojotoolkit.org Gero Mühl Webbasierte Anwendungen / Techniken 67 Fragen? Gero Mühl Webbasierte Anwendungen / Techniken 68 Pushlets Gero Mühl Webbasierte Anwendungen / Techniken 69 Aktualisierung von Webseiten > Ziel: Automatische Aktualisierung von Webseiten im Browser bei Änderungen der zugrunde liegenden Informationen > Aktienkurse > Nachrichtenschlagzeilen > Andere Kunden betrachten gleiches Produkt im Webshop > Freunde gehen online oder offline > … Gero Mühl Webbrowser Webbasierte Anwendungen / Techniken 70 Realisierung per Client Pull > 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 Gero Mühl Webbasierte Anwendungen / Techniken 71 Realisierungen per Server-to-Client Push > 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 JavaScriptKommandos an den Client in einen unsichtbaren Frame Gero Mühl Webbasierte Anwendungen / Techniken 72 Pushlets (www.pushlets.com) > Bauen auf HTTP-Streaming auf > HTTP-Verbindung wird dauerhaft offengehalten > Über die Verbindung können weiterhin Daten gesendet werden > Wird vornehmlich 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' Gero Mühl Webbasierte Anwendungen / Techniken 73 Pushlets: Client Seite <HTML><HEAD> <script type="text/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> Gero Mühl Webbasierte Anwendungen / Techniken 74 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 Gero Mühl Webbasierte Anwendungen / Techniken 75 Java Applets Gero Mühl Webbasierte Anwendungen / Techniken 76 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 relativ hohen 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.) Gero Mühl Webbasierte Anwendungen / Techniken 77 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 Gero Mühl Webbasierte Anwendungen / Techniken 78 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 > > > > Gero Mühl JavaPlugin 1. HTML-Seite laden 2. Java Applet laden Webbrowser Webserver Webbasierte Anwendungen / Techniken 79 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 <object classid="java:chess.class" codetype="application/java" width="400" height="400"> <param name="color" value="0xFF000"> </object> Gero Mühl Webbasierte Anwendungen / Techniken 80 Klasse Applet > Applets leiten von java.applet.Applet ab, welches von Panel, Container und Component abgeleitet ist > Beispiele für geerbte, überschreibbare Grafik-Methoden 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) Gero Mühl Webbasierte Anwendungen / Techniken 81 Lebenszyklus eines Java Applets start destroy init stop > Entsprechende Methoden können überschrieben werden public public public public Gero Mühl void void void void init() start() stop() destroy() Webbasierte Anwendungen / Techniken 82 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); } } Gero Mühl Webbasierte Anwendungen / Techniken 83 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) Gero Mühl Webbasierte Anwendungen / Techniken 84 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"); } } } Gero Mühl Webbasierte Anwendungen / Techniken 85 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 > > > > > Gero 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 86 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 Gero Mühl Webbasierte Anwendungen / Techniken 87 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 Gero Mühl 1. HTTP 2. Java RMI Webserver Webbasierte Anwendungen / Techniken 88 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 Gero Mühl Server Webbasierte Anwendungen / Techniken 89 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 Gero Mühl Webbasierte Anwendungen / Techniken 90 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 Gero Mühl Webbasierte Anwendungen / Techniken 91 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 Gero Mühl Webbasierte Anwendungen / Techniken 92 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 Gero Mühl Webbasierte Anwendungen / Techniken 93 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(), Gero Mühl list() Webbasierte Anwendungen / Techniken 94 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; … } Gero Mühl Webbasierte Anwendungen / Techniken 95 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; } … } Gero 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 96 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! } } Gero Mühl Webbasierte Anwendungen / Techniken 97 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); } … } Gero Mühl Webbasierte Anwendungen / Techniken 98 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) { … } } } Gero Mühl Webbasierte Anwendungen / Techniken 99 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 Gero Mühl Webbasierte Anwendungen / Techniken 100 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 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()) Gero Mühl Webbasierte Anwendungen / Techniken 101 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 … Gero Mühl Webbasierte Anwendungen / Techniken 102 LiveConnect Gero Mühl Webbasierte Anwendungen / Techniken 103 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 Gero Mühl Webbasierte Anwendungen / Techniken 104 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();"); } } Gero Mühl Webbasierte Anwendungen / Techniken 105 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> Gero Mühl Webbasierte Anwendungen / Techniken 106 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 > Gero Mühl http://java.sun.com/docs/books/tutorial Webbasierte Anwendungen / Techniken 107 Exemplarische Fragen zur Lernkontrolle Serverseitige Techniken 1. Was sind Server Side Includes? 2. Nennen Sie Sie einige Anwendungsbeispiele von CGI! 3. Wie werden bei CGI der Requests des Clients bzw. die Formulardaten dem CGI-Skript übergeben? 4. Welche Sicherheitsprobleme können durch das Anbieten von CGI Scripts auftreten? 5. Wie ist eine PHP-Seite aufgebaut? 6. Erläutern Sie einige Anwendungsbeispiel von PHP! Gero Mühl Webbasierte Anwendungen / Techniken 108 Exemplarische Fragen zur Lernkontrolle Clientseitige Techniken 1. 2. 3. 4. 5. Was ist JavaScript? Nennen Sie einige Anwendungsbeispiele! Was versteht man unter Dynamic HTML? Erläutern Sie das HTML-DOM! Was versteht man unter AJAX und welche Möglichkeiten bietet es? 6. Welche Vor- und Nachteile hat die Anwendung von AJAX? 7. Wozu kann man Java Applets einsetzen? 8. Wie werden Applets in HTML eingebunden? 9. Welchen Einschränkungen unterliegen Java Applets? 10. Was ist LiveConnect und wozu kann es verwendet werden? 11. Wie kann man Server-to-Client Push realisieren? 12. Wie funktioniert ein Pushlet? Gero Mühl Webbasierte Anwendungen / Techniken 109 Exemplarische Fragen zur Lernkontrolle Java RMI 1. Wozu dient Java RMI? 2. Was sind die wesentlichen Schritte bei der Nutzung von Java RMI? 3. Wie werden bei RMI Objekte als Parameter übergeben? Gibt es hierbei einen Unterschied zwischen Remote Objects und anderen Objekten? 4. Wie kann der Code einer Klasse zur Laufzeit beschafft werden, wenn er nicht lokal vorliegt? Gero Mühl Webbasierte Anwendungen / Techniken 110 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Techniken 111 Webbasierte Anwendungen Java Enterprise Edition (JEE) Univ.-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) Gero Mühl Webbasierte Anwendungen / JEE 2 Einführung und Architektur Gero Mühl Webbasierte Anwendungen / JEE 3 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 Datenbankserver > 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 Gero Mühl Webbasierte Anwendungen / JEE 4 Java EE Architektur Java EE Application Server Client Client Servlet JSP JSF Gero 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 Gero Mühl Webbasierte Anwendungen / JEE 6 Java Servlets > Serverseitige Java-Programmschnipsel > Servlet = Zusammenziehung von Server und Applet > „Servlets sind für den Server das, was Applets für den Client (Webbrowser) sind“ Aktuelle > „CGI auf Java-Art“ 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) Gero Mühl Webbasierte Anwendungen / JEE 7 Servlet Container > Fungiert als Laufzeitumgebung > Stellt Dienste bereit > > > > > > Gero Mühl Lifecycle Management Session Management Authentifizierung und Autorisierung Transaktionen und Persistenz Verwaltung von Ressourcen … Webbasierte Anwendungen / JEE 8 Architektur > Servlets werden über Webserver mittels URL angesprochen > Webserver übergibt HTTP-Request mit „passender“ URL an Servlet-Container, der das anzusprechende Servlet instanziiert WebBrowser 1. HTTP-Request > Servlet wird mit HTTP-Request aufgerufen und liefert HTTP-Response Gero Mühl 2. HTTP-Response Apache WebServer Connector Apache JServ Protocol (AJP) Servlet Tomcat ServletContainer Webbasierte Anwendungen / JEE 9 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 res) doPost(HttpServletRequest req, HttpServletResponse res) ______MySimpleServlet________ Gero Mühl _javax.servlet.http.HttpServletResponse_ Vom Servlet-Entwickler zu implementieren Webbasierte Anwendungen / JEE 10 Schnittstelle Servlet / Klasse GenericServlet init > Interface Servlet > > > > Von jeder Servlet-Klasse zu implementieren Klassenlader des Containers lädt Servlet-Klasse Container delegiert Client-Anfrage an Servlet Abarbeitung eigenem Thread > 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 zur Freigabe von Ressourcen > Klasse GenericServlet unabhängig vom verwendeten Protokoll > Eigenes Servlet von GenericServlet ableiten > service-Methode überschreiben Gero Mühl Webbasierte Anwendungen / JEE 11 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) > Parameter sind HTTP-spezifische Request- / Response-Objekte > Vorgehen > Eigenes Servlet von HttpServlet ableiten > Benötigte doMethod()-Methode(n) überschreiben Gero Mühl Webbasierte Anwendungen / JEE 12 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 aus 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 > … Gero Mühl Webbasierte Anwendungen / JEE 13 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 > … Gero Mühl Webbasierte Anwendungen / JEE 14 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 } } Gero Mühl Webbasierte Anwendungen / JEE 15 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"> </FORM> HTML-Formular 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 extrahieren Gero Mühl Webbasierte Anwendungen / JEE 16 Deployment einer Web-Anwendung > Eine Web-Applikation besteht typischerweise aus einem einzelnem Web Archive (.WAR Datei) > 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/ Gero Mühl Metainformationen über den Inhalt des Archivs Optionaler Deployment Descriptor Bibliotheken Klassen MySimpleServlet.class Webbasierte Anwendungen / JEE 17 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 Leistung möglich > Schnittstelle javax.servlet.SingleThreadModel implementieren (deprecated) immer nur ein Request gleichzeitig auf einer Servlet-Instanz aktiv Gero Mühl Webbasierte Anwendungen / JEE 18 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 > Wiederholte Aufrufe liefern existierende Session > Anwendungsdaten werden als Attribute an Sessions gebunden > session.setAttribute(name, value) > value = session.getAttribute(name) Gero Mühl Webbasierte Anwendungen / JEE 19 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() Gero Mühl Webbasierte Anwendungen / JEE 20 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(); Gero Mühl Webbasierte Anwendungen / JEE 21 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) Gero Mühl Webbasierte Anwendungen / JEE 22 Ereignisse > Ereignisbehandlung folgt dem Listener-Modell Tritt ein Ereignis auf, so wird der zugehörige 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 sessions = 0; @Override void sessionCreated(HttpSessionEvent se) { @Override void sessionDestroyed(HttpSessionEvent se) int getActiveSessions() { return sessions; } Gero Mühl Listener-Definition durch Annotation sessions++; } {sessions-- ; } } Webbasierte Anwendungen / JEE 23 Ereignisse: Klassen und Schnittstellen _____java.util.EventListener_____ _____HttpSessionListener_____ void sessionCreated( HttpSessionEvent hse) void sessionDestroyed( HttpSessionEvent hse) ____HttpSessionAttributeListener_____ void attributeAdded ( HttpSessionBindingEvent hsbe) void attributeRemoved( HttpSessionBindingEvent hsbe) void attributeReplaced( HttpSessionBindingEvent hsbe) ______HttpSessionEvent______ HttpSession getSession() Gero Mühl Implementiert von Attribut-Objekten _HttpSessionActivationListener_ void sessionDidActivate( HttpSessionEvent hse) void sessionWillPassivate( HttpSessionEvent hse) _____HttpSessionBindingListener_____ void valueBound( HttpSessionBindingEvent hsbe) void valueUnbound( HttpSessionBindingEvent hsbe) Implementiert von Attribut-Objekten ____HttpSessionBindingEvent____ HttpSession getSession() String getName() Object getValue() Webbasierte Anwendungen / JEE 24 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() Gero Mühl Webbasierte Anwendungen / JEE 25 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 beliebigen Session hinzugefügt, entfernt oder ersetzt wird > HttpSessionBindingEvent-Klasse HttpSession getSession() String getName() Object getValue() Gero Mühl Webbasierte Anwendungen / JEE 26 Asynchrone Request-Verarbeitung > Bei synchroner Request-Verarbeitung muss der Request abgeschlossen sein, wenn doMethod() returniert > Langlaufende Aktionen blockieren ausführenden Thread > Threads werden knapp > Degradierung der Leistung > 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. mehrfach) > Weitere Anwendungsmöglichkeit: Server-Side Push > Auch bekannt als Reverse Ajax, Comet, … Gero Mühl Webbasierte Anwendungen / JEE 27 Asynchrone Request-Verarbeitung > Servlet für asynchrone Requests konfigurieren > @WebServlet("/chat", asyncSupported=true) > Request in asynchronen Modus versetzen > AsyncContext ac = req.startAsync(); > Request oder Response aus asynchronem Kontext holen > ac.getRequest(); > ac.getResponse(); > Request abschließen und Response schließen > ac.complete(); Gero Mühl Webbasierte Anwendungen / JEE 28 Servlet Chat Beispiel Speichert alle Client-Requests @WebServlet("/chat", asyncSupported=true) public class MyServlet extends HttpServlet { private static final Queue<AsyncContext> acQueue = new ConcurrentLinkedQueue<AsyncContext>(); Speichert die Chat-Nachrichten private static final BlockingQueue<String> messageQueue = new LinkedBlockingQueue<String>(); @Override public void init(ServletConfig config) throws ServletException { Runnable notifierRunnable = new Runnable() { Chat-Nachricht aus Queue public void run() { entnehmen und an alle while (true) { Requests weitergeben message = messageQueue.take(); for (AsyncContext ac : acQueue) { PrintWriter acWriter = ac.getResponse().getWriter(); acWriter.println(message); acWriter.flush(); }}} Thread starten, der new Thread(notifierRunnable).start(); Chat-Nachrichten an } Clients weitergibt Gero Mühl Webbasierte Anwendungen / JEE 29 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); } } Gero Mühl Neue Chat-Nachricht entgegen nehmen und in Queue speichern Webbasierte Anwendungen / JEE 30 Literatur 1. Sun Microsystems, Inc., Java Servlet Specification, Version 3.0 > http://java.sun.com/products/servlet Gero Mühl Webbasierte Anwendungen / JEE 31 Fragen? Gero Mühl Webbasierte Anwendungen / JEE 32 Java Server Pages (JSP) Gero Mühl Webbasierte Anwendungen / JEE 33 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 Gero Mühl Page Compilation Java Servlet Webbasierte Anwendungen / JEE 34 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 Gero Mühl DB Webbasierte Anwendungen / JEE 35 Model 2 Architecture (MVC Pattern) Für nichttriviale Anwendungen vorzuziehen! > Serverseitige Realisierung des MVC Patterns > Model: Java Beans, View: JSP, Controller: Servlet > Servlet leitet Request an passendes JSP weiter: ServletContext sc = getServletContext(); RequestDispatcher rd = sc.getRequestDispatcher(forwardURL); rd.forward(req, res); 1. 5. WebBrowser Servlet 2. 3. JSP Gero Mühl Java Bean 4. DB Webbasierte Anwendungen / JEE 36 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, X(HT)ML-konforme JSPs in einer alternativen Syntax zu erstellen. Gero Mühl Webbasierte Anwendungen / JEE 37 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 eigener Servlet-Basisklasse ableiten <%@ page extends="myservlet" %> > Fehlerseite festlegen <%@ page errorPage="error.jsp" %> > Ist Fehlerseite <%@ page isErrorPage="true" %> Gero Mühl Webbasierte Anwendungen / JEE 38 JSP Direktiven > include-Direktive: <%@ include … %> > Einbindung statischer Dokumente <%@ include file="companyBanner.html" %> > taglib-Direktive: <%@ taglib … %> > Erweiterung der Menge der vorhandenen Actions <%@ taglib uri="/taglib" prefix="mytaglib" %> <mytaglib:cooltag> ... </mytaglib:cooltag> Gero Mühl Webbasierte Anwendungen / JEE 39 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 des generierten Servlets eingefügt <% java.util.Date date = new java.util.Date(); out.println(date); %> > Ausdrücke: <%= expression %> > Ausdruck auswerten und Ergebnis in String umwandeln, der dann in die Seite eingefügt wird <%= date %> Gero Mühl Webbasierte Anwendungen / JEE 40 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 <%= computeDate() %> Random number is <%= number %> </BODY> </HTML> Gero Mühl Webbasierte Anwendungen / JEE 41 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()); %> Gero Mühl Webbasierte Anwendungen / JEE 42 JSP Sessions Formular sendet Daten an JSP. <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 %> Gero Mühl Webbasierte Anwendungen / JEE 43 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="<%= ... %>"/> Gero Mühl Webbasierte Anwendungen / JEE 44 Java Beans > Komponentenmodell für Java > Ursprünglich GUI-Komponenten > 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 Gero Mühl Webbasierte Anwendungen / JEE 45 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> Gero Mühl Load.jsp Webbasierte Anwendungen / JEE 46 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="*"/> Gero Mühl Webbasierte Anwendungen / JEE 47 JSP XML View Type of Element Direktiven Deklarationen Ausdrücke Codefragmente Gero 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 48 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> Gero Mühl Webbasierte Anwendungen / JEE 49 JSP Expression Language (EL) Aktuelle Version 2.2 <html> ... Selected CPU has TDP: <%= ((Computer)req.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" /> W ... </html> JSTL <html> ... Your CPU has TDP: ${computer.CPU.TDP} W ... </html> Geht wegen fehlender Unterstützung für Verschachtelung nicht EL Gero Mühl Webbasierte Anwendungen / JEE 50 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 Gero Mühl Webbasierte Anwendungen / JEE 51 Fragen? Gero Mühl Webbasierte Anwendungen / JEE 52 Java Server Faces (JSF) Gero Mühl Webbasierte Anwendungen / JEE 53 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 Gero Mühl Webbasierte Anwendungen / JEE 54 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 Gero Mühl login.jsf angesprochen Webbasierte Anwendungen / JEE 55 JSF Beispiel Bean wird durch Annotation deklariert @ManagedBean public class UserBean implements Serializable { private String userId, password; private User user; public public public public public public String getUserId() { return(userId); } void setUserId(String userId) { … } String getPassword() { … } void setPassword(String password) { … } User getUser() { … } void setUser() { … } public String showStartPage() { user = UserLookup.getUser(userId); if (user == null) return("wrong-userid"); if (!user.password.equals(password)) { return("wrong-password"); } return("show-start"); } } Gero Mühl Rückgabewert bestimmt Seitennavigation Webbasierte Anwendungen / JEE 56 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. Gero Mühl Please try again.</p> Webbasierte Anwendungen / JEE 57 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> Gero Mühl Webbasierte Anwendungen / JEE 58 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="#{bookBean.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 Gero Mühl Webbasierte Anwendungen / JEE 59 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; } … } Gero Mühl Rückgabewert null, da gleiche Seite Webbasierte Anwendungen / JEE 60 Facelet Templating > Ermöglicht die Wiederverwendung von Facelet-Code > 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> Gero Mühl Webbasierte Anwendungen / JEE 61 Literatur 1. Sun Microsystems, Inc., Java Server Faces Specification, Version 2.0, 2009 > http://java.sun.com/javaee/javaserverfaces 2. David Geary, Cay Horstmann, Core JavaServer Faces (3rd Edition), Prentice Hall, 2010 Gero Mühl Webbasierte Anwendungen / JEE 62 Fragen? Gero Mühl Webbasierte Anwendungen / JEE 63 Enterprise Java Beans (EJBs) Gero Mühl Webbasierte Anwendungen / JEE 64 Enterprise Java Beans (EJBs) > Server-side component model for multi-tier applications > Not to be confused with Java Beans Current Version 3.1 > 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 Gero Mühl Webbasierte Anwendungen / JEE 65 Two Types of EJBs > Session beans > Model business processes without persistent state > Message-driven beans > Execute on receipt of asynchronous messages Gero Mühl Webbasierte Anwendungen / JEE 66 Session Beans > Model business processes > Are similar to interactive sessions > Represent an interaction with a client > Are not stored persistently > Lifecycle controlled by EJB container > Can either be > stateful (e.g. shopping cart) or > stateless (e.g. calculate a discount) across multiple invocations. Gero Mühl Webbasierte Anwendungen / JEE 67 Stateless Session Beans > Do not maintain a conversational state for the client > No state that persists across method invocations > All instances of a stateless bean are equivalent > One bean instance can manage several clients > EJB container can assign an instance to any client Pooling > 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 Gero Mühl Webbasierte Anwendungen / JEE 68 Example Stateless Session Bean @Stateless public class ConverterBean { private BigDecimal euroRate = new BigDecimal("1.34711"); Offer method as Web service using JAX-WS @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 uses Session Bean … BigDecimal euroAmount = converter.dollarToEuro(dollarAmount); … } Gero Mühl Webbasierte Anwendungen / JEE 69 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 Gero Mühl Webbasierte Anwendungen / JEE 70 Example Stateful Session Bean 1. Define remote interface @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(); } Gero Mühl Webbasierte Anwendungen / JEE 71 Example Stateful Session Bean 2. Implement bean class @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 customer id: " + id); } contents = new ArrayList<String>(); } Gero Mühl Webbasierte Anwendungen / JEE 72 Example 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; } } Gero Mühl Webbasierte Anwendungen / JEE 73 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 Gero Mühl Webbasierte Anwendungen / JEE 74 Message-Driven Beans > Similar to stateless session beans wrt. several aspects > they are stateless, but can call other session or entity > 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 Gero Mühl Webbasierte Anwendungen / JEE 75 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 > Lifecycle independent of that of clients > Potentially shared access by many clients transactions > Can have relations with other entities Gero Mühl Webbasierte Anwendungen / JEE 76 Beispiel Entity @Entity public class Address { protected long id String street; String city; String zipCode; 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; } } Gero Mühl Webbasierte Anwendungen / JEE 77 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) … Gero Mühl id street city 1 A-Street 5 London 2 B-Street 7 Berlin 3 X-Avenue 9 New York Webbasierte Anwendungen / JEE 78 Bibliography 1. Sun Microsystems, Inc. Enterprise JavaBeans Specification, Version 3.1, 2009 > http://java.sun.com/products/ejb 2. Andrew Lee Rubinger, Bill Burke, Enterprise JavaBeans 3.1, O’Reilly, 2010 3. Debu Panda, Reza Ramann, Derek Lane, EJB 3 in Action, Manning Publications, 2007 Gero Mühl Webbasierte Anwendungen / JEE 79 Exemplarische Fragen zur Lernkontrolle JEE 1. Welche Tiers definiert die J2EE-Architektur und welche Aufgaben haben diese? 2. Was sind Java Servlets und wie wird ein Servlet implementiert? 3. HTTP und Servlets sind zustandslos. Wie können dennoch zustandsbehaftete Sitzungen realisiert werden? 4. Was sind Java Server Pages und wie ist eine solche Seite aufgebaut? 5. Wie werden Java Server Pages ausgeführt? 6. Erläutern Sie das Konzept von Java Server Faces! Gero Mühl Webbasierte Anwendungen / JEE 80 Exemplarische Fragen zur Lernkontrolle JEE 7. Welche Arten von EJBs gibt es und wie unterscheiden sie sich? 8. Warum wird zwischen zustandslosen und zustandsbehafteten Sessions Beans unterschieden? 9. Welche Schritte sind zur Entwicklung einer Session Bean notwendig? 10. Wozu werden Message-Driven Beans verwendet? 11. Erläutern Sie die Rolle von Entities im Rahmen von EJB! 12. Welche Dienste bietet ein EJB Container an? Werden diese transparent erbracht? Gero Mühl Webbasierte Anwendungen / JEE 81 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / JEE 82 Webbasierte Anwendungen Toolkits: Apache Wicket und GWT Univ.-Prof. Dr.-Ing. habil. Gero Mühl Architektur von Anwendungssystemen (AVA) Fakultät für Informatik und Elektrotechnik (IEF) Universität Rostock Überblick > Apache Wicket > Google Web Toolkit (GWT) Gero Mühl Webbasierte Anwendungen / Wicket und GWT 2 Apache Wicket Gero Mühl Webbasierte Anwendungen / Wicket und GWT 3 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? Gero Mühl Webbasierte Anwendungen / Wicket und GWT 4 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 Gero Mühl Aktuelle Version: 6.5 > 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 Simple Logging Fascade for Java (SLF4J) > Objektrelationale Abbildung (ORM) Hibernate > Dependency Injection Spring, Guice Webbasierte Anwendungen / Wicket und GWT 5 Model/View/Controller-Architektur Controller (Steuerung) greift zu View Model (Präsentation) (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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 6 Wicket Architektur Wicket Component Container * Session + render() Simple Component Container Component <<use>> Markup File <<use>> HTML File Wicket Servlet Filter <<use>> Gero Mühl WebPage Webbasierte Anwendungen / Wicket und GWT 7 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 8 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 9 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 10 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.HelloWorldApplication</param-value> </init-param> Einstiegspunkt der Webanwendung </filter> <filter-mapping> <filter-name>WicketFilter</filter-name> <url-pattern>/wicket/*</url-pattern> </filter-mapping> </web-app> Gero Mühl URLs für die Wicket zuständig ist Webbasierte Anwendungen / Wicket und GWT 11 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 Ereignismethoden informiert onClick, onSubmit, … > Ereignisbehandlung durch Überschreiben der jeweiligen Methode Gero Mühl Webbasierte Anwendungen / Wicket und GWT 12 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 13 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") ); Gero Mühl Webbasierte Anwendungen / Wicket und GWT 14 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 > > > > > Gero 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 und GWT 15 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 16 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> Gero 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 und GWT 17 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 > > > > Gero Mühl Typ der Webseite und enthaltener Komponenten Sichtbarkeit, Labeltexte, Listenelemente Werte assoziierter Modell-Objekte Validationsergebnisse mittels Fehler- und Info-Nachrichten Webbasierte Anwendungen / Wicket und GWT 18 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 19 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. Gero Mühl Webbasierte Anwendungen / Wicket und GWT 20 Fragen? Gero Mühl Webbasierte Anwendungen / Wicket und GWT 21 Google Web Toolkit (GWT) Gero Mühl Webbasierte Anwendungen / Wicket und GWT 22 Google Web Toolkit (GWT) Aktuelle Version: 2.5 > Werkzeugsammlung zur Entwicklung von Cross-Browser AJAX-Applikationen in Java > http://code.google.com/webtoolkit > Implementieren / 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 Gero Mühl Debug Optimize Run Webbasierte Anwendungen / Wicket und GWT 23 GWT Bestandteile JRE Emulationsbibliothek (java.lang und java.util) GWT Java JavaScript Compiler Gero Mühl Klassenbibliotheken GWT Web UI Klassenbibliothek Entwicklungswerkzeuge GWT Developer Plugin Webbasierte Anwendungen / Wicket und GWT 24 Architekturkomponenten > GWT Java JavaScript-Compiler > Übersetzt GWT Java-Programme nach JavaScript > GWT Developer Plugin > 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 25 GWT Java JavaScript Compiler > Vollständiger Parser für 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 26 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 wiederverwendbarer, neuer Elemente Gero Mühl Webbasierte Anwendungen / Wicket und GWT 27 Widget-Beispiele Boxes Panels Menüs, Bäume, Buttons & Popups Gero Mühl Webbasierte Anwendungen / Wicket und GWT 28 GWT Programmbeispiel package ava.gwt.client; import com.google.gwt.core.client.*; import com.google.gwt.event.dom.client.*; Einstiegspunkt der import com.google.gwt.user.client.*; 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()); } } Gero Mühl Webbasierte Anwendungen / Wicket und GWT 29 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 30 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 Gero Mühl Java-Code ausgeführt als Bytecode auf dem Server Automatisch generierte Klassen Selbstgeschriebene Klassen bzw. Interfaces Webbasierte Anwendungen / Wicket und GWT 31 1. Schnittstellen implementieren > Synchrone Schnittstelle (serverseitig) public interface EchoService extends RemoteService { public String echo(String s); } > Asynchrone Schnittstelle (clientseitig) Wird aufgerufen, wenn Ergebnis eintrifft // Has to be named <SynchronousInterface>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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 32 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; } } Gero Mühl Webbasierte Anwendungen / Wicket und GWT 33 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> Gero Mühl Webbasierte Anwendungen / Wicket und GWT 34 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); Gero Mühl Webbasierte Anwendungen / Wicket und GWT 35 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 Gero Mühl Webbasierte Anwendungen / Wicket und GWT 36 Literatur 1. Google Web Toolkit > http://code.google.com/intl/de-DE/webtoolkit Gero Mühl Webbasierte Anwendungen / Wicket und GWT 37 Exemplarische Fragen zur Lernkontrolle Apache Wicket 1. Welche Nachteile hat die Mischung von HTML-Code und Java-Code in einer Datei und welche Vorteile bietet eine Trennung! 2. Erläutern Sie die Model/View/Controller-Architektur! 3. Beschreiben Sie das grundlegenden Vorgehen bei der Entwicklung einer Applikation mit Apache Wicket! 4. Wie wird auf Ereignisse reagiert? 5. Wie erfolgen Datenbindung und Validation? 6. Welche Vorteile bieten Out-Of-Container-Tests und wie können diese bei Apache Wicket umgesetzt werden? 7. Erläutern Sie, wie bei Apache Wicket HTML-Code wiederverwendet werden kann! Gero Mühl Webbasierte Anwendungen / Wicket und GWT 38 Exemplarische Fragen zur Lernkontrolle Google Web Toolkit 1. Beschreiben Sie das grundlegenden Vorgehen bei der Entwicklung einer Applikation mit dem Google Web Toolkit! 2. In welcher Programmiersprache wird beim Google Web Toolkit die Webanwendung implementiert? 3. Wie unterscheiden sich der Developer Mode und Deployment Mode? 4. Wie wird der JavaScript-Code für den Client erzeugt? 5. Wozu wird die JRE Emulationsbibliothek benötigt? 6. Wozu dient das GWT Developer Plugin? 7. Erläutern Sie die Funktionsweise von GWT RPC! Gero Mühl Webbasierte Anwendungen / Wicket und GWT 39 Vielen Dank für Ihre Aufmerksamkeit! Univ.-Prof. Dr.-Ing. habil. Gero Mühl [email protected] http://wwwava.informatik.uni-rostock.de Gero Mühl Webbasierte Anwendungen / Wicket und GWT 40