Struts

Struts

Basisdaten

Entwickler Apache Software Foundation
Erscheinungsjahr 10. Oktober 2006, 11. April 2014[1]
Aktuelle Version 6.6.0[2]
(20. Juli 2024)
Betriebssystem plattformunabhängig
Programmier­sprache Java[3][1]
Kategorie Webframework
Lizenz Apache-Lizenz
struts.apache.org

Struts ist ein Open-Source-Framework für die Präsentations- und Steuerungsschicht von Java-Webanwendungen. Struts beschleunigt die Entwicklung von Webanwendungen wesentlich, indem es HTTP-Anfragen in einem standardisierten Prozess verarbeitet. Dabei bedient es sich standardisierter Techniken wie Jakarta Servlet, JavaBeans, Resource Bundles und XML sowie verschiedener Apache-Commons-Pakete. Für den Entwickler bedeutet das, dass viele applikationsrelevante Funktionen bereits implementiert und einsatzbereit sind. Struts wird in sehr vielen Webanwendungen eingesetzt und gemeinhin als solides Framework angesehen.

Geschichte

Struts wurde von Craig McClanahan im Jahr 2000 entwickelt. Seitdem arbeitet eine ständig wachsende Entwicklergemeinde an der Verbesserung des Frameworks.

Als eines der bekanntesten Jakarta-Projekte ist Struts im Jahr 2004 zu einem „Apache Toplevel Project“[4] avanciert.

Am 27. November 2005 verkündete der WebWork Entwickler Patrick Lightbody, dass das Struts ähnliche WebWork als Basis für Apache Struts 2 herangezogen wird.[5] Die folgende Release 2.2.x werde zwar noch unter dem Namen WebWork vertrieben, weiterführende Features und Major Releases werden aber ausschließlich unter Struts 2 laufen. WebWork war ein auf XWork basierendes Java Webframework der Firma OpenSymphony.[6] Zusätzlich zu den von XWork gebotenen Features ermöglichte WebWork Unterstützung bei der Erzeugung von wiederverwendbaren UI templates. Dies umfasste unter anderem Internationalisierung, Formularkontrolle, dynamisches Formular-Parameter-Mapping zu JavaBeans, robuste client- und serverseitige Validierung und vieles mehr. WebWork war unter der OpenSymphony Software License verfügbar, welche einer modifizierten Form der Apache Software License entspricht.

2009 wurde dann auch in einer gemeinsamen Erklärung bekanntgegeben, dass WebWork eine bessere Basis für die Weiterentwicklung von Struts darstelle und die Verschmelzung der beiden Frameworks von der technischen Überlegenheit von WebWork und der größeren Struts Community profitieren würde.[7] Ab der Version 2 ist das Struts-Framework mit dem WebWork-Framework verschmolzen.

Der Ansatz von Struts wurde auch für die Entwicklung von Struts4PHP benutzt.

Neben der aktuellen und stetig weiterentwickelten Version von Struts 2 existiert seit 2022 ein Klon von Struts 1, der das Legacy-Framework von Struts 1 auf einen aktuellen Jakarta EE kompatiblen Stack aktualisiert.[8]

Aufbau

Dem Struts-Framework liegt das EntwurfsmusterModel View Controller“ zugrunde. Die von Struts zur Verfügung gestellten Komponenten entstammen den Bereichen Präsentation (View) und Programmsteuerung (Controller). Funktionen aus dem Modell-Bereich müssen in einer Anwendung anderweitig implementiert werden. Das Framework beinhaltet zurzeit ungefähr 300 Java-Klassen, die in acht Kernpakete eingeteilt sind.

Theoretischer Ansatz

Model-1-Architektur mit JavaServlets/JSP

Nachdem die Technik von Java-Servlets eingeführt wurde, erkannte man schnell, dass das Erstellen von HTML-Seiten mit Servlets zeitaufwändig und die Weiterentwicklung von Views sehr mühsam sein kann. Hinzu kam, dass alle drei Komponenten des Model-View-Controller-Konzepts in einem Servlet realisiert wurden. Daraufhin wurde JSP 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. Zwar mildert die Verwendung von Tag-Bibliotheken (wie z. B. JSTL) dieses Problem etwas, weil kein Java-Code mehr benötigt wird. Das konzeptionelle Grundproblem der Vermischung von Präsentation mit fachlicher Funktionalität bleibt jedoch bestehen.

Model-2-Architektur mit Struts

Die aufgeführten Probleme haben dazu beigetragen, dass man ein neues Konzept entwickeln musste, das die einzelnen Komponenten klarer voneinander abgrenzt und Java-Servlets und JSP gleichermaßen einbindet. Es entstand die Model-2-Architektur für Webanwendungen, die ihren Einsatz im Struts-Framework gefunden hat. Diese setzt einen Front Controller ein, wonach jeder Aufruf erst zentral verarbeitet und dann an die entsprechenden Controller weitergeleitet wird.

Struts2 Features

  • jQuery-Plugin
  • Dojo-Plugin (veraltet)
  • AJAX Client Side Validation
  • Unterstützung für Templates
  • Verschiedene Ergebnistypen
  • Einfach zu erweitern durch Plugins
  • REST-Plugin (REST basierende Actions, Extension-less URLs)
  • Convention Plugin (Action Konfiguration via Konventionen und Annotations)
  • Spring-Plugin (Dependency Injection)
  • Hibernate-Plugin
  • JFreechart-Plugin (Charts)
  • Rome-Plugin (RSS Feeds)

Praktische Umsetzung

Das Ziel ist die Trennung von Präsentation, Datenhaltung und Anwendungslogik. Dies erhöht die Übersicht und die Wartbarkeit. Die Kernelemente in Struts, die zu implementieren sind:

Action
für Programmsteuerung, Schnittstelle zwischen der Ansicht (View) und der Anwendungslogik
JSP
für Präsentation

Die Komponenten werden in der zentralen Konfigurationsdatei von Struts miteinander verknüpft.

Beispiel struts-config.xml in Struts1:

 <struts-config>
     <!-- FormBean Definitionen -->
     <form-beans type="org.apache.struts.action.ActionFormBean">
         <form-bean name="RegisterForm" type="bar.foo.web.RegisterForm" />
     </form-beans>
     <!-- Action Definitionen -->
     <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>

Beispiel struts.xml in Struts2:

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <package name="myApplication" extends="struts-default">
        <action name="index">
            <result>/jsp/index.jsp</result>
        </action>
    </package>
</struts>

Die Präsentation

Ein Paradigma ist, in der JSP so wenig Java-Code (Scriptlets) wie möglich zu verwenden. Um dies zu ermöglichen, sollte man die von Struts mitgelieferten Tag-Libs einsetzen, die einem beim Auslesen der Form-Bean helfen.

Beispiel:

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

Hier wird das Attribut „emailAddress“ der Action (Struts2) bzw. Form-Bean (Struts1) über die Setter-Methode nach dem Senden des Formulars mit dem Inhalt des Textfeldes gefüllt. Weiterhin wird ein <input type="text" size="20" name="emailAddress" value="..."/> HTML-Element in der JSP generiert.

Tiles

Struts besitzt ebenfalls eine Vorlagen-Erweiterung, Tiles genannt. Sie ermöglichen dem Entwickler, seine Webseiten komponentenbasiert aufzubauen (Header, Footer, Content, und so weiter). Tiles können sowohl JSPs als auch weitere Tiles inkludieren.

Validator

Ab der Version 1.1 besitzt Struts ein Validierungswerkzeug, das dem Entwickler bei der Überprüfung der abgesendeten Formdaten hilft. Es arbeitet mit sogenannten Validatoren, die eine spezifische Prüfaufgabe durchführen und beliebig wiederverwendet werden können. Struts bringt einige vorgefertigte Validatoren mit (z. B. für die Prüfung, ob ein Feld ausgefüllt ist oder eine gültige Zahl enthält). Stellt ein Validator einen Fehler fest, wird automatisch auf die Ausgangsseite zurückgeleitet und der Fehler angezeigt. Es ist aber auch möglich, den Fehler via JavaScript clientseitig prüfen zu lassen und den Fehler noch vor dem Absenden des Formulars in einem Fenster anzuzeigen.

Die Form-Bean (Struts1)

Die Form-Bean ist eine normale JavaBean, die alle benötigten Daten für die JSP und die Action enthält. Sie ist die Schnittstelle zwischen diesen beiden Komponenten und wird über die struts-config mit einem Formular in der JSP verknüpft. Wenn das Formular abgeschickt wird, wird die Bean durch das ActionServlet (noch bevor die Action ausgeführt wird) über die setter-Methoden mit den entsprechenden Eingabewerten gefüttert.

Die FormBean enthält außerdem eine Validierungsmethode, welche, wenn in der Konfiguration aktiviert, die Daten der Form-Bean überprüft, bevor sie zur Action geschickt werden. Außerdem enthält sie eine reset-Methode um den Inhalt zurückzusetzen, damit sie wiederverwendet werden kann, was den Aufwand für die Speicherverwaltung reduziert (siehe: Slab allocator).

Da diese Art der Datenhaltung oft zu starr ist, wurde von den Struts-Entwicklern die Möglichkeit geschaffen, die Beans in der struts-config.xml zu deklarieren, wodurch die starre und aufwändige Programmierung der Beans entfällt. Zum Zugriff wird dann die ActionForm zu einer DynaBean des Apache Commons BeanUtils Projekt gecastet und die Daten werden dann über Schlüssel abgefragt. Bei der Verwendung dynamischer Beans kann außerdem zur Validierung das Commons Validation Framework eingesetzt werden.

Die Action

Die Action ist diejenige Komponente, die mit dem Backend kommuniziert, von ihr Daten holt und sie auch wieder dahin schreibt. Sie enthält meist weitere Prüf- und Auswertungsmechanismen.

Die Action ist ebenfalls für die Navigation durch die Webseite verantwortlich, da sie nach getaner Arbeit ein ActionForward zurückgeben muss. Je nachdem, welchen Forward die Action zurückgibt, entscheidet das Struts-Framework anhand der struts-config, zu welcher Seite weitergeleitet werden soll.

Siehe auch

Literatur

  • Matthias Weßendorf: Struts – Websites mit Struts 1.2 & 1.3 und Ajax effizient entwickeln. 2. Auflage. W3L, Herdecke 2006, ISBN 3-937137-26-2
  • Michael Albrecht, Manfred Wolff: Struts ge-packt. MITP, Bonn 2004, ISBN 3-8266-1431-3

Einzelnachweise

  1. a b projects.apache.org. (abgerufen am 8. April 2020).
  2. Release 6.6.0. 20. Juli 2024 (abgerufen am 17. August 2024).
  3. The struts Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Oktober 2018).
  4. Jakarta News 18. März 2004
  5. WebWork joining Struts (Memento vom 21. Februar 2009 im Internet Archive)
  6. opensymphony.com/webwork (Memento vom 12. Juni 2011 im Internet Archive)
  7. PROPOSAL: Merger with WebWork von Don Brown, Ted Husted, Jason Carreira und Patrick Lightbody, 25. November 2009
  8. Stefan Graff: Struts1 - Reloaded. Github. 2024, abgerufen am 13. Februar 2024.

Read other articles:

Hubertus zu Hohenlohe Hubertus zu Hohenlohe (Wien 2015) Nation Mexiko Mexiko Geburtstag 2. Februar 1959 (64 Jahre) Geburtsort Mexiko-Stadt, Mexiko Größe 184 cm Gewicht 82 kg Karriere Disziplin Abfahrt, Super G, Riesentorlauf,Slalom, Kombination Trainer Osterreich/Bulgarien Kilian Albrecht[1] Nationalkader seit 1982 Status aktiv Platzierungen im Alpinen Skiweltcup  Einzel-Weltcupdebüt 8. Februar 1981in Aprica  Gesamtweltcup 42. (1981/82)  Komb...

Đối với các định nghĩa khác, xem Phan Châu Trinh (định hướng). Phan Châu TrinhSinh(1872-09-09)9 tháng 9, 1872phủ Tam Kỳ, tỉnh Quảng Nam, Đại NamMất24 tháng 3, 1926(1926-03-24) (53 tuổi)Sài Gòn, Đông Dương thuộc PhápNơi an nghỉSài GònTên khácPhan Tây HồDân tộcViệtHọc vịPhó bảngNghề nghiệpnhà thơ, nhà văn, nhà hoạt động chính trịPhối ngẫuLê Thị Tỵ (vợ)Con cáiPhan Châu Dật (trai)Phan Thị Ch...

Final de la Liga de Campeones de la UEFA 2017-18 El Estadio Olímpico de Kiev es la sede de la final.LocalizaciónPaís UcraniaLugar Estadio Olímpico, KievDatos generalesTipo Final de la Liga de Campeones de la UEFASuceso Final de Liga de Campeones 2017-18Asistencia 61561HistóricoFecha 26 de mayo de 2018Cronología Final de la Liga de Campeones de la UEFA 2016-17 ◄ Actual ► Final de la Liga de Campeones de la UEFA 2018-19 Sitio web oficial[editar datos en Wikidata] La final de...

Este artigo carece de caixa informativa ou a usada não é a mais adequada.  Nota: Para outros significados, veja Pigmaleão (desambiguação). Pygmalion and Galatea, por Ernest Normand (1886) Pigmalião[1][2][3][4] ou Pigmaleão (grafia menos correta, tendo em conta a etimologia do latim Pygmalion, -onis, do grego Pugmalíon, -onos[5][2]), na mitologia grega, foi um rei da ilha de Chipre,[6][7] que, segundo Ovídio, poeta romano contemporâneo de Augusto, também era escultor e se apaix...

Wappen von Mitte-West Mitte-West Ortsbezirk 07 von Frankfurt am Main Lage von Frankfurt-Mitte-West Koordinaten 50° 8′ 3″ N, 8° 37′ 0″ O50.1340555555568.6165555555556Koordinaten: 50° 8′ 3″ N, 8° 37′ 0″ O. Fläche 11,059 km² Einwohner 43.646 (31. Dez. 2022) Bevölkerungsdichte 3947 Einwohner/km² Postleitzahlen 60487, 60488, 60489 Vorwahl 069 Politik Ortsvorsteher Michaela Will (SPD) Sitzverteilung → si...

Manhattanville redirects here. For the college, see Manhattanville College. Neighborhood of Manhattan in New York CityManhattanvilleNeighborhood of ManhattanThe 125th Street station (1 train) at Broadway and 125th Street, one of Manhattanville's primary subway stations. Visible on the signage is the former 9 train.Location in New York CityCoordinates: 40°48′58″N 73°57′22″W / 40.816°N 73.956°W / 40.816; -73.956Country United StatesState New Yor...

العلاقات البرتغالية الباكستانية البرتغال باكستان   البرتغال   باكستان تعديل مصدري - تعديل   العلاقات البرتغالية الباكستانية هي العلاقات الثنائية التي تجمع بين البرتغال وباكستان.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتي

العلاقات الإيرانية الكرواتية إيران كرواتيا   إيران   كرواتيا تعديل مصدري - تعديل   العلاقات الإيرانية الكرواتية هي العلاقات الثنائية التي تجمع بين إيران وكرواتيا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة ...

Greek love deities For the dialogue by Lucian, see Amores (Lucian). Anteros, popularly called Eros, by Alfred Gilbert, 1885; from the Shaftesbury Memorial in Piccadilly Circus In Ancient Greek religion and mythology, the Erotes (/əˈroʊtiːz/) are a collective of winged gods associated with love and sexual intercourse. They are part of Aphrodite's retinue. Erotes (Greek ἔρωτες) is the plural of Eros (Love, Desire), who as a singular deity has a more complex mythology. Other named Ero...

Schweiz Schweizerische Botschaft in Deutschland Logo Staatliche Ebene bilateral Stellung der Behörde Botschaft Aufsichts­behörde(n) Eidgenössisches Departement für auswärtige Angelegenheiten Hauptsitz Deutschland Berlin Botschafter Paul Seger Website Schweizerische Botschaft in Deutschland Schweizerische Botschaft in Berlin-Tiergarten Schweizerische Botschaft mit dem Neubau auf der rechten Seite Fries am Altbau Die Schweizerische Botschaft Berlin ist der Sitz der diplomatischen...

Pertikaian Fasyoda adalah konflik antara Inggris dan Prancis mengenai politik kolonial di Afrika.[1] Fasyoda adalah sebuah kota di Sudan Selatan, Afrika.[1] Sejak tanggal 10 Juli 1898, Fasyoda berganti nama menjadi Kothok.[1] Pertkaian ini terjadi dari 19 Sepetember 1898 hingga 4 Novemeber 1898.[1] Sejarah singkat Ilustrasi Kontemporer yang menggambarkan pemimpin pasukan Prancis, Lord Marchand, dalam pertikaian Fasyoda di Afrika Perselisihan muncul dari keingin...

2001 French mystery film This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Vidocq 2001 film – news · newspapers · books · scholar · JSTOR (February 2018) (Learn how and when to remove this template message) VidocqFilm posterDirected byPitofWritten by Pitof Jean-Christophe Grangé Based onthe memoirs of Eu...

Wheelchair rugbyat the XVII Paralympic GamesVenueChamp-de-Mars ArenaDates29 August to 2 SeptemberCompetitors96 from 8 nations←20202028→ Wheelchair rugby at the 2024 Summer Paralympics in Paris, France will take place between 29 August to 2 September 2024.[1] Qualification Means of qualification[2] Date Venue Berths Qualified Host country allocation — — 1  France 2023 WWR European Championships Division A[3] 3–7 May 2023 Cardiff 2  Great Br...

American rock band This article is about the rock band. For their debut album, see Foo Fighters (album). For the aerial phenomenon, see Foo fighter. Foo FightersFoo Fighters at Glastonbury Festival 2023. From left to right: Chris Shiflett, Rami Jaffee, Dave Grohl, Nate Mendel, Josh Freese and Pat Smear.Background informationAlso known asThe Holy Shits[1]Dee Gees[2]The ChurnUpsOriginSeattle, Washington, U.S.Genres Alternative rock post-grunge hard rock grunge DiscographyFoo Fig...

Esta página cita fontes, mas que não cobrem todo o conteúdo. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Setembro de 2023) Movimento Nacional Feminino(MNF) Movimento Nacional Feminino Lema Por Deus e pela Pátria Tipo Organização feminina Fundação 28 de abril de 1961 Extinção 1974 Sede Rua Presidente Arriaga 6, Lisboa Cecília Supico Pi...

Scanning of an object or environment to collect data on its shape Making a 3D-model of a Viking belt buckle using a hand held VIUscan 3D laser scanner 3D scanning is the process of analyzing a real-world object or environment to collect three dimensional data of its shape and possibly its appearance (e.g. color). The collected data can then be used to construct digital 3D models. A 3D scanner can be based on many different technologies, each with its own limitations, advantages and costs. Man...

Civilian vessel registered by the U.S. Navy during World War I USS Kanawha II, later renamed USS Piqua, was a private yacht prior to her World War I Navy service. She received the section patrol number SP-130. The troopship America was the former German ocean liner Amerika. She was assigned the U.S. Navy ID number 3006. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged a...

Philippine action drama television series This article is about the television series. For the 1986 film on which the TV series is based, see Batang Quiapo. Batang QuiapoSeason 1 Promotional posterGenre Crime drama[1] Action[2] Comedy[2] Based onBatang Quiapo by Pablo SantiagoWritten by Enrique S. Villasis Lino Balmes Miguel Legaspi Arvin Belarmino Jorrybell Agoto Directed by Malu L. Sevilla Darnel Villaflor Coco Martin Creative directorCoco MartinStarring Coco Martin ...

Disputes between Naftogaz Ukrayiny and Gazprom Parts of this article (those related to the 31 Oct 2014 settlement) need to be updated. Please help update this article to reflect recent events or newly available information. (October 2014) Natural gas pipelines from Russia to Europe as of March 2021 The EU natural gas price The Russia–Ukraine gas disputes refer to a number of disputes between Ukrainian oil and gas company Naftogaz Ukrayiny and Russian gas supplier Gazprom over natural gas su...

Penghargaan FFI untuk Pemeran Utama Pria TerbaikPenerima penghargaan pada 2023: Reza RahadianDeskripsiPemeran Utama Pria (Aktor) Terbaik tahun iniNegaraIndonesiaDipersembahkan oleh Badan Perfilman Indonesia Kementerian Pendidikan dan Kebudayaan Republik Indonesia Diberikan perdana1955Pemegang gelar saat iniReza Rahadian – Berbalas Kejam (2023)Situs webfestivalfilm.id Penghargaan FFI untuk Pemeran Utama Pria Terbaik atau Piala Citra untuk Pemeran Utama Pria Terbaik atau Aktor Terbaik adalah ...