Struts-Framework
STRUTS Open Source Web Application
Framework
Model-View-Controller-Pattern
Dipl.-Inf. (FH) Albina Thyen
Unterprojekt des Apache Jakarta
Basierend auf: JSP, Servlets, JavaBeans
Model View Controller Architektur
1
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
3
Einleitung
Gliederung
Dipl.-Inf. (FH) Albina Thyen
2
Bestandteile der Struts
Java Servlets
Java-Programme, die auf einem Web-Server
(z.B. Apache Tomcat) laufen
Java Server Pages (JSP)
Text-Dokumente, wo neben dem HTML-Code
zusätzlicher Java-Code vorhanden ist
Java Beans
Klassen, die für ihre Ereignis-Verarbeitungen
und Methoden bestimmte von Sun festgelegte
Namenskonventionen einhalten müssen
Dipl.-Inf. (FH) Albina Thyen
4
Einleitung
MVC-Paradigma
Vorteile des Struts- Frameworks
basiert auf einer Reihe von "Best Practice"
–Design Patterns
Verringerung des Aufwandes für die
Entwicklung, Pflege und Weiterentwicklung von Webapplikationen.
von allen J2EE kompatiblen Application
Server unterstützt.
getrennte Planung und Entwicklung durch
die MVC-Architektur.
Dipl.-Inf. (FH) Albina Thyen
5
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
Model
View
Dipl.-Inf. (FH) Albina Thyen
7
MVC-Paradigma
Gliederung
Controller
6
Vorteile von MVC
Model kann unabhängig von View und
Controller entwickelt werden
Model kann ohne Änderungen der View
und Controller gewechselt werden
Flexibilität durch Kombinierbarkeit der
Komponenten
Bessere Wartbarkeit und
Wiederverwendbarkeit
Dipl.-Inf. (FH) Albina Thyen
8
MVC-Paradigma
Struts-Framework mit MVC
MVC bei Java-Webanwendungen
JSP Model 1 Architektur
1
Browser
Anfrage
4
<View/Controller>
JSP
Antwort
Data
Sources
Application
Server
http-Anfrage
http-Antwort
strutsconfig.xml
2
TagLibs
3 Datentransfer
<Model>
Action
Action
Action
Action
ActionServlet
JavaBean
Controller
ActionForm
ActionForm
ActionForm
Dipl.-Inf. (FH) Albina Thyen
9
MVC-Paradigma
Browser
1
<Controller>
Servlet
4 weiterleiten
6
Antwort
Dipl.-Inf. (FH) Albina Thyen
<View>
JSP
View
Struts
Anwendung
11
Gliederung
JSP Model 2 Architektur
Anfrage
Dipl.-Inf. (FH) Albina Thyen
Model
JSP
JSP
Application
Server
Data
Sources
2 erzeugt
<Model>
JavaBean
5
liest Daten
3
Datentransfer
10
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
12
Struts: Controller
Struts: Controller
Der Controller setzt sich bei Struts aus
mehreren Teilen zusammen:
Konfiguration über web.xml
<web-app>
ActionServlet
RequestProcessor
ActionForms
Actions
struts-config.xml
Dipl.-Inf. (FH) Albina Thyen
<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>
Struts Konfigurationsdatei
…
</servlet>
13
Dipl.-Inf. (FH) Albina Thyen
Struts: Controller
Struts: Controller
ActionServlet
RequestProcessor
dient als zentraler Eintrittspunkt für alle
Requests
leitet Request und Response für die
Steuerung des weiteren Ablaufs an den
RequestProcessor weiter
Dipl.-Inf. (FH) Albina Thyen
web.xml
15
ist für den Aufruf von Action-Klassen und
für die Weiterleitung an JSP
verantwortlich
Zur Ermittlung von Action und JSPSeiten wird der RequestProcessor über
die Datei struts-config.xml konfiguriert
14
Dipl.-Inf. (FH) Albina Thyen
16
Struts: Controller
Struts: Controller
ActionForms
Actions
public class CheckOutAction extends Action implements ActionConstants ,
kapselt Formulardaten des Nutzers in
einfache Java-Objekten
ActionForms erben von
org.apache.struts.action.ActionForm
ActionForms werden nur dann
verwendet, wenn sie in der Datei
struts-config.xml konfiguriert wurden
SessionKeys, RequestKeys {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
}
Dipl.-Inf. (FH) Albina Thyen
17
Profile profile = (Profile)request.getSession().getAttribute(PROFILE_KEY);
ShoppingCart cart = (ShoppingCart)request.getSession().getAttribute(
SHOPPING_CART_KEY);
…
request.setAttribute(ORDER_ID, Integer.toString(order.getId()));
request.getSession().removeAttribute(SHOPPING_CART_KEY);
return mapping.findForward(ORDER_CONFIRMATION);
} …
CheckOutAction.java
Dipl.-Inf. (FH) Albina Thyen
Struts: Controller
Struts: Controller
Actions
struts-config.xml
Schnittstelle zum Model
erben direkt oder indirekt von der Klasse
org.apache.struts.actions.Action
überschreiben die Methode execute()
und erhalten eine Referenz auf ein
ActionForm als Parameter
Dipl.-Inf. (FH) Albina Thyen
18
19
Die Datei struts-config.xml organisiert
den Ablauf des Kontrollflusses eines
Requests
struts-config.xml legt fest,
welche Action aufgerufen wird
welche ActionForms verwendet werden
welche JSP-Seite angezeigt wird
Dipl.-Inf. (FH) Albina Thyen
20
Struts: Controller
Gliederung
struts-config.xml
<form-beans>
…
<form-bean name="queryResultsForm"
type="de.deicon.opensource.webapp.forms.QueryResultsForm">
</form-bean>
<form-bean name="shoppingCartForm"
type="de.deicon.opensource.webapp.forms.ShoppingCartForm">
</form-bean>
…
</form-beans>
…
Dipl.-Inf. (FH) Albina Thyen
21
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
23
Struts: Controller
Struts: Model
struts-config.xml
Der Zugriff auf die Daten des Models erfolgt
über JavaBeans
JavaBeans besitzen eine Menge privater
Eigenschaften, die über öffentliche get()
und set()- Methoden manipuliert bzw.
ausgelesen werden können.
Zudem können sie noch beliebige Methoden
besitzen die den Zustand der JavaBean
beeinflussen.
…
<action-mappings>
<action path="/createLogin"
type="de.deicon.opensource.webapp.actions.LogonAction"
parameter="method"
name="createLoginForm"
scope="request"
validate="true"
input="login.create">
</action>
…
</action-mappings>
…
Dipl.-Inf. (FH) Albina Thyen
22
Dipl.-Inf. (FH) Albina Thyen
24
Struts: Model
Gliederung
public class Book {
private String isbn = null;
private String title = null;
private String authorName = null;
…
public String getTitle() { return this.title; }
public void setTitle(String title) { this.title = title; }
public String getIsbn() { return this.isbn; }
}
public void setIsbn(String isbn) { this.isbn = isbn; }
…
Book.java
Dipl.-Inf. (FH) Albina Thyen
25
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
27
Struts: Model
Struts: View
Eine FormBean ist eine JavaBean, deren
Properties mit den UIKomponenten eines
HTML-Formulares korrespondieren.
Die FormBean repräsentiert den serverseitigen Status des HTML Formulares.
Es wird ermöglicht, die Daten, die in JavaCode vorliegen, zu validieren, auszulesen,
zu manipulieren oder zu löschen.
Der Zugriff innerhalb der View erfolgt über
spezielle Struts-Tags in den JavaServer
Pages
Wird durch JavaServer Pages repräsentiert.
Tag-Bibliotheken erlauben Struts HTMLOutput dynamisch zu gestalten.
Neben den Struts-eigenen können auch die
Java Standard Tag Library verwendet
werden.
Für die Dateieingabe in HTML-Formulare
wird die Struts-HTML TagLib verwendet.
In der HTML-TagLib befinden sich für alle
HTML-Tags entsprechende Struts-Tags.
Dipl.-Inf. (FH) Albina Thyen
26
Dipl.-Inf. (FH) Albina Thyen
28
Struts: View
Deployment von Struts-Anwendungen
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
Für das Deployment müssen
Webanwendungen eine bestimmte Struktur
besitzen
Webanwendungen können sowohl in
gepackter als auch in ungepackter Form
deployed werden
…
<html:errors />
<html:form action="/dynValLogon" focus="userId">
<table><tr>
<bean:message key="prompt.userId"/>:
<td>
<html:text property="userId" size="16" maxlength="18"/>
</td></tr>
<tr>
<bean:message key="prompt.password"/>:
<td>
<html:password property="password" redisplay="false"/>
…
Dipl.-Inf. (FH) Albina Thyen
29
Gliederung
31
Deployment von Struts-Anwendungen
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
Dipl.-Inf. (FH) Albina Thyen
30
Struktur von Webanwendungen
Web-Anwendung
*.jsp
WEB-INF
*.tld
web.xml
struts-config.xml
lib
*.jar
classes
*.class
ApplicationResources.properties
Dipl.-Inf. (FH) Albina Thyen
32
Deployment von Struts-Anwendungen
Deployment von Struts-Anwendungen
Im Deployment-Descriptor müssen das
ActionServlet des Struts-Frameworks sowie
die Taglibs angemeldet werden
Die für Struts benötigte Bibliotheken
müssen ins /WEB-INF/lib-Verzeichnis
kopiert werden:
<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>
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-fileupload.jar
commons-logging.jar
commons-validator.jar
struts.jar
web.xml
Dipl.-Inf. (FH) Albina Thyen
33
Dipl.-Inf. (FH) Albina Thyen
35
Deployment von Struts-Anwendungen
Deployment von Struts-Anwendungen
Die Konfigurationsdatei struts-config.xml
muss in das Verzeichnis WEB-INF kopiert
werden
Die Taglib-Descriptoren müssen ins
Verzeichnis WEB-INF kopiert werden:
Konfiguration von Struts
struts-config.xml
struts-bean.tld
struts-logic.tld
struts-html.tld
Controller
Modell
Web
Application
Dipl.-Inf. (FH) Albina Thyen
34
Dipl.-Inf. (FH) Albina Thyen
Properties Files
web.xml
View
Struts tag libraries
36
Gliederung
Projektentwicklung von Struts
Einleitung
Model-View-Controller-Paradigma
Struts: Controller
Struts: Model
Struts: View
Deployment von Struts-Anwendungen
Projektentwicklung von Struts
Dipl.-Inf. (FH) Albina Thyen
37
Struts–Bibliotheken
Struts ist ein Open-Source-Framework
und unterliegt der Apache-License
Die Struts Bibliotheken stehen unter
http://struts.apache.org in zwei
Varianten zum Download bereit:
Binaries
Source Code
Dipl.-Inf. (FH) Albina Thyen
Projektentwicklung von Struts
Projektentwicklung von Struts
Benötigte Komponenten
Servlet – Container
Struts läuft in jedem Servlet-Container,
der die JavaServlet-Spezifikation erfüllt.
Z.B.:
zwingend notwendig:
Struts–Bibliotheken
Servlet – Container
IBM Websphere
iPlanet
Allaire JRun
sinnvoll:
Entwicklungsumgebung mit Plug-In
Application Server
DBMS
Dipl.-Inf. (FH) Albina Thyen
39
Im Beispiel wird der Tomcat Server
verwendet
ist ebenfalls unter der Apache License
erhältlich unter
http://jakarta.apache.org/tomcat
38
Dipl.-Inf. (FH) Albina Thyen
40
Projektentwicklung von Struts
Struts-Framework & MVC-Pattern
Unterstützung durch IDEs
Eine Reihe von IDEs bieten eine
Unterstützung des Entwicklungsprozesses
mit Struts an
Insbesondere für Eclipse existiert eine
Reihe verschiedener Plug-Ins
http://www.myeclipseide.com
Dipl.-Inf. (FH) Albina Thyen
41
Literaturhinweise
Dieter Eickstädt,Thomas Reuhl:J2EE mit Struts &
Co.,2004,Markt+Technik
Joel Greenyer: Web-Applikationen mit Jakarta Struts
http://www.jgreen.de/work/struts-seminar
Web Anwendungen mit Struts
http://www.kiltz.de/?menue=MenueStruts&page=Struts
Was ist Struts? Entwicklung von Web Anwendungen
http://www.laliluna.de/what-is-struts_de.html
Neuerungen im Java-Framework Struts
http://www.heise.de/ix/artikel/2006/03/125/
http://struts.apache.org/ - Startseite von Struts
http://struts.apache.org/userGuide/ - Struts User Guide
http://www.husted.com/struts/tips/ - Struts-Tipps
Dipl.-Inf. (FH) Albina Thyen
42
Vielen Dank für Ihre
Aufmerksamkeit!
Dipl.-Inf. (FH) Albina Thyen
43