Struts2 Architektur
Das Kernstück des Frameworks bildet ein J2EE-Filter 1.
Dieser wird bei dem Aufruf einer URL aktiv und delegiert die verarbeitende
Logik an weitere Klassen, die als Aktions-Klassen bezeichnet werden. Dabei
beinhaltet jede Aktions-Klasse häufig die Verarbeitung genau eines Klicks,
z. B. die Prüfung eines Benutzernamens und eines Passworts.
Die Verbindung zwischen aufrufender URL und ausführender Aktion wird durch
eine XML-Datei konfiguriert, die ein weiterer zentraler Bestandteil des Struts2-Frameworks
ist. Durch sie können sämtliche Zugriffe auf URL-Adressen innerhalb einer Anwendung kontrolliert
und durch den Entwickler gepflegt werden. Weiterhin können unterschiedliche Namespaces2 für
URL-Adressen vergeben und somit ein Security-Konzept für die Ahutorisierung realisiert werden.
Zur Authentifizierung können Interceptoren 3 eingesetzt werden, die noch vor der Ausführung einer
Aktions-Klasse aktiv werden. Interceptoren können mit der HTTP-Session4 kommunizieren und eine
entsprechende Authentifizierung sicherstellen. Am Ende jeder Aktion wird ein Result zurückgegeben.
Dieses weist den Filter an, eine entsprechende HTML-Datei zurückzuliefern.
Der Typ des Results ist ein Java-Objekt vom Typ „java.lang.String“ und wird ebenfalls
in einer XML-Datei konfiguriert. Als zusätzliche Erweiterung empfiehlt sich
das Decorator-Framework5 „Sitemesh“. Dieses ermöglicht es, den Rahmen einer HTML-Seite zur
Laufzeit zu erzeugen und Coderepetitionen innerhalb von HTML-Seiten zu vermeiden.
Abbildung 8 verdeutlicht das Zusammenspiel aller Komponenten von Struts2 bei Aufruf einer URL
durch den Benutzer:
Abbildung 8: Struts2-Architektur
Quelle:http://struts.apache.org/2.x/docs/big-picture.data/Struts2-Architecture.png
Im Folgenden wird die Beispielkonfiguration einer Struts-Anwendung vorgestellt und beschrieben.
Anhand dieser wird das Zusammenspiel der Komponenten verdeutlicht.
Der Struts2-Filter wird in der web.xml eingetragen. Abbildung 9 zeigt die Filter-Konfiguration.
<filter>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
Abbildung 9: Struts2-Filter in der zentralen web.xml
Quelle: Eigene Darstellung
Die Konfiguration setzt sich zusammen aus einem symbolischen Namen und der eigentlichen
Struts2-Filter-Klasse. Zusätzlich wird das eigentliche URL-Pattern6 des Filters definiert.
Dieses steuert, bei welchen Anfragen der Filter zum Tragen kommt.
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Abbildung 10: Konfiguration des URL-Patterns
Quelle: Eigene Darstellung
Eine aufrufende Aktions-Klasse kann eine einfache POJO-Klasse7 sein.
Es empfiehlt sich jedoch von der Oberklasse „ActionSupport“ zu erben.
Durch diese Vererbung können spezielle Validierungs- und Internationalisierungsfunktionen
genutzt werden. Jede Aktions-Klasse beinhaltet eine Methode mit der
Signatur „public String execute() throws Exception“, die beim Aufruf der Aktion ausgeführt
wird und ein Objekt vom Typ String zurückliefert.
In Abbildung 11 wird ein Beispiel einer Aktions-Klasse für einen Benutzer-Login aufgeführt:
/*
* Loggt einen Benutzer in das Portal ein.
* @author Fabian Rossbacher *
*/
public class BenutzerLoginAktion extends ActionSupport {
/** Benutzer-Service */
private BenutzerService benutzerService;
/** Benutzername */
private String benutzername;
/** Benutzerpasswort */
private String passwort;
/** * Loggt einen Benutzer in das Portal-System ein. */
public String execute() {
// Prüfung über strategy-Benutzerservice
if (benutzerService.pruefeBenutzer(benutzername, passwort)) {
return "success";
} else {
return "error";
}
}
}
Abbildung 11: Aktions-Klasse für den Benutzerlogin
Quelle: Eigene Darstellung
Die in Abbildung 11 erstellte Aktions-Klasse wird durch den Eintrag in die
struts2.xml-Konfigurationsdatei mit einer URL verbunden:
<!-- Aufruf der Registrierungs-Aktion -->
<action name="registrierungsAktion" class="BenutzerLoginAktion">
<result name="error">/WEB-INF/jsp/error.jsp</result>
<result name="success">/WEB-INF/jsp/success.jsp</result>
</action>
Abbildung 12: Struts2 Action-Mapping
Quelle: Eigene Darstellung
Die in der Methode in Tabelle 3 zurückgelieferten String-Objekte werden als mögliche
Results in der Aktion eingetragen. Sie steuert die dem Benutzer angezeigte Ergebnisseite.
Die konfigurierte Aktion kann nun über die URL „http://servername/registrierungsAktion.action“ aufgerufen werden.
Literatur-Tipp (Meiner Meinung nach das einzige wirklich brauchbare Buch):