Web Engineering Web Presentation Tier Studienbrief WEB Version 3.2 (Juli 2011) Karl M. Göschka Web Presentation Tier Inhaltsverzeichnis 0. Übersicht........................................................................................................................... 4 0.1. Lehrziele....................................................................................................................... 4 0.2. Lehrstoff....................................................................................................................... 4 0.3. Aufgaben, Übungen ..................................................................................................... 4 0.4. Voraussetzungen .......................................................................................................... 4 0.5. Literatur........................................................................................................................ 5 1. World Wide Web Grundlagen .......................................................................................... 6 1.1. Hypertext Markup Language: HTML und XHTML.................................................... 7 1.2. Uniform Resource Identifier ........................................................................................ 9 1.3. Das Hypertext Transfer Protocol ............................................................................... 10 1.4. Common Gateway Interface ...................................................................................... 11 2. 2.1. Heterogene Clients.......................................................................................................... 13 Web Client ................................................................................................................. 15 2.1.1. User Interface: HTML und JavaScript .................................................................. 15 2.1.2. Protokoll: Probleme mit HTTP ............................................................................. 16 2.2. Web-Server-Anbindung ............................................................................................. 19 2.2.1. Verbindung von Web-Server und Middleware: CGI und API.............................. 19 2.2.2. Script-basierte Web-Anbindung............................................................................ 20 2.2.3. Seiten-basierte Web-Anbindung ........................................................................... 22 2.3. Native GUI Clients..................................................................................................... 24 2.3.1. Java-Applikation ................................................................................................... 25 2.3.2. Applikation und Datenbank auf dem Client.......................................................... 26 2.4. Mobile Devices und Sprach-/Datenkonvergenz......................................................... 27 2.4.1. Clients am Mobiltelefon: WAP und WML ........................................................... 28 2.4.2. WAP-Protokoll-Stack (*) ...................................................................................... 29 2.4.3. Wireless Markup Language WML (*) .................................................................. 31 2.4.4. WML Scripting Language (*) ............................................................................... 33 2.4.5. Die weitere Entwicklung und WAP und WML .................................................... 34 Karl M. Göschka Seite 2 / 63 WEB v3.2 Web Presentation Tier 3. MVC und Frameworks ................................................................................................... 35 3.1. Model – View – Controller Pattern............................................................................ 35 3.2. Das MVC Pattern im Web ......................................................................................... 37 3.3. Java Server Faces - JSF.............................................................................................. 39 3.3.1. JSF und andere UI Frameworks für das Web........................................................ 39 3.3.2. JSF ist Server-seitig............................................................................................... 42 3.3.3. Die Bausteine von JSF in Bezug auf MVC........................................................... 43 3.3.4. Die Bearbeitung einer JSF Anfrage....................................................................... 44 4. 4.1. 4.1.1. Rich Internet Technologien (RIT) .................................................................................. 47 Java-Applets............................................................................................................... 48 Vergleich von Java-Applets und reinem HTML................................................... 50 4.2. DOM – Document Object Model............................................................................... 54 4.3. Client-seitiges Scripting: JavaScript .......................................................................... 56 4.4. Ajax – Asynchronous JavaScript and XML .............................................................. 58 5. Lehrzielorientierte Fragen............................................................................................... 62 Karl M. Göschka Seite 3 / 63 WEB v3.2 Web Presentation Tier 0. Übersicht 0.1. Lehrziele Das primäre Lehrziel der Studieneinheit Web Presentation Tier ist, verschiedene Alternativen für die Web-Client-Anbindung an verteilte Systeme zu kennen und bewerten zu können. 0.2. Lehrstoff In diesem Studienbrief werden die Grundlagen des Web wiederholt (Abschnitt 1), bevor in Abschnitt 2 auf die Probleme und Lösungsansaätze eingegangen wird. Dabei wird der WebClient auch mit dem Native GUI (Desktop) Client sowie mit dem Mobile Client verglichen. Abschnitt 3 zeigt dann, wie die technologische Vielfalt und die mannigfachen Paradigmenbrüche in einem Web UI durch UI Frameworks überwunden werden können, die auf dem Model View Controller (MVC) Pattern beruhen. Als prominenter Vertreter wird Java Server Faces (JSF) etwas genauer erläutert. Abschnitt 4 schließlich konzentriert sich auf den Web Browser und die Möglichkeiten durch verschiedene Erweiterungen (genannt „Rich Internet Technologies“) ein dem Desktop ähnlicheres „Look and Feel“ für den Benutzer herzustellen. Abschnitte, die mit einem (*) gekennzeichnet sind, dienen der freiwilligen Stoffergänzung und werden nicht geprüft. 0.3. Aufgaben, Übungen Der letzte Abschnitt enthält eine Sammlung lehrzielorientierter Fragen zur Selbstüberprüfung. Die Beantwortung sollte nach Durcharbeiten des Studienbriefes möglich sein. Treten bei einer Frage Probleme auf, so versuchen Sie diese mit ihren Studienkollegen zu lösen. Ist das nicht möglich, können den Vortragenden per eMail direkt kontaktieren oder Sie stellen die entsprechende Frage in der nächsten Übungsstunde. 0.4. Voraussetzungen Der vorliegende Kurs setzt Kenntnisse des Software-Engineering und der Netzwerkdienste voraus, sowie Objektorientierte Methoden. Der gegenständliche Studienbrief setzt darüberhinaus ein Verständnis der Komponenten-Technologie voraus. Karl M. Göschka Seite 4 / 63 WEB v3.2 Web Presentation Tier 0.5. [1] Literatur Heineman, G.T.; Councill, W.T.: „Component-Based Software Engineering“, AddisonWesley, 2001. [2] Bass, L.; Clements, P.; Kazman, R.: “Software Architecture in Practice”, AddisonWesley, Reading, 1998. [3] Allen, P.; Frost, S.: „Component Based Development for Enterprise Systems: Applying the SELECT Perspective”, Cambridge University Press, SIGS Publications, Cambridge, UK, 1998. [4] Falb, J.: A Model-Driven Method for the Development of Nomadic Interactive Systems, Dissertation, TU Wien, 2005. [5] Fowler, M.: Patterns of Enterprise Application Architecture, Addison-Wesley/Pearson, 2003. [6] Mann, K.: Java Server Faces in Action, Manning Verlag, 2005. [7] Walter, T.: Kompendium der Web-Programmierung, Springer, 2008. [8] Sowa, H., Radinger, W., Marinschek M.: Google Web Toolkit, dpunkt, 2008. Karl M. Göschka Seite 5 / 63 WEB v3.2 Web Presentation Tier 1. World Wide Web Grundlagen Die Tage des wenig benutzerfreundlichen und auch nur wenigen Benutzern vorbehaltenen Internets als Medium für Computerexperten waren gezählt, als Tim Berners-Lee seine erste Version von HTML (Hypertext Markup Language) im Jahr 1989 1 präsentierte, zunächst allerdings nur, um auf einfache Art verlinkte, statische Dokumente (wissenschaftliche Arbeiten in CERN) verteilt zur Verfügung zu stellen. Die ersten Prototypen der Server und Browser wurden 1990 bis 1992 implementiert. Von diesem Moment an begann das Web ein exponentielles Wachstum des Internets auszulösen: Waren es im Juni 1991 noch ca. 500 000 Knoten weltweit, davon 63 000 in Europa, so waren es im Juni 1998 bereits 35 Mio. Knoten weltweit, davon 6,65 Mio. in Europa. Die monatliche Wachstumsrate im Juni 1998 betrug ca. 1 Mio. weltweit und über 200 000 in Europa. Nach nur sieben Jahren überstieg die monatliche Wachstumsrate den ursprünglichen Bestand. Ein Grund für dieses exponentielle Wachstum ist in der einfachen grafischen Benutzeroberfläche zu sehen, die nach und nach alle relevanten Dienste in einem einzigen Werkzeug vereinte – dem Web-Browser. Als mehr und mehr Web-Server entstanden, begannen auch mehr und mehr Benutzer den Web-Browser zu verwenden. Durch diese defacto Standardisierung (und die Firewall- und Internet-taugliche Protokoll-Anbindung) auf Client-Seite entstand der Bedarf den Browser auch für Anwendungen einzusetzen, für die das Web ursprünglich überhaupt nicht konzipiert war, u.A. als abgesetzter (sogenannter „remote“) „Universal Client“ für Enterprise Systeme. Die daraus sich ergebende Forderung nach dynamischen Seiten hat zunächst zu Formularen und einem Standard für die Back-End Anbindung geführt. In weiterer Folge jedoch zu einer viele Jahre andauernden (und noch nicht abgeschlossenen) Entwicklung, aus der verschiedene Werkzeuge und Laufzeitumgebungen entstanden sind. Deren vornehmlichster Zweck besteht darin, den „Schmerz“ für Entwickler (und Anwender) zu lindern, der daraus ensteht, dass eine Technologie (Web statischer Dokumente für Informationssysteme) für etwas anderes (remote UI für EAI) eingesetzt wird, wofür sie eigentlich kaum geeignet ist. Bevor diese Client- und Server-seitigen Technologien erläutert werden, erfolgt eine kurze Wiederholung der Grundlagen der Web-Technologien. 1 Obwohl der Begriff „Hypertext“ bereits 1960 erstmals in der Literatur geprägt wurde, hat er sich erst mit der Erfindung des Web verbreiten können. Karl M. Göschka Seite 6 / 63 WEB v3.2 Web Presentation Tier Drei Grundkonzepte sind es im Wesentlichen, die das Web ausmachen: die Hypertext Markup Language HTML, das Hypertext Transfer Protocol HTTP und der Uniform Resource Locator URL. 1.1. Hypertext Markup Language: HTML und XHTML Die Hypertext Markup Language HTML ist eine semantische Markup-Language, also eine Textbeschreibungssprache, wobei Befehle in den Text eingebettet sind, die die Struktur des Textes beschreiben. Leider sind mitunter auch direkte Formatanweisungen enthalten, was dem ursprünglichen Gedanken von HTML widerspricht, weil es sich dabei um physisches Markup handelt. Der Begriff „Hyper“ wird im Wesentlichen von den Links inspiriert, also von der Möglichkeit, von einem Dokument zum nächsten zu traversieren, wobei die Dokumente mitunter von verschiedenen Servern über das Internet „geliefert“ werden. Der ursprüngliche Gedanke von HTML war geprägt von WYSIWYM (What You See Is What You Meant) anstelle von WYSIWYG (What You See Is What You Get). Man wollte also die logische Struktur des Dokumentes und seiner Elemente beschreiben, damit dieses dann in verschiedenen Endgeräten interpretiert werden kann. Das könnte ein Web-Browser sein, aber auch ein Braille-Browser, der den Text blindengerecht auf einem Braille-Terminal wiedergibt oder sogar mittels Text-to-Speech-Synthese vorliest. Die Mehrheit der grafischen Web-Browser und der Wettlauf der Browser-Hersteller um die Gunst der Kunden hat jedoch eine Verschiebung dahingehend bewirkt, dass HTML heute kaum noch für etwas anderes zu gebrauchen ist als für die grafische Wiedergabe auf einem Computerbildschirm. Ein HTML-Dokument besteht aus Elementen (auch „Container“ genannt). Jedes Element wird von einem Beginn- und einem End-Tag eingeschlossen, dazwischen steht der Inhalt des Elementes. Manche Tags werden auch implizit beendet oder besitzen überhaupt kein EndTag. Weiterhin können im Beginn-Tag auch Attribute enthalten sein, um weitere Angaben über den Inhalt zu tätigen. Elemente dürfen zwar verschachtelt sein, einander aber nicht überkreuzen (d. h. überlappen). Insgesamt besteht ein HTML-Dokument aus einem HTMLElement, welches wiederum ein HEAD-Element mit Metainformation über das Dokument und ein BODY-Element mit dem eigentlichen Inhalt enthält. Die gängigen Browser sind bezüglich der Darstellung fehlerhafter HTML-Dokumente sehr robust, was unter anderem dazu geführt hat, dass viele der heute im Web verfügbaren HTML-Dokumente fehlerhaft sind. Im Sinne von mehr Exaktheit wird daher heute XHTML propagiert, wobei im Wesentlichen die Exaktheit von XML auch in HTML umgesetzt wird. Karl M. Göschka Seite 7 / 63 WEB v3.2 Web Presentation Tier Die exakte Definition von HTML ist mittels SGML 2 erfolgt; die Document Type Definition (DTD) für HTML definiert eindeutig die mögliche Struktur von HTML-Dokumenten. Da diese DTD in den HTML-Standards fixiert ist, ist HTML auch nicht erweiterbar. Das wichtigste Element in HTML ist der Link, in HTML als „Anchor“ bezeichnet, kurz <A>. Das Ziel eines solchen Links wird mit dem HREF-Attribut angegeben, es handelt sich dabei um einen Uniform Resource Locator (siehe folgenden Abschnitt). Wichtig ist auch das Formular-Element <FORM>, mit dem einfache Selektionen oder Texteingaben des Benutzers zum Web-Server hin gereicht werden können. Bild 1.1 zeigt ein einfaches HTML-Dokument, Bild 1.2 die zugehörige Darstellung durch einen Browser. <HTML> <HEAD> <TITLE>Mein Dokument</TITL E> </HEA D> <BODY> <H1>Mein Titel </H1> Das ist mei n Text, ich ve rwe ise hier auf das <A HREF="http://www.ict.tuwien.ac.a t/">Institut f&uuml;r Computertechnik</A> an der TU Wien . Sie k&o uml;nne n mich gerne per <A HREF="ma ilto :[email protected]">E ma il</A> kon taktieren. </BODY> </HTML> Bild 1.1: Ein einfaches HTML-Dokument Bild 1.2: Typische Browser-Darstellung des HTML-Beipiels aus Bild 1.1 2 Standard Generalized Markup Language Karl M. Göschka Seite 8 / 63 WEB v3.2 Web Presentation Tier Für detaillierte Informationen muss an dieser Stelle auf die verfügbare Literatur zu HTML verwiesen werden. 1.2. Uniform Resource Identifier Der Uniform Resource Identifier (URI) bzw. Uniform Resource Locator (URL) dient der eindeutigen Identifikation einer beliebigen Ressource im Web, z. B. das Ziel eines Hyperlinks oder eines Inline-Bildes. Er besteht aus folgenden Teilen: Das Protokoll – üblicherweise HTTP oder oft auch HTTPS (die kryptografisch abgesicherte Variante); es gibt aber auch URLs für FTP, Telnet und News, um nur einige weitere zu nennen. Der DNS-Name des Servers, auf dem sich die gewünschte Ressource befindet, und der Port am Server, über den zugegriffen werden soll: Falls der Port nicht explizit angegeben wird, dann gilt der für das jeweilige Protokoll als „well known port“ bekannte Port als Standard, im Fall von HTTP ist das 80, bei HTTPS 443. Ebenfalls hier können auch Benutzername und Passwort angegeben werden, z. B. für FTP-Zugriffe 3. Der Rest der URL hängt vom Protokoll ab. Bei HTTP folgt nun eine Pfadangabe, die relativ zur so genannten „Document Root“ am Web-Server zu lesen ist. Es kann auch ein Punkt im Dokument mittels „fragment identifier“ gezielt angesprungen werden. Besonders wichtig ist auch die Möglichkeit der Übergabe von Parametern in der URL (als so genannter „query string“). Der Beginn des Query String wird durch ein Fragezeichen eingeleitet. Ein vollständiger URL: http://some.where.ac.at:8888/path/resource.cgi?query_string Außerdem unterscheidet man noch zwischen relativen und absoluten URLs. Bei den relativen URLs werden die Teile, die vorne weggelassen wurden, einfach aus der URL des aktuellen Dokumentes ergänzt. Dokumentsammlungen, die untereinander nur relativ verlinkt sind, können auf diese Weise als Gesamtheit einfach woanders hin geschoben werden, wobei alle Links ihre Gültigkeit behalten. 3 Davon wird aber abgeraten, da in diesem Fall das Passwort im Klartext in der URL übertragen wird. Dies ist allenfalls für anonymen FTP-Zugriff akzeptabel. Karl M. Göschka Seite 9 / 63 WEB v3.2 Web Presentation Tier 1.3. Das Hypertext Transfer Protocol Das Hypertext Transfer Protocol (HTTP) ist ein verbindungsorientiertes (es baut auf TCP auf), aber zustandsloses Protokoll. Es bildet die Basis für die Übertragung von Dokumenten im WWW, es wird also für die Kommunikation zwischen einem Web-Server und einem WebBrowser verwendet. Der Browser hat dabei die Funktion eines Clients, der nur genau eine Anfrage stellt und darauf vom Server genau eine Antwort in Form einer HTML-Datei erhält 4. Der Ablauf einer HTTP-Sitzung sieht also wie folgt aus: 1. Öffnen der TCP-Verbindung, 2. HTTP-Request vom Client an den Server, 3. HTTP-Antwort vom Server an den Client, i. Allg. wird dabei ein HTML-Dokument übertragen, 4. Schließen der TCP-Verbindung. Das HTTP unterscheidet verschiedene „Methoden“, je nach Zweck der Nachricht: Neben der GET-Methode, bei deren Beantwortung ein HTML-Dokument vom Server geholt wird, existiert auch die HEAD-Methode, die nur bestimmte Informationen über dieses Dokument als Antwort erhält. Damit kann der Web-Browser unter anderem überprüfen, ob das Dokument verändert wurde und neu geholt werden muss. Die POST-Methode (und mitunter auch die GET Methode selbst) dient der Übertragung von Daten in die entgegengesetzte Richtung, also vom Client zum Server. Dies wird beispielsweise bei HTML-Formularen angewendet. Es gibt auch die Methoden PUT und DELETE, die bei einigen Servern auch implementiert sind und dem Upload oder Löschen eines HTML-Dokumentes dienen. Normalerweise will man das eher nicht – tatsächlich gab es jedoch einige Web-Server-Distributionen, bei denen diese Methoden standardmäßig freigegeben waren, was sofort bei einigen findigen Zeitgenossen zum „Hacken“ dieser Web-Server geführt hat, indem die ursprünglichen Dokumente vom „Hacker“ durch mehr oder weniger lustige andere Dokumente ersetzt wurden. HTTP-Nachrichten bestehen immer aus einem Header und einem Body. Im Header sind bestimmte Informationen über den Client bzw. den Server und auch über die im Body enthaltenen Daten angegeben. Zum Beispiel gibt der Client die HTTP-Versionsnummer und eine Liste der von ihm unterstützten Dateitypen an. Der Body ist vom Header stets durch eine 4 Es gibt auch die Möglichkeit, HTTP-Verbindungen für mehrere Interaktionen aufrecht zu erhalten (Keep-Alive). Viele Server ignorieren aber standardmäßig einen vom Browser mittels HTTP-Request dahingehend geäußerten Wunsch. Karl M. Göschka Seite 10 / 63 WEB v3.2 Web Presentation Tier Leerzeile getrennt. Bild 1.3 zeigt einen einfachen GET-Request vom Browser an den WebServer, Bild 1.4 zeigt die zugehörige Antwort vom Web-Server. Man erkennt, dass als HTTPBody das HTML-Dokument zurückgeliefert wird. GET /welcome.html HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.msexcel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: en-us Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) Host: some.where.ac.at:8888 Connection: Keep-Alive Bild 1.3: HTTP-Request vom Client (Web-Browser) an den Server Im Rahmen des HTTP-Protokolls kann auch eine einfache Authentifizierung durchgeführt werden, das so genannte „Basic Authentication Scheme“. Es soll hier nur betont werden, dass die Passwortinformation in diesem Fall nur UU 5-codiert wird, also ohne darunter liegende SSL-Verschlüsselung völlig ungesichert über das Netz geht. Die zugehörigen Einstellungen, wer wo zugreifen darf, müssen am Web-Server konfiguriert werden. HTTP/1.1 200 OK Date: Sat, 06 May 2000 22:16:41 GMT Server: Apache/1.3.9 Ben-SSL/1.37 (Unix) mod_perl/1.21 Connection: close Content-Type: text/html <HTML> <HEAD> <TITLE>Mein Dokument</TITLE> </HEAD> <BODY> <H1>Mein Titel</H1> Das ist mein Text, ich verweise hier auf das <A HREF="http://www.ict.tuwien.ac.at/">Institut f&uuml;r Computertechnik</A> an der TU Wien. Sie k&ouml;nnen mich gerne per <A HREF="mailto:[email protected]">Email</A> kontaktieren. </BODY> </HTML> Bild 1.4: HTTP-Response vom Web-Server an den Browser 1.4. Common Gateway Interface Das Common Gateway Interface (CGI) ist eine standardisierte Schnittstelle zwischen WebServer (oft auch als Web-Listener oder HTTP-Daemon bezeichnet) und einem Server-seitigen 5 Ein einfaches Codierverfahren, aber keine Verschlüsselung. Jeder kann die Rückumwandlung ohne irgendwelche weitere Kenntnis durchführen. Karl M. Göschka Seite 11 / 63 WEB v3.2 Web Presentation Tier Programm. Dies kann wiederum ein einfaches Shell-Skript oder Perl-Skript sein, ein ausführbares C-Programm oder aber eine integrierte Anbindung an einen Applikationsserver oder eine Datenbank. Viele Anbindungen sind zwar heute nicht mehr nach dem ursprünglichen CGI-Prinzip gebaut, folgen ihm aber noch der Nomenklatur nach, was eine breite Basis für solche Anwendungen schafft. Das Grundprinzip ist folgendes: Anhand des Pfades, der Extension, oder einer anderen Information im URL (dies muss vorher beim Web-Server konfiguriert werden) erkennt der Web-Server, dass ein eingehender Request nicht durch die Lieferung eines Dokumentes, sondern durch die Ausführung eines Programms beantwortet werden soll. In diesem Fall wird das entsprechende Programm als Prozess gestartet, und die übergebenen Daten (aus dem URL und dem HTTP-Body) werden auf eine von drei Arten übergeben: als Command-LineParameter, über den Standard-Input oder über genau definierte Umgebungsvariablen. Das Programm führt nun seine Aufgaben durch und liefert zuletzt seine Ergebnisse auf eine von zwei Arten an den Web-Server zurück: Als HTML-Dokument mit MIME-Type-Angabe oder als fertige HTTP-Antwort. Im ersten Fall muss der Web-Server noch den HTTP-Header ergänzen, in beiden Fällen erfolgt zuletzt die HTTP-Antwort an den Client, der serverseitige Prozess terminiert, nachdem er seine Daten (über den Standard-Output) an den Web-Server geliefert hat. Karl M. Göschka Seite 12 / 63 WEB v3.2 Web Presentation Tier 2. Heterogene Clients Clients moderner Enterprise Software Architekturen können auf unterschiedlichste Art unterschieden und kategorisiert werden [4]: Stationary vs. Mobile Clients: Mobile Clients müssen (auch wenn die Protokolle und Zugriffsmöglichkeiten gekapselt sind) unterschiedliche Bandbreiten, Latencies, und Kommunikationskosten berücksichtigen können, und auch auf Ressourcenverbrauch (AkkuLebensdauer) optimiert werden. Application-specific vs. generic Clients: Während erstere für eine bestimmte Anwendung optimiert werden können, erfordern zweitere eine Beschreibungssprache und Datenstrukturen, unterstützen dann aber eine ganze Klasse von Anwendungen auf eine dem User vertraute Art und Weise. Device-specific vs. Multidevice Clients: Völlige Unabhängigkeit vom Device ist kaum zu erreichen (außer die Abstraktionsebene wird deutlich erhöht), da stets Annahmen hinsichtlich der Ressourcen getroffen werden müssen. Ein vielversprechender Ansatz sind hier die Multidevice Clients, bei denen eine UI Komponente auf verschiedene Zielplattformen abgebildet werden kann (z.B. Windows vs Mac vs Browser vs PocketPC). Widget-based vs. Interaction-based Clients: Stand der Technik sind widget-based Clients, bei denen die Struktur und die Elemente des User Interface definiert sind. Obwohl diese dann noch auf verschiedene konkrete UIs abgebildet werden können, ist die erzielbare Flexibilität doch eingeschränkt – dasselbe Widget in ein GUI und in einen Text-to-Speech Synthesizer abzubilden wird nicht immer möglich sein. Bei Interaction-based Clients hingegen, wird eine höhere Abstraktion benutzt und nur die Interaktionen zwischen Benutzer und System beschrieben. Dies auf Kosten eines weiteren Werkzeuges, welches diese Interaktionen dann auf eine konkrete Plattform abbilden muss. Messaging vs. Interactive vs. Rich Call Clients: Hier werden die Clients nach ihrem Kommunikationsverhalten mit dem Server kategorisiert. Messaging Clients (z.B. Email Client) sind nicht zeitkritisch. Interactive Clients dienen dem unmittelbaren Datenaustausch (z.B. Web Browser) inklusive Streaming. Rich Call Clients sind für Delay-sensitive Kommunikation vorgesehen (VoIP Telephonie, Chat, Video Konferenz). Native GUI Clients vs. Web Clients: Auf diese Unterscheidung wird in weiterer Folge noch genauer eingegangen. Karl M. Göschka Seite 13 / 63 WEB v3.2 Web Presentation Tier In diesem Abschnitt wird der Fokus v.a. auf den Web Browser gelegt, wobei ein kurzer Vergleich mit Native GUI Clients angestellt wird. Abschließend werden Mobile Clients vorgestellt um den Unterschied aber auch die aktuellen Integrationsbemühungen mit stationären Web Technologien aufzuzeigen. Als Web-Client kann man jene Clients bezeichnen, die sich des Web-Browsers als Laufzeitumgebung bedienen: Zunächst ist hier HTML gemeint – später erweitert um „Rich Internet“ Technologien wie z.B. JavaScript, Java Applets, Ajax, oder Flash. Gliedert man die verschiedenen Varianten in das Gesamt-Konzept der N-Schichten-Architekturen ein, so erkennt man folgenden Unterschied: Java-Applets werden vom Web-Server nur geladen, benötigen diesen danach aber nicht mehr, weil sie i. Allg. nach dem Download eine eigenständige Verbindung zur Geschäftslogik aufbauen. Diese Variante verhält sich technisch also eher wie eine „klassische“ Client-Applikation, wobei einige Einschränkungen zu beachten sind, die in weiterer Folge noch aufgezählt werden. HTML hingegen benötigt den Web-Server während der gesamten Dauer der „Session“, wobei hinter der HTTP-Protokoll-Maschine (HTTP Daemon) – neben statischem Inhalt in Form von HTML-, XHTML- oder XML-Dokumenten bzw. Vorlagen – vor allem die BackendAnbindung relevant ist. In diesem Bereich können z. B. Servlets oder JSP verwendet werden, aber auch Perl, C, PHP oder viele andere. Damit ist aus Sicht der Middleware die gesamte Konstellation bestehend aus Web-Browser, HTTP-Anbindung und Web-Server samt „Glue Logic“ dem Presentation Tier zuzuordnen. Bild 2.1 erläutert diesen Zusammenhang. In den folgenden Abschnitten wird daher zunächst der Web-Client und dessen Probleme genauer betrachtet, danach die Lösungsansätze auf Server-seite und in einem späteren Abschnitt die Erweiterungen, um den Client noch flexibler zu machen. Karl M. Göschka Seite 14 / 63 WEB v3.2 Web Presentation Tier Java Applet Web Browser HTML Client HTTP Windows Application Java Application HTTP Daemon Web Server Distribution Protocol: IIOP, RMI, or proprietary (e.g. DCE) Presentation Tier Business Tier Session Business Logic Session Session Distributed Component Based Infrastructure Persistence Manager Data Tier Libraries Glue Logic Servlet static content and templates: HTML XHTML XML JSP Session Transaction Manager Wrapper/Connector proprietary legacy protocol Database Access Protocol: JDBC, SQLJ, or proprietary (e.g. SQL*Net) Legacy System Database Server proprietary legacy protocol Bild 2.1: Zuordnung verschiedener Clients in der N-Schichten-Architektur 2.1. Web Client Aus Sicht der Enterprise Software Architecture ist also die gesamte Konstellation bestehend aus Web-Browser, HTTP-Anbindung und Web-Server samt Glue Logic dem Presentation Tier zuzuordnen. Daraus (und aus den konkret eingesetzten Technologien) ergeben sich gewisse Probleme und Einschränkungen, deren Lösung die Basis für das Verständnis v.a. der Server-seitigen Web Technologien bildet. Daher werden in diesem Abschnitt zunächst die Probleme von HTML mit und ohne Skript-gesteuertem Event-Handling erwähnt, danach werden einige Probleme mit dem HTTP als Verbindung zwischen Browser und Web-Server aufgezeigt. Im nächsten Abschnitt wird dann gezeigt, wie die Glue Logic (CGI, Servlets, JSP) bei der Lösung dieser Probleme unterstützt. 2.1.1. User Interface: HTML und JavaScript Die Beschränkung auf reines HTML betrifft dabei nicht nur die grafische Darstellung, sondern insbesondere auch die Möglichkeiten der Interaktion: Die einzigen funktionalen Elemente sind der Link (als Text oder Bild), das Formular (bzw. die weitgehend obsolete Karl M. Göschka Seite 15 / 63 WEB v3.2 Web Presentation Tier ISINDEX Query) oder eine Imagemap. Jede dieser Interaktionen resultiert in einer HTTPVerbindung wobei die nächste Seite als gesamtes neu geladen werden muss, weshalb jegliche Funktionalität Server-seitig (d. h. am Application-Server) angesiedelt sein muss. Das liegt vor allem daran, dass HTML nie als User Interface für verteilte Applikationen konzipiert war, aber dennoch heute dafür eingesetzt wird. An weiteren nachteiligen Eigenschaften sind der Mangel an Erweiterbarkeit zu nennen sowie das Fehlen von Event-Handling, insbesonders auch beim Formular (z.B. um eine Eingabe sofort zu prüfen oder abhängig von der Eingabe unterschiedliche weitere Optionen zur Verfügung zu stellen). Derartiges Event-Handling ist auf die oben beschriebenen Interaktionen (Link, Form, Imagemap) beschränkt und muss durch ein vollständiges Neuladen der Seite simuliert werden. Von all den verschiedenen Ansätzen, den Browser flexibler und interaktiver zu gestalten (siehe Abschnitt 4 zu den „Rich Internet“ Technologien), ist JavaScript eine Möglichkeit, vor allem das fehlende Event-Handling zu ergänzen und Kontext-spezifische Aktionen wie z.B. Eingabe-Überprüfungen durchzuführen. Obwohl sich JavaScript als die Client-seitige SkriptSprache am Web etabliert hat, gibt es manchmal immer noch Kompatibilitätsprobleme mit verschiedenen Versionen, Dialekten und Browsertypen. Jedenfalls sollte eine gute WebApplikation auch ohne JavaScript zumindest noch funktionieren, da viele Internet-Benutzer diese Funktion auch schlicht und einfach am Browser deaktiviert haben, um potenzielle Security- bzw. Privacy-Probleme zu vermeiden 6. 2.1.2. Protokoll: Probleme mit HTTP Das Hypertext Transfer Protocol (HTTP) wirft ein weiteres Problem auf: In einer StandardClient/Server-Applikation enthalten beide Seiten ihren jeweiligen Zustand (z. B. den Zustand der offenen Transaktion auf der Seite der Datenbank oder den Zustand des GUI auf der Seite des Benutzers), wobei ein zustandsorientiertes Protokoll die beiden Seiten verbindet. Da das Web andererseits niemals als Medium für Client/Server-Applikationen entworfen wurde, ist das HTTP zustandslos, und der Browser selbst kann mit HTML allein auch keinen GUI- 6 Wie bereits erwähnt: Im CERT Advisory CA-2000-02 wird empfohlen, aus Sicherheitsgründen auf die Verwendung jeglicher Skript-Sprachen zu verzichten. Karl M. Göschka Seite 16 / 63 WEB v3.2 Web Presentation Tier Zustand speichern 7. Es muss betont werden, dass diese Zustandslosigkeit die Skalierbarkeit des „reinen“ Web-Servers verbessert und daher aus damaliger Sicht auf das ursprünglich gedachte Einsatzgebiet der Web Technologien eine richtige Entscheidung darstellt. Um diesen – aus heutiger Sicht – Mangel zu überwinden, gibt es zwei Möglichkeiten: Long URL encoding speichert den gesamten Zustand der Sitzung und des GUI in der URL (oder in einem Cookie 8). Diese – meist codierte – Zustandsinformation wird dann bei jeder HTTPInteraktion zwischen Browser und Server hin- und hergereicht. Für komplexere Anwendungen – und insbesonders wenn man persistente Zustandsdaten benötigt – ist das aber nicht ideal, in diesem Fall speichert man den Zustand am Server – am besten in einer Datenbank – und reicht nur noch einen kurzen Identifikator zwischen Browser und Server hin und her (wieder entweder in der URL oder als Cookie). Man nennt diese zweite Methode Short URL encoding. Die zweite Methode zeigt zwar die schlechtere Server-Skalierung, kann aber auch mit Frames benutzt werden. Die erste Methode ist bei Frames problematisch, kann aber dafür mit geringerem Implementierungsaufwand auch ohne Datenbank auf der Server-Seite verwendet werden. Wenn die Zustandsinformation (long oder short) in der URL übergeben wird, bedeutet das weiters, dass in jede HTML-Seite, die vom Server an den Client geschickt wird, in alle Links und alle Formulare diese Information hineincodiert werden muss. Und es bedeutet für den Server, dass er die vollständige Zustandsinformation aller gleichzeitig offenen Sitzungen speichern muss. Egal wie man das Problem der Zustandslosigkeit überwindet – einen Nachteil der Verwendung von reinem HTML (und damit HTTP als Protokoll zwischen Browser und Server) muss man dabei in Kauf nehmen: Man kann nie sicher wissen, ob der Benutzer den Geschäftsfall abgebrochen hat (z. B. durch Beendigung des Browsers) oder ob er einfach länger braucht, bevor die nächste Interaktion erfolgt. Man weiß also nie, ob ein Geschäftsfall gewollt oder ungewollt offen ist. Zusätzlich muss man bei Verwendung von reinem HTML Vorkehrungen treffen, um die Übernahme von offenen Verbindungen durch Dritte zu verhindern. Dritte könnten sonst bei 7 Der Browser selbst ist natürlich bezüglich GUI sehr wohl zustandsbehaftet, das erkennt man sofort, wenn man den „Back Button“ benutzt. Der Zustand ist aber für Protokoll und Server unzugänglich. 8 Cookies haben den Nachteil, dass sie vom Benutzer deaktiviert werden können und auch Privacy- Probleme mit sich bringen. Karl M. Göschka Seite 17 / 63 WEB v3.2 Web Presentation Tier Kenntnis der URL die Transaktion fortführen. Dieses Security-Problem kann man durch die Verwendung von SSL und codierten URLs weitgehend lösen. Die Einschränkung von Transaktionen auf den Host, von dem sie gestartet wurden, ist wegen der weit verbreiteten Verwendung von Firewalls mit PAT 9 nicht sinnvoll. Man kann die Sicherheit auch durch gleichzeitige zusätzliche Verwendung von Cookies erhöhen, das System sollte aber auch ohne Cookies noch funktionieren. In den meisten praktischen Fällen kann man sich auch mit einem geeigneten TimeoutMechanismus behelfen, wobei der begonnene Geschäftsfall in diesem Fall aufgerollt wird. Man kann davon ausgehen, dass ein Benutzer, der mitten in einem Geschäftsfall abbricht, diesen ohnehin nicht durchführen wollte. Umgekehrt kann natürlich auch ein Netzwerkausfall daran schuld sein; in diesem Fall verliert der Benutzer leider den offenen Geschäftsfall. Da typische Internet-Geschäftsfälle aber eher kurz sind bzw. kurz sein sollen, kann dieser Nachteil oft durch organisatorische Begleitmaßnahmen überwunden werden, z. B. durch den Versand einer E-Mail als Bestätigung. Dies bedeutet, dass man seriöserweise klassische Transaktionssicherheit nur von der Datenbank bis zur Middleware garantieren kann. Um dennoch mit HTML-Clients auf transaktionsorientierten Systemen arbeiten zu können, gibt es einen einfachen und sicheren Ansatz: Die Transaktion wird am Application-Server erst dann begonnen, wenn der Geschäftsfall am Client abgeschlossen ist und der Benutzer diesen abschließend bestätigt (single shot transaction). Es wird also am Client gar keine Transaktion geöffnet, sondern die buchungsrelevanten Daten werden in der Zustandsinformation der Session gesammelt. Am Schluss wird dann versucht, im Zuge einer einzigen HTTP-Sitzung die Transaktion am Application-Server zu öffnen und mit den bis dato gesammelten Buchungsdaten durchzuführen. Falls sich in der Zwischenzeit an den zugrunde liegenden Daten etwas geändert hat, muss diese Transaktion natürlich fehlschlagen und der Kunde mit einer entsprechenden Fehlermeldung informiert werden. Dies entspricht im Verhalten einem (sehr) optimistischen Sperrverfahren. Zusammengefasst bedeutet das also keine Bedrohung der Transaktionssicherheit insgesamt, sondern lediglich in manchen Fällen eine etwas andere Handhabung, als das mit zustandsorientierten Protokollen möglich wäre. 9 Port Address Translation – Das bedeutet, dass ausgehende Verbindungen über unterschiedliche Ports, manchmal auch über verschiedene IP-Adressen in die Außenwelt geführt werden. Karl M. Göschka Seite 18 / 63 WEB v3.2 Web Presentation Tier 2.2. Web-Server-Anbindung Im vorigen Abschnitt wurden die Probleme von HTML (v.a. ohne Script Unterstützung) und HTTP erläutert. In diesem Abschnitt wird nun gezeigt, wie die Glue Logic (CGI, Servlets, JSP) den Entwickler von Web-Anwendungen bei der Lösung dieser Probleme unterstützt. 2.2.1. Verbindung von Web-Server und Middleware: CGI und API Die standardisierte Schnittstelle zwischen einem Web-Server und einer Backend-Applikation ist das Common Gateway Interface, kurz CGI. Für eine Folge von HTTP-Verbindungen ist diese Schnittstelle aber ziemlich ineffektiv, weil jedes Mal ein neuer Prozess erzeugt wird, der seinerseits die Verbindung zur Middleware oder zur Datenbank aufbaut, dann seinen Algorithmus abarbeitet, abschließend alle Verbindungen abbaut und beendet wird. Es gibt grundsätzlich zwei Ansätze, um dieses Problem zu überwinden: 1. Man kann zunächst dafür sorgen, dass mehrere Prozesse auf der Server-Seite aktiv und mit der Middleware bzw. Datenbank verbunden bleiben. Ein Dispatcher ordnet dann die eingehenden HTTP-Requests den aktiven Prozessen zu wie z.B. bei FastCGI 10. 2. Man kann die Anwendungssoftware direkt mit dem Web-Server verbinden bzw. auf den Web-Server (und dessen Informationen vom letzten HTTP Request) zugreifen lassen. Dies kann über proprietäre Schnittstellen passieren (sogenannte Web Server APIs) oder über Standards wie z.B. das Java http Servlet API. Das Verwalten aktiver Prozesse (Punkt 1) ist bei diesen Ansätzen zumeist schon integriert. Arbeitet man mit CGI allein, so muss man folgende Aufgaben als Applikationsentwickler selbst lösen: Lesen der Daten aus Umgebungs-Variablen, Standard-Input, und Command-LineParametern. Dekodieren oder Typkonversion der Parameter in geeignete Datenstrukturen. Analog Parsen der benötigten HTTP Header. Session-Handling durch explizites Cookie-Management oder Generierung/Modifikation aller Links durch URL Encoding Erzeugen des Output als Text (entweder nur die HTML Seite oder gleich mit den vollständigen HTTP Headern), der über Standard-Output ausgegeben wird. 10 http://www.fastcgi.com/ Karl M. Göschka Seite 19 / 63 WEB v3.2 Web Presentation Tier Diese Arbeiten sind natürlich hochgradig repetitiv und dennoch (oder gerade deswegen) sehr anfällig für lästige Fehler. Aus diesem Grund liegt es nahe, diese Aufgaben vom Application Server erledigen zu lassen. Diese Aufgaben können grundsätzlich auf zwei verschiedene Arten angegangen werden: Script-orientiert oder Seiten-orientiert. Diese beiden Arten werden in Folge anhand Ihrer prominentesten Vertreter genauer erläutert. 2.2.2. Script-basierte Web-Anbindung Bei der Script-basierten Web-Anbindung stellt die Laufzeitumgebung die Request Parameter sowie Datenstrukturen für das Session-Management zur Verfügung. Der Entwickler übernimmt diese Daten im Programm, ruft ggf. die Geschäftslogik oder Datenbank auf, und erzeugt schließlich die resultierende, neue HTML-Seite durch Ausgabe-Anweisungen von Strings. Wir wollen uns hier Java Servlets exemplarisch ansehen, alternative Techniken sind Scriptsprachen wie Perl 11, Python 12, oder Ruby 13. Java Servlets sind Module zur Erweiterung von Web-Servern (bzw. Application-Servern, wie die Verbindung aus Web-Server und Container für die Glue Logic genannt wird) die entsprechende Schnittstellen (Java Http Servlet API) bereithalten. Sie besitzen keine Benutzerschnittstelle und dienen vom Grundgedanken am ehesten als Ersatz für CGI-Skripts, wobei das Servlet im Unterschied zum CGI Script innerhalb des Web Servers im sogenannten Java Web Container ausgeführt wird. Beim Laden wird das Servlet initialisiert, dabei werden die Konfigurationsdaten geladen und eventuelle Hilfs-Threads gestartet. Ein Servlet kann für mehrere aufeinanderfolgende Requests (Session) verwendet werden. Da Servlets multithreaded sein können, darf nicht auf die Synchronisation vergessen werden. Entfernt wird das Servlet nur durch den Garbage Collector der Umgebung, bis dahin arbeitet es auf dem Request-Response-Paradigma beruhende Service-Anfragen ab. Bild 2.2 zeigt ein Beispiel. Damit hat Sun Microsystems (später von Oracle übernommen) eine Möglichkeit geschaffen, Java-Programme auf dem Web-Server ausführen zu können. Servlets werden am ehesten als Glue Logic für Web-Anwendungen eingesetzt, um sie als Gateway zu verteilten, objektorientierten Systemen (oder objektrelationalen Datenbanken) einzusetzen, insbesondere zu Komponenten-Systemen basierend auf Enterprise Java Beans (EJBs). Bild 2.3 zeigt den 11 http://www.perl.org/ 12 http://www.python.org/ 13 http://www.ruby-lang.org/en/ Karl M. Göschka Seite 20 / 63 WEB v3.2 Web Presentation Tier Aufbau dieser Architektur. Die Technik kann mit so ziemlich allen gängigen Web-Servern realisiert werden. Die Servlets benutzen dazu ein spezielles API, das es ermöglicht, Programme auf der Seite des Servers zu starten. Diesen Programmen können aus einer HTML-Seite Parameter übergeben werden, die dann in weiterer Folge verarbeitet werden. Auch die Information aus den Http-Protokoll-Headern steht im Servlet zur Verfügung. Als Ausgabe liefern Servlets wieder HTML-Seiten, die an den Client zurückgegeben werden. Auch die Manipulation der Http-Protokoll-Header des Response ist möglich. Dabei erlaubt – entsprechend dem HTTP – Java unter anderem die folgenden Methoden, um Parameter an das Servlet weiterzugeben: GET: Bei dieser Methode werden alle Daten, die in einem HTML-Formular angeführt sind, direkt in der URL codiert bzw. im HTTP Nachrichten-Header übergeben und sind daher für den Benutzer unmittelbar sichtbar. POST: Bei dieser Methode sind die Parameter nicht direkt in der URL codiert sondern werden als HTTP Nachrichteninhalt übergeben. Die Parameter werden aber in beiden Fällen unverschlüsselt übertragen. public class SimpleServlet extends HttpServlet { // Handle the HTTP GET method by building a simple web page. public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title = "Simple Servlet Output"; // set content type and other response header fields response.setContentType("text/html"); // then write the data of the response out = response.getWriter(); out.println("<HTML><HEAD><TITLE>” + title ); out.println("</TITLE></HEAD><BODY>"); out.println("<H1>" + title + "</H1>"); out.println("<P>This is output from SimpleServlet."); out.println("</BODY></HTML>"); out.close(); } } Bild 2.2: Java Servlet Die Vorteile von Servlets sind: Effizienz: Anstelle wie bei CGI jedes Mal einen neuen Prozess zu starten, werden die Anfragen bei Servlets von einem Thread beantwortet, der von dem einzigen Servlet- Karl M. Göschka Seite 21 / 63 WEB v3.2 Web Presentation Tier Prozess gestartet wird, der dauerhaft läuft. Damit kann auch z. B. eine dauerhafte Verbindung zu Datenbanken mittels JDBC aufrecht erhalten werden. Komfort: Eine Reihe an vordefinierten Funktionen gestattet die einfache Handhabung der HTTP-Protokoll-Header sowie der HTML-Daten. Weitere Funktionen erleichtern die Handhabung von Cookies und Sessions. Portabilität: Aufgrund von Java gegeben, und von den meisten Application-Servern unterstützt. Sicherheit: Während „klassische“ CGI-Scripts einige Sicherheitslücken aufweisen, bietet Java ein Sicherheitsmodell auf. Server Clients HT TP Servlet Server HTTP T HT P ed nt ie r t-o ec l bj O co to o Pr O bj ec t-o Pr ot rie oc nt ol ed Bild 2.3: Mit dieser Architektur kann mit Servlets ein Gateway zu anderen objektorientierten Anwendungen geschaffen werden 2.2.3. Seiten-basierte Web-Anbindung Hat man relativ statische Seiten, also Schablonen (Templates), in denen nur wenig dynamischer Inhalt vorkommt, ist die Script-basierte Variante mühsam und unübersichtlich. In diesem Fall ist es günstiger, die HTML Schablone selbst zu verwenden und die wenigen dynamischen Elemente dann als Code-Snippets einzubetten. Genau das ist die Idee der Seiten-basierten Ansätze, deren Vorläufer als „Server-Side-Include“ (SSI 14) bezeichnet wird. Dabei wird eine normale Web-Seite mit zusätzlichen Tags angereichert. Diese werden vor der 14 http://de.selfhtml.org/servercgi/server/ssi.htm Karl M. Göschka Seite 22 / 63 WEB v3.2 Web Presentation Tier Zustellung an den Client vom SSI-Prozessor interpretiert. Meist führt das zum Aufruf von Scripts, deren Output dann wiederum anstelle des SSI-Tags in die HTML Seite inkludiert wird. Wir werden uns hier Java Server Pages (JSP) als Beispiel ansehen, alternative Techniken sind ColdFusion 15, PHP 16, und ASP.NET 17. Bei Java Server Pages werden XML-artige Tags und so genannte „Scriptlets“ für die Implementierung der Logik verwendet und in eine HTML-Seite eingebettet, welche dann als JSP Seite bezeichnet wird. Dabei ist ein grundsätzlicher Dualismus zu erkennen: Während Servlets Programme sind und HTML mittels println Statements erzeugen, sind JSPs HTML-Seiten, in die Programmcode eingebettet ist. Wenig überraschend wird daher beim ersten Aufruf (und nach Änderungen) im Application Server die JSP Seite in ein Servlet compiliert, indem alle statischen HTML-Teile in println Anweisungen „verpackt“ werden, während die dazwischen liegenden Deklarationen und Code-Stücke zu einem ganzen Servlet zusammengebaut werden. Daher ist es zum Verständnis von JSPs manchmal hilfreich, sich das später entstehende Servlet vorzustellen. Bild 2.4 zeigt ein Beispiel. <HTML> <HEAD><TITLE> Calendar: A JSP APPLICATION </TITLE></HEAD> <BODY BGCOLOR="white"> <%@ page language="java" import="cal.*" %> <jsp: jsp:useBean id="table" scope="session" class="cal. class="cal.TableBean TableBean"" /> <% table.processRequest table. processRequest(request); (request); if (table.getProcessError (table. getProcessError() () == false) { %> <!-<!-- html table goes here ---> >... Bild 2.4: Beispiel für Java Server Pages Generell haben Servlets Vorteile bei hochdynamischen Seiten, während JSPs angenehmer sind, wenn die Masse der Seite statisch ist, weil umfangreicher Programmcode in den JSPSeiten unübersichtlich wird und dadurch fehleranfällig und schlecht wartbar ist. Die Übersichtlichkeit kann weiter verbessert werden, wenn man den Code in Helper Klassen auslagert – dann können diese Helper völlig ohne Scriplets durch bestimmte JSP-Tags aufgerufen werden, wodurch die JSP Seite Code-frei wird und sich dem Nicht-Programmierer 15 http://www.adobe.com/products/coldfusion/ 16 http://php.net/ 17 http://www.asp.net/ Karl M. Göschka Seite 23 / 63 WEB v3.2 Web Presentation Tier (z.B. dem Web Designer) viel besser erschließt 18. Dadurch kann letztendlich „Separation of Concern“ zwischen Darstellung und Geschäftslogik erzielt werden. Insgesamt wird man feststellen, dass die beiden einander eher ergänzen als ausschließen: Während die JSP Seiten gut geeignet sind, die Darstellung der Seite zu übernehmen, eignen sich Servlets gut dazu, den HTTP request entgegenzunehmen. Wir werden diese „Arbeitsaufteilung“ in Abschnitt 3 beim Model View Controller Pattern noch deutlicher erkennen. 2.3. Native GUI Clients Clients basierend auf Native GUIs werden üblicherweise mithilfe von GUI Frameworks erstellt. Dazu gehören die Java Foundation Classes (JFC), heute unter der Bezeichnung Java SE Desktop 19 eine Sammlung mehrer Technologien inklusive Swing, die Microsoft Foundation Classes (MFC) 20, Qt 21, GIMP-Toolkit (GTK+) 22 oder früher Motif 23. Diese Frameworks unterstützen die Erstellung von komplexen UIs aus vordefinierten und erweiterbaren „Widgets“ wie die Komponenten graphischer Oberflächen genannt werden. Vorteile von Native GUIs liegen in der Performance und in der tieferen (und mitunter spezifischen und daher optimierten) Integration mit der Anwendung. Nachteile sind der größere Ressourcenbedarf am Client, größerer Wartungsaufwand, und geringere Flexibilität und insbesonders die Schwierigkeit das UI während der Laufzeit zu verändern (da es ja compiliert ist und keine deskriptive Beschreibung vorliegt). Eine Verbesserung hinsichtlich Wartbarkeit stellen dabei die plattformneutralen Sprachen C# und Java dar, wir wollen uns hier exemplarisch in Java vertiefen. 18 Wenn man exzessiven Einsatz der Control Flow Tags der JSP Standard Tag Library (JSTL) vermeidet, wodurch der Template View wiederum wie eine Programmier-Sprache verwendet würde. 19 http://java.sun.com/javase/technologies/desktop/ 20 http://msdn.microsoft.com/en-us/library/d06h2x6e.aspx 21 http://qt.nokia.com/ 22 http://www.gtk.org/ 23 http://www.motifzone.net/ Karl M. Göschka Seite 24 / 63 WEB v3.2 Web Presentation Tier 2.3.1. Java-Applikation In diesem Fall muss am Client das Java Runtime Environment JRE installiert sein, davon abgesehen bleibt der Vorteil der Plattformunabhängigkeit erhalten. Außerdem wird der Zugriff auf lokale Ressourcen erleichtert. Zwei Varianten sind hier noch vom Grundgedanken her zu unterscheiden: Die erste Variante – Netzwerk-ClassLoader – folgt zum Teil dem Applet-Grundprinzip, ermöglicht aber zusätzlich den Offline-Betrieb. Die zweite Variante hingegen besteht aus einer vollständigen Applikation am Client. Applikation mit Netzwerk-ClassLoader Diese Variante verfolgt ein ähnliches Konzept wie Applets, basiert jedoch auf einer Minimalapplikation, die automatisch Updates vornimmt, indem die Versionen aller Klassen mit jenen auf einem Middleware-Server verglichen werden. Im Fall von neueren Versionen werden diese automatisch heruntergeladen. Diese Version eignet sich sowohl für Online- als auch für Offline-Betrieb. Dadurch erreicht man ein automatisches Update aller Clients ohne großen Aufwand durch einfaches Ersetzen der Klassen auf den Middleware-Servern. Man erhält damit einen Thick-Client mit sehr geringem Administrationsaufwand. Vorteile: Sehr kleine Client-Applikation notwendig, die nur den ClassLoader beinhaltet und daher kaum gewartet werden muss. Außerdem ist es durch das automatische Update nicht notwendig, dass mehrere Softwareversionen parallel laufen müssen. Daraus folgt ein sehr geringer Administrationsaufwand. Im Gegensatz zu Applets ist die Verbindung zu jedem beliebigen Server möglich. Dies führt zu einer erhöhten Ausfallssicherheit im Online-Betrieb. Dadurch, dass die Applikation lokal gestartet wird, wird auch der Offline-Betrieb ermöglicht. Weiter ist es erlaubt, auf lokale Ressourcen zuzugreifen. Dies ist zum Beispiel für das Drucken oder für den Zugriff auf lokale Spezialhardware wichtig. Java erfordert keine Lizenzgebühren für das Java Runtime Environment (JRE). Nachteile: Man muss die Minimalapplikation und das JRE installieren, allerdings ist der Aufwand dafür eher gering. Karl M. Göschka Seite 25 / 63 WEB v3.2 Web Presentation Tier Die Updates der Klassen benötigen Netzwerkbandbreite im laufenden Betrieb. Diese Variante ist also vor allem für solche Clients zu empfehlen, die entweder auf lokale Ressourcen zugreifen müssen oder für die der Offline-Betrieb unbedingt möglich sein muss. Vollständige Applikation auf dem Client Dieser Ansatz kann im Extremfall sogar ohne Middleware-Server auskommen: Die Applikationslogik befindet sich – zumindest teilweise – auf dem Client. Dadurch erhält man einen Thick-Client, ähnlich zur PC-Welt. Vorteile: Es sind weniger Downloads notwendig als bei ClassLoader, das Netzwerk wird weniger belastet. Der Offline-Betrieb ist möglich. Die Performance ist höher, da die Latenzzeiten des Netzwerkes wegfallen. Es werden weniger Ressourcen im Bereich der Server benötigt, die Middleware wird entlastet – oder sogar ganz ersetzt. Nachteile: Es ergibt sich ein erhöhter administrativer Aufwand der Thick-Clients, wobei im Gegensatz zur heterogenen PC-Welt immerhin noch der Vorteil der Plattformunabhängigkeit bestehen bleibt. Zeitweise muss mit mehreren Versionen parallel gearbeitet werden (Versionsmanagement). Der Ressourcenbedarf am Client-Rechner steigt. Auch im Fall der horizontalen Konzentration der kompletten Logik am Client ist grundsätzlich eine logische vertikale Verteilung vorzunehmen, da dies einerseits den Austausch der einzelnen Schichten erleichtert und andererseits bei Einsatz von verteilten Architekturen dann später jederzeit eine horizontale Verteilung ohne großen Aufwand vorgenommen werden kann. 2.3.2. Applikation und Datenbank auf dem Client Diese Variante stellt den „schwersten“ Client dar – sie ist nur möglich mit verteilten Datenbanken oder in Peer to Peer Systemen. Notwendig kann diese Variante werden, wenn der Offline-Betrieb über lange Zeit oder mit hoher Ausfallssicherheit gefordert ist. Auch hier Karl M. Göschka Seite 26 / 63 WEB v3.2 Web Presentation Tier ist es ratsam, eine vertikale Verteilung durchzuführen. Damit eröffnet sich die Möglichkeit des automatischen Wechsels zwischen Offline- und Online-Betrieb. Der administrative Aufwand wird durch die lokale Datenbank allerdings sehr groß – auch mit Fernwartung. Vorteile: hohe Daten- und Ausfallssicherheit durch Netzwerkunabhängigkeit, Online-Redundanz möglich, Zugriff auf lokale Ressourcen möglich, beliebige Netzwerkverbindungen möglich. Nachteile: sehr hoher administrativer Aufwand, die Client-Hardware muss sehr leistungsfähig sein, da sowohl die Applikation als auch die Datenbank am Rechner laufen muss, und zeitweise muss mit mehreren Releases gearbeitet werden. 2.4. Mobile Devices und Sprach-/Datenkonvergenz Der zunehmende Wunsch nach Mobilität hat neben Laptop und Mobiltelefon eine ganz neue Klasse von Geräten hervorgebracht – zuerst den PDA (Personal Digital Assistant) und darauf aufbauend das SmartPhone, welches eine Integration von PDA und Mobiltelephon darstellt. Somit vereint das SmartPhone die Sprach- und Datenkommunikation in einem einzigen mobilen Endgerät. Da alle diese Endgeräte ihre jeweiligen Vor- und Nachteile besitzen, ist nicht abzusehen, dass ein einziges alle anderen wird ersetzen können. Dies führt heute zu einer Vielzahl von Endgeräten, die berücksichtigt werden müssen und neben der Darstellungstechnologie (HTML, Java u. a.) und dem Betriebssystem (Linux, Windows u. a.) zu einer weiteren Betrachtungsschicht, dem Device. Natürlich gibt es reduzierte Portierungen der Betriebssysteme für diese Devices. Aber neben den beschränkten Ressourcen sind i. Allg. auch eine sehr beschränkte Darstellungsfläche (Auflösung) sowie beschränkte oder veränderte Eingabemöglichkeiten (keine Tastatur 24, Stick statt Maus) zu berücksichtigen. Dies führt dazu, dass auch die Applikation selbst auf das jeweilige Device „maßgeschneidert“ werden muss, was letztendlich dazu führt, dass heute für Karl M. Göschka Seite 27 / 63 WEB v3.2 Web Presentation Tier eine einzige Applikation eine Vielzahl an User Interfaces entwickelt und über die Lebenszeit der Applikation gepflegt werden muss. Als Lösungsansatz bietet sich hier zunächst an, „virtuelle Endgeräte“ zu definieren – Betriebssystem und Applikation werden nur einmal an das virtuelle Endgerät angepasst, welches seinerseits auf verschiedenen „physischen Endgeräten“ beheimatet sein kann. Dieser Ansatz kann z. B. mit Software-Agent-Technologie implementiert werden und eignet sich auch für Sprach-/Daten-konvergente Anwendungen. Als Nachteil muss sich das „virtual device“ aber auf die Gemeinsamkeiten (kleinster gemeinsamer Nenner) der bestehenden Endgeräte beschränken. Will man die Merkmale bestimmter physischer Endgeräte (z. B. hohe Auflösung am Laptop) ausnutzen, verliert man den Vorteil des einen einzigen Gerätes sofort wieder. Außerdem ist fraglich, wie sich das virtual device auf einem zukünftigen physischen Gerät behaupten kann. Aus diesen Gründen wird in der Forschung derzeit untersucht, wie man die Interaktion zwischen Mensch und System oder zwischen Menschen via System gänzlich von den physischen Geräten abstrahieren kann. Als Beispiel für „abgespeckte“ Kommunikation soll nun das Mobiltelefon mit WAP (Wireless Application Protocol) und WML (Wireless Markup Language) herhalten. Obwohl als eigenständige Technologie nicht sehr erfolgreich, kann man das Grundprinzip reduzierter Devices sehr gut erkennen. 2.4.1. Clients am Mobiltelefon: WAP und WML Das Wireless Application Protocol WAP ist ein offener Standard, der auf anderen offenen Standards wie XML oder IP basiert. Netzwerkbetreiber mit insgesamt über 100 Mio. Teilnehmern und Mobiltelefonhersteller mit insgesamt über 90 % Marktanteil arbeiten auf der Basis dieses Standards. Damit wird Unabhängigkeit vom Endgerät und von der zugrunde liegenden Protokoll-Technik (GSM, SMS, GPRS usw.) garantiert. Dies führt zu weitgehender Interoperabilität zwischen den verschiedenen Mobiltelefonen und den unterschiedlichen Netzen zum Nutzen des Endkunden. 24 Zwar gibt es „Vitual Keyboards“ als Abhilfe, die mit einiger Übung recht hilfreich sein können, aber gegenüber einer physischen Tastatur dennoch geringere Usability aufweisen. Karl M. Göschka Seite 28 / 63 WEB v3.2 Web Presentation Tier Der Client am Mobiltelefon unterscheidet sich allerdings massiv von den bisher angeführten Clients in Hinblick auf das Endgerät. Das Netzwerk und auch die Erwartungen der Kunden sind in diesem Bereich anders: Im Unterschied zu den bisherigen Varianten, die letztendlich alle auf einem Computer zur Ausführung gebracht werden, wird dieser Client auf einem Mobiltelefon ausgeführt. Das bedeutet beschränkte Ressourcen (CPU, Speicher) und eine sehr kleine Fläche für das GUI 25. Das Netzwerk selbst ist durch Begrenzungen in der Leistung und im Frequenzband sehr restriktiv bezüglich Bandbreite. Außerdem ist die Stabilität der Verbindung nicht immer gegeben. Außerdem bedeutet größerer Bandbreitenbedarf eine kürzere Lebensdauer des Akkus und ist nicht zuletzt deshalb zu vermeiden. Die Kundenerwartungen schließlich orientierten sich zunächst eher am gewohnten Komfort und an der Einfachheit eines Telefons. Dies ist allerdings mit zunehmender Leistungsfähigkeit der Geräte und Netzwerke einem allmählichen Wandel unterworfen, da neue Möglichkeiten die Gewohnheiten der Benutzer verändern und in der Folge auch neue Bedürfnisse schaffen. 2.4.2. WAP-Protokoll-Stack (*) Die zwei wichtigsten Bestandteile der WAP-Spezifikation sind das Wireless Application Environment WAE und der Protokoll-Stack inklusive Wireless Network Interface Definition. WAE besteht aus folgenden Teilen: Wireless Markup Language (WML) Microbrowser, WMLScript Virtual Machine, WMLScript Standard Library, Wireless Telephony Application Interface (WTAI), WAP Content Type Definitions. Bild 2.5 zeigt den Protokoll-Stack inklusive der Assoziation zum Internet-Protokoll-Stack. Der WAP-Protokoll-Stack ist für drahtlose Anwendungen optimiert, läuft aber auf allen Netzwerken, auch auf IP und sogar über SMS. Die einzelnen Protokolle sind: 25 Die Smartphones stellen bezüglich Ressourcen ein Mittelding zwischen klassischem Mobiltelefon und Notebook dar. Eine weitere Mischform stellen die Netbooks dar, auf maximale Mobilität hin optimierte Notebooks. Karl M. Göschka Seite 29 / 63 WEB v3.2 Web Presentation Tier Wireless Datagram Protocol (WDP): Diese Schicht stellt einen verbindungslosen Datagramm-Service zur Verfügung – ähnlich wie UDP. Wird WAP über IP verwendet, wird gleich UDP statt WDP verwendet. Internet Wireless Application Protocol Other Services and Applications Wireless Application Environment (WAE) HTML JavaScript Session Layer (WSP) HTTP Transaction Layer (WTP) TLS - SSL Security Layer (WTLS) Transport Layer (WDP) TCP/IP UDP/IP Bearers: SMS USSD CSD IS-136 CDMA CDPD PDC-P Etc... Bild 2.5: WAP: Protokoll-Stack Wireless Transport Layer Security (WTLS): Diese Schicht funktioniert ähnlich wie SSL und sorgt für Datenintegrität, Abhörsicherheit, Authentifizierung und auch für die Verweigerung bestimmter Services (Zugriffskontrolle). Wireless Transaction Protocol (WTP): Von dieser Schicht wird zuverlässiger Datentransfer zur Verfügung gestellt. Es sind drei Typen von Services definiert: „Undependable one-way call“, „Dependable one-way call“ und „Dependable two-way call response“. Wireless Session Protocol (WSP): Diese Schicht ermöglicht es, verbindungsorientiert zu arbeiten. Es werden Sessions aufgebaut, dann können Daten hin- und hertransportiert werden, und zuletzt wird die Session wieder abgebaut. Im Unterschied zum klassischen HTTP steht also hier ein verbindungsorientiertes Protokoll zur Verfügung, das im Prinzip Transaktionssicherheit bis in das Mobiltelefon ermöglicht. Da im Mobilteil selbst in Form der SIM-Karte bereits eine SmartCard vorhanden ist, bietet es sich geradezu an, diese in die Transaktionssicherheit einzubauen und damit im Mobiltelefon völlige End-zu-End-Sicherheit zu realisieren. Client WAP Gateway WSP/WTP Internet Web Server HTTP DB Bild 2.6: WAP: Architektur und Prozess Karl M. Göschka Seite 30 / 63 WEB v3.2 Web Presentation Tier Bild 2.6 zeigt die Architektur und den Ablauf eines typischen WAP-Requests: 1. Der Benutzer setzt von seinem Mobiltelefon einen Request ab. 2. Der User Agent setzt einen Request an das WAP-Gateway. 3. Das Gateway setzt einen HTTP-Request an den Web-Server ab. 4. Der Web-Server hat nun entweder WML-Decks (siehe Abschnitt 2.4.3) in seinem Dateisystem liegen, die er zurückliefert. Oder es wird über eine Schnittstelle (CGI oder andere) eine Applikation aufgerufen, die z. B. einen Datenbankzugriff ausführt und die WML-Decks dynamisch generiert. 5. Der Web-Server liefert über HTTP dieses WML-Deck (noch im ASCII-Format) an das Gateway zurück. Das Gateway beinhaltet einen WML-Encoder und einen WML-ScriptCompiler und erzeugt die entsprechenden Binärfiles. Außerdem beinhaltet das WAPGateway auch die benötigten Protokoll-Adapter. 6. Das WAP-Gatway liefert nun über WSP/WTP den binär codierten Inhalt über die Luftschnittstelle an das Device. 7. Die Software im Mobilteil interpretiert das Binärformat und bringt es für den Benutzer zur Anzeige (WML) bzw. zur Ausführung (WML Script). Alternativ zu der hier gezeigten Architektur kann das WAP-Gateway auch mit dem WebServer zu einem einzigen WAP-Application-Server verschmelzen, der dann neben dem WMLEncoder, dem Script Encoder und den Protokoll-Adaptern auch die statischen WML-Decks und die Applikationslogik zur Generierung der dynamischen WML-Decks beinhaltet. Auffällig an dieser Struktur ist vor allem, dass die WML-Decks über die Luftschnittstelle in komprimiert codierter Form übertragen werden, wie in Bild 2.7 nochmals dargestellt wird. 2.4.3. Wireless Markup Language WML (*) Wie HTML ist WML eine Markup Language, also eine tag-basierte Sprache. Wie HTML ermöglicht auch WML die Anordnung von Text und Bildern (hier allerdings nur schwarzweiß), die Eingabe von Daten (Text, Selektionslisten) und Unterstützung für die Navigation mittels Hyperlinks. WML ist eine XML-basierte Sprache und mittels einer Document Type Definition DTD vom World Wide Web Consortium W3C definiert. Karl M. Göschka Seite 31 / 63 WEB v3.2 Web Presentation Tier Wireless network Internet WAP HTTP/HTML <wml> <template> <do type="prev"> <noop/> </do> </template> <card id="init“ newcontext="true"> <do type="options" label="Copyright"> <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY bgcolor="white"> <CENTER> <P><IMG SRC="pictures/images/ictlogo.gi f" ALT="logo"></P> <BR> <HTML> <HEAD> <TITLE></ TITLE> </HEAD> <BODY bgcolor=" white"> <CENTER>< P>< Content encoding 010011000 000001111 111000000 110011110 110010011 011011011 101010010 011010 Bild 2.7: WML wird codiert übertragen, um an der Luftschnittstelle Bandbreite zu sparen Variables Input Elements <WML> <CARD> <DO TYPE=“ACCEPT”> <GO URL=“#eCard”/> </DO Welcome! </CARD> <CARD NAME=“eCard”> <DO TYPE=“ACCEPT”> <GO URL=“/submit?N=$(N)&S=$(S)”/> </DO> Enter name: <INPUT NAME=“N”/> Choose speed: <SELECT NAME=“S”> <OPTION VALUE=“0”>Fast</OPTION> <OPTION VALUE=“1”>Slow</OPTION> <SELECT> </CARD> </WML> Card Bild 2.8: Ein WML-Deck besteht aus Cards mit expliziter Inter-Card-Navigation WML unterscheidet sich aber doch in einigen Punkten wesentlich von HTML: Ein so genanntes WML-Deck (das geschlossen transportiert wird) besteht aus mehreren Cards. Eine Card ist dabei die Einheit für eine User-Interaktion. Es gibt ein explizites Modell für die Navigation zwischen den Cards, was die Navigation viel definierter und geordneter erscheinen lässt als bei HTML. Dieses Navigationsmodell beinhaltet neben den Hyperlinks auch UI Event Handling und eine History. Darüber hinaus steht eine explizite Zustandsverwaltung mit Variablen zur Verfügung, die zusätzlich hilft, das Caching zu verbessern und den Netzwerkverkehr gering zu halten. Bild 2.8 zeigt die WML-Struktur an einem Beispiel, während Bild 2.9 den typischen Ablauf der Navigation zwischen den Cards Karl M. Göschka Seite 32 / 63 WEB v3.2 Web Presentation Tier darstellt. Da beide Technologien nur exemplarisch gezeigt werden, wird auf eine detaillierte Beschreibung der einzelnen Elemente verzichtet. Bild 2.9: Ablauf der Inter-Card-Navigation an einem Beispiel 2.4.4. WML Scripting Language (*) WMLScript basiert auf prozeduraler Logik, wie Schleifen, Verzweigungen usw. WML-Script ist optimiert für geringen Speicherbedarf und geringe CPU-Leistung. Vom Prinzip her ist WMLScript abgeleitet von ECMA Script (siehe Abschnitt 4.3). WMLScript ist effizient mit WML integriert und bietet einen Mechanismus, um den Netzwerkverkehr weiter zu reduzieren. Der WMLScript-Compiler am WAP-Gateway oder WAP-Application-Server erzeugt den Bytecode, der dann im Mobilteil von einem stack-orientierten BytecodeInterpreter (virtual machine) interpretiert wird. Bild 2.10 zeigt ein einfaches Beispiel für die grundlegende Struktur von WMLScript ohne auf Details einzugehen. Functions Variables Programming Constructs function currencyConvertor(currency, exchRate) { return currency*exchangeRate; } function myDay(sunShines) { var myDay; if (sunShines) { myDay = “Good”; } else { myDay = “Not so good”; }; return myDay; } Bild 2.10: WMLScript Karl M. Göschka Seite 33 / 63 WEB v3.2 Web Presentation Tier 2.4.5. Die weitere Entwicklung und WAP und WML Während WAP 1.x auf Mobilität optimiert war und eigenständige Protokolle und Formate hervorgebracht hat (WML mit Cards und Decks, WSP, WTP, WTLS, WDP), war die weitere Entwicklung – auch aufgrund der Verbreitung der SmartPhones – von einem Trend “zurück” zum “normalen” Browser gekennzeichnet: WAP2.x hat WML bereits durch XHTML Mobile Profile (Cards, Decks, aber auch schon Web Seiten) ersetzt und als Protokoll wahlweise “Wireless Profiled” HTTP und TCP vorgesehen. Moderne Geräte unterstützen die Web Protokolle direkt, wobei jedoch immer noch auf die Rahmenbedingungen eines mobilen Gerätes Rücksicht genommen werden muss (Ressourcen wie CPU, Speicher, AkkuLebensdauer, Bildschirmgröße, Bandbreite, Latency/Delay, Netzwerkkosten, andere/kleinere Tastatur und Pointing Devices, etc.), wobei aus Kompatibilitätsgründen WML und WAP noch nicht gänzlich von der Bildfläche verschwunden sind. Da die mobilen Geräte für den Benutzer eine Reihe von Vorteilen bringen, v.a. umfassende Verfügbarkeit und Kontext-spezifische Information, werden Sie immer besser unterstützt. Im Idealfall soll der Ansatz “Design for one Web” verfolgt werden, wobei jedoch das Erstellen für Mobilität und Device-Unabhängigkeit eigene Regeln und Richtlinien hervorgebracht hat. Aktuelle Initiativen des W3C sprechen vom “Mobile Web 26” welches von der Mobile Web Initiative 27 unterstützt wird und folgende Technologien speziell für mobile Geräte hervorgebracht hat: CSS Mobile (Cascading Style Sheets) SVG Tiny (Scalable Vector Graphics) XHTML For Mobile Die jüngste Generation mobiler Browser unterstützt (tlw.) HTML5, CSS3, und viele JavaScript APIs. 26 http://www.w3.org/standards/webdesign/mobilweb 27 http://www.w3.org/Mobile/ Karl M. Göschka Seite 34 / 63 WEB v3.2 Web Presentation Tier 3. MVC und Frameworks Wie bei den Native GUI Clients erläutert, werden solche Clients üblicherweise mithilfe von GUI Frameworks, Entwicklungswerkzeugen und Komponenten- bzw. Klassen-Bibliotheken erstellt. Demgegenüber steht bei der Web-Entwicklung mit Script- oder Seiten-basierter WebAnbindung das Request-Response Paradigma des HTTP immer noch im Vordergrund: Zwar ist der Entwickler befreit von der Aufbereitung der Parameter und der Verwaltung der Sessions, er muss aber immer noch in Anfragen (Requests) und „Seiten“ als Antworten (Response) denken und dabei auch das Markup berücksichtigen (i.Allg. HTML). Und er muss sich selbst darum kümmern, Formulare richtig zu bearbeiten, die Referenzierung und Navigation aller Objekte einer großen Anwendung im Auge behalten, den hierarchisch strukturierten Aufbau einer Seite, Internationalisierung/Lokalisierung, Fehlerbehandlung, Typenkonversion – diese Aufgaben müssen trotz Servlet und JSP jedesmal eigens implementiert werden. Es ist daher wünschenswert, die Abstraktion in Widgets (UI Bausteine bzw. Komponenten) und Events (Ereignisse, auf die sich sogenannte „Listener“ registrieren, die dann auf die Geschäftslogik zugreifen und/oder die Darstellung der Widgets verändern) auch im Bereich der Web-Anwendung einzusetzen. Durch diese weitere Abstraktion wird die Anzahl der repetitiven Tasks reduziert und die Wiederverwendung von UI Bausteinen sowie die Wartbarkeit und Evolution komplexer UIs verbessert. Als Basis für derartige Architekuren und Werkzeuge dient das Model View Controller Pattern, welches wir im folgenden Abschnitt kurz erläutern werden. Danach werden wir die Anwendung des MVC Patterns auf den Web Presentation Tier zeigen und schließlich anhand von Java Server Faces (JSF) darlegen, wie auf Basis dieses Patterns ein Komponentenorientiertes UI Framework aussehen kann. 3.1. Model – View – Controller Pattern Die meisten UI Frameworks folgen dem Model-View-Control-Pattern, einem grundlegenden Pattern, welches die drei Rollen View, Model und Controller klar trennt und miteinander geordnet in Bezug setzt: Das Model repräsentiert jene Komponenten, die die Geschäftslogik beinhalten. Es repräsentiert die Domäne der Anwendung und enthält die von der Darstellung unabhängigen Daten und Methoden für den Geschäftsablauf. Karl M. Göschka Seite 35 / 63 WEB v3.2 Web Presentation Tier Der View repräsentiert die Darstellung des Model in einem bestimmten UI (auf einem bestimmten Device). Dies kann ein Fenster mit seinen Widgets sein, oder eine HTML Seite. Der View muss daher in der Lage sein, auf das Model zuzugreifen. Der Controller schließlich nimmt die Benutzereingaben entgegen, ändert ggf. das Model und passt schließlich den View an. Das UI insgesamt ist daher i.Allg. eine Kombination aus View und Controller, da ein Widget einerseits dargestellt wird (View), andererseits aber auch oft einen User Input entgegen nehmen kann (Controller). Bild 3.1 (aus [5]) zeigt das Model View Controller Pattern, wobei besonders darauf hingewiesen werden soll, dass der View und der Controller zwar das Model kennen (also Daten aus dem Model auslesen und via Methodenaufruf ändern können), das Model aber weder View noch Controller kennt. Bild 3.1: Model View Controller Pattern [5] In diesem Pattern kann man in Anwendung des Prinzips von „Separation of Concern“ zwei Trennlinien erkennen, die zwischen View/Controller und Model einerseits und die zwischen View und Controller andererseits. Die Trennung zwischen UI und Model ist die wichtigere der beiden und hat sich unzählige Male bewährt, und insbesonders ist es wichtig, dass das Model gar nicht merkt, dass ein UI auf es zugreift, da es weder View noch Controller kennt. Nur in seltensten Fällen wird es sinnvoll sein, diese Trennung aufzuheben (z.B. bei sehr kleinen Anwendungen, die praktisch keine Geschäftslogik enthalten). Die Trennung ermöglicht auch die Spezialisierung: Usability Engineering hat den Fokus auf dem UI, dem Layout, der Sichtbarkeit und dem Ablauf der Fenster. Klassisches Software Karl M. Göschka Seite 36 / 63 WEB v3.2 Web Presentation Tier Engineering hingegen hat den Fokus auf dem Model, der Geschäftslogik inklusive Transaktionen und Datenbankzugriffen. Desweiteren können verschiedene UIs auf dasselbe Model zugreifen. Einerseits können das unterschiedliche UIs auf verschiedenen Devices sein, andererseits aber auch einfach nur verschiedene Fenster in einer Anwendung. Wenn immer mehrere UIs auf ein Model gleichzeitig zugreifen (lokal oder verteilt), dann muss man weiter überlegen, ob bzw. wie schnell eine Änderung des Models ausgehend von einem UI in den anderen UIs angezeigt werden soll. Die zweite Trennung zwischen View und Controller ist von geringerer praktischer Bedeutung und ist in der Tat in vielen praktischen Systemen etwas verschwommen. Wenn wir von „dem UI“ sprechen, meinen wir oft View und Controller. In mancher Fachliteratur werden die drei auch als Layer dargestellt, wobei der Controller zwischen View und Model liegt. Diese Darstellung hat manchmal zu Verwechslungen mit anderen Patterns geführt (z.B. Application Controller, der die Navigation zwischen den Fenstern und damit den UI Ablauf der Applikation bestimmt). 3.2. Das MVC Pattern im Web Bild 3.2: Das MVC Pattern im Web [6] Wenn wir das MVC Pattern auf Web Applikationen anwenden (siehe Bild 3.2), sehen wir, dass der Controller (z.B. ein Servlet) den Request (und dessen Parameter und SessionInformation) entgegennimmt und die Geschäftslogik aufruft. Das Model (z.B. ein JavaBean) wird ggf. einen Datenbankzugriff durchführen oder eine entfernte Anwendung kontaktieren und schließlich ein Ergebnis produzieren. Auf dessen Basis wird der Controller sich für einen Karl M. Göschka Seite 37 / 63 WEB v3.2 Web Presentation Tier bestimmten View entscheiden und diesen aufrufen, wobei dabei auch die Datenweitergabe zwischen Controller und View geregelt werden muss, meist durch gemeinsamen Zugriff auf ein Daten Objekt. Der View (z.B. eine JSP Seite) wird unter Nutzung der Daten des Models die resultierende HTML Seite erzeugen. An diesem Beispiel sehen wir auch, wie man Servlet und JSP sinnvoll gemeinsam einsetzen kann: Das Servlet (aufgrund seiner Vorteile beim Programmieren) eignet sich besser als Controller, hingegen eignet sich die JSP Seite recht gut um den View darzustellen. Da die beiden letztendlich äquivalent sind, ist dies lediglich eine sinnvolle Konvention, und keine notwendige Aufteilung. Für die einzelnen Rollen (Model, View, und Control) im MVC Pattern gibt es wiederum Unterpattern nach denen diese Rollen aufgebaut sein können. Wir wollen hier den View und den Controller noch etwas genauer betrachten. Folgende Varianten ergeben sich für die View Patterns: Template View: Dabei erfolgt die Darstellung in der Struktur der zu erzeugenden Seite mit eingebetteten Befehlen, wie eben z.B. in JSP. Der Template View konzentriert sich also primär auf die Struktur der Seite. Transform View: Dabei wird auf die Daten vom Model eine Transformation angewandt, z.B. XSLT (eXtensible Stylesheet Language Transformations) auf XML Daten wie in Apache Cocoon 28. Two Step View: Dieses Pattern kann auf beide obige Patterns angewandt werden. Dabei wird zuerst ein „logischer“ View erzeugt und dieser in einem zweiten Schritt auf das „physische“ Device (z.B. HTML) „gerendert“. Diese Anpassung funktioniert natürlich nur, wenn die logische Darstellung den kleinsten gemeinsamen Nenner der zu unterstützenden Devices nutzt, was wiederum nur dann sinnvoll sein wird, wenn die Devices einander ausreichend ähnlich sind. Am besten eignet es sich z.B. zur Darstellung verschiedener „Corporate Identities“ oder zur Anpassung an Benutzerbedürfnisse. Zwei Varianten ergeben sich für den Controller: Page Controller: Hier gibt es einen Controller pro Seite 29. Das kann z.B. die JSP Seite selbst sein, oder der Controller wird von einem separaten Servlet implementiert. 28 http://cocoon.apache.org/ 29 Genau genommen gibt es einen Controller pro „Action“, also pro Link oder Button der genutzt wird. Dadurch ist die Zuordnung zwischen Seiten und Controller nicht exakt 1:1. Karl M. Göschka Seite 38 / 63 WEB v3.2 Web Presentation Tier Front Controller: Hier gibt es nur einen Controller für alle hereinkommenden Requests (wie das z.B. beim JSF-Faces Servlet der Fall ist), der sich um die Gemeinsamkeiten aller Anfragen kümmert 30, wie z.B. Internationalisierung, Customization oder Security. Weitere Details zu den Patterns können in [5] nachgelesen werden. 3.3. Java Server Faces - JSF Ein gutes Buch zu JSF ist [6], dem auch einige der hier angeführten Bilder und Auszüge entnommen wurden. 3.3.1. JSF und andere UI Frameworks für das Web Grundidee von JSF ist, die Vorteile der GUI Frameworks basierend auf dem MVC Pattern auch für Web-Anwendungen nutzbar zu machen. Das Request/Response-Verhalten und das Seiten-Markup sollen also hinter wiederverwendbaren, interaktiven UI Komponenten (Widgets) und Events/Listeners „versteckt“ werden, sodass ein Web-Client genauso entworfen werden kann wie ein Native GUI Client. Die besondere Stärke von JSF ist aber nicht technologisch, sondern liegt in der Tatsache der defacto-Standardisierung (durch die Eingliederung in J2EE) und in der dadurch breiten Industrieunterstützung. Die Idee der UI Frameworks geht zurück auf die damals als „Rapid Application Development“ oder auch „Rapid Prototyping“ bezeichneten Ansätze, welche eine Komponenten-Architektur, eine Menge von Widgets, eine Laufzeitumgebung, und ein Entwicklungstool definiert haben. JSF definiert alles analog, abgesehen vom Tool: Dieses kann – dem offenen Java Konzept folgend – von jedem Drittanbieter hergestellt werden und tatsächlich gibt es Tools bzw. Ergänzungen der Web-Entwicklungsumgebungen wie z.B. IBM’s WebSphere Application Developer, Oracle’s JDeveloper, oder Sun’s Java Studio Creator (mittlerweile auch Oracle). Natürlich gibt es auch andere Web-Frameworks. Ein relativ „altes“ System sind die WebObjects die in Steve Jobs’ NextStep entstanden sind und mit der „Rückkehr“ von Steve Jobs zu Apple gekommen sind 31. Apache Struts 32 und WebWork 33 sind Frameworks, die 30 Weitere „Helper“ oder „Command“ Objekte sowie „Intercepting Filters“ werden dann aufgerufen, um die Anfrage weiter zu verarbeiten. 31 http://www.apple.com/ca/webobjects/ Karl M. Göschka Seite 39 / 63 WEB v3.2 Web Presentation Tier einerseits von der Funktionalität über ein reines UI Framework hinausgehen, andererseits aber nicht den Abstraktionsgrad von JSF erreichen (Maskierung des Request/ResponseVerhaltens). Andere Frameworks konzentrieren sich genauso wie JSF v.a. auf das UI, man kann sie daher als Komponenten-basierte UI Frameworks bezeichnen, wie z.B. Tapestry 34, Echo 35 oder Oracle’s Application Development Framework ADF 36. Natürlich dürfen auch Microsoft’s WebForms 37 und – aktueller – ASP 38 MVC 39 nicht vergessen werden. Daneben gibt es noch eine Reihe älterer Frameworks, die die Schwächen reiner Script- oder Seitenbasierter Web-Anbindung mehr oder weniger umfangreich überwinden und oft auf bestimmte Technologien (siehe auch Abschnitte 2.2.2, 2.2.3, und 4) zugeschnitten sind: Tiles 40, Rails – vor allem aber nicht ausschließlich für Ruby als Ruby on Rails 41, Mozilla’s XUL 42 für XBL, Microsoft’s HTC 43 für DHTML, Pear 44 für PHP, oder Django 45 für Python. Völlig außer Acht lassen wollen wir hier jedoch Content-Mangement Systeme wie z.B. TYPO3 46, die sich v.a. mit dem redaktionellen Aspekt von Web-Applikationen als Informationssysteme beschäftigen, während wir uns hier für Enterprise Software Architekturen beschäftigen. Diese Auflistung ist – wie bei allen Web Technologien – nicht vollständig sondern lediglich exemplarisch. 32 http://struts.apache.org/ 33 http://www.opensymphony.com/webwork/ 34 http://tapestry.apache.org/ 35 http://echo.nextapp.com/site/ 36 http://www.oracle.com/technology/products/adf/index.html 37 http://www.asp.net/web-forms 38 Active Server Pages 39 http://www.asp.net/mvc 40 http://tiles.apache.org/ 41 http://rubyonrails.org/ 42 XML User Interface Language, siehe https://developer.mozilla.org/en/xul 43 HTML Componentes, siehe http://msdn.microsoft.com/en-us/library/ms531018(v=VS.85).aspx 44 http://pear.php.net/ 45 http://www.djangoproject.com/ 46 http://typo3.org/ Karl M. Göschka Seite 40 / 63 WEB v3.2 Web Presentation Tier Bild 3.3 zeigt die benötigten Services in einem UI Framework anhand derer man die Überlappung, Gemeinsamkeiten und Unterschiede zwischen verschiedenen Frameworks selbst jeweils genauer analysieren kann. Obwohl die Frameworks teilweise überlappende Funktionalität besitzen, lassen sie sich dennoch kombinieren, so wie etwa z.B. XUL, HTC, und Struts mit JSF integriert werden können. Bild 3.3: Services für Web Frameworks [6] Einen recht interessanten Ansatz stellt auch das Google Web Toolkit (GWT 47) dar. Von der Idee her ist es ein Komponenten-basiertes UI Framework auf derselben Abstraktionsebene wie JSF, wobei das gesamte UI in Java 48 entwickelt wird. Dadurch können – wie bei einer Desktop-Anwendung – Presentation Tier und Business Tier homogen in Java entwickelt werden. Der UI Teil wird danach in JavaScript Code (plus HTML, CSS, Ajax-Requests, etc.) übersetzt und natürlich wird auch die erforderliche Server-seitige Logik des UI generiert 47 http://code.google.com/intl/de/webtoolkit/ 48 Um das Java in JavaScript übersetzen zu können, wurde der Sprachumfang allerdings eingeschränkt. Karl M. Göschka Seite 41 / 63 WEB v3.2 Web Presentation Tier (Servlets), die sich dann homogen mit der Geschäftslogik integriert. Details können z.B. in [8] nachgelesen werden. 3.3.2. JSF ist Server-seitig JSF ist eine klassische Server-seitige Technologie 49: Der Browser zeigt reines HTML an und bekommt nicht mit, dass dieses von der JSF Laufzeitumgebung dynamisch erzeugt wurde. Diese wiederum läuft in einem Standard Java Web Container (im sogenannten JSF Servlet, welches gleich auch als FrontController fungiert). Dies sieht man in Bild 3.4. Bild 3.4: Web Anwendung mit JSF [6] Das Request/Response Verhalten und das Markup werden vom Framework gekapselt: Wenn der Benutzer im Browser einen Request auslöst, wird dieser Server-seitig vom Framework in einen Event umgewandelt, der dann mit einem Listener (Event Handler) abgefangen und verarbeitet werden kann, genauso wie man das auch in einem Desktop UI (z.B. mit Swing Komponenten) implementieren würde. Weiters können die UI Komponenten mit Java Objekten synchronisiert werden (sog. „Backing Beans“, im wesentlichen für den Controller Karl M. Göschka Seite 42 / 63 WEB v3.2 Web Presentation Tier im MVC zuständig) und werden automatisch in eine geeignete HTML-Darstellung für den Browser übersetzt. Der Entwickler konzentriert sich also auf UI Komponenten, Events und Listener, Backing Beans, und deren Interaktionen untereinander und mit den Geschäftsobjekten wie in jedem anderen UI Framework auch. Durch diese Kapselung des Request/Response-Verhaltens sowie des Seiten-Markups (i.Allg. HTML) hinter wiederverwendbaren, interaktiven UI Komponenten soll die Web-UI Entwicklung durch Re-Use effizienter und durch verbesserte Wartbarkeit billiger werden. Das ist das ultimative Ziel von JSF. 3.3.3. Die Bausteine von JSF in Bezug auf MVC JSF umfasst im Wesentlichen folgende Bestandteile, wobei auch die Zuordnung zum MVC Pattern hergestellt wird: UI Komponente (auch „Widget“ und leider auch „Control“ genannt): Diese hierarchisch organisierten Bausteine bilden das UI. Jeder Baustein ist mit einer bestimmten Darstellung und mit einer möglichen Funktionalität assoziiert. UI Komponenten sind vollwertige, zustandsbehaftete, Server-seitige JavaBeans. Bezüglich MVC gehören die UI Komponenten v.a. zum View, die Funktionalität des User-Input jedoch zum Controller. Renderer: Zuständig für die Darstellung einer Komponente (View), aber auch für die Umwandlung der Benutzereingaben in den Zustand der Komponente (Controller). Renderers sind in Form von Render Kits organisiert, welche neben HTML auch für andere Technologien wie WML oder SVG (Scalable Vector Graphics) zuständig sein können. Validator: Realisiert die Überprüfung der Gültigkeit von Eingabewerten (Controller im MVC). Zu einer UI Komponente können mehrere Validators assoziiert werden. Backing Beans: Nehmen Werte aus den UI Komponenten auf und implementieren die Event Listener Methoden. Backing Beans können auch Referenzen zu UI Komponenten enthalten, wodurch sie in die Lage versetzt werden, den View zu verändern. Bzgl. MVC gehören sie folglich zum Controller 50. 49 Man kann JSF natürlich auch mit Rich Internet Technologien wie JavaScript oder Ajax kombinieren. JSF benötigt diese Technologien jedoch nicht und funktioniert auch mit reinem HTML. 50 In der Literatur werden Backing Beans tlw. mit Managed Beans verwechselt: Managed Beans sind jene Beans, die durch Konfiguration dem JSF Framework bekannt sind. Dabei kann es sich um Komponenten des Models handeln (dann als Model Beans bezeichnet) oder eben um Backing Beans. Model Beans gehören zur Karl M. Göschka Seite 43 / 63 WEB v3.2 Web Presentation Tier Converter: Erledigen die Umwandlung von String zu Typ und vice-versa. Gehören daher – je nach Konversionsrichtung – zum View oder zum Controller. Events und Listeners: UI Komponenten (und auch andere Quellen) generieren Events, die von Listenern abgefangen und verarbeitet werden. Listener werden in der Regel in Backing Beans implementiert und gehören zum Controller. Messages: Dient der Darstellung von Informations- und Fehlermeldungen, die von den anderen Bausteinen (Backing Beans, Validators, Converter, ...) erzeugt wurden. Gehört bzgl. MVC daher zum View. Navigation: Beschreibt die Navigation zwischen den JSF Seiten durch einfache und übersichtliche Regeln. Ist nicht Bestandteil des MVC, sondern gehört zum Application Controller Pattern [5]. Wie man aus dieser Auflistung sieht, ist die Trennlinie zwischen View und Controller zwar gegeben, zieht sich aber oft mitten durch Bausteine und Komponenten und ist daher bei der praktischen Arbeit mit dem Framework nicht dominant: Zum View gehören die JSF Seiten (UI Komponenten), die Messages, und ein Teil der Renderer und Converter. Zum Controller gehören die Backing Beans mit den Listenern, jener Teil der UI Komponenten der das Binding regelt, die Validators, und ein Teil der Renderer und Converter. Sinnvollerweise ist die Trennung zwischen UI (View und Controller) und Model deutlich gegeben: Ein Model Bean kann zwar als Managed Bean vom Controller (Backing Bean Listener) oder vom View (JSF Seite) gelesen und geschrieben werden, das Model Bean selbst darf gemäß MVC keine Referenz auf das UI besitzen. Weitere Details zu den einzelnen Bausteinen können in [6] nachgelesen werden. 3.3.4. Die Bearbeitung einer JSF Anfrage An dieser Stelle soll der komplette Ablauf eines JSF Requests dargestellt werden, wodurch das dynamische Zusammenwirken der vorhin aufgezählten Bausteine verdeutlicht wird. Bild 3.5 zeigt den gesamten Ablauf. Geschäftslogik und kennen das UI nicht. Backing Beans sind folglich jene Managed Beans, die keine Model Beans sind. Ein Model Bean sollte gem. MVC nur „assoziiert“ (value-Expression) werden und keine Referenz auf das UI enthalten, während ein Backing Bean auch „gebunden“ (binding-Expression) werden kann und dann auf das UI (den View) zugreifen kann. Letzteres ist nicht zwingend notwendig und auch fraglich ob das guter Stil ist: Besser ist es, wenn der View seine Darstellung aus Model- und Helper-Daten selbst modifiziert. Karl M. Göschka Seite 44 / 63 WEB v3.2 Web Presentation Tier Bild 3.5: JSF Request Processing Lifecycle [6] Karl M. Göschka Seite 45 / 63 WEB v3.2 Web Presentation Tier Wie man erkennen kann, werden nach den meisten Phasen die generierten Events verteilt, was auch zu einem Überspringen einzelner Phasen führen kann. Weiters kann eine Phase Ihren Output entweder selbst erzeugen oder den Renderer dafür benutzen. Der wichtigste Punkt in diesem Ablauf ist vor der Phase „Invoke Application“, da unmittelbar danach die Geschäftslogik aufgerufen wird. Bis dahin hilft das JSF Framework den Komponenten-Baum aufzubauen und mit Daten aus dem UI zu befüllen, Validations waren zu diesem Zeitpunkt erfolgreich, und Backing Beans sowie Model Beans haben die neusten Daten aus der laufenden Benutzerinteraktion erhalten. Kurz gesagt, alle Detailinformationen des Requests sind auf der Abstraktionsebene des Komponenten-Frameworks verfügbar und können dort bearbeitet werden. Zuletzt noch eine Auflistung der Phasen im einzelnen: Restore View: Der aktuelle View (die hierarchische Komponentenstruktur) wird gefunden (oder erzeugt), um den aktuellen User-Input darauf anzuwenden, dahinter verbirgt sich auch das Session-Management. Dabei werden auch durch die binding-Expression angebundene Backing Beans mit der Komponenten-Hierarchie des Views synchronisiert. Apply Request Values: In dieser Phase werden die Server-seitigen Komponenten-Instanzen mit den Werten der übergebenen Parameter (Cookies, HTTP Header) befüllt. Nach Bedarf werden Konverter und Renderer bemüht um das Dekodieren und die Typenkonversion zu unterstützen. Dabei können auch Fehlermeldungen und Events erzeugt werden. Process Validations: Die Validierung der eingegebenen Daten wird durchgeführt, ggf. werden Fehlermeldungen und Events erzeugt, wie in fast jeder Phase. Update Model Values: Die Werte der Server-seitigen UI Komponenten werden in die durch die value-Expression assoziierten Managed Beans (Model Beans oder Backing Beans) übernommen. Invoke Application: Nun werden die Events zu den zugehörigen Listenern verteilt und dort (i.Allg. in den Backing Beans) abgearbeitet. Dabei werden Model Beans und View verändert, Messages und ggf. Events erzeugt und schließlich der Output für das Navigationssystem generiert, sodass auf Basis der Navigationsregeln der nächste View ausgewählt werden kann. Render Response: Der ausgewählte View wird (mit Convertern) gerendert, dabei Model Bean Daten, Backing Bean Daten und Messages eingebaut. Zuletzt wird der View gespeichert, damit er für zukünftige Fortsetzungen der Session bereit steht. Weitere Details zu diesem Ablauf können in [6] nachgelesen werden. Karl M. Göschka Seite 46 / 63 WEB v3.2 Web Presentation Tier 4. Rich Internet Technologien (RIT) Rich Internet Technologien sind Client-seitige Technologien, die versuchen Schwächen von reinem HTML in Kombination mit HTTP v.a. durch Erweiterung der Browser-Funktionalität zu überwinden. Das ultimative Ziel der RIT ist es, sogenannte „Rich Internet Applications“ (RIAs) zu ermöglichen, das sind Web-Anwendungen, welche dem Benutzer dieselben Möglichkeiten bieten wie eine Desktop-Anwendung, insbesonders hinsichtlich der Interaktivität, den Antwortzeiten, der Multi-Media Integration, und den „Community Features“ wie Blogs, Forums, Voting, etc. Rich Internet Technologien lassen sich mit Web Frameworks durchaus kombinieren – statt Server-seitig reines HTML zu generieren, kann man auch HTML mit eingebetteten Rich Internet Technologien generieren und auf diese Weise die UI Funktionalität zur Laufzeit zum Teil in den Browser auslagern. Eine der ersten dieser Technologien war das Java Applet, welches sich aber letztendlich nicht durchsetzen konnte (Abschnitt 4.1). Erwähnt werden sollen auch Active-X Controls als proprietäre Applet-Alternative von Microsoft, die im Internet Explorer bis heute noch da und dort Verwendung findet. Active-X gehört zur Familie der Microsoft Component Object Model (COM) Technologien und ist sowohl Browser- als auch Betriebssystem-spezifisch. Active-X Controls haben vollen Zugriff auf das Betriebssystem und sind daher nicht ganz unproblematisch, u.a. hinsichtlich Dependability und Security 51. Von der Verbreitung her erfolgreicher als Applets ist das Client-seitige Scripting, v.a. in Kombination mit dem Document Object Model, welches es dem Script gestattet, auf die aktuell angezeigte Seite aus dem Script-Programm heraus zuzugreifen. Einen weiteren signifikanten Schritt hat Ajax (Asynchronous JavaScript and XML) gemacht, eine Technik die es in Kombination mit DOM und Scripting gestattet durch RPC 52-artige Zugriffe auf den Web-Server Teile der angezeigten Seite zu aktualisieren. Diese Technologien werden in den folgenden Abschnitten exemplarisch kurz vorgestellt. Auch Browser-Plugins stellen eine Möglichkeit dar, sind jedoch spezifische und lokal zu installierende Erweiterungen der Browserfunktionalität und daher auf den jeweiligen Browser 51 http://www.microsoft.com/protect/terms/ActiveX.aspx 52 Remote Procedure Call Karl M. Göschka Seite 47 / 63 WEB v3.2 Web Presentation Tier zugeschnitten. Um diese Browser-Abhängigkeit zu überwinden, bieten etliche Hersteller ihre Plugins einfach in verschiedenen Varianten für die gängigen Browser an, siehe z.B. das Google Earth Plugin 53. Alle Rich Internet Technologien hier aufzuzählen würde den Rahmen sprengen und wäre auch bald obsolet, da sich in diesem Bereich immer noch viel verändert. Für den interessierten Leser lediglich erwähnen wollen wir an dieser Stelle Adobe’s (Macromedia’s) Flash 54 (der Flash Player ist als Cross-Plattform Plugin realisiert) und Flex 55 (das Framework zu Flash), oder Microsoft’s Antwort auf Flash – Microsoft Silverlight 56, oder Sun’s/Oracle’s Antwort auf Flash – JavaFX 57. Weiters Mozilla’s XBL 58, sowie Microsoft’s DHTML Behaviours 59 (DHTML – Dynamic HTML – selbst ist eher ein Marketing-Begriff und als solcher ein Vorläufer von „Richt Internet Technologies“. DHTML bezeichnet dabei i.Allg. die Kombination aus CSS, DOM und Client-seitigem Scripting 60). 4.1. Java-Applets Java-Applets enthalten Klassen, die von einem Web-Browser ausgeführt werden können. Applets werden mit dem applet-Tag oder dem object-Tag in HTML-Seiten eingebettet und besitzen prinzipiell eine grafische Benutzeroberfläche. Applets unterliegen besonders restriktiven Einschränkungen, um die Sicherheit zu gewährleisten: Es gibt keinen Zugriff auf lokale Ressourcen, und Netzwerkzugriff ist nur auf jenen Server gestattet, von dem das Applet geladen wurde. Daher können Datenbankzugriffe oder Socket-Kommunikationen nur über diesen Wirts-Server abgewickelt werden. Diese Restriktionen können zwar auf ClientSeite gelockert werden (für signierte bzw. „trusted“ Applets), was aber mit Zertifizierungsund Authentifizierungsvorgängen verbunden ist. Dies ist aber nur für Anwendungen im Intranet oder zumindest im Rahmen des Virtual Private Network VPN eines Unternehmens 53 http://earth.google.com/plugin/ 54 http://www.adobe.com/de/flashplatform/ 55 http://www.adobe.com/de/products/flex/ 56 http://www.microsoft.com/silverlight/ 57 http://javafx.com/ 58 XML Binding Language, siehe https://developer.mozilla.org/en/XBL 59 http://msdn.microsoft.com/en-us/library/ms531078 60 http://msdn.microsoft.com/en-us/library/ms533044 oder https://developer.mozilla.org/en/DHTML Karl M. Göschka Seite 48 / 63 WEB v3.2 Web Presentation Tier sinnvoll, da man die gelockerte Sicherheit ja nur dann als Applet-Entwickler ausnutzen kann, wenn man die Freigaben garantiert auf allen Clients zur Verfügung hat. Bild 4.1 zeigt ein einfaches Applet sowie eine Möglichkeit der Einbettung in eine HTML-Seite. import java.applet.Applet; import java.awt.Graphics; public class HelloWorld extends Applet { public void paint(Graphics g) { g.drawString("Hello world!", 50, 25); } } <html> <head><title> A Simple Program </title> </head><body> <p>Here is the output of my program: <applet code="HelloWorld.class" align="baseline" width="150" height="25"> </applet> </p></body></html> Bild 4.1: Java-Applet und umgebende HTML-Seite Damit bietet sich die Möglichkeit, nicht nur das GUI sondern auch einen Teil der Anwendungslogik am Client auszuführen, wodurch die Softwarearchitektur unter Verwendung von Applets etwas anders aussieht (vergleiche Bild 2.1 auf Seite 15). Speziell für Intranet-Anwendungen ergibt sich auch der Vorteil des Thicker Client mit mehr Funktionalität am Client ohne den administrativen Nachteil, weil das Applet zentral am Server verwaltet wird: Allerdings hat man dadurch einen größeren Bandbreitenbedarf beim Starten (Laden) des Applet, wobei intelligente Cache-Verfahren diese Problem nachhaltig lindern können: Java Web Start (JWS) bietet in diesem Zusammenhang folgende Möglichkeit: Der JavaCode wird ebenfalls dynamisch zum Client geladen, dort aber auf Basis eines Cache-Mechanismus mit der Arbeitsplatzoberfläche dauerhaft verknüpft, wobei ein automatisches Update stattfindet. Die einzige Voraussetzung für den Einsatz von Java-Applets am Client ist ein Java-fähiger Browser – und war lange Zeit in Hinblick auf die verschiedenen Versionen von Java und der Browser in keinster Weise trivial. Der Offline-Betrieb ist in diesem Fall nicht möglich – zumindest am Beginn braucht man eine Verbindung, um das Applet zu laden. Die Vor- und Nachteile des Applet gegenüber eine Java-Desktop-Applikation stellen sich wie folgt dar: Karl M. Göschka Seite 49 / 63 WEB v3.2 Web Presentation Tier Vorteile: Keine Installation oder Administration am Client notwendig61, einfache Administration am Server. Immer nur eine Version zu einer Zeit im Einsatz (keine Interaktionen zwischen verschiedensten Versionen). Nachteile: Zugriff auf lokale Ressourcen ist zwar möglich (signierte Applets), dann aber etwas aufwändiger, weil lokale Administration am Client benötigt wird. Offline-Betrieb ist nicht möglich, bei Beenden des Browsers geht der Zustand des Applets verloren. Die Flexibilität ist verringert, da eine Verbindung auf andere Server nicht möglich ist ohne das Applet von diesem neu zu laden. Kompatibilitäts- und Versionsprobleme mit den Browsern. Java-Applets können v.a. im Intranet eingesetzt werden und sind dort im Vergleich zu JavaApplikationen am Client beim Administrationsaufwand wesentlich günstiger. Im Gegensatz dazu ist im Internet der Null-Installationsaufwand am Client überhaupt Voraussetzung dafür, einen beliebigen Internetkunden ansprechen zu können. In diesem Bereich ist HTML als Konkurrenz zu Java zu sehen, weshalb dem Vergleich zwischen HTML und Java-Applets der nächste Abschnitt gewidmet ist. 4.1.1. Vergleich von Java-Applets und reinem HTML Java-Applets können dazu dienen, mehr Funktionalität am Client zur Verfügung zu haben und damit das Netzwerk zu entlasten. Damit sind Applets tendenziell effizienter für länger andauernde Interaktionen mit dem Benutzer. Außerdem kann das GUI aufwändiger und komfortabler gestaltet werden. Ein Nachteil von Applets ist die Download-Zeit am Beginn, dafür verursacht das Applet danach weniger Netzwerkverkehr, weil nur die benötigten Daten anstatt ganzer HTML-Seiten ausgetauscht werden 62. Eine quantitative Analyse anhand einiger realer Implementierungen hat ergeben, dass die reine HTML-Implementierung für viele typische Internet-Anwendungen nicht nur die kürzere Antwortzeit bringt, sondern auch 61 Wenn man von potenziellen Versionsproblemen absieht, ist diese Aussage richtig. 62 Dieser Vorteil wird mittlerweile auch von Ajax erzielt. Karl M. Göschka Seite 50 / 63 WEB v3.2 Web Presentation Tier insgesamt effizienter ist, weil viele typische Geschäftsfälle im Internet aus relativ wenigen Interaktionen bestehen. Es ist auch kein Zufall, dass die meisten großen Anbieter im Internet schon lange eine HTML-basierte Lösung verwenden. Gute Beispiele dafür sind der Versand von Büchern, CDs, Videos, usw., sowie Internet-Reisebüros mit der Möglichkeit der Reservierung, Buchung und Bezahlung von Flügen, Hotels und Mietwagen. Bild 4.2 liefert eine Möglichkeit abzuschätzen, ab welcher Anzahl von User-Interaktionen die Java-Variante die HTML-Variante übertrifft. Wie man in der Grafik erkennt, muss man dazu lediglich die Summe aus Applet-Größe und initialem Daten-Preload durch die Differenz aus der durchschnittlichen HTML-Seitengröße und der durchschnittlichen Datenmenge pro Interaktion mit Java dividieren. Date n Durch sch nittlich e Datenm enge, die pr o User- Intera ktion ausge taus cht w ird Daten Preload Durch sch nittlich e Größ e eine r H TML Seite Applet D ow nload HT ML Bild er Java Us er Interaktionen Bild 4.2: Quantitativer Vergleich von Java und HTML Wenn man es ganz genau wissen will, kann man auch mithilfe von Netzwerk-Analysewerkzeugen Messungen im realen Betrieb durchführen. Bild 4.3 zeigt die gute Übereinstimmung der gemessenen Ergebnisse mit der theoretischen Abschätzung anhand eines solchen Analysewerkzeuges. Der qualitative Vergleich zwischen Java und reinem HTML als Interface für Web-basierte Anwendungen hat folgende Ergebnisse aus der Praxis gebracht: User Interface: Mit reinem HTML besteht keine Möglichkeit des Event-Handlings im User Interface. Eine HTTP-Verbindung ist notwendig, bevor funktionale Abhängigkeiten oder Einschränkungen die nachfolgende Eingabe beeinflussen können. Zu diesem Zweck muss aber erst ein Link explizit angeklickt werden, es genügt nicht, einfach ein Feld auszufüllen. JavaScript (und insbesonders in der Kombination mit Ajax) bietet hier eine Möglichkeit, diese Karl M. Göschka Seite 51 / 63 WEB v3.2 Web Presentation Tier Schwäche des HTML-Interface zu überwinden. Der Vorteil von HTML hingegen liegt in der einfachen Gestaltung einer grafisch anspruchsvollen Seite. Performance: Mit reinem HTML resultiert jede einzelne User-Interaktion in einer HTTPVerbindung, wobei wiederum eine ganze HTML-Seite zurückgeliefert werden muss und nicht etwa nur jene Daten, die sich geändert haben (hier bietet Ajax mittlerweile eine Alternative). Daher werden mit Java nicht nur weniger Verbindungen benötigt, sondern außerdem pro Verbindung weniger Daten übertragen. Leider muss das Applet zuerst geladen werden, was einen großen Aufwand am Beginn mit sich bringt und die Akzeptanz der Benutzer herabsetzt. Zudem benötigt der Browser eine Java Virtual Machine (JVM), die ggf. erst nachgeladen werden muss, zumindest aber lokal gestartet werden muss, was auch einige Zeit dauern kann und keinesfalls eine flüssige Interation gestattet. Daher ist die Java-Variante vor allem für länger andauernde oder komplexere Interaktionen von Vorteil, während kurze, einfache Interaktionen mit reinem HTML effizienter zu implementieren sind. Ein gutes System sollte diese Wahl dem Benutzer überlassen und beide Varianten anbieten. Bild 4.3: Analysewerkzeug zum Vergleich von Java und HTML Karl M. Göschka Seite 52 / 63 WEB v3.2 Web Presentation Tier Server-Auslastung: Reines HTML benötigt mehr Ressourcen des Servers, weil auch die gesamte GUI-Information in Form dynamischer Zustandsinformation auf dem Server gespeichert und verwaltet werden muss. Kompatibilitätsprobleme: Sind bei der HTML-Variante wesentlich geringer als mit Java. Während zu Beginn das Problem eher daran lag, einen Browser mit einer aktuellen JVM zu finden, benötigen heute umgekehrt viele (noch) verfügbare Applets spezielle ältere JVM Versionen, die oft nicht mehr verfügbar sind. Design-Methoden: Die Java-Variante kann sich die objektorientierten Design-Methoden zunutze machen, während bei der HTML-Variante die Tendenz zu einem Designbruch besteht. Wartbarkeit und Erweiterbarkeit sind daher bei der HTML-Variante zunächst stärker eingeschränkt gewesen als bei der Java-Variante, was aber durch moderne Frameworks wie JSF mittlerweile relativiert wird. Integration von Multimedia-Inhalten: Bilder können bei beiden Varianten leicht implementiert werden, jedoch ist Java überlegen bei der Wiedergabe komplexer MultimediaInhalte, z. B. Video-Sequenzen. HTML ist hier auf Erweiterungen durch Rich Internet Technologien angewiesen. Barriere-Freiheit: Umgekehrt ist HTML aufgrund der deskriptiven Natur wieder besser in Hinblick auf Barriere-Freiheit, die von Applets kaum geeignet unterstützt wird. Suchmaschinen: Während die Inhalte von HTML (auch mit den meisten Rich Internet Technologies) für Suchmaschinen gut zugänglich sind, gilt dies nicht für Java Applets, die allenfalls durch die umgebende HTML Seite (indirekt) gefunden werden können. Upload von Dateien auf den Server: Relativ einfach mit HTML. Bei Java aufgrund des restriktiven Sicherheitsmodells sehr aufwändig und nur mit signierten Applets und Anpassungern der Sicherheitseinstellungen möglich. Aktiver Server und Groupware: In der HTML-Variante sind aktive Elemente nur durch aktuelle Rich Internet Technologien wie Ajax möglich, während dies kein Problem für Java darstellt. Datenbank-Transaktionen: Mit reinem HTML (selbst unter der Verwendung von Cookies) erfordert die zustandslose HTTP-Verbindung eine komplexe Zustandsverwaltung und entsprechende Time-Out-Mechanismen. Die eigentliche Datenbank-Transaktion wird also erst geöffnet, wenn der User den Vorgang endgültig freigibt (Single Shot Transaction). Dabei kann es aber passieren, dass die Transaktion nicht durchgeführt werden kann, weil sich an den Karl M. Göschka Seite 53 / 63 WEB v3.2 Web Presentation Tier zugrunde liegenden Daten in der Zwischenzeit etwas geändert hat. Ergo bedeutet die HTMLVariante letztendlich keine Unsicherheit bei den Transaktionen, aber möglicherweise geringeren Komfort beim Endbenutzer während der Durchführung von Transaktionen. Umgekehrt bieten JDBC und RMI alle Möglichkeiten, um sichere Transaktionen bis zum User Interface durchführen zu können. Sicherheit: Applets bieten hier aufgrund der Sandbox ein hohes Maß an Sicherheit. Reines HTML birgt auch kaum Sicherheitsrisiken, aber HTML erweitert um Rich Internet Technologien (und hier v.a. das Scripting) hat in der Vergangenheit immer wieder zur Sicherheitslücken geführt. Umgekehrt hat das restriktive Sicherheitsmodell von Java bei Applet-Entwicklern immer wieder zu Kopfzerbrechen geführt, da bestimmte Funktionalität dann eben nicht oder nur aufwändig zu implementieren ist. Summa summarum hat sich das Applet nicht durchgesetzt und ist weitgehend in der Versenkung verschwunden. Moderne Rich Internet Technologien (und hier insbesonders Ajax) in Kombination mit modernen UI Frameworks wie JSF können in Kombination mit HTML dieselben Vorteile wie Applets bieten, als einziger Nachteil bleibt allenfalls die größere Anfälligkeit für Security-Probleme. Zu den übrig gebliebenen Einsatzbereichen gehören komplexe, interaktive Visualisierungsaufgaben wie z.B. wissenschaftliche Darstellungen oder Car-Konfiguratoren, bei denen aber auch allmählich Applets von Ajax abgelöst werden [7]. 4.2. DOM – Document Object Model Das Document Object Model DOM geht aus einer Standardisierungstätigkeit des W3C hervor 63. Dabei wird eine interoperable Menge von Klassen und Methoden definiert, die dazu dienen, XML-Dokumente (und damit auch HTML- oder WML-Dokumente) aus Programmiersprachen wie Java, C++, oder Scriptsprachen heraus zu manipulieren. Es handelt sich dabei um ein API für Dokumente, es spezifiziert nur die Interfaces, nicht aber die Implementierung. Um eine wirklich präzise und sprachunabhängige Spezifikation des DOMInterface zu erreichen, hat sich das W3C dazu entschlossen, die Spezifikation in OMG IDL zu beschreiben. Die grundsätzliche Arbeitsweise mit DOM gestaltet sich wie folgt: Aus dem Dokument wird eine Objekthierarchie aufgebaut, sozusagen ein Spiegel des Dokumentes in Form einer Menge 63 http://www.w3.org/standards/techs/dom Karl M. Göschka Seite 54 / 63 WEB v3.2 Web Presentation Tier assoziierter Objekte gleicher Struktur – man könnte in diesem Sinne umgekehrt das XMLDokument auch als strukturierte Serialisierung der Objektstruktur ansehen. Dies ermöglicht den wahlfreien Zugriff auf alle Elemente des Dokumentes. Bild 4.4 zeigt die DOMGrundstruktur. 0..n NamedNodeMap <<interface>> Node <<interface>> 1 attributes Data <<interface>> Attribute <<interface>> Text <<interface>> Comment <<interface>> 0..n 1 childNodes Element <<interface>> NodeList <<interface>> DocumentFragment <<interface>> Document <<interface>> masterDoc CDATASection <<interface>> Bild 4.4: Ein DOM besitzt vom Grundprinzip her Baumstruktur Das DOM stellt nun APIs zur Verfügung, die es gestatten, einzelne Knoten im Baum einzufügen, zu verändern, zu löschen oder neu anzuordnen. Obwohl die Level-1-Spezifikation von DOM nichts über den Vorgang der Konversion zwischen XML-Dokument und DOM aussagt, bieten die meisten Anbieter von DOM-Implementierungen einen einfachen Weg für diese Umformung, meist in Form eines einzigen Methodenaufrufes pro Umwandlungsrichtung, also einen Aufruf für das Einlesen eines XML-Dokumentes in einen DOM-Baum und einen zweiten Aufruf für das Serialisieren 64 des DOM-Baumes in ein XMLDokument. Das von den Browsern für Client-seitige Script-Sprachen zur Verfügung gestellte DOM API ist ein wichtiger Baustein für Rich Internet Technologien: Es ermöglicht das momentan angezeigte Dokument zu lesen und auf nahezu beliebige Art zu steuern und zu verändern. Jedes HTML-Element ist im DOM Baum verfügbar, wodurch dessen Eigenschaften aus Programmen heraus durch simplen Aufruf von get() und set() Methoden gelesen und manipuliert werden können. Darüber hinaus bieten die DOM Implementierungen im Browser auch Zugriff auf Benutzeraktionen wie das Betätigen einer Taste oder das Steuern mit der 64 Der Begriff „Serialisieren“ ist hier nicht ganz zutreffend, weil die Struktur ja im XML-Dokument erhalten bleibt. Man kann von Serialisierung also nur insoweit sprechen, als die Datei insgesamt einen Bytestrom darstellt. Karl M. Göschka Seite 55 / 63 WEB v3.2 Web Presentation Tier Maus. Für diese Events können Event Handler geschrieben werden, welche wiederum via DOM das Dokument modifizieren können. Mehr dazu anhand von JavaScript im nächsten Abschnitt. 4.3. Client-seitiges Scripting: JavaScript JavaScript wurde ursprünglich als „LiveScript“ von Netscape aus der Taufe gehoben und lediglich aus Marketing-Gründen in JavaScript umbenannt. Trotz einiger syntaktischer Ähnlichkeiten (u.a. bei den Kontrollstrukturen) hat JavaScript somit mit Java nichts zu tun, Bild 4.5 wiederholt die wichtigsten Unterschiede mit Fokus auf das Java Applet als möglichen Konkurrenten bezüglich der Erweiterung der Client-seitigen Funktionalität. JavaScript Java (v.a. Applet) Als Teil der HTML Seite (oder Kompilierter Bytecode wird geladen und auf indirekt) geladen und interpretiert vom dem Client (JVM als Plugin im Browser) Client (Browser). ausgeführt. Objektbasiert: keine Unterscheidung Klassenbasiert: Objekte werden eingeteilt in zwischen Objekttypen; Methoden und Klassen und Instanzen; Vererbung durch die Eigenschaften können dynamisch Klassenhierarchie; hinzugefügt werden. Methoden und Eigenschaften können nicht dynamisch hinzugefügt werden. Datentypen nicht deklariert. Datentypen müssen deklariert werden. Kein Sicherheitsmodell, läuft mit Java Sicherheitsmodell, Applet zusätzlich in Browser-Rechten. Sandbox. Bild 4.5: Vergleich von Java und JavaScript In weiterer Folge hat die European Computer Manufacturers Association (ECMA) unter ECMA-262 einen Standard für Scriptsprachen geschaffen, an den sich JavaScript 65 mittlerweile recht gut hält und der von den meisten Browsern gut unterstützt wird. Ursprünglich war JavaScript auch für den Server-seitigen Einsatz vorgesehen (ähnlich einem Server Side Include), dies hat sich jedoch nicht durchgesetzt. Etwa zeitgleich mit dem Aufkommen von JavaScript hat Microsoft unter JScript 66 eine Alternative angeboten, die zunächst proprietär und JavaScript recht ähnlich war und dieses v.a. erweitert hat. Auch JScript hat sich mehr oder weniger an den ECMA-262 Standard 65 https://developer.mozilla.org/en/JavaScript 66 http://msdn.microsoft.com/de-de/library/72bd815a Karl M. Göschka Seite 56 / 63 WEB v3.2 Web Presentation Tier angepasst und mittlerweile werden die von JScript eingeführten Erweiterungen auch von anderen Browsern unterstützt. Von Microsoft wird Visual Basic Script, kurz VBScript 67, als weitere Scripting-Sprache für den MS Internet Explorer angeboten. VBScript ist als Client-seitiges Scripting nicht sehr verbreitet und wird im Wesentlichen in Kombination mit Active-X Controls verwendet, da VBScript auf Component Object Model (COM) Komponenten zugreifen kann. JavaScript. JavaScript ist eine objektbasierte Skriptsprache, der Sourcecode wird also während der Laufzeit interpretiert. Es wird mit dem <script> Tag ins HTML eingebunden und ist entweder eingebettet oder wird indirekt durch eine URL im HTML nachgeladen. JavaScript verfügt über sinnvolle Standardklassen wie String, Array, Date, Math, etc. Wichtiger ist jedoch der Zugriff auf die dargestellte HTML-Seite und den Browser, u.a. mit den DOM Objekten navigator, screen und window, welche für JavaScript vom Browser bereitgestellt werden 68. Das navigator Objekt dient der Verwaltung des Browsers und ermöglicht den Zugriff auf Name und Version des Browsers, sowie die Information ob im Browser Java Applets ausgeführt werden können bzw. welche Browser Plugins zur Verfügung stehen. Damit kann man sogenannte „Browser-Weichen“ implementieren, mit denen je nach Browser-Hersteller und Version die optimale Script-Variante gewählt werden kann. Das screen Objekt bietet Informationen über den Bildschirm wie Pixelgröße und Farbtiefe. Das windows Objekt ermöglicht Zugriff auf das aktuelle Fenster und enthält insbesonders das document Objekt, hinter dem sich die DOM Version der aktuell im Browser angezeigten HTML Seite verbirgt. Durch Zugriff z.B. auf jene Elemente die ein Formular repräsentieren, kann die unten angesprochene Prüfung von Formulareingaben erfolgen, indem der Klick auf den Submit Button auf das Script umgeleitet wird. Ebenso wichtig wie der Zugriff auf die DOM Objekte ist das Event Handling, welches JavaScript mit Ereignissen im Browser verbinden kann. Typische Ereignisse sind onChange, onClick, onFocus, onKeypress, onMouseover, und viele weitere mehr. Mittlerweile sind diese JavaScript Event-Handles zu einem Bestandteil von HTML geworden. Damit kann Client-seitig auf Ereignisse reagiert werden, was mit rein Server-seitig generiertem HTML ohne Scripting nicht möglich wäre. 67 http://msdn.microsoft.com/en-us/library/t0aew7h6 68 https://developer.mozilla.org/en/DOM Karl M. Göschka Seite 57 / 63 WEB v3.2 Web Presentation Tier JSON. Die JavaScript Object Notation 69 soll an dieser Stelle ebenfalls kurz erwähnt werden. Sie bietet eine einfachere Alternative zu XML als reines Textformat für den Datenaustausch, wodurch der Datenaustausch zwischen Client-seitigem Scripting und Server-seitiger Funktionalität erleichtert werden kann. Möglich sind Key-Value Paare und verkettete Listen in einer recht einfachen Syntax. Fazit. Zusammenfassend kann JavaScript verwendet werden um dem UI im Browser jene Dynamik zu verleihen, die durch reine Request/Response-Interaktionen zwischen Client und Server allein nicht möglich sind, also z.B. unmittelbare Reaktionen auf UI Events, sofortige Überprüfung der Eingaben in Formularen, oder Steuerung des Browser-Verhaltens. Für den Service-Anbieter, der seine Seiten mit JavaScript mit entsprechender Funktionalität anreichern möchte ist dennoch zu bedenken, dass der Browser die richtige Version der Scriptsprache unterstützen muss und der Benutzer diese auch gestatten muss, was keineswegs selbstverständlich ist. Jedenfalls sollte eine gute Web-Applikation auch ohne JavaScript zumindest noch funktionieren, da viele Internet-Benutzer diese Funktion auch schlicht und einfach im Browser deaktiviert haben, um potenzielle Security- beziehungsweise Privacy-Probleme zu vermeiden 70. 4.4. Ajax – Asynchronous JavaScript and XML Mit all den bisherigen Ansätzen bleibt doch ein Problem, welches unmittelbar mit dem ursprünglichen Zusammenspiel von HTML und HTTP verbunden ist: Wenn – trotz aller Rich Internet Technologien auf Client-seite – Information vom Server nachgeladen werden muss, dann kann dies nur in Form einer vollständigen neuen Seite geschehen. Und genau hier setzt Asynchronous JavaScript und XML – kurz Ajax 71 – an. Ajax ist keine gänzlich neue Technologie, sondern kombiniert JavaScript, DOM und XML um durch eine Art RPC 69 http://www.json.org/ 70 Im CERT Advisory CA-2000-02 wird empfohlen, aus Sicherheitsgründen auf die Verwendung jeglicher Skript-Sprachen zu verzichten. Der Grund liegt darin, dass Scriptsprachen das Browser-Verhalten verändern können und schon allein dadurch den Benutzer täuschen können. Desweiteren kann ein Script bereits während des Ladens der HTML Seite ausgeführt werden oder im Hintergrund eine Kommunikation aufbauen. Moderne Browser fangen derartiges Verhalten ab (je nach Sicherheitseinstellungen) und lassen dem Benutzer die Wahl. Dennoch bringen neue Features in diesem Bereich auch immer wieder neue Sicherheitslücken. Karl M. Göschka Seite 58 / 63 WEB v3.2 Web Presentation Tier (Remote Procedure Call) einen kleinen Teil einer Web Seite nachladen zu können ohne die Seite insgesamt nachladen zu müssen. In Bild 4.6 wird die grundlegende Funktionsweise dargestellt: Ausgelöst z.B. durch einen Event wird über einen Event Handler der JavaScript Code aufgerufen, der den Ajax-Request durchführen soll. Dieser führt den Request durch, wobei die Wahl zwischen synchron oder asynchron besteht: Asynchron bedeutet hier, dass der JavaScript Code nicht blockiert wird bis die Antwort da ist, sondern stattdessen das Eintreffen der Antwort über einen „Completion Handler“ (entspricht von der Funktionsweise her einem Call-Back) weiter verarbeitet wird. Der Completion Handler greift dann z.B. via DOM auf die aktuelle HTML Seite zu, um z.B. einen Teil dieser Seite durch den gerade neu geladenen Teil („Page Fragment“) zu ersetzen. Als Datenaustauschformat kann entweder XML oder JSON verwendet werden. Der Request kann auf einen Web Server (HTTP) oder ein Web Service (SOAP 72 oder REST 73) erfolgen. Web Page Updates page fragment Page fragment 1 JavaScript update code AJAX HTTP request Completion handler AJAX HTTP response Web Server Page fragment 2 Page fragment 3 Bild 4.6: Grundprinzip eines Ajax Requests Technisch gesehen, muss vor dem Ajax Request ein XMLHttpRequest Objekt erzeugt werden. Bild 4.7 zeigt anhand dieses Vorganges eine typische „Browser-Weiche“, wobei in diesem Fall auch noch proprietäre Active-X Controls zum Einsatz kommen. Das ist typisch für Client-seitiges Scripting, wo man immer wieder mit verschiedenen Browsertypen und Browser-Versionen konfrontiert wird. 71 http://www.ajax.org/ 72 http://www.w3.org/TR/soap/ 73 Representational State Transfer, eine Alternative zu SOAP Karl M. Göschka Seite 59 / 63 WEB v3.2 Web Presentation Tier if (window.XMLHttpRequest) { // Firefox, Opera, and IE >= 7 req = new XMLHttpRequest(); } else { // Older Internet Explorer try { // latest ActiveX req = new ActiveXObject('MSXML2.XMLHTTP.6.0'); } catch (e) { try { // older ActiveX req = new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) {req = false;} } } Bild 4.7: Das XMLHttpRequest Objekt in verschiedenen Browsern Im nächsten Schritt wird mit der open-Methode eine Verbindung zum Server hergestellt und der Completion Handler mit jener Funktion verbunden, die aufgerufen werden soll, wenn die Antwort (asynchron) zurückgeliefert wurde. Im Bild 4.8 ist das die Funktion processResult(). JavaScript var req; function processResult() { if (req.readyState == 4) { alert("AJAX call completed with response code: " + req.status); } } function execRequest() { req = new XMLHttpRequest(); // Firefox and IE >= 7 //"true" means asynchronous (AJAX) call req.open("GET", "http://www.mydomain.com/", true); //Register event handler req.onreadystatechange = processResult; req.send(null); } HTML <button onclick="execRequest()">AJAX call</button> Bild 4.8: Ajax Request und Completion Handler Schließlich wird der Antwortcode abgefragt („4“ bedeutet quasi „alles fertig“) und das Ergebnis steht im responseText zur Verfügung und kann via DOM im aktuellen HTML Karl M. Göschka Seite 60 / 63 WEB v3.2 Web Presentation Tier Dokument eingebaut werden. Im obigen Beispiel wird stattdessen nur der HTTP Status Code ausgegeben. Fazit. Ajax hat aus Benutzersicht sicherlich den größten Schritt in Richtung DesktopVerhalten für Web-Anwendungen gebracht: Durch das Ereignis-gesteuerte Nachladen von Server-Information wird die Responsiveness enorm gesteigert und die Netzwerkauslastung insgesamt reduziert. Dies alles wird ohne Plugin oder Applet erreicht. Aus Entwicklersicht ist Ajax mittlerweile gut in die Web-Frameworks (z.B. JBoss RichFaces 74 für JSF) eingebunden und in die Entwicklungsumgebungen integriert, sodass nun insgesamt sowohl für den Entwickler (MVC) als auch für den Benutzer (hier v.a. durch JavaScript und Ajax) eine starke Annäherung des Web UI an das gewohnte Desktop UI stattgefunden hat. Dies hat allerdings auch einen Preis: Back-Button, History und Lesezeichen können nicht wie gewohnt verwendet werden und Suchmaschinen müssen sich an Ajax auch erst „gewöhnen“. Nichtsdestotrotz hat Ajax eine derart rasante Entwicklung genommen, dass man davon ausgehen kann, dass diese Technologie in der einen oder anderen Art weitere Verwendung finden wird. 74 http://www.jboss.org/richfaces Karl M. Göschka Seite 61 / 63 WEB v3.2 Web Presentation Tier 5. Lehrzielorientierte Fragen 1. Wiederholen Sie die Basistechnologien des Web (HTML, HTTP, URI, CGI) und bewerten Sie diese in Hinblick auf ihre Anwendung als „Universal Client“ in Enterprise Software Systemen. 2. Zählen Sie verschiedene Client-Arten und Client-Anbindungsmöglichkeiten für verteilte Systeme auf (inkl. Web) und ordnen Sie diese den N-Schichten zu (bildliche Darstellung der N-Schichten mit Client-Anbindungen). 3. Welche Vorteile und welche Probleme besitzt ein Web-Client mit HTML, HTTP und CGI und wodurch sind die Probleme eigentlich entstanden? 4. Wie können Sie trotz Einsatzes von HTTP Zustandsorientierung bewirken? 5. Was sind Cookies? 6. Wie kann man mit Web-Clients Transaktionssicherheit erhalten? Was sind die möglichen Nachteile dieses Ansatzes? 7. Wie funktioniert die Web-Server Anbindung grundsätzlich? Welche Probleme gab es dabei mit CGI? 8. Wie funktionieren Servlets und JSP (Java Server Pages)? 9. Welche Probleme verstecken Script- und Seiten-basierte Anbindungen wie Servlet und JSP (Java Server Pages) und welche bleiben bestehen? 10. Welche Vor- und Nachteile haben Java Applikationen mit Netzwerk-Class-Loader? 11. Welche Vor- und Nachteile haben vollwertige Java-Applikationen? 12. Welche technologischen Herausforderungen kennzeichnen mobile Deivces für die UI Entwicklung? 13. Wozu braucht man GUI-Frameworks? 14. Erklären Sie das Model View Controller (MVC) Pattern. 15. Wenden Sie das MVC Pattern auf Web Applikationen mit Script- und Seiten-basierter Web-Anbindung an. 16. Erläutern Sie das Grundprinzip MVC-basierter UI Frameworks für das Web anhand von JSF. 17. Ordnen Sie die Bausteine von JSF dem MVC Pattern zu. 18. Erläutern Sie den Ablauf der Bearbeitung einer JSF Anfrage. Karl M. Göschka Seite 62 / 63 WEB v3.2 Web Presentation Tier 19. Was sind Rich Internet Technologien? 20. Wie funktionieren Java Applets und welche Probleme gibt es dabei? 21. Wie kann man Java Applets und HTML hinsichtlich Web-Applikationen quantitativ und qualitativ vergleichen? 22. Was ist das Document Object Model (DOM) und wozu wird es benötigt? 23. Erläutern Sie die Möglichkeiten und Probleme von Client-seitigem Scripting anhand von JavaScript. 24. Was ist eine „Browser-Weiche“? 25. Wie funktioniert Ajax? Karl M. Göschka Seite 63 / 63 WEB v3.2