Web Applikationen mit Struts und ObjectBridge
Autoren
-
Name: Frido Budde
Email: frido@muenster.de
Veranstaltung
Vorlesung über Web-Applikationen
Datum: 9.7.2001
Zeit: 13:15 - 15:00
Ort: Mathematik Uni MünsterÜbersicht
Schwerpunkt des Vortrags ist die Architektur einer Web-Applikation.
Diese wird an einem kleinen Demo-Programm verdeutlicht.
Zur Realisierung der Applikation
wurden zwei Open-Source-Produkte eingesetzt. Es handelt sich
dabei um
Struts - Ein JSP-basiertes Framework für Web-Applikationen
Object Bridge - Ein objekt-orientiertes Persistenz-Framework
Diese Systeme sind frei verfügbar und stellen somit eine gute
Möglichkeit dar, mit (Web-)Applikationen zu experimentieren.
Abschnitt: Web-Applikationen
[Inhalt des Vortrags]
Web-Applikation
Inhalt des Vortrags
- Architektur von Web-Applikationen
- Beispiel-Programm Web ToDo
- Schlussbemerkungen
Abschnitt: Web-Applikationen
[Architektur]
Web-Applikation
Schichten einer Web-Applikation
- Präsentationsschicht
- Web-Schicht
- BL-Schicht
- Persistenzschicht
- Datenhaltung
Web-Applikation
Präsentationsschicht
- HTML
- XML
- Javascript
- Applet
- Applikation (C++, Java,...) (per Softwareverteilung)
Zu den Aufgaben dieser Schicht gehört
- Darstellung des User-Interfaces
- Validierung von User-Eingaben
Die Wahl der geeigneten Technik wird bestimmt von den
Anforderungen an
- Interaktivität
- Kommunikation mit dem Server
- Bedarf an Client-seitiger Verarbeitungslogik
Web-Applikation
Web-Schicht - Teil 1
- Servlets
- JSP/Java
- ASP/VB,Javascript
- Sonstige Template-Engines WebMacro, Velocity, ...
- CGI
- ISAPI, NSAPI
Aufgabe dieser Schicht ist
-
Erzeugung der Präsentationschicht bzw. Beschickung
der Präsentationsschicht mit Daten
-
Security-Prüfungen.
-
Steuerung des Ablaufs der Applikation (soweit es
die Präsentation betrifft. Dies bedeutet auch
die Verwaltung von Session-Daten.
-
Steuerung des Aufrufs der BL-Schicht sowie
Validierung der Eingabe-Daten und Konvertierung
der Daten zwischen den Formaten der Präsentationsschicht
und der BL-Schicht.
Beim Aufruf der BL-Logik ist darauf zu achten, dass
es sich potentiell um einen Network-Call handelt (RPC, RMI).
Die Auswahl der geeigneten Tools hängt ab von
- Skalierbarkeitsanforderungen
- Konnektivitätsanforderungen
Web-Applikation
Web-Schicht - Teil 2
Zur Zeit sind zwei Arten von Architekturen
für Web-Schichten sehr verbreitet.
-
Model I
Hier geht eine Anfrage aus dem Netz an eine Seite.
Die Seite verifiziert die Eingaben, ruft die Business-Logik
auf und präsentiert die Ergebnisse bzw. forwarded den
Request im Fehlerfall an die Ursprungsseite zurück.
Wesentlich Eigenschaft ist hier, das die Ablauflogik der
Applikation über alle Seiten verstreut ist.
-
Model 2/MVC-Architektur
Bei der MVC-Architektur gehen (alle) Anfragen zunächst
an einen Controller (typischerweise ein Servlet oder
ein JSP). Dieser Controller
-
führt zunächst allgemeine
Tätigkeiten wie Zugriffskontrolle durch.
-
Anschließend entscheided der Controller anhand
von Konfigurationsdaten und dem Request, welche
Aktion durchzuführen ist.
Er übergibt die Kontrolle
an ein entsprechendes Objekt, welches weiß, wie
diese Aktion durchgeführt wird (Command-Pattern).
Nachdem die Aktion durchgeführt wurde, entscheided
der Controller anhand des Resultats und wiederum
von Konfigurationseinstellungen, welche Page
das Ergebniss der Aktion darstellen soll.
Web-Applikation
BL-Schicht
-
Realisiert in (fast) beliebiger Programmiersprache, z.B.
Java, C++, Cobol.
-
U.U. innerhalb eines Komponentenmodells wie EJB, Corba,...
Aufgabe dieser Schicht ist
-
Durchführung der eigentlichen Geschäftsprozesse.
-
Kapselung von Operationen in Transaktionen.
-
Security-Prüfungen.
Sonstiges:
-
Wird oft noch weiter logisch unterteilt in
Prozesse und Entitäten. Entitäten sind die
Teile der BL-Schicht, die mit der
Persistenzschicht kommunizieren.
-
Sollte unabhängig von der Präsentations-Schicht und
der Web-Schicht sein.
-
Die Komplexität der BL-Schicht sinkt erheblich, wenn
die Calls in die Schicht stateless sind.
-
Ein Aufruf der BL-Schicht ist oftmals ein Remote-Call,
z.B. EJB-Session-Bean, CICS, IMS, ....
Web-Applikation
Persistenz-Schicht
- SQL
- OO-Anbindungen
- OO-Relational-Mapping-Tools
- File I/O (eher selten)
Aufgabe dieser Schicht ist
-
Umwandlung der Entity-Daten aus der BL-Schicht
in Datenformate, die von der Datenbank
gespeichert werden können.
-
Oftmals ersetzen der pessimistischen Lock-Strategie
von Datenbanken, durch eine optimistische
Lock-Strategie, die programmatisch realisiert ist
(Änderungstimestamps oder Änderungscounts).
-
Sicherung gegen konkurrierende Zugriffe auf Daten.
Oftmals auch in BL-Schicht programmiert.
-
Caching von "teuren" Objekten wie DB-Verbindungen.
-
Caching von materialisierten Objekten.
Sonstiges:
-
Implementierungen der Persistenzschicht reichen von
trivial bis extrem komplex.
-
Die Persistenzschicht sollte auch Massenupdate
unterstützen.
Web-Applikation
Datenhaltung
- Relationale Datenbank
- OO-Datenbank
- File I/O
- Archivierungssysteme
Aufgabe dieser Schicht ist
-
Permanente Speicherung von Daten.
Sonstiges:
-
Standard ist heutzutage eine relationale DB.
Abschnitt: Demo-Applikation Web ToDo
[Eine Beispiel-Applikation]
Demo-Applikation Web ToDo
Fachlicher Umfang
-
Die Applikation dient der Verwaltung von
ToDo-Listen.
-
Man kann ToDo-Items eingeben, ändern und löschen.
-
Man kann eine Liste der ToDo-Items anzeigen.
-
Bisheriger Entwicklungsaufwand ca. 2 Tage.
Demo-Applikation Web ToDo
Realisierung der Schichten einer Web-Applikation
Präsentationsschicht
HTML und (ein bisschen Javascript), erzeugt durch Taglibs.
Web-Schicht
Struts
BL-Schicht
Java (Kommando-Pattern)
Persistenz-Schicht
OJB - Objectbridge
Datenhaltung
DB2
Demo-Applikation Web ToDo
Präsentationsschicht mit JSP
-
Die Präsentationsschicht wird durch JSP-Seiten erzeugt.
-
Zur Vereinfachung der Präsentation und Trennung von Design
und Verarbeitungslogik werden Taglibs verwendet.
-
Um ein einheitliches Layout der gesamten Applikation
zu gewährleisten, werden sogenannte Templates verwendet.
Das Template ist ein Muster für die anzuzeigende Seite, in
der an im Template definierten Stellen weitere Gestaltungselemente
eingefügt werden.
-
Um die Handhabung von Templates zu vereinfachen, wurde der
dafür notwendige Code in Taglibs gegossen (Teil von Struts).
-
Die JSP-Seiten sind internationalisiert, indem alle(!)
Text-Konstanten aus einem Repository geholt werden.
Die Realisierung erfolgt über Resource-Bundle.
Demo-Applikation Web ToDo
Struts Grundbegriffe
Struts ist ein in Java geschriebenes Framework zur Erstellung von
Web-Applikationen. Hier einige grundlegende Begriffe von Struts:
Action
Ein Java-Programm, dass aufgrund eines Requests (GET oder POST)
ausgeführt werden soll. Dies ist eine Java-Klasse, die von Action
erbt.
ActionMapping
Zuordnung von URLs zu Actions. Ausserdem Angabe von Web-Pages, die
nach der Ausführung der Action angezeigt werden können. Welche
der Pages angezeigt wird, bestimmt die Action (z.B. Erfolg oder Fehler).
ActionForm
Eine Java-Bean, in der Parameter des Requests gespeichert werden.
Diese Bean kann typischerweise auch die Parameter validieren.
Wenn eine Action ausgeführt wird, bekommt sie das ActionForm
übergeben, damit sie Zugriff auf die Parameter des Requests hat.
(Typischerweise Felder eines Forms oder ?-Argumente eines Links)
Beim ActionMapping wird angegeben, welche ActionForm von einer
Action verwendet wird.
Struts-config
Beschreibung von ActionForms und ActionMappings in Form einer XML-Datei.
ActionServlet
Sozusagen das Hauptprogramm von Struts. Jeder Request, der von Struts
verarbeitet werden soll, wird an das ActionServlet geschickt.
Demo-Applikation Web ToDo
Struts - Bearbeitung eines Requests
Eine Abfrage aus dem Web wird von Struts folgendermassen bearbeitet:
- Extrahieren der angeforderten URL aus dem Request (Pathinfo)
- Finden des ActionMappings für die angeforderte URL in der Liste
aller ActionMappings.
-
Ermitteln des zu verwendenden ActionForms (nötigenfalls Erzeugung des Forms).
-
Füllen des ActionForms mit den Parametern aus dem HTTPRequest.
-
Je nach Konfiguation Aufruf der validate()-Methode des Forms, um
die übergebenen Daten zu verifizieren. Im Fehlerfall wird
an die Seite zurückgesprungen, von der der Request kam (diese
wird übrigens auch im ActionMapping festgelegt.)
-
Aufruf der zu dem Mapping gehörenden Action. Übergeben werden
- ActionMapping
- ActionForm
- HTTPRequest
- HTPPResponse
Innerhalb der Action wird die eigentliche BL-Logik aufgerufen.
Diese liefert entweder ein Ergebnis zurück oder wirft eine
Exception.
Die Action muss ein ActionForward (eine Java-Verpackung für eine
Web-Page) zurückgeben. Welches ActionForward zurückgegeben wird,
ist vom Ausgang der Action abhängig.
-
Struts übergibt dies Kontrolle an die im ActionForward
zurückgegebene Page. Dabei handelt es sich i.a. um eine
JSP-Page. Die Übergabe der Kontrolle geschieht durch
ein forward oder einen Redirect.
Wenn die anzuzeigende Seite ein passendes Form enthält,
wird das Form mit den Werten des ActionForms gefüllt.
Demo-Applikation Web ToDo
Struts - Bearbeitung eines Requests
Demo-Applikation Web ToDo
Struts - Praxis
Demo-Applikation Web ToDo
Businesslogik
-
Die Businesslogik ist durch das Kommando-Pattern realisiert, d.h.
jeder Businessvorgang ist durch eine Klasse realisiert, die das
Wissen kapselt, wir dieser Vorgang durchzuführen ist. Das Interface
BLCommand definiert die Methoden, die jedes Business-Kommando
implementieren muss.
-
Die BLCommands sind ausserdem für die Steuerung von Transaktionen zuständig.
Im Laufe ihrer Ausführung greift ein BLCommand auf verschiedene Businessobjekte
in der Datenbank zu und verändert sie.
(Wie man sieht, gibt es viele Ähnlichkeiten zu EJBs.)
-
Die separate Kodierung der BL ermöglicht die Aufteilung
der Entwicklung in Web-Programmierer und BL-Programmierer.
Der Kontrakt zwischen den beiden Bereichen besteht im
API für die BLCommands.
-
Die Realisierung über das Command-Pattern ermöglicht eine
Auftrennung der Realisierung der BL auf verschiedene Teams.
-
In größeren Applikationen werden die BLCommands noch
hierarchisch geschachtelt, d.h. man verwendet
das Fassaden-Pattern. (Eine Fassade ist ein
vereinfachtes Interface für ein komplexes
Subsystem.)
Demo-Applikation Web ToDo
Object Bridge
-
Object Bridge ist dafür zuständig Objekte aus der Datenbank
zu materialisieren und die an ihnen vorgenommen Veränderungen
in der Datenbank zu speichern.
-
Wie ein Objekt in der Datenbank gespeichert wird, wird in
einem Repository festgelegt. Hauptteil der Beschreibung
ist die Zuordnung von skalaren Instanzvariablen einer Java-Klasse
zu den Spalten einer Tabelle in der DB.
-
Weiterhin wird auch die Definition von Beziehungen zwischen Klassen
unterstützt.
Abschnitt: Web-Applikationen
[Schlußbemerkungen]
Weitere Informationen
Links und Literatur
Fragen?
Hier meine Email-Adresse
- frido@muenster.de
- friedrich.budde@viadee.de
Danke
Copyright (c) 2001 F. Budde.
Mit Urteil vom 12. Mai 1998 hat das Landgericht Hamburg entschieden,
dass man durch die Ausbringung eines Links die Inhalte der gelinkten
Seite ggf. mit zu verantworten hat. Dies kann - so das LG - nur dadurch
verhindert werden, dass man sich ausdrücklich von diesen Inhalten distanziert.
Auf den Seiten dieses Vortrags befinden sich Links zu anderen Seiten im Internet.
Für all diese Links gilt:
Der Autor betont ausdrücklich, dass er keinerlei Einfluss auf die Gestaltung
und die Inhalte der gelinkten Seiten hat. Deshalb distanziert er sich hiermit
ausdrücklich von allen Inhalten aller gelinkten Seiten in diesem Vortrag.
Er macht sich diese Inhalte nicht zu eigen. Diese Erklärung gilt für alle in
diesem Vortrag vorhandenen Links. Der Verfasser dieses Vortrags trägt keine
Verantwortung für die Art, wie die hier zur Verfügung gestellten
Informationen genutzt werden.