# ZK OSS

ZK OSS ist ein quell-offenes, in Java entwickeltes Ajax-Webframework des Unternehmens Potix Corporation, das Nutzern ermöglicht, eine grafische Benutzeroberfläche für Webanwendung zu erstellen. ZK besteht aus Ajax-event-driven-Mechanismen, sowie XUL, XHTML und ZUML, einer Markup-Sprache, um die Benutzeroberfläche zu erstellen.
ZK verwendet eine serverlastige Methode, in der die Synchronisierung der Komponenten und der Event-Pipeline zwischen Nutzern und Servern automatisch von ZK abgehandelt werden. ZK benutzt AJAX-Anfragen an den Server, um den internen Status der einzelnen Komponenten zu aktualisieren. ZK lädt hierzu eine JSON Beschreibung des Webseite herunter und rendert diese dann auf der Nutzerseite. Weiterhin lädt ZK die Webseite sequentiell über mehrere Anfragen herunter, und nicht den gesamten Inhalt auf einmal. Insbesondere bedeutet dies, dass ZK nicht Formfelder mit GET- oder POST-Anfragen an den Server sendet, wie vom Standard-Anfrage-Antwort-Mechanismus vorgesehen wird.

## Technik

Die Programmierung der Logik erfolgt in Java, die Definition des Layouts in sogenannten ZUL-Dateien, welche ähnlich wie JSP-Dateien aufgebaut sind und auch HTML-Elemente und JavaScript-Code enthalten können. Über „autowiring-by-name“ werden für die verschiedenen Komponenten (Widgets) der Logikteil in der Java-Datei mit dem Layoutteil in der ZUL-Datei automatisch verknüpft. Bei einem Request vom Webbrowser wird zuerst die Logik in der Java-Datei serverseitig verarbeitet und dann mit dem in der ZUL-Datei definierten Layout die fertige Antwort erzeugt und zum Browser zurückgeschickt. Im Browser wird der Request zusammen mit dem in JavaScript/Ajax (vor-)implementierten clientseitigen Komponententeil verarbeitet und angezeigt. Das Prinzip ist ähnlich wie auch bei anderen serverseitigen Webframeworks, wie zum Beispiel Vaadin.
Üblicherweise enthält die ZUL-Datei aber nicht nur das Layout, sondern es ist oft auch noch Logik im Stile von JavaScript-Befehlen zu den einzelnen Komponenten definiert. Dies wird in den meisten Fällen vorgenommen, um clientseitige Interaktionen zwischen den verschiedenen Komponenten einer Webseite zu implementieren und so Requests an den Server zu vermeiden. Dadurch wird jedoch die Trennung von Logik und Layout nicht mehr sauber eingehalten. Andererseits hilft die Möglichkeit, in den ZUL-Dateien HTML-Tags, CSS-Styles oder JavaScript-Code einzufügen, oft über die ZK-Basis-Funktionalitäten hinaus schnell und einfach Anpassungen und Erweiterungen durchzuführen.

## Unterschiede zu XUL

* ZK ist ein serverseitiges Framework, wodurch die Anforderung an den Client, Gecko installiert zu haben, entfällt. Stattdessen verarbeitet ZK ZUML-Dateien direkt und gibt dhtml-Dateien für den Browser zurück.
* ZK ist direkt an Java angebunden – dadurch ist es möglich, komplexere Programmierlogik zu verwenden.

## Lizenz

ZK OSS ist in drei Editionen verfügbar: Die Edition ZK CE (Community-Edition) steht unter der Open-Source-Lizenz LGPL. Die Editionen ZK PE und ZK EE sind unter der ZK Open Source License oder einer kommerziellen Lizenz verfügbar.
Die kostenpflichtigen Editionen bieten zusätzliche Funktionalitäten wie z. B. Charts und Pivottabellen, welche vor allem für Datenkollektion und Visualisierungen verwendet werden können. ZK Charts ist eine API zur Visualisierung der serverseitigen Daten für den Nutzer. Die ZK-Pivottabelle erlaubt dem Programmierer, Daten in einer Tabellenform zu sammeln und vorinstallierte Werkzeuge zur Visualisierung zu benutzen.