Hänchen & Partner GmbH 1
Web-Anwendungen mit dem Jakarta Struts Framework
3.Juli 2003 Martin Burkhardt
Hänchen & Partner GmbH 2
Struts ÜbersichtStruts Übersicht
Das Struts Framework
?
Das Action ServletDas Action Servlet
Die Action Form KlassenDie Action Form Klassen
Die Action KlassenDie Action Klassen
Die Struts KonfigurationDie Struts Konfiguration
Hänchen & Partner GmbH 3 Hänchen & Partner GmbH 3
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 rc2, 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 GmbH 4 Hänchen & Partner GmbH 4
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 CustomTags
Hänchen & Partner GmbH 5 Hänchen & Partner GmbH 5
Was bietet Struts?
MVC Architektur (Model 2)
Model: z.B: JavaBeans, 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 GmbH 6 Hänchen & Partner GmbH 6
Architektur
ActionServlet
ActionForm
ActionJSP
TagLibs
struts-config.xml
ActionAction
Action
ActionFormActionForm
JSP
httprespons
e
httprespons
e
Controller View
Model
httprequest
httprequest
StrutsAnwendung
Hänchen & Partner GmbH 7
Das Struts Framework
Die Action Form KlassenDie Action Form Klassen
Die Action KlassenDie Action Klassen
Die Struts KonfigurationDie Struts Konfiguration
Das Action ServletDas Action Servlet
Struts ÜbersichtStruts Übersicht
?
Hänchen & Partner GmbH 8 Hänchen & Partner GmbH 8
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 ActionForm Objekte
Leitet die ActionForm Objekte nach erfolgreicher Validierung an die Action Objekte weiter
Hänchen & Partner GmbH 9 Hänchen & Partner GmbH 9
Registrierung in der Web Anwendung
...<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param></servlet>
<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern></servlet-mapping>...
Struts Konfigurationsdatei
web.xml
Hänchen & Partner GmbH 10
Das Struts Framework
Die Action KlassenDie Action Klassen
Die Struts KonfigurationDie Struts Konfiguration
Die Action Form KlassenDie Action Form Klassen
Das Action ServletDas Action Servlet
Struts ÜbersichtStruts Übersicht
?
Hänchen & Partner GmbH 11 Hänchen & Partner GmbH 11
Übersicht ActionForm
Erlauben eine einfache Übernahme der Formulardaten in die Properties einer JavaBean Klasse und umgekehrt die Vorbelegung von Formularfeldern mit Werten aus den JavaBean Properties.
Für die Werte aus den HTML Eingabefeldern gibt es im ActionForm Bean gleichnamige Properties.
Optional können die so übernommenen Eingabewerte in einer validate() Methode überprüft werden.
Pro Formular kann eine solche ActionForm Klasse als Ableitung von org.apache.struts.action.ActionForm implementiert werden.
Hänchen & Partner GmbH 12 Hänchen & Partner GmbH 12
Beispiel
<html:form action="simpleInput"> <TABLE border="0"> <TBODY> <TR> <TD>Name</TD> <TD><html:text property="name" /></TD> </TR> ... </TBODY> </TABLE> <html:submit value="ok" /></html:form>
SimpleForm
namewohnort
validate()
Verbindung durch die Namensgleichheit des JSP Tag Attribut-Werts und des JavaBean Property-Namens
Verbindung zwischen der Aktion simpleInput und der Klasse SimpleForm laut struts-config.xmlSimpleForm.jsp
ActionForm
Hänchen & Partner GmbH 13 Hänchen & Partner GmbH 13
Validierung und Fehlerbehandlung (1)
public class SimpleForm extends ActionForm{ private String wohnort; private String name; ... ... Getter und Setter Methoden ... public ActionErrors validate(ActionMapping map, HttpServletRequest req) { ActionErrors errors = new ActionErrors(); if((wohnort == null) || (wohnort.length() < 3)) { errors.add("wohnort", new ActionError("error.city.tooshort")); } return errors; }}
Textschlüssel (I18N)Ein leeres errors Object steht für eine erfolgreiche Validierung
SimpleForm.java
Implementierung der validate() Methode ist optional
Hänchen & Partner GmbH 14 Hänchen & Partner GmbH 14
...<BODY>
<html:errors/>
<html:form....
Validierung und Fehlerbehandlung (2)
Das <html:errors> Tag benötigt diese beiden Textschlüssel
Mit diesem Tag werden alle Fehlermeldungen im ActionErrors Object ausgegeben
errors.header = Eingabefehlererrors.footer = <hr>
error.city.tooshort = Der Ortsname muss aus mindestens 3 Zeichen bestehen
Resource_de.properties
SimpleForm.jsp
Hänchen & Partner GmbH 15 Hänchen & Partner GmbH 15
Validierung und Fehlerbehandlung (3)
Neben der validate() Methode in der ActionForm 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 GmbH 16 Hänchen & Partner GmbH 16
JSP Custom TagLibs in Struts
Struts beinhaltet mehrere JSP Tag-Libs:
HTML TagsForm Tags (z.B. <html:form>, <html:text>)
Messages, Error Messages
Tag Attribute für JavaScript (z.B. Event Handling)
Mehrsprachigkeit
Bean TagsManipulation und Ausgabe von JavaBeans
Logic TagsVergleichsoperationen, Iteratoren, etc.
In der J2EE1.4 wird die JavaServer Pages Standard Tag Library (JSTL) enthalten sein. Die meisten der Struts Bean- und Logic-Tags können dann durch JSTL Tags ersetzt werden.
Hänchen & Partner GmbH 17
Das Struts Framework
Die Struts KonfigurationDie Struts Konfiguration
Struts ÜbersichtStruts Übersicht
Die Action KlassenDie Action Klassen
Die Action Form KlassenDie Action Form Klassen
Das Action ServletDas Action Servlet
?
Hänchen & Partner GmbH 18 Hänchen & Partner GmbH 18
Ü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 ActionForm 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 GmbH 19 Hänchen & Partner GmbH 19
Die execute Methode
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest req,HttpServletResponse res)
throws Exception {ActionForward retFwd;
if( ((LoginForm)form).getUserId().equals("Wombat11")){retFwd = mapping.findForward("success");
}else {retFwd = mapping.findForward("register");
}return retFwd;
}
„Business Logik“ Zeile
Mapping Namen für die Folgeseite
SimpleAction.java
Hänchen & Partner GmbH 20
Das Struts Framework
Struts ÜbersichtStruts Übersicht
Das Action ServletDas Action Servlet
Die Struts KonfigurationDie Struts Konfiguration
Die Action KlassenDie Action Klassen
Die Action Form KlassenDie Action Form Klassen
?
Hänchen & Partner GmbH 21 Hänchen & Partner GmbH 21
struts-config.xml
<struts-config>
<form-beans> <form-bean name="simpleForm" type="hup.kurs.struts.forms.SimpleForm"/> </form-beans>
<global-forwards> ... </global-forwards>
<action-mappings> ... </action-mappings>
</struts-config>
Anwendungs-globales Mapping von Namen auf Seiten
Zuordung von Formularnamen zu ActionForm Klassen (diese Namen werden im action-mapping benötigt)
Konfiguration einer Aktion
struts-config.xml
Hänchen & Partner GmbH 22 Hänchen & Partner GmbH 22
Action Mapping
<action-mappings> <action path="/simpleInput" type="hup.action.SimpleAction" name="simpleForm" scope="request" input="/SimpleForm.jsp" validate="true" > <forward name="success" path="/Welcome.jsp"/> <forward name="register" path="/Register.jsp"/> </action></action-mappings>
Mapping Name laut web.xml URL-Mapping
Klassenname der Action-Subklasse
Name der vorher definierten ActionForm
Diese Seite wird bei nicht erfolgreicher Validierung angezeigt
validate() in der ActionForm aufrufen
In der Action Klasse lokal gültige Namen für Weiterleitungen
struts-config.xml
Hänchen & Partner GmbH 23 Hänchen & Partner GmbH 23
Mehrsprachigkeit
Name (Prefix) der Property-Files mit den Text-Ressourcen
...label.city = Wohnort...Resource_de.properties
...<bean:message key="label.city"/>... StrutsForm.jsp
Textschlüssel für die Struts-Tags
<message-resources parameter="Resource"/>
struts-config.xml
Hänchen & Partner GmbH 24 Hänchen & Partner GmbH 24
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 OpenSource Projekte.
Der Aufruf einer JSP mit Struts Tag-Libs setzt ein initialisiertes ActionServlet voraus (ohne dass dieses schon gerufen wurde), das ActionServlet sollte daher beim Start des Servers geladen werden (<load-on-startup> im web.xml).
Hänchen & Partner GmbH 25 Hänchen & Partner GmbH 25
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 WebSphere Studio Application Developer (grafischer Struts Builder) http://www-3.ibm.com/ software/awdtools/studioappdev/
Hänchen & Partner GmbH 26
Web-Anwendungen mit dem Jakarta Struts Framework
Noch Fragen?
Hänchen & Partner GmbH 27
Calwer Strasse 1
D-71034 Böblingen
Tel.: +49-(0)7031-21 26 - 100
http://www.haenchen.softwarezentrum.de/
Top Related