WebAnwendungen mit dem Jakarta Struts Framework 3 Juli
Web-Anwendungen mit dem Jakarta Struts Framework 3. Juli 2003 Martin Burkhardt Hänchen & Partner Gmb. H
Das Struts Framework ? Struts Übersicht Das Action Servlet Die Action Form Klassen Die Action Klassen Die Struts Konfiguration Hänchen & Partner Gmb. H
Struts Übersicht Open Source Framework für Web-Anwendungen Teil des umfangreichen Apache Jakarta Projekts Struts: bautechnischer Ausdruck (engl. ) für „Verstrebungen, Abstützungen“ Basiert auf Standard Java APIs Aktuelle Version ist Struts 1. 1 rc 2, diese benötigt: JDK ab 1. 2 Servlet API ab 2. 2 JSP ab 1. 1 XML Parser, kompatibel zu JAXP ab 1. 1 Einen Teil der Jakarta Common Packages Hänchen & Partner Gmb. H 3
Motivation - Warum noch ein Framework? Bewährte Architekturen und Entwurfsmuster können benutzt werden, anstatt sie immer wieder neu zu implementieren. Erleichterung von Standardaufgaben in Web-Anwendungen: Formularbehandlung Mehrsprachigkeit Schnellere Entwicklungszeiten Statt unschönem HTML-Code (hoffentlich) schönere JSP Custom. Tags Hänchen & Partner Gmb. H 4
Was bietet Struts? MVC Architektur (Model 2) Model: z. B: Java. Beans, EJBs, Datenbank, EIS, . . . View: JSP Controller: Teile von Struts und eigene Controller Klassen Mehrsprachigkeit JSP Taglibs Server- und clientseitige Eingabevalidierung möglich XML basierte Konfiguration für die Formularnavigation Tiles Framework zur Steuerung des Layouts Deklaratives Exception Handling Hänchen & Partner Gmb. H 5
Architektur http request http respons e struts-config. xml Tag. Libs Action Action. Servlet Controller Action. Form Hänchen & Partner Gmb. H Model JSP View Struts Anwendung 6
Das Struts Framework Struts Übersicht ? Das Action Servlet Die Action Form Klassen Die Action Klassen Die Struts Konfiguration Hänchen & Partner Gmb. H
Aufgaben Zentrale Controller Instanz der Struts Web-Anwendung Wird über ein Konfigurationsfile (struts-config. xml) gesteuert Nimmt Parameter aus den Formularen entgegen und füllt damit die Action. Form Objekte Leitet die Action. Form Objekte nach erfolgreicher Validierung an die Action Objekte weiter Hänchen & Partner Gmb. H 8
Registrierung in der Web Anwendung. . . <servlet> <servlet-name>action</servlet-name> <servlet-class> org. apache. struts. action. Action. Servlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config. xml</param-value> </init-param> </servlet> Struts Konfigurationsdatei <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*. do</url-pattern> </servlet-mapping>. . . Hänchen & Partner Gmb. H web. xml 9
Das Struts Framework Struts Übersicht ? Das Action Servlet Die Action Form Klassen Die Action Klassen Die Struts Konfiguration Hänchen & Partner Gmb. H
Übersicht Action. Form Erlauben eine einfache Übernahme der Formulardaten in die Properties einer Java. Bean Klasse und umgekehrt die Vorbelegung von Formularfeldern mit Werten aus den Java. Bean Properties. Für die Werte aus den HTML Eingabefeldern gibt es im Action. Form Bean gleichnamige Properties. Optional können die so übernommenen Eingabewerte in einer validate() Methode überprüft werden. Pro Formular kann eine solche Action. Form Klasse als Ableitung von org. apache. struts. action. Action. Form implementiert werden. Hänchen & Partner Gmb. H 11
Beispiel Verbindung durch die Namensgleichheit des JSP Tag Attribut-Werts und des Java. Bean Property-Namens Action. Form Simple. Form name wohnort validate() <html: form action="simple. Input"> <TABLE border="0"> <TBODY> <TR> <TD>Name</TD> <TD><html: text property="name" /></TD> </TR>. . . </TBODY> </TABLE> <html: submit value="ok" /> </html: form> Simple. Form. jsp Hänchen & Partner Gmb. H Verbindung zwischen der Aktion simple. Input und der Klasse Simple. Form laut struts-config. xml 12
Validierung und Fehlerbehandlung (1) public class Simple. Form extends Action. Form { private String wohnort; Implementierung der validate() private String name; . . . Methode ist optional. . . Getter und Setter Methoden. . . public Action. Errors validate(Action. Mapping map, Http. Servlet. Request req) { Action. Errors errors = new Action. Errors(); if((wohnort == null) || (wohnort. length() < 3)) { errors. add("wohnort", new Action. Error("error. city. tooshort")); } return errors; } } Simple. Form. java Ein leeres errors Object steht für eine erfolgreiche Validierung Hänchen & Partner Gmb. H Textschlüssel (I 18 N) 13
Validierung und Fehlerbehandlung (2) . . . <BODY> <html: errors/> <html: form. . Simple. Form. jsp Das <html: errors> Tag benötigt diese beiden Textschlüssel errors. header = Eingabefehler errors. footer = <hr> Mit diesem Tag werden alle Fehlermeldungen im Action. Errors Object ausgegeben Resource_de. properties error. city. tooshort = Der Ortsname muss aus mindestens 3 Zeichen bestehen Hänchen & Partner Gmb. H 14
Validierung und Fehlerbehandlung (3) Neben der validate() Methode in der Action. Form Klasse kann die Validierung auch deklarativ über eine XML Datei erfolgen. Dazu beinhaltet Struts eine Reihe von Standard-Validatoren (z. B. für Beträge, Zahlen, e-mail Adresse, . . . ) und stellt dazu Standard-Fehlermeldungen bereit. Einer dieser Validatoren ("mask") kann über Regular Expressions parametrisiert werden. Damit lassen sich die meisten Einzelfeldprüfungen realisieren. Mit einem Eingabefeld können mehrere Validatoren verknüpft werden. Hänchen & Partner Gmb. H 15
JSP Custom Tag. Libs in Struts beinhaltet mehrere JSP Tag-Libs: HTML Tags Form Tags (z. B. <html: form>, <html: text>) Messages, Error Messages Tag Attribute für Java. Script (z. B. Event Handling) Mehrsprachigkeit Bean Tags Manipulation und Ausgabe von Java. Beans Logic Tags Vergleichsoperationen, Iteratoren, etc. In der J 2 EE 1. 4 wird die Java. Server Pages Standard Tag Library (JSTL) enthalten sein. Die meisten der Struts Beanund Logic-Tags können dann durch JSTL Tags ersetzt werden. Hänchen & Partner Gmb. H 16
Das Struts Framework Struts Übersicht Das Action Servlet ? Die Action Form Klassen Die Action Klassen Die Struts Konfiguration Hänchen & Partner Gmb. H
Übersicht Action Sind Teil des Contollers und stellen die Verbindung zum Model her Werden abgeleitet von org. apache. struts. action. Action Bearbeiten den Request bzw. die Daten aus dem Action. Form Objekt Erzeugen eine Ausgabe über den Response oder leiten zu einer Ausgabeseite weiter Müssen Thread-Safe sein, da das Struts Framework nur eine Instanz pro Klasse hält Das gewünschte Verhalten wird durch Überschreiben der execute() Methode implementiert Hänchen & Partner Gmb. H 18
Die execute Methode public Action. Forward execute( Action. Mapping mapping, Action. Form form, Http. Servlet. Request req, Http. Servlet. Response res) throws Exception { Action. Forward ret. Fwd; „Business Logik“ Zeile if( ((Login. Form)form). get. User. Id(). equals("Wombat 11")) { ret. Fwd = mapping. find. Forward("success"); } Mapping Namen else die Folgeseite { ret. Fwd = mapping. find. Forward("register"); } return ret. Fwd; } Hänchen & Partner Gmb. H Simple. Action. java 19 für
Das Struts Framework Struts Übersicht Das Action Servlet Die Action Form Klassen ? Die Action Klassen Die Struts Konfiguration Hänchen & Partner Gmb. H
struts-config. xml <struts-config> Zuordung von Formularnamen zu Action. Form Klassen (diese Namen werden im actionmapping benötigt) <form-beans> <form-bean name="simple. Form" type="hup. kurs. struts. forms. Simple. Form"/> </form-beans> <global-forwards>. . . </global-forwards> Anwendungs-globales Mapping von Namen auf Seiten <action-mappings>. . . </action-mappings> Konfiguration einer Aktion </struts-config> Hänchen & Partner Gmb. H struts-config. xml 21
Action Mapping Name laut web. xml URL-Mapping Klassenname der Action-Subklasse Name der vorher definierten Action. Form <action-mappings> <action path="/simple. Input" type="hup. action. Simple. Action" name="simple. Form" scope="request" input="/Simple. Form. jsp" validate="true" > <forward name="success" path="/Welcome. jsp"/> <forward name="register" path="/Register. jsp"/> </action-mappings> struts-config. xml Diese Seite wird bei nicht erfolgreicher Validierung angezeigt validate() in der Action. Form aufrufen In der Action Klasse lokal gültige Namen für Weiterleitungen Hänchen & Partner Gmb. H 22
Mehrsprachigkeit <message-resources parameter="Resource"/> struts-config. xml Name (Prefix) der Property-Files mit den Text-Ressourcen Textschlüssel für die Struts-Tags. . . label. city = Wohnort. . . Resource_de. properties Hänchen & Partner Gmb. H . . . <bean: message key="label. city"/>. . . Struts. Form. jsp 23
Hinweise Das Erstellen der Konfigurationsdatei ist sehr fehlerträchtig, die XML Attributnamen sind oft wenig intuitiv. Visuelle Struts Editoren gibt es z. B. im WSAD 5. 0 und als Open. Source Projekte. Der Aufruf einer JSP mit Struts Tag-Libs setzt ein initialisiertes Action. Servlet voraus (ohne dass dieses schon gerufen wurde), das Action. Servlet sollte daher beim Start des Servers geladen werden (<load-on-startup> im web. xml). Hänchen & Partner Gmb. H 24
Referenzen Struts Home http: //jakarta. apache. org/struts/ Freies GUI Frontend für die Struts-Konfiguration http: //www. jamesholmes. com/struts/console/ Struts Schulung/Workshop http: //www. haenchen. softwarezentrum. de/ Schulung/schulung. html IBM Web. Sphere Studio Application Developer (grafischer Struts Builder) http: //www-3. ibm. com/ software/awdtools/studioappdev/ Hänchen & Partner Gmb. H 25
Web-Anwendungen mit dem Jakarta Struts Framework Noch Fragen? Hänchen & Partner Gmb. H
M. Burkhardt@haenchen. softwarezentrum. de http: //www. haenchen. softwarezentrum. de/ Calwer Strasse 1 D-71034 Böblingen Tel. : +49 -(0)7031 -21 26 - 100 Hänchen & Partner Gmb. H
- Slides: 27