Suchen und Finden
Service
Infos und Kontakt
Inhaltsverzeichnis
5
Vorwort
17
Danksagung
17
1Einleitung
19
1.1 Zentrale Konzepte
19
1.1.1 Das Client-Server-Modell
20
1.1.2 Mehrschichtanwendungen
20
1.1.3 Ein API und seine Implementierung
22
1.2 Aufbau des Buchs
22
1.2.1 Die Darstellungsschicht
23
1.2.2 Geschäftslogik und Kommunikation
24
1.2.3 Datenhaltung und Datenrepräsentation
26
1.2.4 ... und ist da sonst gar nichts mehr?
26
1.3 An wen richtet sich dieses Buch?
28
1.3.1 Konventionen
28
1.3.2 Disclaimer
29
1.4 Bezug und Installation der Software
29
1.4.1 Java Platform Enterprise Edition 5
30
1.4.2 Die Wahl der »richtigen« Entwicklungsumgebung
30
1.4.3 Das Kompilierungstool Apache Ant
31
1.4.4 Apache Tomcat Server
31
1.4.5 JBoss Application Server
35
1.4.6 Achtung, fertig, los!
36
2 JavaServer Pages
37
2.1 Webanwendungen gestern und heute
38
2.1.1 Das Hypertext Transfer Protocol (HTTP)
39
2.1.2 Der Request – eine Seite anfordern
40
2.1.3 Die Response – ein Server antwortet
43
2.1.4 Hypertext Markup Language (HTML)
44
2.1.5 HTTP vs. HTML
46
2.2 Ihre erste dynamische JSP
46
2.2.1 Einfügen von Java-Anweisungen
47
2.2.2 Einrichten der Webanwendung
48
2.3 Bausteine für JavaServer Pages
54
2.3.1 JSP-Ausdrücke
54
2.3.2 Mehrzeilige Java-Anweisungen durch Scriptlets
56
2.3.3 Scriptlets, Ausdrücke und der rote Faden Ihrer JSP
60
2.3.4 Definieren von Java-Methoden durch JSP- Deklarationen
61
2.3.5 Vergleich: Ausdrücke, Scriptlets und Deklarationen
64
2.3.6 Kommentare
65
2.3.7 Entscheidungen und Schleifen
66
2.4 Die vordefinierten Variablen einer JSP
69
2.4.1 Die verschiedenen Kontexte des Servlet- Containers
70
2.4.2 Acht Variablen zur Kontrolle von JSPs
73
2.5 Das Auslesen des HTTP-Request
74
2.5.1 Request-Parameter
75
2.5.2 Auslesen aller übermittelten Request- Parameter
76
2.5.3 Auslesen von Request-Headern
77
2.5.4 Besonders häufig verwendete Request- Header
79
2.6 Direktiven – Eigenschaften einer JSP
80
2.6.1 Die Seitendirektive page
80
2.6.2 Einbinden von Dateien, die Direktive include
87
2.7 Verwendung der Benutzer-Session
90
2.7.1 Was ist die Benutzer-Session?
91
2.7.2 Ein kleines Zahlenspiel
91
2.7.3 Arbeiten mit der Session
93
2.7.4 Kodieren von URLs
95
2.8 JSPs und JavaBeans
96
2.8.1 Grundlagen
96
2.8.2 Eine einfache JavaBean
97
2.8.3 Eingabe der Daten in die JavaBean
100
2.8.4 Ausgabe von Attributen einer JavaBean
104
2.8.5 Erweitertes Erzeugen von JavaBeans
105
2.8.6 Vorteile von JavaBeans
106
2.9 Zusammenfassung
107
2.9.1 Goldene Regeln für die Verwendung von JSPs
107
3 Servlets
109
3.1 Ein einfaches Servlet
109
3.1.1 JSPs und Javacode
110
3.1.2 In grauer Vorzeit ...
112
3.1.3 Einbinden eines Servlet
114
3.1.4 HelloWorld-Servlet vs. HelloWorld-JSP
119
3.2 Der Lebenszyklus eines Servlet
120
3.2.1 Die init()-Methode
121
3.2.2 Die Service-Methoden
124
3.2.3 Die Destroy-Methode
128
3.2.4 Das vollständige Datenbank-Servlet
128
3.2.5 Vergleich zwischen GET und POST
131
3.2.6 Zusammenfassung des Servlet- Lebenszyklus
131
3.3 Servlets vs. JavaServer Pages
132
3.3.1 Was Sie mit JSPs nicht machen können
133
3.3.2 Direkter Vergleich zwischen Servlets und JSPs
134
3.3.3 Fazit
135
3.4 Cookies
136
3.4.1 Cookies erstellen
136
3.4.2 Cookies lesen
139
3.5 Binäre Daten senden
140
3.5.1 Writer vs. Outputstream
140
3.5.2 Dynamische Bilder mit Servlets erstellen
141
3.5.3 Die Konfiguration des Servlet
142
3.5.4 Das Resultat
143
3.6 Weiterleiten und Einfügen
143
3.6.1 Einfügen einer Ressource
144
3.6.2 Weiterleiten eines Request
144
3.7 Fortgeschrittenes Arbeiten mit der Session
144
3.7.1 Aktive Sessions überwachen
145
3.7.2 Weitere Session-Listener
149
3.8 Servlet-Filter – Servlets light
151
3.8.1 Das Interface javax.servlet.Filter
152
3.8.2 Ein einfacher Basisfilter
153
3.8.3 Konfiguration des Filters
154
3.8.4 Manipulieren von Request und Response
155
3.8.5 Filterketten
158
3.9 Zusammenfassung
160
4 Tag-Bibliotheken
163
4.1 Ein eigenes Tag
164
4.1.1 Erstellen der Java-Klasse
164
4.1.2 Konfiguration des Tag-Handler
168
4.1.3 Einbinden der Tag-Bibliothek
170
4.1.4 Verwenden des Tag in einer JSP
172
4.2 Verwendung von Attributen
173
4.2.1 Der erweiterte Tag-Handler
173
4.2.2 Registrieren des Tag-Handler im Tag Library Descriptor
175
4.2.3 Verwendung innerhalb der JSP
176
4.3 Vordefinierte Variablen in Tag- Handlers
177
4.3.1 Ein Tag-Handler für HTTPS-Verbindungen
177
4.3.2 Die Konfiguration im Tag Library Descriptor
179
4.3.3 Eine Test-JSP
179
4.4 Den Rumpf eines Tag manipulieren
180
4.4.1 Die Klasse BodyTagSupport
180
4.4.2 Ein Iteration-Tag
180
4.4.3 Konfiguration im Tag Library Descriptor
182
4.4.4 Test mit einer JSP
182
4.5 Definition von Script-Variablen
183
4.5.1 Der Gültigkeitsbereich von Script-Variablen
183
4.5.2 Ein Tag-Handler für Script-Variablen
184
4.5.3 Konfiguration des Tag-Handler
185
4.5.4 Eine Beispiel-JSP
186
4.6 Mit dem Kontext arbeiten
187
4.6.1 Wie realisiert man den Zugriff auf Eltern- Tags?
187
4.6.2 Entscheidungen (if-then-else)
188
4.6.3 Überprüfen des Tag-Kontexts
189
4.6.4 Der <if>-Handler
189
4.6.5 <then> und <else>
190
4.6.6 Konfiguration der Tags im Tag Library Descriptor
191
4.6.7 Ein Beispiel
191
4.7 Zusammenfassung
192
5 Struts – die Diva unter den Frameworks
193
5.1 Was sind Frameworks?
194
5.2 Struts – ein Webframework
196
5.2.1 Struts-Komponenten
197
5.2.2 Was Sie außerdem benötigen
200
5.3 Ein Adressbuch
201
5.3.1 Bezug und Installation
201
5.3.2 Unsere Business-Objekte
206
5.3.3 Die JavaServer Pages
207
5.3.4 Struts Tag-Bibliotheken
211
5.3.5 Ressource
212
5.3.6 ActionForms
213
5.3.7 Actions
217
5.3.8 Konfiguration der Anwendung
219
5.3.9 Fazit
223
5.4 Erweiterungen
224
5.4.1 Die Datenbank-Action
224
5.5 Zusammenfassung
226
6 JavaServer Faces (JSF)
229
6.1 Gemeinsamkeiten mit Struts
230
6.1.1 Ein Servlet als Front-Controller
230
6.1.2 Konfiguration über eine zentrale XML-Datei
231
6.1.3 Die Business-Komponente AddressBean
231
6.1.4 Eine Welcome-Seite als Einstiegspunkt in die Applikation
232
6.1.5 Internationalisierung
233
6.2 Eine einfache JSF-Anwendung
233
6.2.1 Darstellung: JavaServer Pages
233
6.2.2 Datenbindungssyntax
236
6.2.3 Controller
237
6.2.4 Konfiguration
238
6.3 Navigationsregeln
239
6.3.1 Verwendung von Wildcards
241
6.3.2 Standardverhalten
242
6.3.3 Prioritäten der Verarbeitung
242
6.4 Validieren von Daten
242
6.4.1 Standardvalidatoren
243
6.4.2 Pflichtfelder deklarieren
243
6.4.3 Validierungsfehler ausgeben
244
6.4.4 Überschreiben der vorgefertigten Fehlermeldungen
246
6.4.5 Implementieren eines eigenen Validators
247
6.5 Konverter
249
6.5.1 Das Converter-Attribut
250
6.5.2 Das Converter-Tag
250
6.6 Zusammenfassung
253
7 Java Naming and Directory Interface
255
7.1 Einführung in Namensdienste
257
7.1.1 Ein API – zwei Services
258
7.1.2 Der Kontext
259
7.1.3 Namensdienste
259
7.1.4 Verzeichnisdienste
262
7.2 API und SPI – Download und Installation
264
7.2.1 Download des API
264
7.2.2 Einige SPI-Implementierungen
265
7.3 Arbeiten mit dem JNDI
267
7.3.1 Erzeugen eines initialen Kontexts
268
7.3.2 Auf den Dienst zugreifen ...
271
7.3.3 Ausgabe der Elemente eines Kontexts
272
7.3.4 Zugreifen auf gebundene Elemente
274
7.3.5 Umbenennen von Objektbindungen
276
7.3.6 Entfernen von Objekten
277
7.3.7 Verschieben von gebundenen Objekten
277
7.4 Speichern einer Datenbankverbindung
279
7.4.1 Vom DriverManager zur DataSource
279
7.4.2 Ablegen der Datenquelle
280
7.4.3 Auslesen der Datenbankverbindung
282
7.5 JNDI und Verzeichnisdienste
283
7.5.1 Attribute des Verzeichnisdienstes LDAP
283
7.5.2 Erzeugen eines DirContext-Objekts
284
7.5.3 Binden von Objekten
285
7.5.4 Suche nach Objekten mit bestimmten Attributen
286
7.6 Eine JNDI Lookup-Klasse
287
7.7 JNDI und Webanwendungen
289
7.7.1 Datenquelle mit Apache Tomcat im Standalone- Betrieb
289
7.7.2 Datenquelle im JBoss Application Server
291
7.7.3 Zugriff aus der Applikation
292
7.7.4 Vorteile für Webanwendungen
293
7.8 Zusammenfassung
293
8 Enterprise JavaBeans (EJB)
295
8.1 Aufgabe von Enterprise JavaBeans
296
8.1.1 Kapselung der Geschäftslogik
296
8.1.2 Transaktionsmanagement
297
8.1.3 Loadbalancing
298
8.2 Vom Webserver zum Application- Server
299
8.2.1 Portabilität von Enterprise JavaBeans
300
8.2.2 Aufgaben eines EJB-Containers
301
8.3 Beans, Beans, Beans
302
8.3.1 Beans
302
8.3.2 JavaBeans
302
8.3.3 Enterprise JavaBeans (EJB)
303
8.4 Methodenfernaufruf
304
8.4.1 Verschiedene Broker-Architekturen
305
8.4.2 Austausch von Objekten durch Serialisierung
306
8.5 Verschiedene Typen von Enterprise JavaBeans
307
8.6 EJBs in freier Wildbahn
308
8.6.1 Stateless Session Beans
308
8.6.2 Stateful Session Beans
309
8.6.3 Hello World – eine Stateless Session Bean
309
8.6.4 Hello World – eine Stateful Session Bean
314
8.6.5 Ein Client
316
8.7 Restriktionen bei der Implementierung von EJBs
317
8.8 Zusammenfassung
318
9 Java Message Service
319
9.1 Asynchrone Kommunikation
320
9.1.1 Download und Installation
321
9.1.2 Message Oriented Middleware
321
9.1.3 Vorteile asynchroner Kommunikation
321
9.2 Das Konzept
322
9.2.1 Kommunikationspartner
323
9.2.2 Nachrichtenkonzepte
324
9.2.3 Konfiguration und Eigenschaften der Dienste
325
9.3 Bestandteile des API
326
9.3.1 javax.jms.ConnectionFactory
326
9.3.2 javax.jms.Connection
326
9.3.3 javax.jms.Session
327
9.3.4 javax.jms.Destination
328
9.3.5 javax.jms.Message
328
9.3.6 Zusammenfassung des API
330
9.4 Senden einer Nachricht
330
9.4.1 Der schematische Ablauf
331
9.4.2 Ein Nachrichtensender (Message Producer)
332
9.4.3 Konfiguration der Queue
334
9.4.4 Test der Anwendung
335
9.5 Empfangen einer Nachricht
335
9.6 Empfangsverfahren: Pull vs. Push
337
9.6.1 Push, wenn der Postmann zweimal klingelt
338
9.7 Topic vs. Queue
339
9.7.1 Ein konsolenbasierter Chat
339
9.7.2 Konfiguration und Test des Chat
342
9.7.3 Topic vs. Queue
342
9.8 Optionen für Nachrichten
343
9.8.1 Priorität einer Nachricht
343
9.8.2 Das Verfallsdatum einer Nachricht festlegen
343
9.8.3 Identifizierung einer Nachricht
344
9.9 Filtern einer Nachricht
345
9.9.1 Setzen und Auslesen von Eigenschaften
345
9.9.2 Ausgabe von Message-Attributen
346
9.9.3 Filtern anhand von Attributen
347
9.9.4 Filterelemente
349
9.10 Transaktionen und Empfangsbestätigungen
351
9.10.1 Transaktionen beim Senden
352
9.10.2 Transaktionen beim Nachrichtenempfang
352
9.10.3 Empfangsbestätigungen
353
9.11 Hin und zurück – Synchrone Kommunikation mit JMS
354
9.11.1 Ein QueueRequestor
355
9.11.2 Ein Empfänger, der antwortet
356
9.11.3 Request und Reply vs. Remote Procedure Call
358
9.12 Message Driven Beans
358
9.12.1 Drei erfolgreich verheiratete Java-EE-Technologien
361
9.12.2 Alternative Konfiguration mit Deployment Descriptor
361
9.13 Zusammenfassung
362
10 Persistenz – JavaBeans und Datenbanken
365
10.1 Etablierte Persistenz-Standards
365
10.1.1 Java Database Connectivity (JDBC)
366
10.1.2 EJBs Entity Beans
367
10.1.3 Java Data Objects
367
10.1.4 Freie OpenSource Frameworks
368
10.1.5 Das Persistenz API
368
10.2 Bezug und Installation
369
10.2.1 Hypersonic SQL Database (HSQLDB)
369
10.3 Eine einfache JavaBean
370
10.3.1 Verfeinerungen
371
10.3.2 Konfiguration
376
10.4 Arbeiten mit der JavaBean
378
10.4.1 Anlegen eines neuen Datensatzes
378
10.4.2 Suche anhand des Primärschlüssels
381
10.4.3 Zustände einer JavaBean
382
10.4.4 Manipulieren einer JavaBean
383
10.4.5 Löschen eines vorhandenen Datensatzes
384
10.5 Das Query API
385
10.5.1 Suche über den Nachnamen
385
10.5.2 Benannte Anfragen hinterlegen
387
10.5.3 Anspruchsvolle Anfragen
388
10.6 Datensätze verknüpfen
389
10.6.1 Die E-Mail-Bean
389
10.6.2 Relationen zwischen Datensätzen
390
10.6.3 Verknüpfen zweier JavaBeans über Annotationen
392
10.6.4 Unterschiedliche Fetch-Typen
397
10.7 Persistenz im EJB-Container
398
10.7.1 Grundlagen
398
10.7.2 Eine einfache JavaBean
399
10.7.3 Konfiguration der Persistenz-Unit
400
10.7.4 Anpassen der Session Bean
400
10.7.5 Abschließende Bemerkungen
402
10.8 Zusammenfassung
403
11 eXtensible Markup Language (XML)
405
11.1 Kurze Einführung in XML
405
11.1.1 Kurze Geschichte der Markup-Sprachen
407
11.1.2 Die Geburtsstunde für XML
409
11.1.3 Element für Element zum Dokument – Regeln für XML
411
11.1.4 Dokumentzentriert vs. datenzentriert
412
11.1.5 Wichtige auf XML basierende Standards
413
11.1.6 Vorteile von XML
414
11.2 Elemente eines XML-Dokuments
414
11.2.1 Der Prolog und XML-Anweisungen
414
11.2.2 Das Element
415
11.2.3 Zeichenketten
418
11.2.4 Kommentare
419
11.2.5 Namensräume
420
11.2.6 CDATA-Rohdaten
421
11.3 Verarbeitungsmodelle für XML
421
11.3.1 DOM vs. JDOM vs. DOM4J
422
11.4 Arbeiten mit dem JDOM
424
11.4.1 Erzeugen eines neuen XML-Dokuments
424
11.4.2 Hinzufügen von weiteren Elementen
425
11.4.3 Kurzform für die Definition des Beispieldokuments
426
11.4.4 Mischen von Text und Elementen
428
11.4.5 Einführen von Namensräumen
429
11.4.6 Einlesen eines vorhandenen XML-Dokuments
430
11.4.7 Traversieren eines Dokuments
432
11.4.8 Ausgabe der direkten Kindelemente
433
11.4.9 Löschen von Elementen
434
11.4.10 Herauslösen und Klonen eines Elements
434
11.4.11 Einsatz von Filtern
435
11.4.12 Ausgabe des Dokuments
437
11.4.13 Umwandeln von JDOM in DOM
439
11.5 Mit SAX-Events arbeiten
440
11.5.1 Arbeitsweise von SAX
440
11.5.2 Callback-Methoden
441
11.5.3 Ein Dokument via SAX parsen
442
11.5.4 SAX-Events in der Pipeline
446
11.5.5 Einer für alles
451
11.5.6 Wofür eignet sich die Verarbeitung mit SAX- Events?
451
11.5.7 Zusätzliche Handler
452
11.6 Zusammenfassung
453
12 XSL, XPath und Co.
455
12.1 XPath – eine Einführung
455
12.2 Arbeiten mit XPath
456
12.2.1 Einfache Ausdrücke
457
12.2.2 Suche nach Elementen
457
12.2.3 Navigation über »Arrays« von Elementen
458
12.2.4 Verwenden des Operators or
458
12.2.5 Referenzieren von Attributen
459
12.2.6 Komplexe Pfade definieren
459
12.2.7 Operationen und Relationen
461
12.2.8 XPath-Funktionen
462
12.3 Zusammenfassung XPath
465
12.4 Die eXtensible Stylesheet Language
466
12.4.1 Anwendungen für die eXtensible Stylesheet Language
467
12.4.2 Ein einfaches Template
468
12.5 eXtensible Stylesheet Language Transformation ( XSLT)
470
12.5.1 Die Qual der Wahl der Implementierung
470
12.5.2 Transformation über die Kommandozeile
472
12.5.3 Transformation eines DOM
472
12.5.4 Verschiedene Transformationsquellen und Ziele
474
12.5.5 SAX vs. DOM
475
12.5.6 Laden eines referenzierten Stylesheet
475
12.5.7 Template vs. Transformer
476
12.5.8 Transformieren eines JDOM
477
12.5.9 Zusammenfassung XSL-Transformationen
477
12.6 XSL Stylesheets
478
12.6.1 Ein einfaches Template
478
12.6.2 Importieren anderer Stylesheets
478
12.6.3 Einfügen eines Stylesheet
479
12.6.4 Attribut-Sets
479
12.6.5 Variablen
479
12.6.6 Weiterführende Literatur
480
12.7 Ein Stylesheet für die Bibliothek
481
12.7.1 Das Root-Element
481
12.7.2 Das Library-Element und eine konstante Kopfzeile
482
12.7.3 Transformation von Book-Elementen
483
12.7.4 Entscheidungen
484
12.7.5 Das vollständige XSL Stylesheet
485
12.7.6 Zusammenfassung XSL Stylesheet
487
12.8 XSL Formatting Objects
487
12.8.1 Geschichte
488
12.8.2 Grundlagen und Installation
488
12.9 Aufbau eines FO-Dokuments
490
12.9.1 Die Definition einer A4-Seite
491
12.9.2 Das Auffüllen mit Inhalt
492
12.9.3 Rendern mit dem Formatting Objects Processor ( FOP)
493
12.9.4 Resultat
494
12.10Von XML zum PDF – ein Beispiel
494
12.10.1 Das Stylesheet
494
12.10.2 Attribut-Sets
497
12.10.3 Das Root-Element
497
12.10.4 Library und Book
498
12.10.5 Das Rendering
498
12.11 Zusammenfassung
500
13 Webservices
503
13.1 Die Idee hinter Webservices
504
13.2 XML – Remote Procedure Call ( XML- RPC)
504
13.2.1 Grundlagen
505
13.2.2 Aufbau eines XML-RPC-Dokuments
506
13.2.3 Übergabe der Parameter
507
13.2.4 Fehlerbehandlung
508
13.2.5 Zusammenfassung XML-RPC
508
13.3 Simple Object Access Protocol ( SOAP)
510
13.3.1 Die Idee hinter SOAP
510
13.3.2 SOAP und Java
510
13.4 Erstellen eines einfachen Webservice
512
13.5 Einen Webservice ansprechen
514
13.6 Webservice Description Language ( WSDL)
515
13.7 Universal Description and Discovery Interface ( UDDI)
516
13.8 Zusammenfassung
517
13.8.1 Allgemeine Abschlussbemerkungen
517
J2EE Software License
521
Stichwortverzeichnis
527
Symbols
527
A
527
B
527
C
527
D
527
E
528
F
528
G
528
H
528
I
528
J
528
K
530
L
530
M
530
N
531
O
531
P
531
Q
531
R
531
S
531
T
532
U
533
V
533
W
533
X
533
Z
534
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion
























