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 1 James Snell, Doug Tidwell, Pavel Kulchenko, Webservice-Programmierung mit SOAP, O’Reilly Verlag GmbH & Co. KG, 2002. 5/25 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 SOAP-Umschlag Header Body <soapenv:Envelope> <soapenv:header> <!--Informationsblöcke--> </soapenv:header> <soapenv:Body> <!--Parameterübergabe--> <!--Rückgabewerte--> </soapenv:Body> </soapenv:Envelope> 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 <definitions> ... ... </definitions> WSDL-Dokument WSDL2Java Zur Erstellung und Nutzung von Web-Services Java2WSDL Java-Interface Java-Klassen 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 -Tomcat -JSP -Axis Client-Bibliothek SOAP Potato-System (AS) -Tomcat -Java-Klassen -Axis SOAP-Engine JDBC MySQL 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 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 Nutzeraktion Servlet (Controller) leitet Systemantwort JavaBeans (Model) weiter JSP (View) Daten instanziiert 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 Funktionalität 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 BuyerRegistrationAction changeUserData() Änderung der Verkäufer-Nutzerdaten ProviderRegistrationAction 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, Warenkorbverwaltung Cache-Verwaltung die den Web-Service nicht in Anspruch nehmen 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 Umsetzung Login in das Potato-System (3) Web-Service Aufruf Erzeugung von Stub-Klassen aus der WSDL-Datei mit dem Tool WSLD2Java 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