Struts-Framework Model-View-Controller-Pattern STRUTS Open Source Web Application Framework Unterprojekt des Apache Jakarta Basierend auf: JSP, Servlets, JavaBeans Model View Controller Architektur Dipl.-Inf. (FH) Albina Thyen 1 Dipl.-Inf. (FH) Albina Thyen 3 Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Dipl.-Inf. (FH) Albina Thyen 2 Einleitung 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 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. MVC-Paradigma Model Controller View Dipl.-Inf. (FH) Albina Thyen 5 Dipl.-Inf. (FH) Albina Thyen 7 Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts MVC-Paradigma 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 6 Dipl.-Inf. (FH) Albina Thyen 8
MVC-Paradigma Struts-Framework mit MVC MVC bei Java-Webanwendungen JSP Model 1 Architektur Browser 1 Anfrage 4 Antwort <View/Controller> JSP 2 <Model> JavaBean Application Server 3 Datentransfer Data Sources http-anfrage ActionServlet Controller strutsconfig.xml ActionForm ActionForm ActionForm Action Action Action Action Model http-antwort TagLibs JSP JSP View Struts Anwendung Dipl.-Inf. (FH) Albina Thyen 9 Dipl.-Inf. (FH) Albina Thyen 11 MVC-Paradigma Browser JSP Model 2 Architektur 1 Anfrage 6 Antwort <Controller> Servlet 4 weiterleiten <View> JSP Application Server 2 erzeugt <Model> JavaBean 5 liest Daten Data Sources 3 Datentransfer Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Dipl.-Inf. (FH) Albina Thyen 10 Dipl.-Inf. (FH) Albina Thyen 12
Der Controller setzt sich bei Struts aus mehreren Teilen zusammen: ActionServlet RequestProcessor ActionForms Actions struts-config.xml Dipl.-Inf. (FH) Albina Thyen 13 Konfiguration über web.xml <web-app> web.xml <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> Dipl.-Inf. (FH) Albina Thyen 15 ActionServlet dient als zentraler Eintrittspunkt für alle Requests leitet Request und Response für die Steuerung des weiteren Ablaufs an den RequestProcessor weiter RequestProcessor ist für den Aufruf von Action-Klassen und für die Weiterleitung an JSP verantwortlich Zur Ermittlung von Action und JSP- Seiten wird der RequestProcessor über die Datei struts-config.xml konfiguriert Dipl.-Inf. (FH) Albina Thyen 14 Dipl.-Inf. (FH) Albina Thyen 16
ActionForms 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 Dipl.-Inf. (FH) Albina Thyen 17 Actions public class CheckOutAction extends Action implements ActionConstants, SessionKeys, RequestKeys { } public ActionForward execute(actionmapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 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 19 Actions 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 struts-config.xml 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 18 Dipl.-Inf. (FH) Albina Thyen 20
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> Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Dipl.-Inf. (FH) Albina Thyen 21 Dipl.-Inf. (FH) Albina Thyen 23 struts-config.xml <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> Struts: Model 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. Dipl.-Inf. (FH) Albina Thyen 22 Dipl.-Inf. (FH) Albina Thyen 24
Struts: Model 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 Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Dipl.-Inf. (FH) Albina Thyen 25 Dipl.-Inf. (FH) Albina Thyen 27 Struts: Model 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 Java- Code vorliegen, zu validieren, auszulesen, zu manipulieren oder zu löschen. Der Zugriff innerhalb der View erfolgt über spezielle Struts-Tags in den JavaServer Pages Struts: View Wird durch JavaServer Pages repräsentiert. Tag-Bibliotheken erlauben Struts HTML- Output 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 <%@ taglib uri="/web-inf/struts-bean.tld" prefix="bean" %> <%@ taglib uri="/web-inf/struts-html.tld" prefix="html" %> <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> Deployment von Struts-Anwendungen Für das Deployment müssen Webanwendungen eine bestimmte Struktur besitzen Webanwendungen können sowohl in gepackter als auch in ungepackter Form deployed werden <tr> <bean:message key="prompt.password"/>: <td> <html:password property="password" redisplay="false"/> Dipl.-Inf. (FH) Albina Thyen 29 Dipl.-Inf. (FH) Albina Thyen 31 Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Deployment von Struts-Anwendungen 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 30 Dipl.-Inf. (FH) Albina Thyen 32
Deployment von Struts-Anwendungen Im Deployment-Descriptor müssen das ActionServlet des Struts-Frameworks sowie die Taglibs angemeldet 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> web.xml Dipl.-Inf. (FH) Albina Thyen 33 Deployment von Struts-Anwendungen Die für Struts benötigte Bibliotheken müssen ins /WEB-INF/lib-Verzeichnis kopiert werden: commons-beanutils.jar commons-collections.jar commons-digester.jar commons-fileupload.jar commons-logging.jar commons-validator.jar struts.jar 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: struts-bean.tld struts-logic.tld struts-html.tld Konfiguration von Struts struts-config.xml Properties Files Controller View web.xml Web Application Modell Struts tag libraries Dipl.-Inf. (FH) Albina Thyen 34 Dipl.-Inf. (FH) Albina Thyen 36
Einleitung Model-View-Controller-Paradigma Struts: Model Struts: View Deployment von Struts-Anwendungen Projektentwicklung von Struts Projektentwicklung von Struts 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 37 Dipl.-Inf. (FH) Albina Thyen 39 Projektentwicklung von Struts Benötigte Komponenten zwingend notwendig: Struts Bibliotheken Servlet Container sinnvoll: Entwicklungsumgebung mit Plug-In Application Server DBMS Projektentwicklung von Struts Servlet Container Struts läuft in jedem Servlet-Container, der die JavaServlet-Spezifikation erfüllt. Z.B.: IBM Websphere iplanet Allaire JRun Im Beispiel wird der Tomcat Server verwendet ist ebenfalls unter der Apache License erhältlich unter http://jakarta.apache.org/tomcat Dipl.-Inf. (FH) Albina Thyen 38 Dipl.-Inf. (FH) Albina Thyen 40
Projektentwicklung von Struts 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 Struts-Framework & MVC-Pattern Vielen Dank für Ihre Aufmerksamkeit! Dipl.-Inf. (FH) Albina Thyen 41 Dipl.-Inf. (FH) Albina Thyen 43 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