Web-Services

Werbung
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
Herunterladen