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.