Struts2 Architektur

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):