Dynamic Web Engine

Die Dynamic Web Engine (DWE) ist eine Erweiterung der DLE, die es erlaubt die DLE in einem Web Umfeld einzusetzen.
DLE Aufrufe können aus einem beliebigen Web Browser wie Firefox, Internet Explorer, Safari, Chrome oder Opera erfolgen.
In einem oder mehreren Bricks können die Browseranfragen dann verarbeitet werden und eine Antwortseite aus dem Brick heraus an den Browser zurück geschickt werden.
Mit Hilfe der DLE lassen sich so auch Webanwendungen und Webservices erstellen, die nicht nur HTML, sondern z.B. auch XML, Excel oder PDF Dokumente als Ergebnis liefern.
Dabei werden State-Of-The-Art Technologien wie Ajax, JQuery, JQuery-UI, Server-Pushes, File Upload und Session Handling unterstützt.
Dieses Handbuch beschreibt die Architektur der Dynamic Web Engine, sowie die Befehle und Datenstrukturen im Web Paket.
Das Handbuch setzt Kenntnisse über die Architektur und Benutzung der DLE voraus. Hier werden nur die Erweiterungen im Rahmen der DWE beschrieben.
Die Dynamic Web Engine wird ab der DLE Version 1.6.0 unterstützt.
Ältere DLE Versionen unterstützen die neuen Funktionen nicht.

ACHTUNG!WICHTIGER HINWEIS!

In der DLE vor der Version 1.6.0 existierte schon ein Paket mit dem Namen DWE, Dynamic Web Engine.
Dabei handelt es sich um eine nicht mehr unterstützte Vorversion der Dynamic Web Engine.
Die neue Dynamic Web Engine befindet sich nun in dem Paket WEB.
Wir raten dringend dazu, eventuell noch vorhandene alte DWE Pakete aus der DLE manuell zu entfernen.
Dazu ist das gesamte Verzeichnis DWE unter Verzeichnis packages in der DLE Installation zu löschen. Eventuell vorhandene Ordner in der Brickverwaltung sollten ebenfalls gelöscht werden.
Alte Web Anwendungen, die noch auf dem alten DWE Paket aufbauen, werden ab der DLE Version 1.6.0 nicht mehr unterstützt!

Funktionsweise

Die Dynamic Web Engine erweitert eine normale Java Servlet Anwendung um DLE spezifische Funktionen und erlaubt es damit, aus einer Webanwendung heraus die DLE aufzurufen.
Eine Webanwendung ist ähnlich wie ein Dateiverzeichnis zu betrachten, das auf einem Webserver liegt. Ein Browser fragt nun über einen Webserver die Dateien in diesem Verzeichnis an. Dabei können die Dateien physikalisch (statisch) in dem Verzeichnis liegen, oder erst als Folge der Anfrage dynamisch erzeugt werden.
Erhält ein Webserver eine Anfrage, entscheidet er zunächst, welche Webanwendung für diese Anfrage zuständig ist und leitet die Anfrage dann an diese weiter.
Die Webanwendung wiederum entscheidet durch eine Konfigurationsdatei dann, ob es sich um einen statischen Inhalt handelt, oder um einen dynamischen (Servlet). Bei einem statischen Inhalt, wird die entsprechende Datei an den Browser gesendet. Bei einem dynamischen Inhalt, wird das dafür zuständige Servlet aufgerufen, das dann den Inhalt bereitstellt.
Als Webserver kann jeder beliebige Webserver dienen, der die Java Servlet API unterstützt, eine Unterstützung von Java Server Pages (JSP) ist für die DLE dabei nicht erforderlich, es reicht die einfache Servlet Unterstützung.
Grundsätzlich erfolgt der Aufruf der DLE dabei über ein spezielles Servlet, das sogenannte CallFolderServlet. Es ist Bestandteil der DWE und befindet sich im dle_web.jar unter packages/WEB/lib.
Der volle Klassenname des Servlets lautet

at.visionflow.dle.dwe.DLECallFolderServlet

Dieses Servlet nimmt HTTP Anfragen entgegen, und ruft dann die DLE auf. Dabei wandelt es eine ganze Reihe von Informationen in eine DLE konforme Struktur und gibt diese als Aufrufparameter mit.
Immer werden an die DLE folgende Datenobjekte mit übergeben:

  • WEB:HTTPRequest: Enthält Informationen zur Anfrage.
  • WEB:HTTPRequestHeader: Pro http Header ein Objekt.

Außerdem folgende Einzelfelder:

  • DLE:DLEUSER.USER_IDC: Der angemeldete Benutzer, oder „unknown:1“ für nicht angemeldete Benutzer.
  • BASE:UserId: „unknown“ für nicht angemeldete Benutzer, ansonsten der Anmeldename.
  • WEB:UserIsLoggedIn: Ob der Benutzer angemeldet ist.
  • WEB:HttpSessionId: Die http Session ID.
  • WEB:ServerInfo: Der Webserver Typ.
  • WEB:RootPath: Startpunkt der Anwendung.
  • WEB:ServletContextName: Name der Anwendung.

Optional werden folgende Datenobjekte übergeben:

  • WEB:HTTPRequestParameter: Für jeden Anfrageparameter ein Objekt.
  • WEB:HTTPRequestAttribute: Für jedes Anfrageattribute ein Objekt.
  • WEB:HTTPRequestCookie: Für jedes http Cookie ein Objekt.

Und je nach spezieller Aufrufart aus einer DLE Webanwendung:

  • WEB:Event: Informationen zum Browserereignis.
  • WEB:TableRequest: Eine Anfrage von einem Tabellengitter.
  • WEB:UploadedFile: Bei Datei Uploads, pro Datei ein Objekt.
  • Beliebige DLE Felder: Falls diese in HTML Formularen, im Tabellengitter, oder beim Aufruf mitgegeben wurden.

Diese Informationen können im Brick dann verwendet werden, und auch schon in der DLE Schlüsseldefinition zum automatischen Verzweigen in einen bestimmten Brick. Insbesondere das Feld WEB:HTTPRequest.servletPath wird gerne als Schlüsseldefinition verwendet. Es enthält den Teil der aufrufenden URL, das die angefragte Seite bestimmt.

Im Servlet gibt es insgesamt drei Möglichkeiten, wie die DLE aufgerufen werden kann.

  • Der Webserver ist der im DLE Server integrierte Jetty Webserver: In dem Fall ist der Webserver ein Untersystem zum DLE Server. Der Aufruf erfolgt direkt aus dem Servlet, das Zugriff auf alle DLE Funktionen hat.
  • Der Webserver ist ein Tomcat basierter Webserver und die DLE wird als Teil des Tomcat verwendet (Local call): In dem Fall ist die DLE ein Subsystem des Webservers. Für Tomcat basierende Webserver hat die DLE die Möglichkeit, sich als solches in den Webserver zu integrieren. Der Aufruf erfolgt auch direkt aus dem Servlet, da der Webserver mit der DLE als Subsystem Zugriff auf alle DLE Funktionen hat.
  • Der Webserver ist ein beliebiger Servletfähiger Webserver und die DLE läuft in einem separaten DLE Server Prozess (Remote Call): In dem Fall sind Webserver und DLE Server samt Bricklogik getrennte Prozesse. Das Servlet stellt eine Socketverbindung zum DLE Server her und kommuniziert auf diesem Wege mit dem Brick.

Für den Anwender, der mit der DLE Webanwendungen schreibt, spielt dabei das gewählte Setup keine Rolle. Alle Funktionalitäten der DWE sind ohne Einschränkungen in allen Setups verfügbar und können ohne Änderungen an den Bricks von jedem Setup verwendet werden.

Innerhalb eines Bricks erweitert die DWE die Brickfunktionalitäten so, dass eine direkte Verbindung zwischen Servlet und Brick entsteht.
Ein Brick, der die DWE verwendet, ist somit als eine Art Servlet zu betrachten. Nur das dieses nicht in Java oder JSP, sondern in DLE Logik programmiert wird.
Mit dieser erweiterten Funktionalität kann in einem Brick also die gesamte Spanne von Servletfunktionen ohne Programmierkenntnisse verwendet werden. HTTP Antworten könne geschrieben werden, die HTTP Session benutzt und HTTP Header gesetzt und gelesen werden.

Ein Brick ist in dieser Webumgebung ähnlich wie ein JSP, PHP oder ASP Programm zu betrachten. In der Tat existieren Kommandos, die es erlauben im Brick HTML, CSS und JavaScript zu verwenden und mit den normalen Kommandos der DLE eine dynamische Komponente zu verleihen.

Die HTML Kommandos sind dabei im Brickeditor speziell eingefärbt, um eine bessere Übersicht zwischen Layout und Logik zu erhalten.