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