Präsentation

Werbung
Einführung / Geschichte
€ Motivation
€ Beispiel
€ Architektur / Komponenten
€ Konfiguration
g
€ Fazit
€
€
€
€
€
€
€
€
€
Open Source Framework für WebWebA
Anwendungen
d
Kompatibel zur J2EE Plattform
Teil des umfangreichen Apache Jakarta
Projekts
Struts:: bautechnischer Ausdruck (engl.) für
Struts
g
Abstützungen“
g
„Verstrebungen,
basiert auf Standard Java APIs
basiert auf Model
Model--View
View--Controller
Controller--Pattern
basiert auf JSPJSP- und ServletServlet-Technologie
aktuelle Version ist Struts 1.3
13
€
2000:
› Craig R. McCalahan
x war auch
h federführend
f d füh
d bei
b i der
d Entwicklung
E t i kl
von JavaJava-ServerServer-Faces
› Entwicklung eines MVC Frameworks für Java
Java--
Plattform
€
Januar 2001:
› Apache Software Foundation veröffentlicht
MVC Framework: Struts
€
€
Bewährte Architekturen und Entwurfsmuster
können benutzt werden, anstatt sie immer
wieder neu zu implementieren
p
Erleichterung von Standardaufgaben in
Web--Anwendungen:
Web
› Formularbehandlung
› Mehrsprachigkeit
€
€
Schnellere Entwicklungszeiten
Statt unschönem HTMLHTML-Code (hoffentlich)
schönere JSP CustomTags
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
€
MVC Architektur (Model 2)
› Model:
M d l z.B.:
B JavaBeans
J
JavaBeans,
B
, EJBs,
EJB D
Datenbank,
t b k EIS
EIS, ...
› View: JSP
› Controller: Teile von Struts und eigene Controller Klassen
€
€
€
€
€
€
Mehrsprachigkeit
JSP Taglibs
g
Server-- und clientseitige Eingabevalidierung möglich
Server
XML basierte Konfiguration für die Formularnavigation
Tiles Framework zur Steuerung des Layouts
Deklaratives Exception Handling
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
http
request
http
response
struts-config.xml
TagLibs
g
Action
Action
Action
Action
ActionServlet
Controller
ActionForm
ActionForm
ActionForm
JSP
JSP
View
Struts
Model
Anwendung
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
Ablaufsteuerung
Zentrale ControllerController-Instanz der Struts WebWebAnwendung
€ Wird
Wi d über
üb ein
i Konfigurationsfile
K fi
ti
fil (struts(struts
(t tconfig.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
j
weiter
€
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
€
€
€
€
€
Erlauben eine einfache Übernahme der Formulardaten in die
Properties einer JavaBean Klasse
Vorbelegung von Formularfeldern mit Werten aus den
JavaBean Properties
Jedes HTML
HTML--Eingabefeld besitzt ein gleichnamiges Bean
Bean-Property im ActionForm
Optional können die übernommenen Eingabewerte in einer
validate()
validate
() Methode überprüft werden
Werden abgeleitet von
org.apache.struts.action.ActionForm
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
Verbindung durch die
Namensgleichheit des
JSP Tag Attribut-Werts
i
und des JavaBean
Property-Namens
Property
ActionForm
AddressForm
<html:form
h l f
action="/SaveAddress">
i
/
dd
<tr>
<td><bean:message key="address.name"/></td>
<td><html:text p
property="name"/></td>
p
y
/ /
</tr>
…
<html:submit property="submit">
<bean message key="detail.save"/>
<bean:message
ke "detail sa e"/>
</html:submit>
…
</html:form>
addressDetails jsp
addressDetails.jsp
name
firstName
validate()
Verbindung zwischen der
Aktion SaveAddress und
d Klasse
der
Kl
Add
AddressForm
F
laut struts-config.xml
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
€
Neben der validate
validate()
() Methode in der
ActionForm Klasse kann die Validierung auch
deklarativ über eine XML Datei erfolgen.
› Dazu beinhaltet Struts eine Reihe von StandardStandard-
Validatoren (z.B. für Beträge, Zahlen, e
e--mail Adresse,
...)) und stellt dazu StandardStandard-Fehlermeldungen bereit.
bereit
› Einer dieser Validatoren ("mask
("mask")
") kann über Regular
Expressions parametrisiert werden. Damit lassen sich
die meisten Einzelfeldprüfungen realisieren.
€
Mit einem Eingabefeld
g
können mehrere
Validatoren verknüpft werden.
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
public class AddressForm extends ActionForm
{
private String name;
Implementierung der validate()
private String firstName;
Methode ist optional
...
... Getter und Setter Methoden
...
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request)
{
ActionErrors errors = new ActionErrors();
if ((name == null) || (name.equals("")))
{
errors.add("name", new ActionMessage("detail.error.name.required"));
}
return errors;
}
}
AddressForm.java
Ein leeres errors Object steht für
eine erfolgreiche Validierung
Textschlüssel
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
...
<BODY>
<html:errors/>
<html:form....
<html:form
AddressDetails.jsp
Das <html:errors> Tag benötigt
diese beiden Textschlüssel
errors.header = Eingabefehler
errors.footer = <hr>
Mit diesem Tag werden
alle Fehlermeldungen im
ActionErrors Object
ausgegeben
MessageResource.properties
detail.error.name.required=Bitte geben Sie einen Namen ein !
detail.error.email.noat=eMail - Address enthält kein @ !
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
Erweiterung der Funktionalität durch Tag
Tag--Bibliotheken
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib
t lib uri="/WEB-INF/struts-html.tld"
i "/WEB INF/ t t ht l tld" prefix="html"
fi "ht l" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
€
Bean-Tags
Bean› Zugriff
g auf Beans und deren Properties
p
((get
(g
get//set
g
set))
› <jsp:useBean id
id=„
=„mybean
mybean“
“ class
class=„
=„myBean
myBean“/>
“/>
€
HTML-Tags
HTML› Form Tags (z.B. <html:form
<html:form>,
>, <
<html:text
html:text>)
>)
› Tag Attribute für JavaScript (z.B. Event Handling)
› Mehrsprachigkeit
€
Logic-Tags
Logic› Bedingte Textausgabe
› Iteration über ObjektObjekt-Collections (<
(<logic:iterate
logic:iterate>)
>)
› Anwendungsfluss
Anwendungsfluss--Management
› Existenzprüfung (<logic:present
(<logic:present>)
>)
€
JSTL JSP Standard Tag Library
› Iterationen, Kontrolle, Import via ftp oder http, XML, Datenbanken …
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
€
€
€
€
€
€
Sind Teil des Contollers und stellen die Verbindung
zum Model her
Werden abgeleitet von
org.apache.struts.action.Action
g p
Bearbeiten den Request bzw. die Daten aus dem
ActionForm Objekt
Erzeugen eine
i
Ausgabe über den Response oder
leiten zu einer Ausgabeseite weiter
müssen ThreadThread-Safe sein,
sein da das Struts Framework nur
eine Instanz pro Klasse hält
Das g
gewünschte Verhalten wird durch Überschreiben
der execute
execute()
() Methode implementiert
„Business
Business Logik“ Zeile
public ActionForward execute(ActionMappin, ActionForm,
HttpServletRequest, HttpServletResponse)
{
…
// Zugriff auf Session und Adress-Liste ablegen
HttpSession session = httpServletRequest.getSession();
List<Address> addressList = (List<Address>)session.getAttribute("list");
…
// Umleiten auf entsprechende JSP-Seite
// (
(in struts-config.xml
g
konfiguriert)
g
)
return actionMapping.findForward("continue");
}
AddressAction.java
Mapping Namen für
die Folgeseite
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
€
Identifikation der Elemente einer Struts
Anwendung erfolgt über logische
Namen (Mapping)
› Zuordnung logischer Namen zu Java Server
Page, Servlet,
Servlet, Klasse
› Start der Anwendung: Einlesen erzeugt
Mapping--Tabelle
Mapping
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
...
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
h
t t
ti
ti S
l t
</servlet-class>
<init-param>
<param name>config</param name>
<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>
<servlet
name>action</servlet name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
...
web.xml
b
l
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
<struts-config>
Zuordnung von Formularnamen
zu ActionForm Klassen (diese
Namen werden im Actionpp g benötigt)
g)
Mapping
<form-beans>
<form-bean
name="addressForm"
type="adressbook.AddressForm"/>
</f
</form-beans>
b
>
Anwendungs-globales Mapping
von Namen auf Seiten
<global-forwards>
<forward name="initList" path="/List.do"/>
path="/List do"/>
</global-forwards>
<action-mappings>
... (siehe nächste Folie)
</action-mappings>
</struts-config>
Konfiguration einer Aktion
struts-config.xml
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
Mapping Name laut
web.xml
b
l URL
URL-Mapping
M
i
Klassenname der
A ti
Action-Subklasse
S bkl
Name der vorher
d fi i t
definierten
A
ActionForm
ti F
<action-mappings>
<action path="/SaveAddress"
type="adressbook.AddressAction"
name addressForm
name="addressForm"
input="/addressDetail.jsp"
scope="request"
validate="true">
<forward name="continue"
path="/List.do" />
p
</action>
</action-mappings>
struts-config.xml
In der Action Klasse lokal gültige
Namen für Weiterleitungen
validate()
in der
ActionForm
aufrufen
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
<message-resources parameter="MessageResource"/>
struts-config.xml
g
Name (Präfix) der
Property-Files mit den
Text-Ressourcen
Textschlüssel für die Struts-Tags
list.title=Willkommen im Addressbuch
MessageResource_de.properties
...
<bean:message key="list.title"/>
...
AddressDetails.jsp
Struts Übersicht
Das Action Servlet
Die Action Form Klassen
Die Action Klassen
Die Struts Konfiguration
g
header.jsp
<tiles:insert>
<tiles:insert>
<tiles:insert>
layout.jsp
<definition name="templateDefinition“
name templateDefinition
path="/layout.jsp">
<put name="title“
value="This is the title." />
<put
p
name="header“
value="header.jsp" />
<put name="body“
value="body.jsp" />
<put name=“footer“
value=“footer.jsp" />
</definition>
struts-config.xml
body.jsp
footer jsp
footer.jsp
€
Vorteile:
›
Komplexe Webanwendung wird in kleine Komponenten aufgeteilt ((Bottom
Bottom
Up))
Up
›
Anwendung leicht erweiterbar und Komponenten durch Trennung
wiederverwendbar
›
Für grosse Anwendungen geeignet
x Bei Wachstum der Anwendung bleiben Überblick und Variabilität erhalten
€
Nachteile:
›
Aufteilung der Anwendung in Komponenten
Æ hohe Komplexität
›
Noch in Weiterentwicklung und Veränderung
Æ Änderungen im Code möglicherweise nötig
›
Das Erstellen der Konfigurationsdatei ist sehr fehlerträchtig
Æ die XML Attributnamen sind oft wenig intuitiv
›
Action--Klasse muss ThreadAction
Thread-Safe sein (j
(jeweils nur eine Instanz))
›
Einführung von Struts erfordert Refactoring der Applikation
€
Struts Home
http://jakarta.apache.org/struts/
€
Wikipedia
http://de.wikipedia.org/wiki/Struts
p //
p
g/
/
€
Buch JavaJava-EE 5
Addi -Wesley
AddionAddion
W l
ISBN: 33-82738273-2362
2362--2
Herunterladen