Die Entwicklung Web-basierender Systeme ist heute schwieriger denn je. Denn mit dem Boom von SaaS und Cloud-Computing, sowie mit der rasanten Entwicklung von Smartphones steigen die Anforderungen an Web-Anwendungen immer weiter an. Diese müssen im Backend robust, hochperformant und sicher sein, Arbeitsprozesse müssen in der Anwendungslogik möglichst schnell und flexibel implementiert werden. Beim Front-End reicht es heute nicht mehr aus, die Kompatibilität der Anwendung mit den unterschiedlichen Desktop-Betriebssystemen und -Browsern zu garantieren. Von einer Web-Applikation erwarten Anwender zunehmend, dass sie sich auch auf ihren Smartphones bequem nutzen lässt. Für die Entwickler bedeutet dies oft, einen komplett neuen Client für mobile Endgeräte implementieren zu müssen. Erschwerend kommt hinzu, dass Entwicklungen im schnellen Tempo erfolgen müssen, da es auf dem Markt ein großer Konkurrenzdruck herrscht.
Vor diesem Hintergrund sind Web-Entwickler, heute mehr als je zuvor, auf leistungsfähige Frameworks angewiesen, die ein solides Fundament für ihre Anwendungen bieten und gleichzeitig die Durchführung des Projekts beschleunigen und vereinfachen können. In den folgenden Seiten werden zehn Framework-Lösungen aus dem Open-Source-Bereich aufgeführt, mit denen die gestiegenen Anforderungen an modernen Web-Anwendungen gerecht werden können.
Struts: Klassisches Framework für Java
Struts von der Apache Foundation stellt eins der wichtigsten Open Source-Frameworks im Java-Umfeld dar. Nicht zuletzt verdankt Java den Durchbruch als Programmiersprache für Web-basierende Business-Anwendungen mächtigen Server-seitigen Bibliotheken wie diese. Mit Hilfe dieses klassischen Frameworks wird es um einiges leichter, umfangreiche und anspruchsvolle Web-Applikationen auf Basis von JSP (Java Server Pages) und Servlets zu implementieren. Dies liegt in erster Linie an dem sauberen Aufbau nach dem bewährten MVC-Muster (Model-View-Controller) und an den vielen zur Verfügung gestellten Oberflächenelementen und Funktionen.
Hauptziel von Struts ist es, die verschiedenen Systemschichten möglichst voneinander zu trennen. Dazu werden HTTP-Anfragen zunächst durch einen so genannten "Front-Controller” in einem standardisierten Prozess verarbeitet. Dann werden sie an die entsprechenden "Actions” weitergeleitet, die zentrale Komponenten des Frameworks darstellen und als Schnittstelle zwischen der Präsentations- und Steuerungsschicht dienen. Für den Einsatz von Struts sprechen zudem die vielen nützlichen Tools, die die Arbeit mit dem Framework erleichtern. So können verschiedene Plugins für Eclipse beziehungsweise Netbeans etwa den Aufbau einer Struts-Anwendung visualisieren und über Wizards Quellcode und Konfigurationsdateien automatisch generieren.
Tapestry: Komponenten-orientierte Web-Entwicklung
Wer auf Java und die hohe Qualität und Robustheit der Apache-Produkte nicht verzichten, aber einen etwas moderneren Ansatz verfolgen möchte, dem sei das Framework Tapestry empfohlen. Die Lösung basiert auf einem Komponenten-orientierten Programmiermodell und vereinfacht die Entwicklung Web-basierender Java-Anwendungen durch Best-Practices wie REST Web Services, "Convention over Configuration" and "DRY" (Don't Repeat Yourself). Was das Framework jedoch einzigartig macht, ist der hohe Grad an Wiederverwendbarkeit von GUI-Elementen, die wie Objekte geschaltet, in JARs verpackt und in weiteren Projekten leicht implementiert werden können.
Die Web-Entwicklung mit Tapestry gleicht damit der Arbeit mit Swing. Eine Tapestry-Seite dient dabei als Container und besteht aus drei Dateien: Einer Seitenspezifikation im XML-Format, einem HTML-Template und einer Java-Klasse. In der XML-Datei werden die Attribute und Komponenten definiert, die innerhalb der Seite verwendet werden sollen. während das Layout in HTML spezifiziert wird. Die Java-Klasse enthält schließlich Accessor-Methoden, mit denen sich die Seitenattribute verändern lassen.
Play Framework: Robust wie Java, flexibel wie Ruby on Rails
Ein weiteres modernes Java-Framework ist Play. Angelehnt an Ruby on Rails verfolgt diese Lösung das Ziel, die Robustheit, hohe Performance und Sicherheit von Java mit der Einfachheit, Flexibilität und Effizienz von Ruby on Rails zu vereinen. So bietet das Framework nicht nur Unterstützung für praxiserprobte Java-Libraries wie Hibernate oder Quartz, sondern übernimmt auch viele der lästigen Routineaufgaben, die mit diesen Produkten verbunden sind. Dem Entwickler bleibt dann mehr Zeit für das wirklich Wichtige übrig - die Implementierung der individuellen Geschäftslogik.
Ein weiterer Vorteil besteht darin, dass Play wenig Serverinfrastruktur voraussetzt. Ein Web-Server, auf dem die eigenen Anwendungen laufen, wird im Standardumfang mitgeliefert. Das Kompilieren und Deployment der Projekte erfolgt im Prinzip auf der Kommandozeile. Wer lieber mit Eclipse oder Netbeans arbeitet, wird aber auch nicht enttäuscht. Durch einfache Befehle lassen sich alle notwendigen Projektdateien erzeugen, die dann in die jeweilige Entwicklungsumgebung importiert werden können. Praktisch: Während der Entwicklung werden Änderungen am Code automatisch erkannt, so dass sich ein neues Deployment erübrigt - ein Reload der Seite genügt. Dies funktioniert übrigens auch in Produktivumgebungen.
Grails: Dynamische Web-Entwicklung mit Java
Eine andere Java-Alternative zu Ruby on Rails bietet sich mit Grails an. Beide Frameworks arbeiten nach dem Design-Prinzip "Convention over Configuration", das besagt, dass solange sich die Entwickler an üblichen Konventionen halten, diese nicht explizit konfiguriert werden müssen. Dadurch wird die Konfiguration der einzelnen Komponenten sowie der Software als Ganzes deutlich vereinfacht, da die vielen, fehleranfälligen Konfigurationsdateien, die etwa bei Struts oder Tapestry erforderlich sind, wegfallen.
Grails basiert auf dem beliebten Spring-Framework auf und ergänzt es durch die Unterstützung der dynamischen Programmiersprache Groovy, einer Skript-Sprache, die fester Bestandteil der Java-Plattform ist und viele Ähnlichkeiten mit Ruby hat. Somit laufen Grails-Applikationen wie üblich auf der Java Virtual Machine beziehungsweise auf einem Applikations-Server wie Tomcat oder JBoss, können aber aktualisiert werden ohne den Code neu kompilieren zu müssen. Denn bei der Arbeit mit Groovy wird der Code erst zur Laufzeit dynamisch ermittelt.
Django: Python-Alternative zu Ruby on Rails
Von Ruby on Rails inspiriert ist auch das Python-Framework Django. Dieses ist wie üblich nach dem MVC-Muster aufgebaut und folgt strikt dem DRY-Prinzip, das besagt, dass Redundanzen im Code vermieden werden sollen. Entsprechend zeichnet sich Django durch einen hohen Automatisierungsgrad aus. So können sich Entwickler zum Beispiel die mühsame und nicht sonderlich kreative Arbeit ersparen, Benutzerschnittstellen zur Datenverwaltung selbst zu implementieren. Das Framework erledigt dies selbst, in dem es Administrationsoberflächen für jedes Objekt im Datenmodell automatisch generiert. Dabei werden im Handumdrehen HTML-Formulare kreiert, mit denen die Daten manipuliert werden können, inklusive Buttons zum Speichern, Aktualisieren oder Löschen. Solche Komponenten können selbstverständlich nach eigenen Bedürfnissen angepasst und erweitert werden. Datenmodelle lassen sich wiederum komplett in Python definieren. Dazu erhalten Entwickler Zugriff auf eine dynamische Datenbank-API, die ein eigenes Objektrelationales Mapping (ORM) implementiert, ähnlich wie die unter Java-Entwicklern beliebte Hibernate-Lösung.
Cappuccino: Mac-Anwendungen fürs Web
Ein weniger bekanntes, aber sehr interessantes Web-Framework ist Cappuccino. Die jungen Entwickler hinter dieser vielversprechenden Lösung sind recht ehrgeizig: Ein Web-Framework, bei dem man keinen Html-Code schreiben und sich mit dem DOM (Document Object Model) nicht auseinandersetzen muss, ist allein schon ein recht mutiger Ansatz. Dazu kommt aber noch eine selbst entwickelte Programmiersprache, Objective-J, die das Beste aus zwei völlig unterschiedlichen Welten vereinen soll: Die Einfachheit von JavaScript und die Mächtigkeit der Objektorientierten Mac-Sprache Objective-C.
Das Ziel ist, die Qualität und Benutzerfreundlichkeit, durch die sich Mac-Anwendungen auf dem Desktop auszeichnen, in den Browser zu bringen. Dass dies möglich ist, hat bereits Apple mit seinen eigenen Web-Anwendungen gezeigt - so zum Beispiel mit MobileMe. Die Lösung bietet Drag & Drop, Rückgängigmachen, Copy & Paste, Kontextmenüs, innere Anwendungsfenster und weitere Funktionen, die die Bedienung von Desktop-Anwendungen so bequem machen. All das kann Cappuccino auch. So stellt es Web-Entwicklern diese und weitere Features wie beispielsweise Ajax-Unterstützung, Cross-Browser-Kompatibilität und eine leistungsfähige Grafik-Engine Out-of-the-Box zur Verfügung. Wie die Online-Präsentationssoftware 280 Slides eindrucksvoll zeigt, kann man mit diesem jungen Framework das Look & Feel von Mac-Anwendungen bis ins kleinste Detail im Web nachmachen.
Google Web Toolkit: Websites aus Java-Code
Entwickler, die auch im Front-End auf Java setzen möchten, finden in dem Google Web Toolkit, kurz GWT, ein vielversprechendes Framework, das es ihnen ermöglicht, dynamische und interaktive Web-Clients komplett Server-seitig zu realisieren. Der Clou: Aus Java-Klassen generiert ein integrierter Compiler den entsprechenden XHTML und Javascript-Code für die Applikationsseiten automatisch.
Ein wesentlicher Vorteil von GWT besteht darin, dass die mitgelieferten Komponenten die fehleranfällige und mühsame Aufgabe übernehmen, die Unterschiede und Besonderheiten der unterschiedlichen Browser zu analysieren und entsprechend angepasstes Javascript zu schreiben. Beim Debugging des Web-Clients ergeben sich sogar ganz neue Möglichkeiten. So lassen sich zur Laufzeit sämtliche Ajax-Komponenten und User-Events bequem mit dem funktionsreichen Java-Debugger untersuchen. Abgerundet wird Googles Lösung mit einem eigenen XML-Parser, Internationalisierungs-Unterstützung, einer RPC-Schnittstelle (Remote Procedure Calls) sowie einem Widget-Paket zur Gestaltung der grafischen Benutzeroberflächen.
Phonegap: Web-Apps nativ auf jedem Smartphone
Immer mehr Web-Anwendungen bieten ein spezielles Front-End für mobile Endgeräte. Und auf Basis von Web-Technologien lassen sich wiederum selbst komplexe Anwendungen für Smartphones realisieren. Insofern überrascht es nicht, dass mit dem Boom von iPhone, Android und Co. bereits einige tolle Frameworks entstanden sind, die die Entwicklung mobiler Web-Lösungen und -Apps vereinfachen. Dazu zählt unter anderem Phonegap. Damit können Web-Entwickler ihre Anwendungen wie gewohnt mit Html, CSS und Javascript schreiben und dann ohne großen Aufwand auf die wichtigsten mobilen Plattformen nativ deployen. Für iOS, Android, Windows Mobile und Blackberry stellt die Lösung so genannte "PhoneGap-Wrapper” bereit, die aus dem eigenen Web-Programm jeweils eine native Version für die verschiedenen Zielplattformen erzeugen. Dadurch lassen sich Phonegap-Anwendungen auch in Apples App-Store stellen, wo eigentlich nur Software erlaubt ist, die auf iOS und Objective-C basiert.
Ferner bietet das Framework eine einheitliche Javascript-API, die viele Programmierschnittstellen der nativen SDKs für die unterschiedlichen Smartphones abkapselt. Dadurch werden Entwickler in die Lage versetzt, mit Hilfe einfacher Skripte auf Hardware-Komponenten zugreifen zu können, so zum Beispiel auf die eigebaute Kamera, das GPS-System oder die Beschleunigungssensoren.
Titanium Mobile: Native Anwendungen für iPhone und Android
Als Alternative zu Phonegap können Entwickler auf Titanium Mobile von Appcelerator zurückgreifen. Hier werden die nativen APIs der mobilen Betriebssysteme iOS und Android in einer einheitlichen Abstraktionsschicht gekapselt. Programmiert wird hauptsächlich mit JavaScript, Html und CSS - der Einsatz von PHP, Ruby und Python ist optional auch möglich. Der große Vorteil von Titanium besteht darin, dass Entwickler ihre Applikation nur einmal schreiben müssen. Das Framework interpretiert den Quellcode auf der jeweiligen Plattform und delegiert die Funktionsaufrufe an Module, die sie nativ umsetzen. Die Entwicklungszeit kann dadurch deutlich reduziert werden.
Darüber hinaus stellt Titanium über 100 native UI-Elemente zur Verfügung und erlaubt selbst komplexe 2D- und 3D-Animationen. Zum Standard-Funktionsumfang gehören zudem unter anderem SQLite-Datenbanken und Zugang zum internen File-System, Html5- und CSS3-Support, Multimedia-Module für die Wiedergabe von Audio und Video, sowie vorgefertigte Soap- und RESTful-Komponenten, die für die schnelle Implementierung von Web-Services eingesetzt werden können.
Sencha Touch: Modernes HTML5-Framework für Mobile
Wer mit Hilfe moderner Web-Technologien und -Tools seine Anwendungen auf Smartphones bringen will, der sollte einen Blick auf Sencha Touch werfen. Die Lösung basiert vollständig auf HTML5, Javascript und CSS3 und wartet mit einer einfachen Verwaltung für Touch-Ereignisse sowie einer umfassenden GUI-Bibliothek auf. Anders als Phonegap und Titanium Mobile werden Sencha-Anwendungen allerdings nicht in nativen Code übersetzt, sondern werden im Browser ausgeführt. Mit Ausnahme von Icons verzichtet die Library weitgehend auf Bilder und nutzt CSS3-Stylesheets zur graphischen Gestaltung der Benutzeroberflächen. Animationen lassen sich mit Hilfe von so genannten "CSS-Transitions" realisieren. Zudem macht das Framework von neuen HTML5-Funktionen Gebrauch, um die Entwicklung von Offline-Applikationen zu ermöglichen. Dabei können Anwendungsressourcen lokal auf dem Gerät gespeichert werden, so dass die Anwendung auch ohne Internetverbindung nutzbar bleibt.
Offiziell unterstützt werden derzeit die mobilen Betriebssysteme von Apple und Google. Die Library setzt jedoch ausschließlich auf moderne Web-Standards. Das heißt, dass Anwendungen, die auf dem Framework basieren, auf jedem mobilen Browser laufen sollten, der diese Standards unterstützt. (sh)