Andreas Eberhart Stefan Fischer Java-Bausteine für E-Commerce- Anwendungen Verteilte Anwendungen mit Servlets, CORBA und XML HANSER
Inhaltsverzeichnis 1 Einführung 1 1.1 Motivation 1 1.2 Aufbau des Buchs 3 Teil I: Grundlagen 7 2 Verteilte Anwendungen 9 2.1 Eine kurze Geschichte der Informatik 9 2.2 Grundlagen und Charakteristika verteilter Systeme 11 2.2.1 Definition eines verteilten Systems 11 2.2.2 Wichtige Charakteristika verteilter Systeme 13 2.2.3 Kommunikationsmodelle 14 2.2.4 Vorteile und Nachteile verteilter Systeme 16 2.3 Applikationen in Internet und World-Wide Web 18 2.3.1 Die Entwicklung des Internets 18 2.3.2 Technische Grundlagen des Internet 19 2.3.3 Internet-Anwendungen 22 2.3.4 Das World-Wide Web 26 2.3.5 Basisbausteine von Web-Anwendungen: Client und Server 26 2.3.6 Aufbau von Web-Anwendungen 31 2.4 Architektur und Eigenschaften von Internet und Web-Anwendungen 33 2.4.1 N-Tier-Architekturen 33 2.4.2 Thin Clients 36 2.4.3 Sicherheitsaspekte 36 2.4.4 Skalierbarkeit 37 2.5 Die Beispielanwendung des Buchs 37 3 Hypertext Markup Language HTML 41 3.1 Grundlagen von HTML 41 3.2 Sprachelemente 42 3.2.1 Struktur eines HTML-Dokuments 43 3.2.2 Textabsätze 43 3.2.3 Textformatierungen 44
VI Inhaltsverzeichnis 3.2.4 Listen 45 3.2.5 HTML-Links 47 3.2.6 Grafiken 48 3.2.7 Tabellen 49 3.2.8 Applets und Skripte 50 3.2.9 Formulare 51 3.3 HTML-Werkzeuge 54 4 Java als Programmiersprache für verteilte Anwendungen 59 4.1 Entwicklung von Java 59 4.2 Objektorientierte Programmierung 61 4.2.1 Abstraktion 63 4.2.2 Information Hiding 63 4.2.3 Kapselung 64 4.2.4 Vererbung 64 4.2.5 Polymorphismus 65 4.3 Wichtige Konstruktionselemente von Java 66 4.3.1 Klassen, Methoden und Variablen 66 4.3.2 Sequenzen, Schleifen und Bedingungen 68 4.3.3 Objektinstanzen und -referenzen 70 4.3.4 Ein- und Ausgabe 71 4.3.5 Schnittstellen, Abstraktion und Vererbung 73 4.3.6 Information Hiding: public und private 76 4.3.7 Exceptions 77 4.3.8 Nebenläufigkeit mittels Threads 79 4.4 Aufbau und Ausführung von Java-Programmen 83 4.5 Java-Entwicklungsumgebungen 84 4.5.1 Sun Microsystems Java Development Kit 85 4.5.2 Netbeans bzw. Forte for Java Community Edition (Sun) 87 4.5.3 Weitere IDEs 88 5 JDBC - Datenbankzugriff mit Java 91 5.1 Leistungsmerkmale von Datenbank-Servern 91 5.2 Das Relationale Datenmodell 93 5.3 Die Abfragesprache SQL 94 5.4 Datenbankzugriff via JDBC 96 5.4.1 Einrichten der ODBC-Verbindung 98 5.4.2 Die Connection-, PreparedStatement- und ResultSet-Objekte 100 5.4.3 Einfügen, Löschen und Ändern von Werten in der Datenbank 103
Inhaltsverzeichnis VII Teil II: Servlets 105 6 Servlet-Grundlagen 107 6.1 Entwicklung und Aufgabe der Servlet-Technologie 107 6.2 Architektur verteilter Anwendungen mit Servlets 109 6.3 Servlet-Unterstiitzung in Web-Servern 110 6.3.1 Servlet-Engines 110 6.3.2 Ablaufeines Servlet-Aufrufs 110 6.4 Generische Servlet-Objekte in Java 111 6.4.1 Die Servlet-Bibliothek in Java 111 6.4.2 Lebenszyklus von Servlets 113 6.4.3 Anfrageobjekte 113 6.4.4 Antwortobjekte 114 6.5 Spezielle Servlets für Web-Anwendungen 115 6.5.1 HTTP-Servlets 116 6.5.2 HTTP-Anfrageobjekte 116 6.5.3 HTTP-Antwortobjekte 117 6.6 Längerfristige Verbindungen 118 6.6.1 Cookies 118 6.6.2 Sessions 119 7 Werkzeugunterstützung für Servlets 123 7.1 Java Servlet Development Kit 123 7.1.1 Installation 124 7.1.2 Handhabung 124 7.2 Apache Web-Server 125 7.2.1 Installation 126 7.2.2 Handhabung 126 7.3 Servlet-Entwicklung mit Forte for Java 127 7.4 Java Server Pages 130 7.4.1 JSP zwischen Servlets und HTML 130 7.4.2 Servlets oder JSP? 131 7.4.3 Tool-Unterstützung für Java Server Pages 132 8 Die Beispielanwendung mit Servlets 135 8.1 Die zentrale Datenbank 135 8.1.1 Das Datenbankschema von Bücher Online 136 8.1.2 Wahl der Datenbank-Software 138 8.1.3 Anlegen der Tabellen 138 8.2 Funktionen 140
VIII Inhaltsverzeichnis 8.3 Web-Design 141 8.4 Interaktion mit dem Anwender 142 8.4.1 Homepage 143 8.4.2 Anmeldung und Anlegen eines neuen Kontos 144 8.4.3 Suche 145 8.4.4 Warenkorb 146 8.4.5 Checkout 147 8.5 Das erste Servlet 148 8.5.1 Die Klassendefinition 148 8.5.2 Die dogeto-methode 148 8.5.3 Kreieren und Starten der Datenbankanfrage 149 8.5.4 Fehlerbehandlung 151 8.5.5 Ein erster Testlauf 151 8.6 Gekapselte Funktionalität im Buchobjekt 152 8.7 Verwaltung der Kunden-Sessions 156 8.7.1 Entstehung und Vernichtung von Sessions 156 8.7.2 Das Session Interface 157 8.8 Die Klasse Warenkorb 157 8.9 Die Verwaltung der Warenkorbs 159 8.10 Die Kundenverwaltung 161 8.10.1 Die Klasse Kunde 161 8.10.2 Der Login-Vorgang 166 8.10.3 Abwicklung von Neuanmeldungen 167 8.11 Abwicklung der Einkaufstransaktion 170 8.12 Ausgabe der Navigationsstruktur 177 8.13 Verwaltung von Datenbankverbindungen 180 8.13.1 Verbindungen Zwischenspeichern 180 8.13.2 Connection Pooling 181 8.13.3 Abschalten des Pools 185 8.13.4 PreparedStatements 185 8.13.5 Die Basisklasse der Datenbank-Servlets 185 Teil III: CORBA 187 9 Grundlagen von CORBA 189 9.1 Verteilte Objektsysteme 189 9.2 CORBA - ein Standard für verteilte Objektsysteme 191 9.3 Architektur von CORBA 191 9.3.1 Der Object Request Broker 192 9.3.2 Application Objects 193 9.3.3 CORBA-Dienste und -Facilities 193 9.4 Kommunikation zwischen Objekten 196
Inhaltsverzeichnis 9.4.1 Interface Definition Language (IDL) 197 9.4.2 IDL-Compiler 199 9.4.3 IDL Stubs und Skeletons 200 9.4.4 Dynamic Interfaces und Repositories 201 9.5 Generelles Vorgehen bei der Entwicklung von CORBA-Anwendungen 202 9.6 Vorteile des Einsatzes von CORBA 204 9.7 Von der Architektur zum Produkt 205 10 Java-Tools für CORBA 207 10.1 IDL-Compiler 207 10.2 Aussehen der Stubs und Skeletons bei JDK 208 10.2.1 Das Java Interface 209 10.2.2 Die Server Basisklasse 209 10.2.3 Die Helper-Klasse 210 10.2.4 Der Client-Stub 211 10.2.5 Die Holder-Klasse 211 10.3 Object Request Broker 212 10.4 Name Server 216 10.5 Testlauf 216 10.6 Ein Tipp zum Umgang mit dem JDK ORB 217 10.7 Forte for Java 218 11 Die Beispielanwendung in CORBA 219 11.1 Überblick auf die Architektur 219 11.2 Ablauf einer Transaktion 220 11.2.1 Feste Anzahl von Applikationsservern 220 11.2.2 Ein Server für jeden Client 221 11.2.3 Ein Pool von Server-Objekten 221 11.3 Die IDL-Schnittstelle 222 11.4 Der Kreditkarten-Client 225 11.4.1 Multithreading 225 11.4.2 Initialisierung der CORB A-Kommunikation 226 11.4.3 Zahlungsabwicklung 227 11.4.4 Verteilte Transaktionen 228 11.5 Der Kreditkarten-Server 229 11.5.1 Initialisierung und Fehlerbehandlung auf der Server-Seite 229 11.5.2 Die Klasse Verteiler 232 11.5.3 Die Klasse Zahlung: Session-Verwaltung unter CORBA 234 11.6 Wozu ein CORBA Suchinterface? 238 11.7 Übermittlung von Buchinformation per CORBA 240 11.7.1 Suchinterface-IDL: Structs, Arrays und out-parameter 240
X Inhaltsverzeichnis 11.7.2 Die Implementierung der CORBA-Suchmaschine 242 11.7.3 Die Implementierung des CORBA-Suchmaschinen-Clients 246 Teil IV: XML 249 12 XML - das neue ASCII 251 12.1 Die Entwicklung von XML 251 12.2 XML und verwandte Technologien 252 12.2.1 XML und Datenbanken 252 12.2.2 XML als Kommunikationsformat 252 12.2.3 XML als Dokumentenformat 254 12.2.4 XML und HTML 254 12.3 Design-Ziele 255 12.4 Was XML leistet, was XML nicht leisten kann 256 12.5 EDI und E-Commerce 256 12.6 XML-Dokumente und Document Type Definition 257 12.6.1 Ein erstes Beispiel 258 12.6.2 Interne, externe und gemischte DTDs 258 12.6.3 Wohlgeformte Dokumente 259 12.6.4 Valide Dokumente 259 12.6.5 Nicht valide Dokumente 260 12.7 Elemente 261 12.7.1 Wurzelelement 262 12.7.2 Definition der Eltern-Kind-Verhältnisse zwischen Elementen 262 12.7.3 Blattelemente 263 12.7.4 Uneingeschränkte Elemente 263 12.8 Attribute 263 12.8.1 Character Data 264 12.8.2 NMTOKEN und NMTOKENS 264 12.8.3 IDs und ID-Referenzen 265 12.8.4 Enumerated Attribute 267 12.9 Attribut-Default-Werte 267 12.9.1 Required 267 12.9.2 Implied 268 12.9.3 Default 268 12.9.4 Fixed 269 12.10 Wann Attribute, wann Elemente? 269 12.11 Ist so viel Reglementierung sinnvoll? 270 12.12 Entities 270 12.12.1 Interne Entities 271 12.12.2 Sonderzeichen 271 12.12.3 Modulare Dokumente 272
Inhaltsverzeichnis XI 12.12.4 Modulare DTDs 274 12.12.5 Einbindung von binären Dateien 275 12.13 Darstellung mit Stylesheets 275 12.13.1 Cascading Stylesheets 276 12.13.2 extensible Stylesheet Language 278 12.14 Weitere XML-Technologien 280 12.14.1 Namespaces 280 12.14.2 XLink 281 12.14.3 XSL Transformations (XSLT) 282 12.14.4 XSchema 283 12.14.5 XPath 284 12.14.6 XPointer 284 13 Werkzeugunterstützung für XML 287 13.1 Browser 287 13.2 Parser 288 13.2.1 DOM-basierte Parser 288 13.2.2 SAX-basierte Parser 292 13.3 Validierer 294 13.4 XML-Unterstützung in Forte for Java 296 13.5 Weitere Werkzeuge 297 14 Die Beispielanwendung mit XML 299 14.1 Architektur 299 14.1.1 Die Buchangebots-DTD 300 14.1.2 Die Rolle der DTD im Beispiel 300 14.2 Das XML-Suchinterface von Bücher Online 301 14.3 Der XML-Agent 305 14.3.1 Ein XML Directory Service 305 14.3.2 Nützliche Klassen für die Entwicklung des Agenten 307 14.3.3 Wrapper-Klassen für DOM-Bäume 309 14.3.4 Der Programmcode des Agenten 311 14.3.5 Ein Preisvergleich im gesamten Internet 312 Teil V: Zusammenfassung 315 15 Verwandte Lösungen - Unterschiede und Gemeinsamkeiten 317 15.1 Dynamische Web-Seiten erzeugen 317
ХП Inhaltsverzeichnis 15.1.1 Common Gateway Interface (CGI) 318 15.1.2 Internet Server Application Programming Interface (ISAPI) 319 15.1.3 Active Server Pages 319 15.1.4 Hypertext Preprocessor (PHP3) 321 15.1.5 Client-Side-Skripte 321 15.2 Remote Procedure Calls 323 15.2.1 RPC mit Sockets 323 15.2.2 Remote Method Invocation (RMI) 326 15.2.3 Distributed Component Object Model (DCOM) 328 15.2.4 EJB und MTS 329 15.3 Datenbanken 329 15.3.1 Dynamisches SQL 330 15.3.2 Embedded SQL 330 15.3.3 Stored Procedures 331 15.3.4 JDBC 2.0 331 15.3.5 ActiveX Data Objects 331 16 Zusammenspiel der Technologien 333 16.1 HTML über HTTP 333 16.2 XML und XSL über HTTP 334 16.3 Lösungen ohne Logik auf dem Web-Server 335 16.4 XPath basierte Lösungen 337 16.5 Remote Procedure Calls 338 Anhang A: JDBC-Referenz 341 A.l Die JDBC-Schnittstelle 341 A.2 Transaktionsunterstützung in Datenbankprodukten 342 A.3 Fehlermeldungen verschiedener Datenbankprodukte 343 A.4 Abbildung von SQL-Datentypen in Java 347 Anhang B: Servlet-Objekte f 351 B. 1 Das Interface Servlet 351 B.2 Die abstrakte Klasse GenericServlet 352 B.3 Das Interface ServletRequest 353 B.4 Das Interface ServletResponse 355 B.5 Die Klasse HttpServlet 356 B.6 Das Interface HttpServletRequest 356 B.7 Das Interface HttpServletResponse 358 B.8 Das Interface HttpSession 362
Inhaltsverzeichnis ХШ B.9 Die Klasse Cookie 364 B.10 Das Interface ServletConfig 365 B. 11 Das Interface ServletContext 365 Anhang C: Java Server Pages (JSP) 369 C. 1 Implizit definierte Java-Objekte 369 Anhang D: Interface Description Language (IDL) 373 D.l Die wichtigsten Komponenten der IDL 373 D.2 Abbildung der IDL-Datentypen in Java 374 D.2.1 Module 375 D.2.2 Interface 375 D.2.3 Struct 375 Anhang E: Document Object Model (DOM) 377 E. 1 Vererbungsstruktur der DOM-Schnittstellen 377 E.2 Abbildung der DOM-Datentypen in Java 378 E.3 Konstanten zur Identifikation des Knoten-Typs 378 E.4 Die Node-Schnittstelle 379 E.5 Namen und Werte verschiedener DOM-Objekte 382 E.6 Die NamedNodeMap-Schnittstelle 383 E.7 Die Document-Schnittstelle 384 E.8 Die CharacterData-Schnittstelle 385 Anhang F: XPath 387 F.l Ausführliche XPath-Syntax 387 F.2 Abgekürzte XPath-Syntax 389 Anhang G: Literaturhinweise 393 G. 1 Verteilte Systeme und Anwendungen 393 G.2 HTML 393 G.3 Java 394 G.4 Servlets 394 G.5 CORBA 394 G.6 XML 394
XIV Inhaltsverzeichnis Anhang H: Benutzung der Web-Seite zu diesem Buch 397 H. 1 Automatisierte Demos 397 H.2 Installieren der Beispielprogramme 398 Index 401