Web-Technologien: Überblick, Vor- und Nachteile, Entscheidungshilfen Markus Stiegler XDEV Software Corp. Deutschland GmbH Kirchheim-Heimstetten Einleitung Wer heutzutage eine Web-Anwendung für den professionellen Einsatz im Unternehmen entwickeln möchte, hat wie nie zuvor in der Software-Entwicklung die Qual der Wahl. Mittlerweile existiert ein ganzer Dschungel an Skriptsprachen, Frameworks und APIs, der an allen Ecken und Enden nahezu unkontrolliert weiter wuchert. Fachzeitschriften zaubern immer wieder neue Web-Frameworks aus dem Hut, um ihren Lesern etwas Neues bieten zu können. Zahlreiche Lösungen bauen aufeinander auf, ergänzen sich oder funktionieren fast identisch, während sich andere komplett unterscheiden. Die Entwicklung von Frameworks schreitet sogar so rasant voran, dass die Hersteller kaum noch mit ihrer eigenen Dokumentation, geschweige denn mit Übersetzungen hinterher kommen. Häufig sind aufwändige Recherchen notwendig und die Kenntnis anderer Technologien sogar Grundvoraussetzung, um überhaupt das Funktionsprinzip einer Technologie verstehen und deren Vorteile erkennen zu können. Die Vielfalt ist bereits so groß, dass man als Entwickler gar nicht mehr die Zeit aufbringen kann, alle Ansätze für eine objektive Beurteilung ausführlich genug testen zu können. Viele Entwickler und Projektleiter fühlen sich mittlerweile von der rasanten Entwicklung förmlich abgehängt. Umso schwieriger wird es, wenn man sich für die Umsetzung eines wichtigen Projektes für eine oder mehrere Technologien entscheiden und auch noch die Verantwortung für den Projekterfolg tragen muss. Im Folgenden erhalten Sie einen Überblick über die wichtigsten Web-Technologien, deren Funktionsprinzip sowie deren Vor- und Nachteile. Um die Prinzipien, Vor- und Nachteile besser nachvollziehen zu können, lohnt es sich ganz an den Anfang des Web zu gehen und die Evolution von HTML in Kürze Revue passieren zu lassen, denn in der Vergangenheit findet man häufig entscheidende Details für die Funktionsweise moderner Technologien. HTML In den Anfangszeiten des World-Wide-Webs diente das Internet zur Verteilung von statischen, meist wissenschaftlichen Textseiten. Um solche Texte besser strukturieren und formatieren zu können, entwickelte Tim Berners-Lee 1989 HTML. HTML ist eine rein Textorientierte Auszeichnungssprache, die zur Strukturierung und Formatierung Textkürzel, sog. Tags verwendet. Auch die ersten Textverarbeitungsprogramme verwendeten Tags. Da es noch keine grafischen Oberflächen gab, musste man dem Programm mit Hilfe eines Tags klar machen, dass der nachfolgende Text z.B. fett gedruckt werden soll. Erst 4 Jahre später konnte man erstmals auch Bilder in ein HTML-Dokument einbinden. 1995 kamen mit HTML 2.0 Formulare dazu, 1997 Tabellen, Textfluss um Bilder sowie die Einbindung von Java Applets, bevor 1997 mit HTML 4.0 CSS und Frames eingeführt wurden. Für die Darstellung von HTML ist der Web-Browser zuständig. Was also bei einem klassischen Computer-Programm der Interpreter ist, ist der Browser für HTML. JavaScript Da HTML lediglich statische Seiten anzeigen kann, wurde 1995 die Skriptsprache JavaScript entwickelt, mit der man HTML-Code und somit eine aktuelle HTML-Seite direkt im Browser ändern kann. Erst damit wurden interaktive Webseiten möglich, die auf Nutzeraktionen reagieren können, z.B. Rollover-Effekte bei Menüpunkten. Im Gegensatz zu HTML ist JavaScript eine leistungsfähige Sprache, welche sogar objektorientiertes Entwickeln unterstützt. Entwickelt wurde JavaScript von Sun Microsystems und Netscape und erhielt wegen der Java-ähnlichen Syntax unglücklicherweise den Namen JavaScript, wodurch die Skriptsprache bis heute selbst von Fachleuten immer wieder irrtümlich mit der Programmiersprache Java verwechselt wird. Während JavaScript vor wenigen Jahren noch stark verrufen war (Viren und Dialer wurden i.d.R. in JavaScript geschrieben) und viele Internet-Nutzer JavaScript aus Sicherheitsgründen über die Browser-Einstellungen einschränkten oder sogar deaktivierten, ist JavaScript heute die zentrale Technologie von Ajax und dem Web 2.0. Die Oberfläche einer modernen Rich-Internet-Application besteht fast nur noch aus JavaScript Elementen. Tab-Panes, sprich Registerreiter, Pulldown- und Kontextmenü, Fenstertechnik, Andock-Funktionen oder schlichtes Drag&Drop im Browser ist nur mit JavaScript möglich, da der Browser lediglich wenige Standard-Controls wie Buttons und die Standard-Formular-Komponenten bietet. Da die Programmierung von OberflächenElementen äußerst schwierig und enorm wartungsaufwändig ist, gibt es inzwischen zahlreiche JavaScript Frameworks, welche dem Entwickler alle wichtigen Controls zur Verfügung stellen. Wie HTML wird JavaScript vom Web-Browser ausgeführt. Der Browser ist also der Interpreter. CSS Mit der Einführung von Stylesheets 1993, ging man dazu über, die Formatierungen für das Design vom eigentlichen Inhalt zu trennen, indem man die Formatierungen für das Design in unabhängige CSS-Dateien auslagerte. Neben Angaben zu Farben und Schriften bietet CSS vor allem die Möglichkeit, SeitenElemente frei zu positionieren. Mit diesen Eigenschaften ist CSS eine entscheidende HTML-Erweiterung. Wie HTML und JavaScript wird auch CSS vom Web-Browser ausgeführt. Dynamische Webseiten Eine statische HTML-Seite kann nur Informationen enthalten, die der Autor bei der Entwicklung in das Dokument schreibt. Moderne Web-Anwendungen sind damit jedoch nicht denkbar, denn bei Online-Foren, Wikis, Social Networks und andere sog. Web 2.0 Anwendungen wird der maßgebliche Content nicht vom Entwickler der Seite, sondern von anderen, im Grunde anonymen Internet-Anwendern produziert. Damit dies möglich wird, muss der fremde Content zunächst auf dem Server gespeichert werden, und zwar entweder in einer Datei, z.B. Text oder XML, oder in einer Datenbank. Beim Aufruf der Seite muss dieser Content dann wieder ausgelesen und zusammen mit den für die Darstellung notwendigen HTML-Tags in die statische HTML-Seitenvorlage geschrieben werden, bevor die fertige Seite an den Browser ausgeliefert wird. Man spricht dann von einer dynamischen HTML-Seite. Die Generierung von dynamischen HTML-Seiten wird von einem Skript durchgeführt, welches auf dem Server läuft. Entsprechende Skripte kann man grundsätzlich in jeder beliebigen Programmier- oder Skriptsprache schreiben. Voraussetzung für die Ausführbarkeit ist immer, dass auf dem Server ein entspr. Interpreter für die gewählte Sprache zur Verfügung steht. Perl Die Programmiersprache Perl wurde von Larry Wall für die übersichtliche Auswertung verstreuter Logdateien auf UNIX-Rechnern für die NSA entwickelt. Im Focus stand die schnelle und einfache Programmierung. Die Stärken von Perl liegen in der Verbindung inkompatibler Software. Da in den Anfangszeiten des Webs nahezu alle Server unter UNIX liefen und die Stärken von Perl in der Verbindung inkompatibler Software liegt, wurde Perl zunehmend für die Entwicklung dynamischer Webseiten benutzt und wurde schnell zum De-facto-Standard für die Web-Entwicklung. Später wurde Perl immer stärker von PHP verdrängt. PHP PHP wurde 1995 von Rasmus Lerdorf, Gutmans und Suraski, den Gründern von Zend Technologies Ltd., als Ersatz für eine Sammlung von Perl-Skripten entwickelt. PHP ist Perl sehr ähnlich, gilt jedoch als einfacher erlernbar. Da auch PHP unter der GPL Open Source Lizenz steht, wurde PHP fester Bestandteil fertiger LAMP und WAMP Pakete, bestehend aus Apache Webserver, MySQL Datenbank und PHP, welche die Installation aller wichtigen Server-Komponenten erheblich vereinfachen. Eines der beliebtesten Pakete ist XAMPP, das auch für Solaris und Mac OS-X verfügbar ist. PHP wurde vor allem mit LAMP zu einer Standard-Server-Komponente, zum De-facto Standard bei Internet-Service-Providern und somit für die Web-Entwicklung im Allgemeinen. Als Folge wurde Perl gleichzeitig weitestgehend von PHP verdrängt. Durch die rasante Verbreitung ist PHP zeitweise ungesteuert gewachsen. Viele StandardBibliotheken sind noch prozedural programmiert, nicht objektorientiert. Zudem wird die fehlende Durchgängigkeit bemängelt, fehlendes Threading sowie fehlende Möglichkeiten zum Debuggen. Dass PHP im Vergleich zu Perl oder Python als langsamer gilt, dürfte in der Praxis eher selten entscheidend sein. Vor allem im deutschsprachigen Raum verfügt PHP über eine sehr große Community. ASP ASP wurde 1996 von Microsoft entwickelt und gilt als Pendant zu Perl und PHP. Mit Einführung des .NET Frameworks 2002 wurde ASP eingestellt und wird seitdem als ASP.NET weiterentwickelt. Mit ASP.NET stehen dem Web-Entwickler alle Vorteile und Möglichkeiten des leistungsfähigen .NET Frameworks zur Verfügung. ASP.NET Anwendungen lassen sich dadurch in allen .NET Sprachen schreiben, u.a. C#, VB.NET und J#. Da es sich bei ASP.NET um eine Compiler-Sprache handelt, werden sämtliche Fehler bereits beim Compilieren sichtbar. Zudem lassen sich die Anwendungen wie andere .NET Programme sehr gut debuggen. Für ASP.NET sind sehr viele Frameworks, insbesondere von Drittherstellern wie Telerik, für die Entwicklung grafischer Web-Oberflächen verfügbar, welche alle erdenklichen Oberflächen-Controls aufbieten. Als .NET Sprache lässt sich ASP.NET jedoch nicht so einfach erlernen wie Perl oder PHP. Zudem legt man sich mit ASP.NET zwangsweise auf eine Microsoft Infrastruktur fest. U.a. sind Windows als Server-Betriebssystem sowie ein Microsoft Application-Server (z.B. IIS oder Visual Studio .NET) die Voraussetzung. Das Angebot an Hosting-Paketen mit entspr. Voraussetzungen ist vergleichsweise gering. Mit Mono existiert eine, hauptsächlich von Novell vorangetriebene, freie und Plattformunabhängige Implementierung des .NET-Frameworks, welche seinem Vorbild jedoch hinterher hinkt. JSP JSP (Java Server Pages) basiert auf der Java Technologie von Sun Microsystems und ist wie ASP.NET eine Compiler Sprache, was auch dem JSP-Entwickler erhebliche Vorteile beim Debuggen und Testen seiner Anwendungen im Vergleich zu anderen Skriptsprachen einbringt. JSP wurde entwickelt, um die Entwicklung dynamischer Webseiten mit Java im Vergleich zur Servlet-Programmierung erheblich zu erleichtern. Bei JSP lassen sich in statische HTML und XML Dokumente dynamische JSP-Aktionen mit Hilfe spezieller JSP-Tags einbinden. Bei diesen JSP-Aktionen handelt es sich um fertige Java Klassen, die in sog. Tag-Libraries zusammengefasst werden. Wichtige Tag-Libraries sind u.a. die JSTL (JavaServer Pages Tag Library), Jakarta (setzt auf JSTL auf) sowie Struts. Auch die Entwicklung eigener JSP-Aktionen ist möglich, wofür dem Entwickler der komplette Sprachumfang von Java zur Verfügung steht. Beim Compilieren einer JSP erzeugt der JSP Compiler Java Code (Servlet), den der Java Compiler dann in Java Bytecode umwandelt. Für die Auslieferung einer JSP an den Browser ist eine Servlet-Engine notwendig, die im Grunde alle wichtigen Application-Server bieten, u.a. Tomcat, Glassfish, Websphere oder Weblogic. Da Standard-Webpakete i.d.R. keinen Application-Server bieten, benötigt man für JSP min. einen eigenen V-Server. Durch die Plattform-unabhängigkeit von Java lässt sich eine JSP-Anwendung unter allen gängigen Server-Betriebssystemen ausführen, u.a. Windows, Linux, Solaris, Mac OS-X und anderen UNIX-Derivaten. Wie ASP ist auch JSP schwerer erlernbar als Perl oder PHP, da JSPs sehr viel Java Code und Java Konzepte enthalten. Servlets Als Servlet wird ein Java Programm bezeichnet, das auf dem Server läuft. Auch mit einem reinen Java-Programm lassen sich dynamische Webseiten generieren. Für die Entwicklung von Servlets steht dem Entwickler der komplette Funktionsumfang der Programmiersprache Java zur Verfügung, allerdings gilt die Entwicklung von Servlets im Vergleich zu Skriptsprachen als erheblich schwieriger, was der Grund für die Einführung von JSP war. Ruby Ruby wurde Mitte der Neunziger Jahre von Yukihiro Matsumoto aus Unzufriedenheit über verfügbare Skriptsprachen entwickelt und wurde in Japan so beliebt wie Perl in Europa. Ruby ist eine vollständig objektorientierte Sprache. Ruby-Programme werden zuerst in einen Bytecode umgewandelt und anschließend von einer Virtual Machine interpretiert, welche für Linux, Mac OS-X sowie für Windows verfügbar ist. JRuby ist eine Implementierung des Ruby-Interpreters in Java, um Ruby nahtlos in die JavaPlattform zu integrieren. Mit IronRuby und Gardens Point Ruby.NET soll Ruby ins .NETFramework integriert und in C# implementiert werden. Ajax Bei Ajax handelt es sich nicht um eine Sprache, sondern vielmehr um eine Technik zur Übertragung der Daten zwischen Server und Browser. Bei der herkömmlichen Übertragung dynamischer HTML-Seiten wird bei jeder Anfrage an den Server eine komplett neue Seite geladen, was zu den allgemein bekannten, lästigen Wartezeiten bei Webseiten führt. Web-Portale und Onlineshops könnte man damit bereits realisieren, „echte Software-Anwendungen“ jedoch kaum, da die Performance für die meisten Einsatzbereiche unakzeptabel ist. Mit Hilfe der XMLHttpRequest-Technik lassen sich Daten asynchron nachladen und mit Hilfe eines speziellen JavaScripts in eine HTML-Seite direkt im Browser einbinden, ohne dass dabei die komplette Seite neu geladen werden muss. Die nachzuladenden Daten werden dabei in XML oder JSON, ein auf JavaScirpt zugeschnittenes, XML-ähnliches Format, übertragen. Durch dieses unbemerkte Nachladen lässt sich die Performance dynamischer Webseiten erheblich steigern, sodass dadurch auch die Umsetzung leistungsfähiger BusinessApplikationen als Web-Anwendung möglich wurde. Dadurch wurde Ajax zu dem Hype der vergangenen Jahre. JavaScript Frameworks Während Programmiersprachen wie Java, C#, Visual Basic oder Delphi dem Entwickler alle wichtigen Steuerelemente für die Entwicklung grafischer Benutzeroberflächen zur Verfügung stellen, u.a. Menüsleisten, Kontextmenüs, Register-Reiter, Fenster, Trees etc., bietet ein Browser lediglich Buttons und die Standard-Formular-Komponenten. Alle anderen Oberflächen-Elemente müssen für eine HTML-Seite in JavaScript nachprogrammiert werden. Mittlerweile gibt es für nahezu alle wichtigen Web-Sprachen entsprechende JavaScript Frameworks, die häufig von großen Webseiten-Betreibern wie Yahoo, Google oder 1&1 entwickelt und als Open Source frei gegeben werden. Yahoo! UI Library YUI ist ein JavaScript-Framework zur Erstellung von Web-Applikationen. YUI verwendet Ajax und DHTML. Das Framework steht unter der BSD-Lizenz. DOJO Dojo ist eine freie JavaScript-Bibliothek, die von der Dojo Foundation entwickelt wird und unter der BSD-Lizenz steht. Die Bibliothek ist mächtig und bietet Menüs, Tabs, sortierbare Tabellen, dynamische Diagramme, 2D-Vektorgrafik, Animationseffekte, Trees, FormularValidierung, Kalenderfunktionen, Widgets für barrierefreie Webseiten sowie einen RichText-Editor. Entwickler können auch eigene Controls entwickeln. DOJO benutzt die asynchrone Kommunikation zwischen Browser und Server und ist somit Ajax-fähig. Als Schwachpunkt des Projekts gilt noch immer die Dokumentation, die mit der Entwicklung bislang nicht Schritt halten kann und derzeit nur in englischer Sprache verfügbar ist. qooxdoo qooxdoo ist ein Ajax-fähiges JavaScript Framework, welches von 1&1- und GMXMitarbeitern als Open-Source-Projekt gestartet wurde. Das Aussehen der Komponenten gleicht klassischen Desktop-Anwendungen. Java Server Faces JSF basiert auf der JSP-Technologie und somit auf Java. JSF umfasst eine Tag-Bibliothek mit JSF-Oberflächenkomponenten sowie eine Java-API zur Kontrolle von Bedienelementen inkl. Event-Handling und Validierung. Seit Version 1.2 ist JSF Open Source. Für die Erweiterung einer JSF-Anwendung mit Ajax-Funktionalität muss JSF mit einem weiteren Framework ergänzt werden, z.B. RichFaces von Red Hat, ICEfaces von IDEsoft, Trinidad von der Apache Foundation oder jQuery4jsf. Apache MyFaces MyFaces ist eine Open-Source-Implementierung der JavaServer-Faces-Spezifikation. Im Vergleich zu JSF bietet MyFaces mehr Oberflächenkomponenten, u.a. eine KalenderKomponenten sowie einen HTML-Editor. Zudem sind neuere Controls Ajax-fähig. GWT Das Google Web Toolkit ist ein Java Framework, welches die Möglichkeit bietet, WebAnwendungen vollständig in Java zu schreiben, also auch die Oberfläche. Ein spezieller Compiler generiert anschließend die für die Oberfläche notwendigen JavaScripts. Grafische Oberflächen können somit wie mit Java Swing entwickelt werden. Vaadin Vaadin setzt auf GWT auf und nutzt GWT um die Webseite zu rendern. Während GWT nur clientseitig operiert, fügt Vaadin eine serverseitige Datenvalidierung zu allen Aktionen hinzu. Apache Wicket Wicket ist ein komponentenbasiertes Web-Framework für Java, welches sich an erfahrene Java Programmierer richtet. Für Wicket sind ausschließlich Java- und (X)HTML-Kenntnisse erforderlich. Für Ajax-Funktionalität stehen fertige Klassen zur Verfügung, sodass dafür keine JavaScript-Kenntnisse erforderlich sind. Allen Komponenten kann grundsätzlich AjaxFunktionalität über Behaviors hinzugefügt werden. Die Entwicklung eigener Komponenten ist zudem sehr leicht. Wicket nutzt intensiv objektorientierte Konzepte wie abstrakte Klassen und Interfaces und setzt gezielt auf die Leistungsfähigkeit von Java. Für unerfahrene Java Programmierer ist daher der Einstieg nicht ganz so einfach wie bei anderen Frameworks. WingS Wie GWT ist auch wingS ein Framework, mit dem man Web-Anwendung vollständig in Java schreiben kann. Das Ziel von wingS ist es dabei, sich so gut wie möglich an Swing zu halten, sodass sich wingS Anwendungen nahezu genauso wie mit Swing schreiben lassen. WingS bietet keine eigenen Oberflächen-Komponenten, sondern nutzt die Controls der Yahoo! UI Library. WingS ist Ajax fähig und managed auch die komplette Kommunikation zwischen Server und Client automatisch. Das Framework steht unter der LGPL Open Source Lizenz. Ruby on Rails Rails ist ein Web-Application-Framework auf Basis von Ruby, welches agile Softwareentwicklung ermöglicht. Rails verwendet wie Java die Model-View-Control Architektur. Telerik Telerik ist ein Hersteller kommerzieller JavaScript Controls für Microsoft Technologien, insbesondere für ASP.NET und Silverlight. Bindows Eine weitere kommerzielle JavaSript Bibliothek ist Bindows, welche alle wichtigen Oberflächen-Komponenten bietet, die sich am Design von Windows-Komponenten orientieren. Fazit Für die Entwicklung moderner Web-Anwendungen auf Basis von Ajax muss der Entwickler i.d.R. eine Vielzahl verschiedener Basistechnologien beherrschen oder anwenden können. Es ist deshalb ratsam Frameworks einzusetzen, die bereits eine Vielzahl benötigter Funktionen und Features bieten, sodass Sie das Rad nicht jedes Mal neu erfinden müssen. In der Praxis entscheiden sich die meisten Entwickler für ein Framework, dessen Basistechnologie sie bereits beherrschen, wie Java oder .NET. Dennoch sollten Sie sich auch die Funktionsweise anderer Frameworks ansehen. Bei wichtigen Projekten sollten Sie auch kritische Überlegungen anstellen, ob die Weiterentwicklung einer Technologie gewährleistet ist. Denn anders als bei Java, Basic oder C++ Programmen, die einmal geschrieben auch in 10 Jahren noch laufen werden (siehe DOS- und Cobol-Anwendungen), muss eine Web-Anwendung sowie die dafür verwendeten Frameworks auf Grund der ständigen Browser-Updates immer wieder überprüft und abgeändert werden. Gerade bei Open Source Projekten ist die Gefahr groß, dass diese vernachlässigt werden (müssen) und daher Updates verspätet kommen, die Hauptentwickler abgeworben werden oder das Projekt einfach im Sande verläuft. In jedem Fall sollten Sie die Weiterentwicklung aller wichtigen Frameworks aufmerksam mit verfolgen, denn damit ist inzwischen viel mehr möglich als die meisten Entwickler ahnen. Kontaktdaten: Markus Stiegler XDEV Software Corp. Deutschland GmbH XDEV Java Tool Division Sonnenallee 1 D- 85551 KIRCHHEIM-HEIMSTETTEN Telefon: Fax: Email: 09682 915 148 09682 912 35 [email protected]