Struts

Java-Bibliothek
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 6. April 2005 um 22:41 Uhr durch Matrixx (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Struts ist ein Open Source-Framework für die Präsentationsschicht von Java-Web-Anwendungen. Es ist eines der bekanntesten Jakarta-Projekte und beschleunigt die Entwicklung von Web- Applikationen wesentlich, indem es einen standardisierten Prozess zur Verarbeitung von HTTP-Anfragen vornimmt. Dabei bedient es sich standardisierter Technologien wie JavaServlets, Java Beans, Resource Bundles und XML sowie verschiedener Jakarta Commons Pakete.

Für den Entwickler bedeutet das, dass viele applikationsrelevante Funktionen bereits implementiert und einsatzbereit sind. Struts wurde von versierten Entwicklern geschaffen und wird bereits in hunderten Applikation eingesetzt. Das garantiert ein solides Framework mit den besten existierenden Softwareentwicklungsstrategien. Struts wurde von Craig McClanahan[1] im Jahr 2000 entwickelt. Seitdem arbeitet eine ständig wachsende Entwicklergemeinde an der Verbesserung des Frameworks. Aktuelle Version ist 1.2.

Aufbau

Das Struts-Framework basiert auf dem Paradigma des Model-View-Controllers. Dabei sind die Komponenten von Struts in der View und dem Controller anzusiedeln. Typsiche Model- Funktionalitäten bietet das Framework nicht. Das Framework beinhaltet zur Zeit ca. 300 Java- Klassen, die in 8 Kernpakete eingeteilt sind.


Theoretischer Ansatz

Model-1-Architektur mit JavaServlets/JSP

Nachdem die Technologie von Java Servlets eingeführt wurde, erkannte man schnell, dass das Erstellen von HTML-Seiten mit Servlets zeitaufwendig und die Weiterentwicklung von Views sehr mühsam sein kann. Hinzu kam, dass alle drei Komponenten des MVC in einem Servlet realisiert wurden. Daraufhin wurde die JSP-Technologie eingeführt, die vor allem dem Webdesigner die Arbeit leichter machte und sich in kurzer Zeit durchsetzte. Daraus entwickelte sich die Model-1-Architektur, die beschreibt, dass Datenhaltung, Geschäftslogik und View in einer JSP anzusiedeln sind, was jedoch bei komplexer Anwendungslogik zu neuen Problemen führt: Die JSP wird in kürzester Zeit unüberschaubar und lässt sich nur durch Entwickler warten, die sowohl HTML- als auch Java-Kenntnisse besitzen.

Model-2-Architektur mit Struts

Die aufgeführten Problematiken haben dazu beigetragen, dass man ein neues Konzept entwickeln musste, das die einzelnen Komponenten klarer voneinander abgrenzt und JavaServlets und JSP gleichermaßen einbindet. Es entstand die Model-2-Architektur für Webanwendungen, die ihren Einsatz im Struts-Framework gefunden hat. Eine wichtige Rolle spielt hierbei das ActionFirst Pattern. Das bedeutet, dass View-Komponenten, die durch JSP abgebildet werden, ausschließlich über Struts-Actions (Servlets) referenziert werden, niemals über einen HTTP-Request. Dabei wird jeder HTTP-Request von einer Controller- Komponente (Servlet) entgegengenommen, bei Struts dem so genannten ActionServlet. Nach einem vom Benutzer initiierten HTTP-Request wird eine Struts-Action ausgeführt, die eine Verbindung zur Geschäftslogik herstellt und diese aktualisiert. Die Ergebnisse der Ausführung werden anschließend in dem HttpRequest als Attribute abgelegt. Danach wird über einen Action- Forward die View aufgerufen und mit den im HttpRequest abgelegten Daten gefüllt. Befindet sich in einer View-Komponente ein HTML-Formular, so wird dieses über ein Java-Bean mit Werten aus dem Model gefüllt. Die Model-2-Architektur bietet sich hier als Regelwerk an (u.a. ist die Kommunikation von Views untereinander, wie auch die feste Kodierung von Flusssteuerung in JSP verboten).

Praktische Umsetzung

Ziel: Trennung von Präsentation, Datenhaltung und Anwendungslogik. Dies erhöht die Übersicht und die Wartbarkeit. Deshalb definiert man in Struts 3 Hauptkomponenten:

  • JSP: Präsentation
  • Action: Anwendungslogik (Holen und Aktualisieren der Daten)
  • FormBean: Datenhaltung (Inhalte von Textfeldern, Kollektionen für Listen usw.)

Alle 3 Komponenten werden in der struts-config.xml miteinander verknüpft und können somit miteinander kommunizieren.

Beispiel:

<struts-config>
    <form-beans type="org.apache.struts.action.ActionFormBean">
        <form-bean name="RegisterForm" type="bar.foo.web.RegisterForm" /> 
    </form-beans>
    <action-mappings type="org.apache.struts.action.ActionMapping">
        <action path="register" 
                name="RegisterForm"
                type="bar.foo.web.RegisterAction"
                input="/web/register.jsp"
                scope="request"
                validate="true">
            <forward name="success" path="/home.do" />
            <forward name="failure" path="/error.do" />    		
        </action>
    </action-mappings>
</struts-config>

Hier wurden register.jsp, RegisterAction, RegisterForm verknüpft.

Die Präsentation

Ein Paradigma ist, in der JSP so wenig Java-Code wie möglich zu verwenden. Um dies zu ermöglichen, kann man sog. TagLibs einsetzen, die einem beim Auslesen der FormBean helfen. Geschrieben und gelesen wird hier jeweils nur aus der im Request liegenden FormBean.

Beispiel:

<html:text name="RegisterForm" property="emailAddress" size="20"/>

Hier wird das Attribut "emailAddress" der FormBean "RegisterForm" über seine Setter-Methode beim Submit der Form mit dem Inhalt des Text-Formulars gefüllt.

Tiles

Struts besitzt ebenfalls mächtige Template-Erweiterungen, Tiles genannt. Sie ermöglichen dem Entwickler, seine Webseiten komponentenbasiert aufzubauen (Header, Footer, Content usw.). Tiles geht dabei weit über das statische Inkludieren von JSP-Inhalten hinaus.

Die Datenhaltung

Die FormBean ist eine normale Bean, die alle benötigten Daten für die JSP und die Action besitzt. Sie ist die einzige Schnittstelle zwischen diesen beiden Komponenten. Die FormBean wird unter dem in der struts-config festgelegten Namen im Request gespeichert. Das Struts-Framework liest die Daten über ihre Getter- und Settermethoden aus.

Die FormBean enthält auch eine validate-Methode, die (wenn in der config aktiviert) die Daten der FormBean prüft, bevor sie zur Action geschickt werden.

Die Action

Die Action ist diejenige Komponente, die mit dem Backend kommuniziert und von ihr Daten holt und sie auch wieder dahin schreibt. Sie enthält meist weitere Prüf-und Auswertungsmechanismen. Sie speichert die Daten in der FormBean ab und liest sie nach dem Submit wieder aus. Daher gilt es als Unsitte, die Daten hier direkt in den Request zu speichern; dazu ist schließlich die FormBean da.

Lizenz

Struts ist unter der Apache-Lizenz veröffentlicht.

Siehe auch