Post on 05-Apr-2015
Technische Universität IlmenauFakultät für Informatik und AutomatisierungInstitut für Theoretische und Technische InformatikFachgebiet Rechnerarchitektur
Verantwortlicher Hochschullehrer: Verantwortlicher Hochschullehrer: Prof. Dr.-Ing. habil. W. FenglerBetreuer: Betreuer: Dr.-Ing. J. Nützel
Konzeption und Realisierung einer Nutzerschnittstelle unter Einbeziehung von Web-Services für die Verwaltung von Nutzerkonten
Verteidigung der DiplomarbeitVerteidigung der DiplomarbeitDirk BehrendtDirk Behrendt
25. November 200325. November 2003
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?
Ein Web-Service ist eine über ein Netzwerk zugängliche Schnittstelle zu Anwendungsfunktionen, die mit Hilfe von Standardtechniken des Internets realisiert wird. 1
Definition:
1 James Snell, Doug Tidwell, Pavel Kulchenko, Webservice-Programmierung mit SOAP,
O’Reilly Verlag GmbH & Co. KG, 2002.
plattformunabhängige Interaktion zwischen Systemen mittels HTTP, XML, SOAP, WSDL und UDDI
5/25
Web-Services
• Kommunikation zwischen Anwendungen durch XML-Nachrichten• SOAP-Nachricht besteht aus einem Umschlag - einem optionalen Header - und einem Body
SOAP (Simple Object Access Protocol)
SOAP-Umschlag<soapenv:Envelope>
</soapenv:Envelope>
Header
Body
<soapenv:header> <!--Informationsblöcke--> </soapenv:header>
<soapenv:Body> <!--Parameterübergabe--> <!--Rückgabewerte--></soapenv: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
Wie können Entwickler bei der Arbeit mit Web-Services unterstützt werden?
Web-Services
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
Java-Interface
Java2WSDL
<definitions>
...
...
</definitions>
WSDL2Java
Java-Klassen
WSDL-Dokument
Zur Erstellung
und Nutzung
von Web-
Services 10/25
Inhalt
• Einleitung und Ziele• Web-Services• Potato-System• Konzeption• Umsetzung• Zusammenfassung und Ausblick
11/25
Potato-Jacket-Tomcat-JSP-Axis Client-Bibliothek
P2P-Client-AxisClient-Bibliothek
Web-Service
Potato-System(AS)
-Tomcat-Java-Klassen-Axis SOAP-Engine
MySQL
SOAP
SOAP JDBC
Potato-System
• Handelsplatz für digitale Güter, insbesondere MP3-Dateien• Nutzer werden am Umsatz beteiligt, indem sie zu Vertriebspartnern werden
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
VIEW
CONTROLLERMODEL
Model-Objekt- stellt das Anwendungsobjekt dar- enthält die Kernfunktionalität und die DatenView-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
Das MVC 2-Prinzip
Servlet(Controller)
DatenJavaBeans(Model)
Browser
Web-Container
Nutzeraktion
Systemantwort JSP(View)
instanziiert
leitet weiter
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
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()
Umgesetzte Funktionalitäten
• 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 DynaValidatorFormString login = (String) ((DynaValidatorForm) form).get("login");String password = (String) ((DynaValidatorForm) form).get("password");
// try to login on the Accounting ServerTrustedCertificate trustedCertificate = new TrustedCertificate();user = trustedCertificate.login(request, login, password);
// login failedif (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
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;}
Erzeugung von Stub-Klassen aus der WSDL-Datei
mit dem Tool WSLD2Java
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 AusblickIn 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