Konzeption und Realisierung einer Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Theoretische und Technische Informatik Fachgebiet Rechnerarchitektur Konzeption und Realisierung einer Nutzerschnittstelle unter Einbeziehung von Web-Services für die Verwaltung von Nutzerkonten Verteidigung der Diplomarbeit Dirk Behrendt 25. November 2003 Verantwortlicher Hochschullehrer: Prof. Dr.-Ing. habil. W. Fengler Betreuer: Dr.-Ing. J. Nützel
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 2/25
Einleitung und Ziele über kein anderes Konzept wurde in den letzten Monaten in Fachzeitschriften mehr diskutiert als über Web-Services man gewinnt den Eindruck, dass das Web-Service Konzept die Softwareentwicklung revolutionieren würde Ziel dieser Diplomarbeit Erstellen einer Web-Applikation, welche Funktionalitäten des Web-Services nutzt, der vom Potato-System bereitgestellt wird 3/25
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 4/25
Web-Services Was sind Web-Services? Wie kann man Web-Services erstellen? Wie kann man Funktionalitäten eines Web-Services in seiner Anwendung nutzen? Wie können Entwickler dabei unterstützt werden? Definition: Ein Web-Service ist eine über ein Netzwerk zugängliche Schnittstelle zu Anwendungsfunktionen, die mit Hilfe von Standardtechniken des Internets realisiert wird. 1 plattformunabhängige Interaktion zwischen Systemen mittels HTTP, XML, SOAP, WSDL und UDDI 5/25 1 James Snell, Doug Tidwell, Pavel Kulchenko, Webservice-Programmierung mit SOAP, O’Reilly Verlag GmbH & Co. KG, 2002.
Web-Services SOAP (Simple Object Access Protocol) Kommunikation zwischen Anwendungen durch XML-Nachrichten SOAP-Nachricht besteht aus einem Umschlag - einem optionalen Header - und einem Body <soapenv:Envelope> </soapenv:Envelope> SOAP-Umschlag <soapenv:header> <!--Informationsblöcke--> </soapenv:header> Header <soapenv:Body> <!--Parameterübergabe--> <!--Rückgabewerte--> </soapenv:Body> Body 6/25
Web-Services WSDL (Web Service Description Language) Standard für die Beschreibung von Web-Services beinhaltet Schnittstelleninformationen des Web-Services Struktur eines WSDL-Dokuments entspricht der Syntax des XML-Schemas UDDI (Universal Description, Discovery and Integration) bietet ein durchsuchbares Register von Diensten und ihren Beschreibungen gelbe Seiten 7/25
Web-Services Wie können Entwickler bei der Arbeit mit Web-Services unterstützt werden? 8/25
Web-Services Web-Service Toolkits Apache Axis von der Apache Software Foundation Web Service Toolkit (WSTK) von IBM Java Web Services Developer Pack (JWSDP) von Sun Web-Service Entwicklungsumgebungen Visual Studio .NET (.NET Framework) Sun ONE (Sun Open Net Environment) unterstützen den Entwickler bei der Arbeit mit Web-Services Erzeugung von WSDL aus (Java)-Klassen Erzeugung von (Java)-Klassen aus WSDL Bereitstellung von Klassen-Bibliotheken, um Web-Services nutzen zu können 9/25
Web-Services Erstellung und Nutzung von Web-Services 10/25 <definitions> ... </definitions> WSDL-Dokument WSDL2Java Java2WSDL Zur Erstellung und Nutzung von Web-Services Java-Klassen Java-Interface 10/25
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 11/25
Potato-System Handelsplatz für digitale Güter, insbesondere MP3-Dateien Nutzer werden am Umsatz beteiligt, indem sie zu Vertriebspartnern werden Web-Service Potato-Jacket Potato-System (AS) MySQL -Tomcat -JSP -Axis Client-Bibliothek SOAP JDBC -Tomcat -Java-Klassen -Axis SOAP-Engine SOAP P2P-Client -Axis Client-Bibliothek 12/25
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 13/25
Konzeption Anforderungen an das Jacket Erstellung einer Web-Applikation (Jacket), die den Web-Service in Anspruch nimmt Realisierung ausgewählter Funktionalitäten des Web-Services Garantieren der Wartbarkeit und Erweiterbarkeit der Web-Applikation durch strikte Trennung von Logik und Layout und Einsatz von Testwerkzeugen MVC (Model-View-Controller Prinzip) Entwicklungsprozess nach dem MVC-Prinzip kann durch MVC-Frameworks erleichtert werden 14/25
Konzeption Das klassische MVC-Prinzip Das MVC 2-Prinzip 15/25 Model-Objekt - stellt das Anwendungsobjekt dar - enthält die Kernfunktionalität und die Daten View-Objekt - stellt die Bildschirmrepräsentation dar - Objekt erhält die Daten vom Model Controller-Objekt - Reaktion und Verarbeitung von Benutzereingaben - Vermittler zwischen Model und View VIEW MODEL CONTROLLER Das MVC 2-Prinzip Servlet (Controller) Nutzeraktion Daten JavaBeans (Model) leitet weiter Systemantwort instanziiert JSP (View) Browser Web-Container 15/25
Konzeption Das MVC-Framework Struts implementiert konsequent das MVC 2-Muster alle eingehenden Requests werden in Action-Klassen und ihren zugeordneten Action-Forms verarbeitet Verwendung von JSP zur Präsentation Struts Tag-Libraries Bean Tag-Library HTML Tag-Library Logic Tag-Library Layout mit Struts-Tiles Layout-Management durch Trennung von Inhalt und Layout Struts-Validator Überprüfung von Benutzereingaben 16/25
Konzeption Umgesetzte Funktionalitäten Warenkorbverwaltung Jacket Action-Klasse Web-Service Methode Login LoginAction login() Logout LogoutAction logout() Registrierung als Käufer BuyerRegistrationAction registerUser() Registrierung als Verkäufer ProviderRegistrationAction registerProvider() Anzeigen der Käufer-Nutzerdaten EditBuyerAccountAction getUserData() Anzeigen der Verkäufer-Nutzerdaten EditProviderAccountAction getProviderData() Änderung der Käufer-Nutzerdaten changeUserData() Änderung der Verkäufer-Nutzerdaten changeProviderData() Anzeigen der Nutzer-Transaktionen TransactionAction getTransactioninfos() Registrierung einer Datei RegisterFileAction registerFile() Informationen zu einer Datei anzeigen BuyTanFileAction getFileInfo() Erwerb einer Datei CheckoutAction buyFiles() weitere Action-Klassen, die den Web-Service nicht in Anspruch nehmen Warenkorbverwaltung Cache-Verwaltung 17/25
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 18/25
Umsetzung Login in das Potato-System (1) Modifikationen in der struts-config.xml <!--Login Action--> <action path="/processAccountLogin" type="com.as.jacket.actions.LoginAction" name= "loginForm" scope="request" validate="true"> <forward name="success" path="/loginSuccess.jsp"/> <forward name="failure" path="/login.jsp"/> </action> <!--FormBean definition--> <form-bean name= "loginForm" dynamic="true" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name= "login" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> </form-bean> 19/25
Umsetzung Login in das Potato-System (2) Implementierung der Login Action-Klasse User user = null; // get form variables from the DynaValidatorForm String login = (String) ((DynaValidatorForm) form).get("login"); String password = (String) ((DynaValidatorForm) form).get("password"); // try to login on the Accounting Server TrustedCertificate trustedCertificate = new TrustedCertificate(); user = trustedCertificate.login(request, login, password); // login failed if (user == null) { ActionErrors errors = new ActionErrors(); ActionError loginError = new ActionError("error.login.invalid"); errors.add(ActionErrors.GLOBAL_ERROR, loginError); saveErrors(request, errors); System.out.println("User was not found or the password is invalid."); return mapping.findForward(IConstants.FAILURE_KEY); } else { // add the user to the session request.getSession().setAttribute(IConstants.USER_KEY, user); return mapping.findForward(IConstants.SUCCESS_KEY); } 20/25
Erzeugung von Stub-Klassen aus der WSDL-Datei mit dem Tool WSLD2Java Umsetzung Erzeugung von Stub-Klassen aus der WSDL-Datei mit dem Tool WSLD2Java Login in das Potato-System (3) Web-Service Aufruf public PotatoInterface getPotatoInterface(HttpServletRequest request) { PotatoInterface pi = null; try { PotatoWebServiceLocator locator = new PotatoWebServiceLocator(); pi = (PotatoInterface) locator.getPotato(); ((PotatoBindingStub) pi).setMaintainSession(true); } catch (javax.xml.rpc.ServiceException se) { System.out.println("caught ServiceException:" + se); } return pi; } private User login(PotatoInterface pi, String login, String password) { UserInfo userInfo = null; try { userInfo = pi.login(login, password); } catch (RemoteException re) { System.out.println("login: RemoteException caught:" + re.toString()); return null; } User su = new User(pi, login, userInfo); return su; } 21/25
Umsetzung Login in das Potato-System (4) Erstellung der JSP <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> ... <html:form action="/processAccountLogin" method = "POST"> <html:text property="login" /><br> <html:password property="password"/><br> <html:submit property="submit"/> </html:form> (5) Testen mit dem StrutsTestCase-Framework setRequestPathInfo("/processAccountLogin"); addRequestParameter("login", "ginny"); addRequestParameter("password", "ginny"); actionPerform(); verifyNoActionErrors(); verifyForward("success"); 22/25
Inhalt Einleitung und Ziele Web-Services Potato-System Konzeption Umsetzung Zusammenfassung und Ausblick 23/25
Zusammenfassung und Ausblick In diesem Vortrag wurde… … in die Web-Service Technologie eingeführt … die Architektur des Potato-Systems vorgestellt … dargelegt, welche Anforderungen die neue Nutzerschnittstelle (Jacket) zu erfüllen hat - Wartbarkeit und Erweiterbarkeit - Umsetzung ausgewählter Funktionalitäten unter Nutzung des Web-Service … die beispielhafte Implementierung des Logins in das Potato-System veranschaulicht Aufgaben für zukünftige Entwickler… … Umsetzung aller Funktionalitäten des Web-Services … Verbesserung des Layouts (Struts-Tiles) … Erhöhung der Sicherheit durch WS-Security denkbar … Erweiterung von Struts durch XSLT denkbar 24/25
Vielen Dank für Ihre Aufmerksamkeit! 25/25
Struts Controller Konfiguration in der struts-config.xml Struts-Framework Klassen User-Klassen
Die Aufgaben der zentralen Konfigurationsdatei DynaActionForm <struts-config> <form-bean ... </form-bean> <action </Action> </struts-config> vereinbart ActionForm YourAction definiert Action-Mapping validation.xml erzwingt Validierung definiert Weiterleitung struts-config.xml
Struts Tiles potatoLayout.jsp login.jsp tilesDefinitions.xml ... </definition> </tiles-definitions> header.jsp menu.jsp <tiles:insert> login_body.jsp footer.jsp potatoLayout.jsp copyright.jsp login.jsp tilesDefinitions.xml <tiles-definitions> <definition name="login" path="/layout/potatoLayout.jsp"> <put name="header" value="/inc/header.jsp"/> <put name="menu" value="/inc/menu.jsp"/> <put name="body-content" value="/body/login_body.jsp"/> <put name="footer" value="/inc/footer.jsp"/> <put name="copyright" value="/inc/copyright.jsp"/> </definition>
Das MVC 1-Prinzip - JSP übernimmt die Rolle der View Nutzeraktion Daten JavaBeans (Model) JSP (View) Systemantwort Browser Web-Container - JSP übernimmt die Rolle der View Schnittstelle der Geschäftslogik von einer JavaBean-Komponente repräsentiert Funktionalität des Controllers ebenfalls in einer JSP implementiert
Software-Entwicklungsumgebung: Toolkit: Toolkits dienen der automatischen Unterstützung von Methoden und Verfahren zum Zwecke der Software-erstellung. 1 Software-Entwicklungsumgebung: Unter einer Software-Entwicklungsumgebung versteht man die Gesamtheit von aufeinander abgestimmten, untereinander kompatiblen, gemeinsam zu benutzenden und wesentliche Teile des Entwicklungsprozesses abdeckenden Methoden und Werkzeugen zur Software-Entwicklung. 2 1 Helmut Balzert, Lehrbuch der Software-Technik: “Software-Entwicklung”, ISBN: 3-8247-0480-0, Spektrum Akademischer Verlag GmbH, 2000. 2 Gesellschaft für Informatik Fachgruppe WI-VM Vorgehensmodelle für die betriebliche Anwendungsentwicklung, http://www.vorgehensmodelle.de/, letzter Zugriff: 29.10.03