Marty Hall
Servlets und JavaServer Pages
9 Angebote ab € 4,00 €
Marty Hall
Servlets und JavaServer Pages
- Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Mittlerweile das Standardwerk zum Thema: Dieser Titel behandelt sowohl Servlets als auch JavaServer Pages unter den aktuellen J2EE-Standards. Der erfolgreiche Programmierer, Dozent und Autor Marty Hall geht dabei unter Einlösung seines Anspruchs, einen praxisorientierten Leitfaden herauszugeben, auch auf den Umgang mit JDBC oder die Applets-Servlets-Verwendung ein. Die zahlreichen, sofort einsetzbaren "real-world"-Beispiele aus dem Buch sind ausführlich kommentiert.
Mittlerweile das Standardwerk zum Thema: Dieser Titel behandelt sowohl Servlets als auch JavaServer Pages unter den aktuellen J2EE-Standards. Der erfolgreiche Programmierer, Dozent und Autor Marty Hall geht dabei unter Einlösung seines Anspruchs, einen praxisorientierten Leitfaden herauszugeben, auch auf den Umgang mit JDBC oder die Applets-Servlets-Verwendung ein. Die zahlreichen, sofort einsetzbaren "real-world"-Beispiele aus dem Buch sind ausführlich kommentiert.
Produktdetails
- Produktdetails
- Verlag: Markt & Technik ein Imprint von Pearson Deutschland
- ISBN-13: 9783827259455
- ISBN-10: 3827259452
- Artikelnr.: 24812271
- Verlag: Markt & Technik ein Imprint von Pearson Deutschland
- ISBN-13: 9783827259455
- ISBN-10: 3827259452
- Artikelnr.: 24812271
Einleitung 17
Über den Autor 18
Einführung 18
Echter Code für echte Programmierer 19
Aufbau dieses Buchs 20
Konventionen 23
Im Web 24
Teil I: Servlets 2.1 und 2.2 25
1 Überblick über Servlets und JavaServer Pages 27
1.1 Servlets 28
1.2 Vorzüge von Servlets gegenüber "traditionellem" CGI 29
1.2.1 Effizient 29
1.2.2 Praktisch 29
1.2.3 Mächtig 29
1.2.4 Portierbar 30
1.2.5 Sicher 30
1.2.6 Kostengünstig 30
1.3 JavaServer Pages 31
1.4 Vorteile von JSP 31
1.4.1 - gegenüber Active Server Pages (ASP) 31
1.4.2 - gegenüber PHP 31
1.4.3 - gegenüber reinen Servlets 32
1.4.4 - gegenüber Server-Side Includes (SSI) 32
1.4.5 - gegenüber JavaScript 32
1.4.6 - gegenüber statischem HTML 32
1.5 Installation und Setup 32
1.5.1 Servlet- und JSP-Software beschaffen 33
1.5.2 API-Dokumentation zu Servlets und JSP installieren oder mit Bookmark versehen 34
1.5.3 Klassen dem Java-Compiler gegenüber identifizieren 34
1.5.4 Klassen in ein Paket schnüren 35
1.5.5 Server konfigurieren 35
1.5.6 Server starten 37
1.5.7 Eigene Servlets kompilieren und installieren 37
2 Erste Servlets 39
2.1 Grundstruktur von Servlets 40
2.2 Ein einfaches Servlet, das einfachen Text generiert 41
2.2.1 Servlet kompilieren und installieren 42
2.2.2 Servlet aufrufen 43
2.3 Ein Servlet, das HTML generiert 43
2.4 Servlet-Pakete 45
2.4.1 Servlets in Paketen erstellen 46
2.4.2 Servlets in Paketen kompilieren 46
2.4.3 Servlets in Paketen aufrufen 48
2.5 Dienstprogramme, die beim Erstellen von HTML helfen 48
2.6 Lebenszyklen von Servlets 51
2.6.1 Die init-Methode 51
2.6.2 Die service-Methode 53
2.6.3 Die Methoden doGet, doPost und doXxx 54
2.6.4 Das Interface SingleThreadModel 54
2.6.5 Die destroy-Methode 55
2.7 Ein Beispiel mit Initialisierungsparametern 55
2.8 Ein Beispiel mit Servlet-Initialisierungs- und Seitenänderungs-Daten 59
2.9 Fehlerbehebung in Servlets 64
2.10 WebClient: interaktive Kommunikation mit Webservern 65
2.10.1 WebClient 66
2.10.2 HttpClient 69
2.10.3 NetworkClient 70
2.10.4 SocketUtil 72
2.10.5 CloseableFrame 73
2.10.6 LabeledTextField 74
2.10.7 Interruptible 75
3 Client-Anfragen handeln: Formulardaten 77
3.1 Die Rolle der Formulardaten 78
3.2 Formulardaten aus Servlets lesen 78
3.3 Beispiel: Drei explizite Parameter lesen 79
3.4 Beispiel: Alle Parameter lesen 82
3.5 Ein Dienst zum Versenden von Bewerbungen 86
3.6 Zeichenketten nach HTML-Zeichen filtern 97
3.6.1 Code zum Filtern 98
3.6.2 Beispiel 100
4 Client-Anfragen handeln: HTTP-Anfrage -Header 103
4.1 Anfrage-Header von Servlets lesen 104
4.2 Alle Header ausgeben 105
4.3 Anfrage-Header bei HTTP 1.1 108
4.4 Komprimierte Webseiten senden 112
4.5 Zugriff auf Webseiten beschränken 115
5 Zugriff auf CGI-Standardvariablen 121
5.1 Servlet-Entsprechungen der CGI-Variablen 122
5.2 Ein Servlet, das CGI-Variablen zeigt 124
6 Server-Antwort generieren: HTTP-Statuscodes 127
6.1 Statuscodes spezifizieren 128
6.2 HTTP 1.1-Statuscodes und ihr Zweck 130
6.3 Ein Frontend für diverse Suchmaschinen 137
7 Server-Antwort generieren: HTTP- Antwort-Header 145
7.1 Antwort-Header von Servlets aus setzen 146
7.2 HTTP 1.1-Antwort-Header und ihre Bedeutung 147
7.3 Persistenter Servlet-Zustand und automatisches Neuladen von Seiten 154
7.4 Persistente HTTP-Verbindungen nutzen 164
7.5 Mit Servlets GIF-Bilder generieren 168
8 Mit Cookies arbeiten 179
8.1 Vorteile von Cookies 180
8.1.1 Nutzer bei einer E-Commerce-Sitzung identifizieren 180
8.1.2 Eingabe von Benutzernamen und Passwort vermeiden 180
8.1.3 Website anpassen 181
8.1.4 Gezielt werben 181
8.2 Probleme mit Cookies 181
8.3 Das Cookie-API von Servlet 182
8.3.1 Cookies erzeugen 183
8.3.2 Cookie-Attribute 183
8.3.3 Cookies in Antwort-Header einfügen 185
8.3.4 Cookies vom Client lesen 185
8.4 Beispiele: Cookies setzen und lesen 185
8.5 Dienstprogramme für Cookies 189
8.5.1 Cookies mit angegebenen Namen finden 189
8.5.2 Langlebige Cookies erzeugen 190
8.6 Ein selbst definiertes Suchmaschinen-Interface 190
9 Sitzungs-Tracking 197
9.1 Sitzungs-Tracking ist notwendig 198
9.1.1 Cookies 198
9.1.2 URL-Rewriting 199
9.1.3 Verborgene Formularfelder 199
9.1.4 Sitzungs-Tracking in Servlets 199
9.2 Das Sitzungs-Tracking-API 199
9.2.1 Das HttpSession-Objekt zur aktuellen Anfrage nachschauen 200
9.2.2 Informationen zu einer Sitzung nachschauen 200
9.2.3 Informationen mit einer Sitzung verbinden 202
9.2.4 Sitzungen beenden 203
9.2.5 An den Client gesendete URLs kodieren 203
9.3 Ein Servlet, das Zugriffszahlen pro Client anzeigt 204
9.4 Ein Online-Geschäft mit Einkaufskorb und Sitzungs-Tracking 207
9.4.1 Das Frontend 207
9.4.2 Bestellungen aufnehmen 211
9.4.3 Hinter den Kulissen: Implementierung der Waren im Einkaufskorb
und im Katalog 217
Teil II: JavaServer Pages 225
10 JSP-Scriptingelemente 227
10.1 Scriptingelemente 229
10.1.1 Template-Text 230
10.2 JSP-Ausdrücke 230
10.2.1 Vordefinierte Variablen 230
10.2.2 XML-Syntax für Ausdrücke 231
10.2.3 Ausdrücke als Attributwerte verwenden 231
10.2.4 Beispiel 232
10.3 JSP-Scriptlets 233
10.3.1 Mit Scriptlets Teile der JSP-Datei an Bedingungen knüpfen 236
10.3.2 Spezielle Scriptlet-Syntax 236
10.4 JSP-Deklarationen 237
10.4.1 Spezielle Deklarationssyntax 238
10.5 Vordefinierte Variablen 238
11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 241
11.1 Das Attribut import 242
11.1.1 Verzeichnisse für selbst definierte Klassen 243
11.1.2 Beispiel 243
11.2 Das Attribut contentType 245
11.2.1 Dokumente mit einfachem Text erzeugen 246
11.2.2 Excel-Tabellenkalkulationen generieren 246
11.3 Das Attribut isThreadSafe 250
11.4 Das Attribut session 252
11.5 Das Attribut buffer 252
11.6 Das Attribut autoflush 252
11.7 Das Attribut extends 252
11.8 Das Attribut info 253
11.9 Das Attribut errorPage 253
11.10 Das Attribut isErrorPage 253
11.11 Das Attribut language 256
11.12 XML-Syntax für Direktiven 256
12 Dateien und Applets in JSP-Dokumente einbinden 257
12.1 Dateien zur Seiten-Übersetzungszeit einbinden 258
12.2 Dateien zur Anforderungszeit einbinden 261
12.3 Applets für das Java-Plug-In einbinden 263
12.3.1 Das jsp:plugin-Element 264
12.3.2 Die Elemente jsp:param und jsp:params 266
12.3.3 Das jsp:fallback-Element 267
12.3.4 Beispiel: Schattierter Text 267
13 JavaBeans mit JSP verwenden 275
13.1 Grundlagen der Verwendung von Beans 277
13.1.1 Zugriff auf Bean-Eigenschaften 278
13.1.2 Bean-Eigenschaften setzen: Ein einfaches Fallbeispiel 278
13.1.3 Bean-Klassen installieren 279
13.2 Beispiel: StringBean 280
13.3 Bean-Eigenschaften festlegen 282
13.3.1 Einzelne Eigenschaften mit Eingabeparametern verbinden 286
13.3.2 Automatische Typkonvertierungen 287
13.3.3 Sämtliche Eigenschaften mit Eingabeparametern verbinden 288
13.4 Beans gemeinsam nutzen 290
13.4.1 Beans bedingt erzeugen 291
14 JSP-Tag-Bibliotheken selbst definieren 295
14.1 Komponenten einer Tag-Bibliothek 296
14.1.1 Die Tag-Handler-Klasse 297
14.1.2 Die Descriptordatei der Tag-Bibliothek 297
14.1.3 Die JSP-Datei 299
14.2 Ein einfaches Tag definieren 300
14.2.1 Die Tag-Handler-Klasse 300
14.2.2 Die Tag-Bibliothek-Descriptordatei 302
14.2.3 Die JSP-Datei 303
14.3 Tag-Attribute zuweisen 304
14.3.1 Die Tag-Handler-Klasse 304
14.3.2 Die Descriptordatei der Tag-Bibliothek 306
14.3.3 Die JSP-Datei 307
14.4 Den Rumpf des Tag einbinden 308
14.4.1 Die Tag-Handler-Klasse 308
14.4.2 Die Descriptordatei zur Tag-Bibliothek 311
14.4.3 Die JSP-Datei 312
14.5 Den Tag-Rumpf optional einbinden 313
14.5.1 Die Tag-Handler-Klasse 314
14.5.2 Die Descriptordatei zur Tag-Bibliothek 314
14.5.3 Die JSP-Datei 315
14.6 Den Tag-Rumpf manipulieren 317
14.6.1 Die Klasse Tag-Handler 317
14.6.2 Die Descriptordatei der Tag-Bibliothek 319
14.6.3 Die JSP-Datei 319
14.7 Den Tag-Rumpf mehrmals einbinden oder manipulieren 321
14.7.1 Die Tag-Handler-Klasse 321
14.7.2 Die Descriptordatei der Tag-Bibliothek 322
14.8 Geschachtelte Tags 324
14.8.1 Die Tag-Handler-Klassen 325
14.8.2 Die Descriptordatei der Tag-Bibliothek 330
14.8.3 Die JSP-Datei 332
15 Servlets und JSP integrieren 335
15.1 Anfragen weiterleiten 336
15.1.1 Statische Ressourcen verwenden 337
15.1.2 Daten an die Zielseiten liefern 338
15.1.3 Relative URLs in der Zielseite interpretieren 339
15.1.4 Alternative Beschaffung eines RequestDispatcher 340
15.2 Beispiel: Ein Online-Reisebüro 340
15.3 Statischen oder dynamischen Inhalt einbinden 356
15.4 Beispiel: Rohausgabe von Servlet und JSP anzeigen 357
15.5 Anfragen von JSP-Seiten aus weiterleiten 361
Teil III: Unterstützende Technologien 363
16 HTML-Formulare verwenden 365
16.1 Datenübermittlung mit HTML-Formularen 366
16.2 Das FORM-Element 370
16.3 Texteingabeelemente 375
16.3.1 Textfelder 375
16.3.2 Passwortfelder 376
16.3.3 Textbereiche 377
16.4 Schaltflächen 379
16.4.1 Absenden-Schaltflächen 379
16.4.2 Zurücksetzen-Schaltflächen 382
16.4.3 JavaScript-Schaltflächen 383
16.5 Kontrollkästchen und Ein/Ausschalter 383
16.5.1 Kontrollkästchen 383
16.5.2 Ein/Ausschalter 385
16.6 Comboboxen und Listenfelder 386
16.7 Fenster zum Laden von Dateien 389
16.8 Server-seitige Imagemaps 391
16.8.1 IMAGE - Server-seitige Standard-Imagemaps 391
16.8.2 ISMAP - Alternative, Server-seitige Imagemaps 392
16.9 Verborgene Felder 395
16.10 Elemente zusammenfassen 395
16.11 Die Tabulatorreihenfolge steuern 397
16.12 Ein Webserver zur Fehlerbehebung 398
16.12.1 EchoServer 399
16.12.2 ThreadedEchoServer 402
16.12.3 NetworkServer 404
17 Applets als Frontend für Servlets 407
17.1 Daten mit GET senden und die resultierende Seite anzeigen 408
17.2 Ein Suchmaschinen-Frontend für mehrere Systeme 409
17.3 Daten mit GET senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 413
17.3.1 Binärdaten oder ASCII-Daten lesen 413
17.3.2 Serialisierte Datenstrukturen lesen 414
17.4 Ein Anfragenfenster mit Objektserialisierung und HTTP-Tunneling 416
17.5 Daten mit POST senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 423
17.6 Ein Applet, das POST-Daten sendet 426
17.7 Den HTTP-Server umgehen 432
18 JDBC und Datenbank verbindungspools 433
18.1 Erste Schritte der Verwendung von JDBC 435
18.1.1 Den Treiber laden 435
18.1.2 Die Verbindungs-URL definieren 436
18.1.3 Die Verbindung herstellen 436
18.1.4 Eine Anweisung erzeugen 437
18.1.5 Eine Abfrage ausführen 437
18.1.6 Die Ergebnisse verarbeiten 437
18.1.7 Die Verbindung schließen 438
18.2 Einfaches JDBC-Beispiel 439
18.3 Einige JDBC-Hilfsprogramme 444
18.4 Die Datenbankdienstprogramme anwenden 453
18.5 Ein interaktives Abfragefenster 458
18.5.1 Code des Abfragefensters 460
18.6 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 467
18.7 Verbindungspools 471
18.8 Verbindungspools: Eine Fallstudie 477
18.9 Verbindungspools gemeinsam nutzen 483
18.9.1 ServletContext zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
18.9.2 Singleton-Klassen zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
A Kurzreferenz zu Servlets und JSP 487
A.1 Überblick über Servlets und JavaServer Pages 488
A.1.1 Vorteile von Servlets 488
A.1.2 Vorteile von JSP 488
A.1.3 Kostenlose Servlet- und JSP-Software 488
A.1.4 Dokumentation 488
A.1.5 Servlet-Kompilierung: CLASSPATH-Einträge 488
A.1.6 Tomcat 3.0-Standardverzeichnisse 489
A.1.7 Tomcat 3.1-Standardverzeichnisse 489
A.1.8 JSWDK 1.0.1-Standardverzeichnisse 489
A.1.9 Java Web Server 2.0-Standardverzeichnisse 489
A.2 Erste Servlets 489
A.2.1 Einfaches Servlet 489
A.2.2 Servlets installieren 490
A.2.3 Servlets aufrufen 490
A.2.4 Lebenszyklen von Servlets 490
A.3 Client-Anfragen behandeln: Formulardaten 491
A.3.1 Parameter lesen 491
A.3.2 Beispiel-Servlet 491
A.3.3 Beispiel-Formular 491
A.3.4 HTML-spezifische Zeichen herausfiltern 492
A.4 Client-Anfragen behandeln: HTTP-Anfrage-Header 492
A.4.1 Methoden zum Lesen von Anfrage-Headern 492
A.4.2 Weitere Anfragedaten 493
A.4.3 Anfrage-Header bei HTTP 1.1 493
A.5 Zugriff auf CGI-Standardvariablen 493
A.5.1 Fähigkeiten, die an anderer Stelle nicht behandelt werden 493
A.5.2 Servlet-Entsprechungen der CGI-Variablen 494
A.6 Server-Antwort generieren: HTTP-Statuscodes 494
A.6.1 Format einer HTTP-Antwort 494
A.6.2 Methoden zum Setzen von Statuscodes 494
A.6.3 Statuscode-Kategorien 495
A.6.4 HTTP 1.1-Statuscodes 495
A.7 Server-Antwort generieren: HTTP-Antwort-Header 495
A.7.1 Beliebige Header setzen 495
A.7.2 Gebräuchliche Header setzen 496
A.7.3 HTTP 1.1-Antwort-Header 496
A.7.4 GIF-Bilder von Servlets aus generieren 497
A.8 Mit Cookies arbeiten 497
A.8.1 Einsatz von Cookies 497
A.8.2 Probleme mit Cookies 497
A.8.3 Allgemeine Verwendung 497
A.8.4 Cookie-Methoden 498
A.9 Sitzungs-Tracking 498
A.9.1 Sitzungsdaten nachschlagen: getValue 498
A.9.2 Daten mit einer Sitzung verbinden: putValue 499
A.9.3 HttpSession-Methoden 499
A.9.4 URLs kodieren 500
A.10 JSP-Scriptingelemente 500
A.10.1 Scriptingelementetypen 500
A.10.2 Template-Text 501
A.10.3 Vordefinierte Variablen 501
A.11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 501
A.11.1 Das import-Attribut 501
A.11.2 Das contentType-Attribut 501
A.11.3 Anwendungsbeispiel für contentType 502
A.11.4 Anwendungsbeispiel für setContentType 502
A.11.5 Das isThreadSafe-Attribut 502
A.11.6 Das session-Attribut 503
A.11.7 Das buffer-Attribut 503
A.11.8 Das autoflush-Attribut 503
A.11.9 Das extends-Attribut 503
A.11.10 Das info-Attribut 503
A.11.11 Das errorPage-Attribut 503
A.11.12 Das isErrorPage-Attribut 503
A.11.13 Das language-Attribut 504
A.11.14 XML-Syntax 504
A.12 Dateien und Applets in JSP-Dokumente einbinden 504
A.12.1 Dateien zur Seiten-Übersetzungszeit einbinden 504
A.12.2 Dateien zur Anforderungszeit einbinden 504
A.12.3 Applets für das Java-Plug-In: Einfacher Fall 504
A.12.4 Attribute von jsp:plugin 505
A.12.5 Parameter in HTML: jsp:param 505
A.12.6 Alternativer Text 506
A.13 JavaBeans mit JSP verwenden 506
A.13.1 Grundvoraussetzungen für eine Bean-Klasse 506
A.13.2 Grundlagen der Verwendung von Beans 506
A.13.3 Eigenschaften mit Anfrageparametern verbinden 506
A.13.4 Beans gemeinsam nutzen: Das scope-Attribut von jsp:useBean 507
A.13.5 Bedingte Erzeugung von Beans 507
A.14 JSP-Tag-Bibliotheken selbst definieren 507
A.14.1 Die Tag-Handler-Klasse 507
A.14.2 Die Descriptordatei der Tag-Bibliothek 508
A.14.3 Die JSP-Datei 508
A.14.4 Attribute Tags zuweisen 508
A.14.5 Den Tag-Rumpf einbinden 508
A.14.6 Den Tag-Rumpf optional einbinden 508
A.14.7 Den Tag-Rumpf manipulieren 509
A.14.8 Den Tag-Rumpf mehrfach einbinden oder manipulieren 509
A.14.9 Geschachtelte Tags 509
A.15 Servlets und JSP integrieren 509
A.15.1 Gesamtbild 509
A.15.2 Syntax für die Weiterleitung von Anfragen 509
A.15.3 Weiterleitung an normale HTML-Seiten 509
A.15.4 Global gemeinsam genutzte Beans einrichten 510
A.15.5 Sitzungs-Beans einrichten 510
A.15.6 Relative URLs in der Zielseite interpretieren 510
A.15.7 Alternative Erlangung eines RequestDispatcher (nur Version 2.2) 510
A.15.8 Statischen oder dynamischen Inhalt einbinden 510
A.15.9 Anfragen von JSP-Seiten weiterleiten 510
A.16 HTML-Formulare verwenden 511
A.16.1 Das FORM-Element 511
A.16.2 Textfelder 511
A.16.3 Passwortfelder 511
A.16.4 Textbereiche 511
A.16.5 Absenden-Schaltflächen 511
A.16.6 Andere Schaltflächen 511
A.16.7 Zurücksetzen-Schaltflächen 512
A.16.8 Andere Zurücksetzen-Schaltflächen 512
A.16.9 JavaScript-Schaltflächen 512
A.16.10 Andere JavaScript-Schaltflächen 512
A.16.11 Kontrollkästchen 512
A.16.12 Ein/Ausschalter 512
A.16.13 Comboboxen 512
A.16.14 Fenster zum Laden von Dateien 513
A.16.15 Server-seitige Imagemaps 513
A.16.16 Verborgene Felder 513
A.16.17 Funktionen des Internet Explorer 513
A.17 Applets als Frontend für Servlets 513
A.17.1 GET-Daten senden und die Resultate im Browser anzeigen lassen 513
A.17.2 GET-Daten senden und die Ergebnisse direkt verarbeiten (HTTP-Tunneling) 513
A.17.3 Serialisierte Daten senden: Der Applet-Code 514
A.17.4 Serialisierte Daten senden: Der Servlet-Code 515
A.17.5 POST-Daten senden und die Resultate direkt verarbeiten (HTTP Tunneling) 516
A.17.6 Den HTTP-Server umgehen 518
A.18 JDBC und Datenbankverbindungspools 518
A.18.1 Erste Schritte zur Nutzung von JDBC 518
A.18.2 Datenbankdienstprogramme 519
A.18.3 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 520
A.18.4 Schritte zur Implementierung von Verbindungspools 520
Stichwortverzeichnis 523
Über den Autor 18
Einführung 18
Echter Code für echte Programmierer 19
Aufbau dieses Buchs 20
Konventionen 23
Im Web 24
Teil I: Servlets 2.1 und 2.2 25
1 Überblick über Servlets und JavaServer Pages 27
1.1 Servlets 28
1.2 Vorzüge von Servlets gegenüber "traditionellem" CGI 29
1.2.1 Effizient 29
1.2.2 Praktisch 29
1.2.3 Mächtig 29
1.2.4 Portierbar 30
1.2.5 Sicher 30
1.2.6 Kostengünstig 30
1.3 JavaServer Pages 31
1.4 Vorteile von JSP 31
1.4.1 - gegenüber Active Server Pages (ASP) 31
1.4.2 - gegenüber PHP 31
1.4.3 - gegenüber reinen Servlets 32
1.4.4 - gegenüber Server-Side Includes (SSI) 32
1.4.5 - gegenüber JavaScript 32
1.4.6 - gegenüber statischem HTML 32
1.5 Installation und Setup 32
1.5.1 Servlet- und JSP-Software beschaffen 33
1.5.2 API-Dokumentation zu Servlets und JSP installieren oder mit Bookmark versehen 34
1.5.3 Klassen dem Java-Compiler gegenüber identifizieren 34
1.5.4 Klassen in ein Paket schnüren 35
1.5.5 Server konfigurieren 35
1.5.6 Server starten 37
1.5.7 Eigene Servlets kompilieren und installieren 37
2 Erste Servlets 39
2.1 Grundstruktur von Servlets 40
2.2 Ein einfaches Servlet, das einfachen Text generiert 41
2.2.1 Servlet kompilieren und installieren 42
2.2.2 Servlet aufrufen 43
2.3 Ein Servlet, das HTML generiert 43
2.4 Servlet-Pakete 45
2.4.1 Servlets in Paketen erstellen 46
2.4.2 Servlets in Paketen kompilieren 46
2.4.3 Servlets in Paketen aufrufen 48
2.5 Dienstprogramme, die beim Erstellen von HTML helfen 48
2.6 Lebenszyklen von Servlets 51
2.6.1 Die init-Methode 51
2.6.2 Die service-Methode 53
2.6.3 Die Methoden doGet, doPost und doXxx 54
2.6.4 Das Interface SingleThreadModel 54
2.6.5 Die destroy-Methode 55
2.7 Ein Beispiel mit Initialisierungsparametern 55
2.8 Ein Beispiel mit Servlet-Initialisierungs- und Seitenänderungs-Daten 59
2.9 Fehlerbehebung in Servlets 64
2.10 WebClient: interaktive Kommunikation mit Webservern 65
2.10.1 WebClient 66
2.10.2 HttpClient 69
2.10.3 NetworkClient 70
2.10.4 SocketUtil 72
2.10.5 CloseableFrame 73
2.10.6 LabeledTextField 74
2.10.7 Interruptible 75
3 Client-Anfragen handeln: Formulardaten 77
3.1 Die Rolle der Formulardaten 78
3.2 Formulardaten aus Servlets lesen 78
3.3 Beispiel: Drei explizite Parameter lesen 79
3.4 Beispiel: Alle Parameter lesen 82
3.5 Ein Dienst zum Versenden von Bewerbungen 86
3.6 Zeichenketten nach HTML-Zeichen filtern 97
3.6.1 Code zum Filtern 98
3.6.2 Beispiel 100
4 Client-Anfragen handeln: HTTP-Anfrage -Header 103
4.1 Anfrage-Header von Servlets lesen 104
4.2 Alle Header ausgeben 105
4.3 Anfrage-Header bei HTTP 1.1 108
4.4 Komprimierte Webseiten senden 112
4.5 Zugriff auf Webseiten beschränken 115
5 Zugriff auf CGI-Standardvariablen 121
5.1 Servlet-Entsprechungen der CGI-Variablen 122
5.2 Ein Servlet, das CGI-Variablen zeigt 124
6 Server-Antwort generieren: HTTP-Statuscodes 127
6.1 Statuscodes spezifizieren 128
6.2 HTTP 1.1-Statuscodes und ihr Zweck 130
6.3 Ein Frontend für diverse Suchmaschinen 137
7 Server-Antwort generieren: HTTP- Antwort-Header 145
7.1 Antwort-Header von Servlets aus setzen 146
7.2 HTTP 1.1-Antwort-Header und ihre Bedeutung 147
7.3 Persistenter Servlet-Zustand und automatisches Neuladen von Seiten 154
7.4 Persistente HTTP-Verbindungen nutzen 164
7.5 Mit Servlets GIF-Bilder generieren 168
8 Mit Cookies arbeiten 179
8.1 Vorteile von Cookies 180
8.1.1 Nutzer bei einer E-Commerce-Sitzung identifizieren 180
8.1.2 Eingabe von Benutzernamen und Passwort vermeiden 180
8.1.3 Website anpassen 181
8.1.4 Gezielt werben 181
8.2 Probleme mit Cookies 181
8.3 Das Cookie-API von Servlet 182
8.3.1 Cookies erzeugen 183
8.3.2 Cookie-Attribute 183
8.3.3 Cookies in Antwort-Header einfügen 185
8.3.4 Cookies vom Client lesen 185
8.4 Beispiele: Cookies setzen und lesen 185
8.5 Dienstprogramme für Cookies 189
8.5.1 Cookies mit angegebenen Namen finden 189
8.5.2 Langlebige Cookies erzeugen 190
8.6 Ein selbst definiertes Suchmaschinen-Interface 190
9 Sitzungs-Tracking 197
9.1 Sitzungs-Tracking ist notwendig 198
9.1.1 Cookies 198
9.1.2 URL-Rewriting 199
9.1.3 Verborgene Formularfelder 199
9.1.4 Sitzungs-Tracking in Servlets 199
9.2 Das Sitzungs-Tracking-API 199
9.2.1 Das HttpSession-Objekt zur aktuellen Anfrage nachschauen 200
9.2.2 Informationen zu einer Sitzung nachschauen 200
9.2.3 Informationen mit einer Sitzung verbinden 202
9.2.4 Sitzungen beenden 203
9.2.5 An den Client gesendete URLs kodieren 203
9.3 Ein Servlet, das Zugriffszahlen pro Client anzeigt 204
9.4 Ein Online-Geschäft mit Einkaufskorb und Sitzungs-Tracking 207
9.4.1 Das Frontend 207
9.4.2 Bestellungen aufnehmen 211
9.4.3 Hinter den Kulissen: Implementierung der Waren im Einkaufskorb
und im Katalog 217
Teil II: JavaServer Pages 225
10 JSP-Scriptingelemente 227
10.1 Scriptingelemente 229
10.1.1 Template-Text 230
10.2 JSP-Ausdrücke 230
10.2.1 Vordefinierte Variablen 230
10.2.2 XML-Syntax für Ausdrücke 231
10.2.3 Ausdrücke als Attributwerte verwenden 231
10.2.4 Beispiel 232
10.3 JSP-Scriptlets 233
10.3.1 Mit Scriptlets Teile der JSP-Datei an Bedingungen knüpfen 236
10.3.2 Spezielle Scriptlet-Syntax 236
10.4 JSP-Deklarationen 237
10.4.1 Spezielle Deklarationssyntax 238
10.5 Vordefinierte Variablen 238
11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 241
11.1 Das Attribut import 242
11.1.1 Verzeichnisse für selbst definierte Klassen 243
11.1.2 Beispiel 243
11.2 Das Attribut contentType 245
11.2.1 Dokumente mit einfachem Text erzeugen 246
11.2.2 Excel-Tabellenkalkulationen generieren 246
11.3 Das Attribut isThreadSafe 250
11.4 Das Attribut session 252
11.5 Das Attribut buffer 252
11.6 Das Attribut autoflush 252
11.7 Das Attribut extends 252
11.8 Das Attribut info 253
11.9 Das Attribut errorPage 253
11.10 Das Attribut isErrorPage 253
11.11 Das Attribut language 256
11.12 XML-Syntax für Direktiven 256
12 Dateien und Applets in JSP-Dokumente einbinden 257
12.1 Dateien zur Seiten-Übersetzungszeit einbinden 258
12.2 Dateien zur Anforderungszeit einbinden 261
12.3 Applets für das Java-Plug-In einbinden 263
12.3.1 Das jsp:plugin-Element 264
12.3.2 Die Elemente jsp:param und jsp:params 266
12.3.3 Das jsp:fallback-Element 267
12.3.4 Beispiel: Schattierter Text 267
13 JavaBeans mit JSP verwenden 275
13.1 Grundlagen der Verwendung von Beans 277
13.1.1 Zugriff auf Bean-Eigenschaften 278
13.1.2 Bean-Eigenschaften setzen: Ein einfaches Fallbeispiel 278
13.1.3 Bean-Klassen installieren 279
13.2 Beispiel: StringBean 280
13.3 Bean-Eigenschaften festlegen 282
13.3.1 Einzelne Eigenschaften mit Eingabeparametern verbinden 286
13.3.2 Automatische Typkonvertierungen 287
13.3.3 Sämtliche Eigenschaften mit Eingabeparametern verbinden 288
13.4 Beans gemeinsam nutzen 290
13.4.1 Beans bedingt erzeugen 291
14 JSP-Tag-Bibliotheken selbst definieren 295
14.1 Komponenten einer Tag-Bibliothek 296
14.1.1 Die Tag-Handler-Klasse 297
14.1.2 Die Descriptordatei der Tag-Bibliothek 297
14.1.3 Die JSP-Datei 299
14.2 Ein einfaches Tag definieren 300
14.2.1 Die Tag-Handler-Klasse 300
14.2.2 Die Tag-Bibliothek-Descriptordatei 302
14.2.3 Die JSP-Datei 303
14.3 Tag-Attribute zuweisen 304
14.3.1 Die Tag-Handler-Klasse 304
14.3.2 Die Descriptordatei der Tag-Bibliothek 306
14.3.3 Die JSP-Datei 307
14.4 Den Rumpf des Tag einbinden 308
14.4.1 Die Tag-Handler-Klasse 308
14.4.2 Die Descriptordatei zur Tag-Bibliothek 311
14.4.3 Die JSP-Datei 312
14.5 Den Tag-Rumpf optional einbinden 313
14.5.1 Die Tag-Handler-Klasse 314
14.5.2 Die Descriptordatei zur Tag-Bibliothek 314
14.5.3 Die JSP-Datei 315
14.6 Den Tag-Rumpf manipulieren 317
14.6.1 Die Klasse Tag-Handler 317
14.6.2 Die Descriptordatei der Tag-Bibliothek 319
14.6.3 Die JSP-Datei 319
14.7 Den Tag-Rumpf mehrmals einbinden oder manipulieren 321
14.7.1 Die Tag-Handler-Klasse 321
14.7.2 Die Descriptordatei der Tag-Bibliothek 322
14.8 Geschachtelte Tags 324
14.8.1 Die Tag-Handler-Klassen 325
14.8.2 Die Descriptordatei der Tag-Bibliothek 330
14.8.3 Die JSP-Datei 332
15 Servlets und JSP integrieren 335
15.1 Anfragen weiterleiten 336
15.1.1 Statische Ressourcen verwenden 337
15.1.2 Daten an die Zielseiten liefern 338
15.1.3 Relative URLs in der Zielseite interpretieren 339
15.1.4 Alternative Beschaffung eines RequestDispatcher 340
15.2 Beispiel: Ein Online-Reisebüro 340
15.3 Statischen oder dynamischen Inhalt einbinden 356
15.4 Beispiel: Rohausgabe von Servlet und JSP anzeigen 357
15.5 Anfragen von JSP-Seiten aus weiterleiten 361
Teil III: Unterstützende Technologien 363
16 HTML-Formulare verwenden 365
16.1 Datenübermittlung mit HTML-Formularen 366
16.2 Das FORM-Element 370
16.3 Texteingabeelemente 375
16.3.1 Textfelder 375
16.3.2 Passwortfelder 376
16.3.3 Textbereiche 377
16.4 Schaltflächen 379
16.4.1 Absenden-Schaltflächen 379
16.4.2 Zurücksetzen-Schaltflächen 382
16.4.3 JavaScript-Schaltflächen 383
16.5 Kontrollkästchen und Ein/Ausschalter 383
16.5.1 Kontrollkästchen 383
16.5.2 Ein/Ausschalter 385
16.6 Comboboxen und Listenfelder 386
16.7 Fenster zum Laden von Dateien 389
16.8 Server-seitige Imagemaps 391
16.8.1 IMAGE - Server-seitige Standard-Imagemaps 391
16.8.2 ISMAP - Alternative, Server-seitige Imagemaps 392
16.9 Verborgene Felder 395
16.10 Elemente zusammenfassen 395
16.11 Die Tabulatorreihenfolge steuern 397
16.12 Ein Webserver zur Fehlerbehebung 398
16.12.1 EchoServer 399
16.12.2 ThreadedEchoServer 402
16.12.3 NetworkServer 404
17 Applets als Frontend für Servlets 407
17.1 Daten mit GET senden und die resultierende Seite anzeigen 408
17.2 Ein Suchmaschinen-Frontend für mehrere Systeme 409
17.3 Daten mit GET senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 413
17.3.1 Binärdaten oder ASCII-Daten lesen 413
17.3.2 Serialisierte Datenstrukturen lesen 414
17.4 Ein Anfragenfenster mit Objektserialisierung und HTTP-Tunneling 416
17.5 Daten mit POST senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 423
17.6 Ein Applet, das POST-Daten sendet 426
17.7 Den HTTP-Server umgehen 432
18 JDBC und Datenbank verbindungspools 433
18.1 Erste Schritte der Verwendung von JDBC 435
18.1.1 Den Treiber laden 435
18.1.2 Die Verbindungs-URL definieren 436
18.1.3 Die Verbindung herstellen 436
18.1.4 Eine Anweisung erzeugen 437
18.1.5 Eine Abfrage ausführen 437
18.1.6 Die Ergebnisse verarbeiten 437
18.1.7 Die Verbindung schließen 438
18.2 Einfaches JDBC-Beispiel 439
18.3 Einige JDBC-Hilfsprogramme 444
18.4 Die Datenbankdienstprogramme anwenden 453
18.5 Ein interaktives Abfragefenster 458
18.5.1 Code des Abfragefensters 460
18.6 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 467
18.7 Verbindungspools 471
18.8 Verbindungspools: Eine Fallstudie 477
18.9 Verbindungspools gemeinsam nutzen 483
18.9.1 ServletContext zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
18.9.2 Singleton-Klassen zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
A Kurzreferenz zu Servlets und JSP 487
A.1 Überblick über Servlets und JavaServer Pages 488
A.1.1 Vorteile von Servlets 488
A.1.2 Vorteile von JSP 488
A.1.3 Kostenlose Servlet- und JSP-Software 488
A.1.4 Dokumentation 488
A.1.5 Servlet-Kompilierung: CLASSPATH-Einträge 488
A.1.6 Tomcat 3.0-Standardverzeichnisse 489
A.1.7 Tomcat 3.1-Standardverzeichnisse 489
A.1.8 JSWDK 1.0.1-Standardverzeichnisse 489
A.1.9 Java Web Server 2.0-Standardverzeichnisse 489
A.2 Erste Servlets 489
A.2.1 Einfaches Servlet 489
A.2.2 Servlets installieren 490
A.2.3 Servlets aufrufen 490
A.2.4 Lebenszyklen von Servlets 490
A.3 Client-Anfragen behandeln: Formulardaten 491
A.3.1 Parameter lesen 491
A.3.2 Beispiel-Servlet 491
A.3.3 Beispiel-Formular 491
A.3.4 HTML-spezifische Zeichen herausfiltern 492
A.4 Client-Anfragen behandeln: HTTP-Anfrage-Header 492
A.4.1 Methoden zum Lesen von Anfrage-Headern 492
A.4.2 Weitere Anfragedaten 493
A.4.3 Anfrage-Header bei HTTP 1.1 493
A.5 Zugriff auf CGI-Standardvariablen 493
A.5.1 Fähigkeiten, die an anderer Stelle nicht behandelt werden 493
A.5.2 Servlet-Entsprechungen der CGI-Variablen 494
A.6 Server-Antwort generieren: HTTP-Statuscodes 494
A.6.1 Format einer HTTP-Antwort 494
A.6.2 Methoden zum Setzen von Statuscodes 494
A.6.3 Statuscode-Kategorien 495
A.6.4 HTTP 1.1-Statuscodes 495
A.7 Server-Antwort generieren: HTTP-Antwort-Header 495
A.7.1 Beliebige Header setzen 495
A.7.2 Gebräuchliche Header setzen 496
A.7.3 HTTP 1.1-Antwort-Header 496
A.7.4 GIF-Bilder von Servlets aus generieren 497
A.8 Mit Cookies arbeiten 497
A.8.1 Einsatz von Cookies 497
A.8.2 Probleme mit Cookies 497
A.8.3 Allgemeine Verwendung 497
A.8.4 Cookie-Methoden 498
A.9 Sitzungs-Tracking 498
A.9.1 Sitzungsdaten nachschlagen: getValue 498
A.9.2 Daten mit einer Sitzung verbinden: putValue 499
A.9.3 HttpSession-Methoden 499
A.9.4 URLs kodieren 500
A.10 JSP-Scriptingelemente 500
A.10.1 Scriptingelementetypen 500
A.10.2 Template-Text 501
A.10.3 Vordefinierte Variablen 501
A.11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 501
A.11.1 Das import-Attribut 501
A.11.2 Das contentType-Attribut 501
A.11.3 Anwendungsbeispiel für contentType 502
A.11.4 Anwendungsbeispiel für setContentType 502
A.11.5 Das isThreadSafe-Attribut 502
A.11.6 Das session-Attribut 503
A.11.7 Das buffer-Attribut 503
A.11.8 Das autoflush-Attribut 503
A.11.9 Das extends-Attribut 503
A.11.10 Das info-Attribut 503
A.11.11 Das errorPage-Attribut 503
A.11.12 Das isErrorPage-Attribut 503
A.11.13 Das language-Attribut 504
A.11.14 XML-Syntax 504
A.12 Dateien und Applets in JSP-Dokumente einbinden 504
A.12.1 Dateien zur Seiten-Übersetzungszeit einbinden 504
A.12.2 Dateien zur Anforderungszeit einbinden 504
A.12.3 Applets für das Java-Plug-In: Einfacher Fall 504
A.12.4 Attribute von jsp:plugin 505
A.12.5 Parameter in HTML: jsp:param 505
A.12.6 Alternativer Text 506
A.13 JavaBeans mit JSP verwenden 506
A.13.1 Grundvoraussetzungen für eine Bean-Klasse 506
A.13.2 Grundlagen der Verwendung von Beans 506
A.13.3 Eigenschaften mit Anfrageparametern verbinden 506
A.13.4 Beans gemeinsam nutzen: Das scope-Attribut von jsp:useBean 507
A.13.5 Bedingte Erzeugung von Beans 507
A.14 JSP-Tag-Bibliotheken selbst definieren 507
A.14.1 Die Tag-Handler-Klasse 507
A.14.2 Die Descriptordatei der Tag-Bibliothek 508
A.14.3 Die JSP-Datei 508
A.14.4 Attribute Tags zuweisen 508
A.14.5 Den Tag-Rumpf einbinden 508
A.14.6 Den Tag-Rumpf optional einbinden 508
A.14.7 Den Tag-Rumpf manipulieren 509
A.14.8 Den Tag-Rumpf mehrfach einbinden oder manipulieren 509
A.14.9 Geschachtelte Tags 509
A.15 Servlets und JSP integrieren 509
A.15.1 Gesamtbild 509
A.15.2 Syntax für die Weiterleitung von Anfragen 509
A.15.3 Weiterleitung an normale HTML-Seiten 509
A.15.4 Global gemeinsam genutzte Beans einrichten 510
A.15.5 Sitzungs-Beans einrichten 510
A.15.6 Relative URLs in der Zielseite interpretieren 510
A.15.7 Alternative Erlangung eines RequestDispatcher (nur Version 2.2) 510
A.15.8 Statischen oder dynamischen Inhalt einbinden 510
A.15.9 Anfragen von JSP-Seiten weiterleiten 510
A.16 HTML-Formulare verwenden 511
A.16.1 Das FORM-Element 511
A.16.2 Textfelder 511
A.16.3 Passwortfelder 511
A.16.4 Textbereiche 511
A.16.5 Absenden-Schaltflächen 511
A.16.6 Andere Schaltflächen 511
A.16.7 Zurücksetzen-Schaltflächen 512
A.16.8 Andere Zurücksetzen-Schaltflächen 512
A.16.9 JavaScript-Schaltflächen 512
A.16.10 Andere JavaScript-Schaltflächen 512
A.16.11 Kontrollkästchen 512
A.16.12 Ein/Ausschalter 512
A.16.13 Comboboxen 512
A.16.14 Fenster zum Laden von Dateien 513
A.16.15 Server-seitige Imagemaps 513
A.16.16 Verborgene Felder 513
A.16.17 Funktionen des Internet Explorer 513
A.17 Applets als Frontend für Servlets 513
A.17.1 GET-Daten senden und die Resultate im Browser anzeigen lassen 513
A.17.2 GET-Daten senden und die Ergebnisse direkt verarbeiten (HTTP-Tunneling) 513
A.17.3 Serialisierte Daten senden: Der Applet-Code 514
A.17.4 Serialisierte Daten senden: Der Servlet-Code 515
A.17.5 POST-Daten senden und die Resultate direkt verarbeiten (HTTP Tunneling) 516
A.17.6 Den HTTP-Server umgehen 518
A.18 JDBC und Datenbankverbindungspools 518
A.18.1 Erste Schritte zur Nutzung von JDBC 518
A.18.2 Datenbankdienstprogramme 519
A.18.3 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 520
A.18.4 Schritte zur Implementierung von Verbindungspools 520
Stichwortverzeichnis 523
Einleitung 17
Über den Autor 18
Einführung 18
Echter Code für echte Programmierer 19
Aufbau dieses Buchs 20
Konventionen 23
Im Web 24
Teil I: Servlets 2.1 und 2.2 25
1 Überblick über Servlets und JavaServer Pages 27
1.1 Servlets 28
1.2 Vorzüge von Servlets gegenüber "traditionellem" CGI 29
1.2.1 Effizient 29
1.2.2 Praktisch 29
1.2.3 Mächtig 29
1.2.4 Portierbar 30
1.2.5 Sicher 30
1.2.6 Kostengünstig 30
1.3 JavaServer Pages 31
1.4 Vorteile von JSP 31
1.4.1 - gegenüber Active Server Pages (ASP) 31
1.4.2 - gegenüber PHP 31
1.4.3 - gegenüber reinen Servlets 32
1.4.4 - gegenüber Server-Side Includes (SSI) 32
1.4.5 - gegenüber JavaScript 32
1.4.6 - gegenüber statischem HTML 32
1.5 Installation und Setup 32
1.5.1 Servlet- und JSP-Software beschaffen 33
1.5.2 API-Dokumentation zu Servlets und JSP installieren oder mit Bookmark versehen 34
1.5.3 Klassen dem Java-Compiler gegenüber identifizieren 34
1.5.4 Klassen in ein Paket schnüren 35
1.5.5 Server konfigurieren 35
1.5.6 Server starten 37
1.5.7 Eigene Servlets kompilieren und installieren 37
2 Erste Servlets 39
2.1 Grundstruktur von Servlets 40
2.2 Ein einfaches Servlet, das einfachen Text generiert 41
2.2.1 Servlet kompilieren und installieren 42
2.2.2 Servlet aufrufen 43
2.3 Ein Servlet, das HTML generiert 43
2.4 Servlet-Pakete 45
2.4.1 Servlets in Paketen erstellen 46
2.4.2 Servlets in Paketen kompilieren 46
2.4.3 Servlets in Paketen aufrufen 48
2.5 Dienstprogramme, die beim Erstellen von HTML helfen 48
2.6 Lebenszyklen von Servlets 51
2.6.1 Die init-Methode 51
2.6.2 Die service-Methode 53
2.6.3 Die Methoden doGet, doPost und doXxx 54
2.6.4 Das Interface SingleThreadModel 54
2.6.5 Die destroy-Methode 55
2.7 Ein Beispiel mit Initialisierungsparametern 55
2.8 Ein Beispiel mit Servlet-Initialisierungs- und Seitenänderungs-Daten 59
2.9 Fehlerbehebung in Servlets 64
2.10 WebClient: interaktive Kommunikation mit Webservern 65
2.10.1 WebClient 66
2.10.2 HttpClient 69
2.10.3 NetworkClient 70
2.10.4 SocketUtil 72
2.10.5 CloseableFrame 73
2.10.6 LabeledTextField 74
2.10.7 Interruptible 75
3 Client-Anfragen handeln: Formulardaten 77
3.1 Die Rolle der Formulardaten 78
3.2 Formulardaten aus Servlets lesen 78
3.3 Beispiel: Drei explizite Parameter lesen 79
3.4 Beispiel: Alle Parameter lesen 82
3.5 Ein Dienst zum Versenden von Bewerbungen 86
3.6 Zeichenketten nach HTML-Zeichen filtern 97
3.6.1 Code zum Filtern 98
3.6.2 Beispiel 100
4 Client-Anfragen handeln: HTTP-Anfrage -Header 103
4.1 Anfrage-Header von Servlets lesen 104
4.2 Alle Header ausgeben 105
4.3 Anfrage-Header bei HTTP 1.1 108
4.4 Komprimierte Webseiten senden 112
4.5 Zugriff auf Webseiten beschränken 115
5 Zugriff auf CGI-Standardvariablen 121
5.1 Servlet-Entsprechungen der CGI-Variablen 122
5.2 Ein Servlet, das CGI-Variablen zeigt 124
6 Server-Antwort generieren: HTTP-Statuscodes 127
6.1 Statuscodes spezifizieren 128
6.2 HTTP 1.1-Statuscodes und ihr Zweck 130
6.3 Ein Frontend für diverse Suchmaschinen 137
7 Server-Antwort generieren: HTTP- Antwort-Header 145
7.1 Antwort-Header von Servlets aus setzen 146
7.2 HTTP 1.1-Antwort-Header und ihre Bedeutung 147
7.3 Persistenter Servlet-Zustand und automatisches Neuladen von Seiten 154
7.4 Persistente HTTP-Verbindungen nutzen 164
7.5 Mit Servlets GIF-Bilder generieren 168
8 Mit Cookies arbeiten 179
8.1 Vorteile von Cookies 180
8.1.1 Nutzer bei einer E-Commerce-Sitzung identifizieren 180
8.1.2 Eingabe von Benutzernamen und Passwort vermeiden 180
8.1.3 Website anpassen 181
8.1.4 Gezielt werben 181
8.2 Probleme mit Cookies 181
8.3 Das Cookie-API von Servlet 182
8.3.1 Cookies erzeugen 183
8.3.2 Cookie-Attribute 183
8.3.3 Cookies in Antwort-Header einfügen 185
8.3.4 Cookies vom Client lesen 185
8.4 Beispiele: Cookies setzen und lesen 185
8.5 Dienstprogramme für Cookies 189
8.5.1 Cookies mit angegebenen Namen finden 189
8.5.2 Langlebige Cookies erzeugen 190
8.6 Ein selbst definiertes Suchmaschinen-Interface 190
9 Sitzungs-Tracking 197
9.1 Sitzungs-Tracking ist notwendig 198
9.1.1 Cookies 198
9.1.2 URL-Rewriting 199
9.1.3 Verborgene Formularfelder 199
9.1.4 Sitzungs-Tracking in Servlets 199
9.2 Das Sitzungs-Tracking-API 199
9.2.1 Das HttpSession-Objekt zur aktuellen Anfrage nachschauen 200
9.2.2 Informationen zu einer Sitzung nachschauen 200
9.2.3 Informationen mit einer Sitzung verbinden 202
9.2.4 Sitzungen beenden 203
9.2.5 An den Client gesendete URLs kodieren 203
9.3 Ein Servlet, das Zugriffszahlen pro Client anzeigt 204
9.4 Ein Online-Geschäft mit Einkaufskorb und Sitzungs-Tracking 207
9.4.1 Das Frontend 207
9.4.2 Bestellungen aufnehmen 211
9.4.3 Hinter den Kulissen: Implementierung der Waren im Einkaufskorb
und im Katalog 217
Teil II: JavaServer Pages 225
10 JSP-Scriptingelemente 227
10.1 Scriptingelemente 229
10.1.1 Template-Text 230
10.2 JSP-Ausdrücke 230
10.2.1 Vordefinierte Variablen 230
10.2.2 XML-Syntax für Ausdrücke 231
10.2.3 Ausdrücke als Attributwerte verwenden 231
10.2.4 Beispiel 232
10.3 JSP-Scriptlets 233
10.3.1 Mit Scriptlets Teile der JSP-Datei an Bedingungen knüpfen 236
10.3.2 Spezielle Scriptlet-Syntax 236
10.4 JSP-Deklarationen 237
10.4.1 Spezielle Deklarationssyntax 238
10.5 Vordefinierte Variablen 238
11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 241
11.1 Das Attribut import 242
11.1.1 Verzeichnisse für selbst definierte Klassen 243
11.1.2 Beispiel 243
11.2 Das Attribut contentType 245
11.2.1 Dokumente mit einfachem Text erzeugen 246
11.2.2 Excel-Tabellenkalkulationen generieren 246
11.3 Das Attribut isThreadSafe 250
11.4 Das Attribut session 252
11.5 Das Attribut buffer 252
11.6 Das Attribut autoflush 252
11.7 Das Attribut extends 252
11.8 Das Attribut info 253
11.9 Das Attribut errorPage 253
11.10 Das Attribut isErrorPage 253
11.11 Das Attribut language 256
11.12 XML-Syntax für Direktiven 256
12 Dateien und Applets in JSP-Dokumente einbinden 257
12.1 Dateien zur Seiten-Übersetzungszeit einbinden 258
12.2 Dateien zur Anforderungszeit einbinden 261
12.3 Applets für das Java-Plug-In einbinden 263
12.3.1 Das jsp:plugin-Element 264
12.3.2 Die Elemente jsp:param und jsp:params 266
12.3.3 Das jsp:fallback-Element 267
12.3.4 Beispiel: Schattierter Text 267
13 JavaBeans mit JSP verwenden 275
13.1 Grundlagen der Verwendung von Beans 277
13.1.1 Zugriff auf Bean-Eigenschaften 278
13.1.2 Bean-Eigenschaften setzen: Ein einfaches Fallbeispiel 278
13.1.3 Bean-Klassen installieren 279
13.2 Beispiel: StringBean 280
13.3 Bean-Eigenschaften festlegen 282
13.3.1 Einzelne Eigenschaften mit Eingabeparametern verbinden 286
13.3.2 Automatische Typkonvertierungen 287
13.3.3 Sämtliche Eigenschaften mit Eingabeparametern verbinden 288
13.4 Beans gemeinsam nutzen 290
13.4.1 Beans bedingt erzeugen 291
14 JSP-Tag-Bibliotheken selbst definieren 295
14.1 Komponenten einer Tag-Bibliothek 296
14.1.1 Die Tag-Handler-Klasse 297
14.1.2 Die Descriptordatei der Tag-Bibliothek 297
14.1.3 Die JSP-Datei 299
14.2 Ein einfaches Tag definieren 300
14.2.1 Die Tag-Handler-Klasse 300
14.2.2 Die Tag-Bibliothek-Descriptordatei 302
14.2.3 Die JSP-Datei 303
14.3 Tag-Attribute zuweisen 304
14.3.1 Die Tag-Handler-Klasse 304
14.3.2 Die Descriptordatei der Tag-Bibliothek 306
14.3.3 Die JSP-Datei 307
14.4 Den Rumpf des Tag einbinden 308
14.4.1 Die Tag-Handler-Klasse 308
14.4.2 Die Descriptordatei zur Tag-Bibliothek 311
14.4.3 Die JSP-Datei 312
14.5 Den Tag-Rumpf optional einbinden 313
14.5.1 Die Tag-Handler-Klasse 314
14.5.2 Die Descriptordatei zur Tag-Bibliothek 314
14.5.3 Die JSP-Datei 315
14.6 Den Tag-Rumpf manipulieren 317
14.6.1 Die Klasse Tag-Handler 317
14.6.2 Die Descriptordatei der Tag-Bibliothek 319
14.6.3 Die JSP-Datei 319
14.7 Den Tag-Rumpf mehrmals einbinden oder manipulieren 321
14.7.1 Die Tag-Handler-Klasse 321
14.7.2 Die Descriptordatei der Tag-Bibliothek 322
14.8 Geschachtelte Tags 324
14.8.1 Die Tag-Handler-Klassen 325
14.8.2 Die Descriptordatei der Tag-Bibliothek 330
14.8.3 Die JSP-Datei 332
15 Servlets und JSP integrieren 335
15.1 Anfragen weiterleiten 336
15.1.1 Statische Ressourcen verwenden 337
15.1.2 Daten an die Zielseiten liefern 338
15.1.3 Relative URLs in der Zielseite interpretieren 339
15.1.4 Alternative Beschaffung eines RequestDispatcher 340
15.2 Beispiel: Ein Online-Reisebüro 340
15.3 Statischen oder dynamischen Inhalt einbinden 356
15.4 Beispiel: Rohausgabe von Servlet und JSP anzeigen 357
15.5 Anfragen von JSP-Seiten aus weiterleiten 361
Teil III: Unterstützende Technologien 363
16 HTML-Formulare verwenden 365
16.1 Datenübermittlung mit HTML-Formularen 366
16.2 Das FORM-Element 370
16.3 Texteingabeelemente 375
16.3.1 Textfelder 375
16.3.2 Passwortfelder 376
16.3.3 Textbereiche 377
16.4 Schaltflächen 379
16.4.1 Absenden-Schaltflächen 379
16.4.2 Zurücksetzen-Schaltflächen 382
16.4.3 JavaScript-Schaltflächen 383
16.5 Kontrollkästchen und Ein/Ausschalter 383
16.5.1 Kontrollkästchen 383
16.5.2 Ein/Ausschalter 385
16.6 Comboboxen und Listenfelder 386
16.7 Fenster zum Laden von Dateien 389
16.8 Server-seitige Imagemaps 391
16.8.1 IMAGE - Server-seitige Standard-Imagemaps 391
16.8.2 ISMAP - Alternative, Server-seitige Imagemaps 392
16.9 Verborgene Felder 395
16.10 Elemente zusammenfassen 395
16.11 Die Tabulatorreihenfolge steuern 397
16.12 Ein Webserver zur Fehlerbehebung 398
16.12.1 EchoServer 399
16.12.2 ThreadedEchoServer 402
16.12.3 NetworkServer 404
17 Applets als Frontend für Servlets 407
17.1 Daten mit GET senden und die resultierende Seite anzeigen 408
17.2 Ein Suchmaschinen-Frontend für mehrere Systeme 409
17.3 Daten mit GET senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 413
17.3.1 Binärdaten oder ASCII-Daten lesen 413
17.3.2 Serialisierte Datenstrukturen lesen 414
17.4 Ein Anfragenfenster mit Objektserialisierung und HTTP-Tunneling 416
17.5 Daten mit POST senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 423
17.6 Ein Applet, das POST-Daten sendet 426
17.7 Den HTTP-Server umgehen 432
18 JDBC und Datenbank verbindungspools 433
18.1 Erste Schritte der Verwendung von JDBC 435
18.1.1 Den Treiber laden 435
18.1.2 Die Verbindungs-URL definieren 436
18.1.3 Die Verbindung herstellen 436
18.1.4 Eine Anweisung erzeugen 437
18.1.5 Eine Abfrage ausführen 437
18.1.6 Die Ergebnisse verarbeiten 437
18.1.7 Die Verbindung schließen 438
18.2 Einfaches JDBC-Beispiel 439
18.3 Einige JDBC-Hilfsprogramme 444
18.4 Die Datenbankdienstprogramme anwenden 453
18.5 Ein interaktives Abfragefenster 458
18.5.1 Code des Abfragefensters 460
18.6 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 467
18.7 Verbindungspools 471
18.8 Verbindungspools: Eine Fallstudie 477
18.9 Verbindungspools gemeinsam nutzen 483
18.9.1 ServletContext zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
18.9.2 Singleton-Klassen zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
A Kurzreferenz zu Servlets und JSP 487
A.1 Überblick über Servlets und JavaServer Pages 488
A.1.1 Vorteile von Servlets 488
A.1.2 Vorteile von JSP 488
A.1.3 Kostenlose Servlet- und JSP-Software 488
A.1.4 Dokumentation 488
A.1.5 Servlet-Kompilierung: CLASSPATH-Einträge 488
A.1.6 Tomcat 3.0-Standardverzeichnisse 489
A.1.7 Tomcat 3.1-Standardverzeichnisse 489
A.1.8 JSWDK 1.0.1-Standardverzeichnisse 489
A.1.9 Java Web Server 2.0-Standardverzeichnisse 489
A.2 Erste Servlets 489
A.2.1 Einfaches Servlet 489
A.2.2 Servlets installieren 490
A.2.3 Servlets aufrufen 490
A.2.4 Lebenszyklen von Servlets 490
A.3 Client-Anfragen behandeln: Formulardaten 491
A.3.1 Parameter lesen 491
A.3.2 Beispiel-Servlet 491
A.3.3 Beispiel-Formular 491
A.3.4 HTML-spezifische Zeichen herausfiltern 492
A.4 Client-Anfragen behandeln: HTTP-Anfrage-Header 492
A.4.1 Methoden zum Lesen von Anfrage-Headern 492
A.4.2 Weitere Anfragedaten 493
A.4.3 Anfrage-Header bei HTTP 1.1 493
A.5 Zugriff auf CGI-Standardvariablen 493
A.5.1 Fähigkeiten, die an anderer Stelle nicht behandelt werden 493
A.5.2 Servlet-Entsprechungen der CGI-Variablen 494
A.6 Server-Antwort generieren: HTTP-Statuscodes 494
A.6.1 Format einer HTTP-Antwort 494
A.6.2 Methoden zum Setzen von Statuscodes 494
A.6.3 Statuscode-Kategorien 495
A.6.4 HTTP 1.1-Statuscodes 495
A.7 Server-Antwort generieren: HTTP-Antwort-Header 495
A.7.1 Beliebige Header setzen 495
A.7.2 Gebräuchliche Header setzen 496
A.7.3 HTTP 1.1-Antwort-Header 496
A.7.4 GIF-Bilder von Servlets aus generieren 497
A.8 Mit Cookies arbeiten 497
A.8.1 Einsatz von Cookies 497
A.8.2 Probleme mit Cookies 497
A.8.3 Allgemeine Verwendung 497
A.8.4 Cookie-Methoden 498
A.9 Sitzungs-Tracking 498
A.9.1 Sitzungsdaten nachschlagen: getValue 498
A.9.2 Daten mit einer Sitzung verbinden: putValue 499
A.9.3 HttpSession-Methoden 499
A.9.4 URLs kodieren 500
A.10 JSP-Scriptingelemente 500
A.10.1 Scriptingelementetypen 500
A.10.2 Template-Text 501
A.10.3 Vordefinierte Variablen 501
A.11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 501
A.11.1 Das import-Attribut 501
A.11.2 Das contentType-Attribut 501
A.11.3 Anwendungsbeispiel für contentType 502
A.11.4 Anwendungsbeispiel für setContentType 502
A.11.5 Das isThreadSafe-Attribut 502
A.11.6 Das session-Attribut 503
A.11.7 Das buffer-Attribut 503
A.11.8 Das autoflush-Attribut 503
A.11.9 Das extends-Attribut 503
A.11.10 Das info-Attribut 503
A.11.11 Das errorPage-Attribut 503
A.11.12 Das isErrorPage-Attribut 503
A.11.13 Das language-Attribut 504
A.11.14 XML-Syntax 504
A.12 Dateien und Applets in JSP-Dokumente einbinden 504
A.12.1 Dateien zur Seiten-Übersetzungszeit einbinden 504
A.12.2 Dateien zur Anforderungszeit einbinden 504
A.12.3 Applets für das Java-Plug-In: Einfacher Fall 504
A.12.4 Attribute von jsp:plugin 505
A.12.5 Parameter in HTML: jsp:param 505
A.12.6 Alternativer Text 506
A.13 JavaBeans mit JSP verwenden 506
A.13.1 Grundvoraussetzungen für eine Bean-Klasse 506
A.13.2 Grundlagen der Verwendung von Beans 506
A.13.3 Eigenschaften mit Anfrageparametern verbinden 506
A.13.4 Beans gemeinsam nutzen: Das scope-Attribut von jsp:useBean 507
A.13.5 Bedingte Erzeugung von Beans 507
A.14 JSP-Tag-Bibliotheken selbst definieren 507
A.14.1 Die Tag-Handler-Klasse 507
A.14.2 Die Descriptordatei der Tag-Bibliothek 508
A.14.3 Die JSP-Datei 508
A.14.4 Attribute Tags zuweisen 508
A.14.5 Den Tag-Rumpf einbinden 508
A.14.6 Den Tag-Rumpf optional einbinden 508
A.14.7 Den Tag-Rumpf manipulieren 509
A.14.8 Den Tag-Rumpf mehrfach einbinden oder manipulieren 509
A.14.9 Geschachtelte Tags 509
A.15 Servlets und JSP integrieren 509
A.15.1 Gesamtbild 509
A.15.2 Syntax für die Weiterleitung von Anfragen 509
A.15.3 Weiterleitung an normale HTML-Seiten 509
A.15.4 Global gemeinsam genutzte Beans einrichten 510
A.15.5 Sitzungs-Beans einrichten 510
A.15.6 Relative URLs in der Zielseite interpretieren 510
A.15.7 Alternative Erlangung eines RequestDispatcher (nur Version 2.2) 510
A.15.8 Statischen oder dynamischen Inhalt einbinden 510
A.15.9 Anfragen von JSP-Seiten weiterleiten 510
A.16 HTML-Formulare verwenden 511
A.16.1 Das FORM-Element 511
A.16.2 Textfelder 511
A.16.3 Passwortfelder 511
A.16.4 Textbereiche 511
A.16.5 Absenden-Schaltflächen 511
A.16.6 Andere Schaltflächen 511
A.16.7 Zurücksetzen-Schaltflächen 512
A.16.8 Andere Zurücksetzen-Schaltflächen 512
A.16.9 JavaScript-Schaltflächen 512
A.16.10 Andere JavaScript-Schaltflächen 512
A.16.11 Kontrollkästchen 512
A.16.12 Ein/Ausschalter 512
A.16.13 Comboboxen 512
A.16.14 Fenster zum Laden von Dateien 513
A.16.15 Server-seitige Imagemaps 513
A.16.16 Verborgene Felder 513
A.16.17 Funktionen des Internet Explorer 513
A.17 Applets als Frontend für Servlets 513
A.17.1 GET-Daten senden und die Resultate im Browser anzeigen lassen 513
A.17.2 GET-Daten senden und die Ergebnisse direkt verarbeiten (HTTP-Tunneling) 513
A.17.3 Serialisierte Daten senden: Der Applet-Code 514
A.17.4 Serialisierte Daten senden: Der Servlet-Code 515
A.17.5 POST-Daten senden und die Resultate direkt verarbeiten (HTTP Tunneling) 516
A.17.6 Den HTTP-Server umgehen 518
A.18 JDBC und Datenbankverbindungspools 518
A.18.1 Erste Schritte zur Nutzung von JDBC 518
A.18.2 Datenbankdienstprogramme 519
A.18.3 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 520
A.18.4 Schritte zur Implementierung von Verbindungspools 520
Stichwortverzeichnis 523
Über den Autor 18
Einführung 18
Echter Code für echte Programmierer 19
Aufbau dieses Buchs 20
Konventionen 23
Im Web 24
Teil I: Servlets 2.1 und 2.2 25
1 Überblick über Servlets und JavaServer Pages 27
1.1 Servlets 28
1.2 Vorzüge von Servlets gegenüber "traditionellem" CGI 29
1.2.1 Effizient 29
1.2.2 Praktisch 29
1.2.3 Mächtig 29
1.2.4 Portierbar 30
1.2.5 Sicher 30
1.2.6 Kostengünstig 30
1.3 JavaServer Pages 31
1.4 Vorteile von JSP 31
1.4.1 - gegenüber Active Server Pages (ASP) 31
1.4.2 - gegenüber PHP 31
1.4.3 - gegenüber reinen Servlets 32
1.4.4 - gegenüber Server-Side Includes (SSI) 32
1.4.5 - gegenüber JavaScript 32
1.4.6 - gegenüber statischem HTML 32
1.5 Installation und Setup 32
1.5.1 Servlet- und JSP-Software beschaffen 33
1.5.2 API-Dokumentation zu Servlets und JSP installieren oder mit Bookmark versehen 34
1.5.3 Klassen dem Java-Compiler gegenüber identifizieren 34
1.5.4 Klassen in ein Paket schnüren 35
1.5.5 Server konfigurieren 35
1.5.6 Server starten 37
1.5.7 Eigene Servlets kompilieren und installieren 37
2 Erste Servlets 39
2.1 Grundstruktur von Servlets 40
2.2 Ein einfaches Servlet, das einfachen Text generiert 41
2.2.1 Servlet kompilieren und installieren 42
2.2.2 Servlet aufrufen 43
2.3 Ein Servlet, das HTML generiert 43
2.4 Servlet-Pakete 45
2.4.1 Servlets in Paketen erstellen 46
2.4.2 Servlets in Paketen kompilieren 46
2.4.3 Servlets in Paketen aufrufen 48
2.5 Dienstprogramme, die beim Erstellen von HTML helfen 48
2.6 Lebenszyklen von Servlets 51
2.6.1 Die init-Methode 51
2.6.2 Die service-Methode 53
2.6.3 Die Methoden doGet, doPost und doXxx 54
2.6.4 Das Interface SingleThreadModel 54
2.6.5 Die destroy-Methode 55
2.7 Ein Beispiel mit Initialisierungsparametern 55
2.8 Ein Beispiel mit Servlet-Initialisierungs- und Seitenänderungs-Daten 59
2.9 Fehlerbehebung in Servlets 64
2.10 WebClient: interaktive Kommunikation mit Webservern 65
2.10.1 WebClient 66
2.10.2 HttpClient 69
2.10.3 NetworkClient 70
2.10.4 SocketUtil 72
2.10.5 CloseableFrame 73
2.10.6 LabeledTextField 74
2.10.7 Interruptible 75
3 Client-Anfragen handeln: Formulardaten 77
3.1 Die Rolle der Formulardaten 78
3.2 Formulardaten aus Servlets lesen 78
3.3 Beispiel: Drei explizite Parameter lesen 79
3.4 Beispiel: Alle Parameter lesen 82
3.5 Ein Dienst zum Versenden von Bewerbungen 86
3.6 Zeichenketten nach HTML-Zeichen filtern 97
3.6.1 Code zum Filtern 98
3.6.2 Beispiel 100
4 Client-Anfragen handeln: HTTP-Anfrage -Header 103
4.1 Anfrage-Header von Servlets lesen 104
4.2 Alle Header ausgeben 105
4.3 Anfrage-Header bei HTTP 1.1 108
4.4 Komprimierte Webseiten senden 112
4.5 Zugriff auf Webseiten beschränken 115
5 Zugriff auf CGI-Standardvariablen 121
5.1 Servlet-Entsprechungen der CGI-Variablen 122
5.2 Ein Servlet, das CGI-Variablen zeigt 124
6 Server-Antwort generieren: HTTP-Statuscodes 127
6.1 Statuscodes spezifizieren 128
6.2 HTTP 1.1-Statuscodes und ihr Zweck 130
6.3 Ein Frontend für diverse Suchmaschinen 137
7 Server-Antwort generieren: HTTP- Antwort-Header 145
7.1 Antwort-Header von Servlets aus setzen 146
7.2 HTTP 1.1-Antwort-Header und ihre Bedeutung 147
7.3 Persistenter Servlet-Zustand und automatisches Neuladen von Seiten 154
7.4 Persistente HTTP-Verbindungen nutzen 164
7.5 Mit Servlets GIF-Bilder generieren 168
8 Mit Cookies arbeiten 179
8.1 Vorteile von Cookies 180
8.1.1 Nutzer bei einer E-Commerce-Sitzung identifizieren 180
8.1.2 Eingabe von Benutzernamen und Passwort vermeiden 180
8.1.3 Website anpassen 181
8.1.4 Gezielt werben 181
8.2 Probleme mit Cookies 181
8.3 Das Cookie-API von Servlet 182
8.3.1 Cookies erzeugen 183
8.3.2 Cookie-Attribute 183
8.3.3 Cookies in Antwort-Header einfügen 185
8.3.4 Cookies vom Client lesen 185
8.4 Beispiele: Cookies setzen und lesen 185
8.5 Dienstprogramme für Cookies 189
8.5.1 Cookies mit angegebenen Namen finden 189
8.5.2 Langlebige Cookies erzeugen 190
8.6 Ein selbst definiertes Suchmaschinen-Interface 190
9 Sitzungs-Tracking 197
9.1 Sitzungs-Tracking ist notwendig 198
9.1.1 Cookies 198
9.1.2 URL-Rewriting 199
9.1.3 Verborgene Formularfelder 199
9.1.4 Sitzungs-Tracking in Servlets 199
9.2 Das Sitzungs-Tracking-API 199
9.2.1 Das HttpSession-Objekt zur aktuellen Anfrage nachschauen 200
9.2.2 Informationen zu einer Sitzung nachschauen 200
9.2.3 Informationen mit einer Sitzung verbinden 202
9.2.4 Sitzungen beenden 203
9.2.5 An den Client gesendete URLs kodieren 203
9.3 Ein Servlet, das Zugriffszahlen pro Client anzeigt 204
9.4 Ein Online-Geschäft mit Einkaufskorb und Sitzungs-Tracking 207
9.4.1 Das Frontend 207
9.4.2 Bestellungen aufnehmen 211
9.4.3 Hinter den Kulissen: Implementierung der Waren im Einkaufskorb
und im Katalog 217
Teil II: JavaServer Pages 225
10 JSP-Scriptingelemente 227
10.1 Scriptingelemente 229
10.1.1 Template-Text 230
10.2 JSP-Ausdrücke 230
10.2.1 Vordefinierte Variablen 230
10.2.2 XML-Syntax für Ausdrücke 231
10.2.3 Ausdrücke als Attributwerte verwenden 231
10.2.4 Beispiel 232
10.3 JSP-Scriptlets 233
10.3.1 Mit Scriptlets Teile der JSP-Datei an Bedingungen knüpfen 236
10.3.2 Spezielle Scriptlet-Syntax 236
10.4 JSP-Deklarationen 237
10.4.1 Spezielle Deklarationssyntax 238
10.5 Vordefinierte Variablen 238
11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 241
11.1 Das Attribut import 242
11.1.1 Verzeichnisse für selbst definierte Klassen 243
11.1.2 Beispiel 243
11.2 Das Attribut contentType 245
11.2.1 Dokumente mit einfachem Text erzeugen 246
11.2.2 Excel-Tabellenkalkulationen generieren 246
11.3 Das Attribut isThreadSafe 250
11.4 Das Attribut session 252
11.5 Das Attribut buffer 252
11.6 Das Attribut autoflush 252
11.7 Das Attribut extends 252
11.8 Das Attribut info 253
11.9 Das Attribut errorPage 253
11.10 Das Attribut isErrorPage 253
11.11 Das Attribut language 256
11.12 XML-Syntax für Direktiven 256
12 Dateien und Applets in JSP-Dokumente einbinden 257
12.1 Dateien zur Seiten-Übersetzungszeit einbinden 258
12.2 Dateien zur Anforderungszeit einbinden 261
12.3 Applets für das Java-Plug-In einbinden 263
12.3.1 Das jsp:plugin-Element 264
12.3.2 Die Elemente jsp:param und jsp:params 266
12.3.3 Das jsp:fallback-Element 267
12.3.4 Beispiel: Schattierter Text 267
13 JavaBeans mit JSP verwenden 275
13.1 Grundlagen der Verwendung von Beans 277
13.1.1 Zugriff auf Bean-Eigenschaften 278
13.1.2 Bean-Eigenschaften setzen: Ein einfaches Fallbeispiel 278
13.1.3 Bean-Klassen installieren 279
13.2 Beispiel: StringBean 280
13.3 Bean-Eigenschaften festlegen 282
13.3.1 Einzelne Eigenschaften mit Eingabeparametern verbinden 286
13.3.2 Automatische Typkonvertierungen 287
13.3.3 Sämtliche Eigenschaften mit Eingabeparametern verbinden 288
13.4 Beans gemeinsam nutzen 290
13.4.1 Beans bedingt erzeugen 291
14 JSP-Tag-Bibliotheken selbst definieren 295
14.1 Komponenten einer Tag-Bibliothek 296
14.1.1 Die Tag-Handler-Klasse 297
14.1.2 Die Descriptordatei der Tag-Bibliothek 297
14.1.3 Die JSP-Datei 299
14.2 Ein einfaches Tag definieren 300
14.2.1 Die Tag-Handler-Klasse 300
14.2.2 Die Tag-Bibliothek-Descriptordatei 302
14.2.3 Die JSP-Datei 303
14.3 Tag-Attribute zuweisen 304
14.3.1 Die Tag-Handler-Klasse 304
14.3.2 Die Descriptordatei der Tag-Bibliothek 306
14.3.3 Die JSP-Datei 307
14.4 Den Rumpf des Tag einbinden 308
14.4.1 Die Tag-Handler-Klasse 308
14.4.2 Die Descriptordatei zur Tag-Bibliothek 311
14.4.3 Die JSP-Datei 312
14.5 Den Tag-Rumpf optional einbinden 313
14.5.1 Die Tag-Handler-Klasse 314
14.5.2 Die Descriptordatei zur Tag-Bibliothek 314
14.5.3 Die JSP-Datei 315
14.6 Den Tag-Rumpf manipulieren 317
14.6.1 Die Klasse Tag-Handler 317
14.6.2 Die Descriptordatei der Tag-Bibliothek 319
14.6.3 Die JSP-Datei 319
14.7 Den Tag-Rumpf mehrmals einbinden oder manipulieren 321
14.7.1 Die Tag-Handler-Klasse 321
14.7.2 Die Descriptordatei der Tag-Bibliothek 322
14.8 Geschachtelte Tags 324
14.8.1 Die Tag-Handler-Klassen 325
14.8.2 Die Descriptordatei der Tag-Bibliothek 330
14.8.3 Die JSP-Datei 332
15 Servlets und JSP integrieren 335
15.1 Anfragen weiterleiten 336
15.1.1 Statische Ressourcen verwenden 337
15.1.2 Daten an die Zielseiten liefern 338
15.1.3 Relative URLs in der Zielseite interpretieren 339
15.1.4 Alternative Beschaffung eines RequestDispatcher 340
15.2 Beispiel: Ein Online-Reisebüro 340
15.3 Statischen oder dynamischen Inhalt einbinden 356
15.4 Beispiel: Rohausgabe von Servlet und JSP anzeigen 357
15.5 Anfragen von JSP-Seiten aus weiterleiten 361
Teil III: Unterstützende Technologien 363
16 HTML-Formulare verwenden 365
16.1 Datenübermittlung mit HTML-Formularen 366
16.2 Das FORM-Element 370
16.3 Texteingabeelemente 375
16.3.1 Textfelder 375
16.3.2 Passwortfelder 376
16.3.3 Textbereiche 377
16.4 Schaltflächen 379
16.4.1 Absenden-Schaltflächen 379
16.4.2 Zurücksetzen-Schaltflächen 382
16.4.3 JavaScript-Schaltflächen 383
16.5 Kontrollkästchen und Ein/Ausschalter 383
16.5.1 Kontrollkästchen 383
16.5.2 Ein/Ausschalter 385
16.6 Comboboxen und Listenfelder 386
16.7 Fenster zum Laden von Dateien 389
16.8 Server-seitige Imagemaps 391
16.8.1 IMAGE - Server-seitige Standard-Imagemaps 391
16.8.2 ISMAP - Alternative, Server-seitige Imagemaps 392
16.9 Verborgene Felder 395
16.10 Elemente zusammenfassen 395
16.11 Die Tabulatorreihenfolge steuern 397
16.12 Ein Webserver zur Fehlerbehebung 398
16.12.1 EchoServer 399
16.12.2 ThreadedEchoServer 402
16.12.3 NetworkServer 404
17 Applets als Frontend für Servlets 407
17.1 Daten mit GET senden und die resultierende Seite anzeigen 408
17.2 Ein Suchmaschinen-Frontend für mehrere Systeme 409
17.3 Daten mit GET senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 413
17.3.1 Binärdaten oder ASCII-Daten lesen 413
17.3.2 Serialisierte Datenstrukturen lesen 414
17.4 Ein Anfragenfenster mit Objektserialisierung und HTTP-Tunneling 416
17.5 Daten mit POST senden und Ergebnisse direkt verarbeiten (HTTP-Tunneling) 423
17.6 Ein Applet, das POST-Daten sendet 426
17.7 Den HTTP-Server umgehen 432
18 JDBC und Datenbank verbindungspools 433
18.1 Erste Schritte der Verwendung von JDBC 435
18.1.1 Den Treiber laden 435
18.1.2 Die Verbindungs-URL definieren 436
18.1.3 Die Verbindung herstellen 436
18.1.4 Eine Anweisung erzeugen 437
18.1.5 Eine Abfrage ausführen 437
18.1.6 Die Ergebnisse verarbeiten 437
18.1.7 Die Verbindung schließen 438
18.2 Einfaches JDBC-Beispiel 439
18.3 Einige JDBC-Hilfsprogramme 444
18.4 Die Datenbankdienstprogramme anwenden 453
18.5 Ein interaktives Abfragefenster 458
18.5.1 Code des Abfragefensters 460
18.6 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 467
18.7 Verbindungspools 471
18.8 Verbindungspools: Eine Fallstudie 477
18.9 Verbindungspools gemeinsam nutzen 483
18.9.1 ServletContext zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
18.9.2 Singleton-Klassen zur gemeinsamen Nutzung von Verbindungspools einsetzen 484
A Kurzreferenz zu Servlets und JSP 487
A.1 Überblick über Servlets und JavaServer Pages 488
A.1.1 Vorteile von Servlets 488
A.1.2 Vorteile von JSP 488
A.1.3 Kostenlose Servlet- und JSP-Software 488
A.1.4 Dokumentation 488
A.1.5 Servlet-Kompilierung: CLASSPATH-Einträge 488
A.1.6 Tomcat 3.0-Standardverzeichnisse 489
A.1.7 Tomcat 3.1-Standardverzeichnisse 489
A.1.8 JSWDK 1.0.1-Standardverzeichnisse 489
A.1.9 Java Web Server 2.0-Standardverzeichnisse 489
A.2 Erste Servlets 489
A.2.1 Einfaches Servlet 489
A.2.2 Servlets installieren 490
A.2.3 Servlets aufrufen 490
A.2.4 Lebenszyklen von Servlets 490
A.3 Client-Anfragen behandeln: Formulardaten 491
A.3.1 Parameter lesen 491
A.3.2 Beispiel-Servlet 491
A.3.3 Beispiel-Formular 491
A.3.4 HTML-spezifische Zeichen herausfiltern 492
A.4 Client-Anfragen behandeln: HTTP-Anfrage-Header 492
A.4.1 Methoden zum Lesen von Anfrage-Headern 492
A.4.2 Weitere Anfragedaten 493
A.4.3 Anfrage-Header bei HTTP 1.1 493
A.5 Zugriff auf CGI-Standardvariablen 493
A.5.1 Fähigkeiten, die an anderer Stelle nicht behandelt werden 493
A.5.2 Servlet-Entsprechungen der CGI-Variablen 494
A.6 Server-Antwort generieren: HTTP-Statuscodes 494
A.6.1 Format einer HTTP-Antwort 494
A.6.2 Methoden zum Setzen von Statuscodes 494
A.6.3 Statuscode-Kategorien 495
A.6.4 HTTP 1.1-Statuscodes 495
A.7 Server-Antwort generieren: HTTP-Antwort-Header 495
A.7.1 Beliebige Header setzen 495
A.7.2 Gebräuchliche Header setzen 496
A.7.3 HTTP 1.1-Antwort-Header 496
A.7.4 GIF-Bilder von Servlets aus generieren 497
A.8 Mit Cookies arbeiten 497
A.8.1 Einsatz von Cookies 497
A.8.2 Probleme mit Cookies 497
A.8.3 Allgemeine Verwendung 497
A.8.4 Cookie-Methoden 498
A.9 Sitzungs-Tracking 498
A.9.1 Sitzungsdaten nachschlagen: getValue 498
A.9.2 Daten mit einer Sitzung verbinden: putValue 499
A.9.3 HttpSession-Methoden 499
A.9.4 URLs kodieren 500
A.10 JSP-Scriptingelemente 500
A.10.1 Scriptingelementetypen 500
A.10.2 Template-Text 501
A.10.3 Vordefinierte Variablen 501
A.11 Die JSP-Seitendirektive: Generierte Servlets strukturieren 501
A.11.1 Das import-Attribut 501
A.11.2 Das contentType-Attribut 501
A.11.3 Anwendungsbeispiel für contentType 502
A.11.4 Anwendungsbeispiel für setContentType 502
A.11.5 Das isThreadSafe-Attribut 502
A.11.6 Das session-Attribut 503
A.11.7 Das buffer-Attribut 503
A.11.8 Das autoflush-Attribut 503
A.11.9 Das extends-Attribut 503
A.11.10 Das info-Attribut 503
A.11.11 Das errorPage-Attribut 503
A.11.12 Das isErrorPage-Attribut 503
A.11.13 Das language-Attribut 504
A.11.14 XML-Syntax 504
A.12 Dateien und Applets in JSP-Dokumente einbinden 504
A.12.1 Dateien zur Seiten-Übersetzungszeit einbinden 504
A.12.2 Dateien zur Anforderungszeit einbinden 504
A.12.3 Applets für das Java-Plug-In: Einfacher Fall 504
A.12.4 Attribute von jsp:plugin 505
A.12.5 Parameter in HTML: jsp:param 505
A.12.6 Alternativer Text 506
A.13 JavaBeans mit JSP verwenden 506
A.13.1 Grundvoraussetzungen für eine Bean-Klasse 506
A.13.2 Grundlagen der Verwendung von Beans 506
A.13.3 Eigenschaften mit Anfrageparametern verbinden 506
A.13.4 Beans gemeinsam nutzen: Das scope-Attribut von jsp:useBean 507
A.13.5 Bedingte Erzeugung von Beans 507
A.14 JSP-Tag-Bibliotheken selbst definieren 507
A.14.1 Die Tag-Handler-Klasse 507
A.14.2 Die Descriptordatei der Tag-Bibliothek 508
A.14.3 Die JSP-Datei 508
A.14.4 Attribute Tags zuweisen 508
A.14.5 Den Tag-Rumpf einbinden 508
A.14.6 Den Tag-Rumpf optional einbinden 508
A.14.7 Den Tag-Rumpf manipulieren 509
A.14.8 Den Tag-Rumpf mehrfach einbinden oder manipulieren 509
A.14.9 Geschachtelte Tags 509
A.15 Servlets und JSP integrieren 509
A.15.1 Gesamtbild 509
A.15.2 Syntax für die Weiterleitung von Anfragen 509
A.15.3 Weiterleitung an normale HTML-Seiten 509
A.15.4 Global gemeinsam genutzte Beans einrichten 510
A.15.5 Sitzungs-Beans einrichten 510
A.15.6 Relative URLs in der Zielseite interpretieren 510
A.15.7 Alternative Erlangung eines RequestDispatcher (nur Version 2.2) 510
A.15.8 Statischen oder dynamischen Inhalt einbinden 510
A.15.9 Anfragen von JSP-Seiten weiterleiten 510
A.16 HTML-Formulare verwenden 511
A.16.1 Das FORM-Element 511
A.16.2 Textfelder 511
A.16.3 Passwortfelder 511
A.16.4 Textbereiche 511
A.16.5 Absenden-Schaltflächen 511
A.16.6 Andere Schaltflächen 511
A.16.7 Zurücksetzen-Schaltflächen 512
A.16.8 Andere Zurücksetzen-Schaltflächen 512
A.16.9 JavaScript-Schaltflächen 512
A.16.10 Andere JavaScript-Schaltflächen 512
A.16.11 Kontrollkästchen 512
A.16.12 Ein/Ausschalter 512
A.16.13 Comboboxen 512
A.16.14 Fenster zum Laden von Dateien 513
A.16.15 Server-seitige Imagemaps 513
A.16.16 Verborgene Felder 513
A.16.17 Funktionen des Internet Explorer 513
A.17 Applets als Frontend für Servlets 513
A.17.1 GET-Daten senden und die Resultate im Browser anzeigen lassen 513
A.17.2 GET-Daten senden und die Ergebnisse direkt verarbeiten (HTTP-Tunneling) 513
A.17.3 Serialisierte Daten senden: Der Applet-Code 514
A.17.4 Serialisierte Daten senden: Der Servlet-Code 515
A.17.5 POST-Daten senden und die Resultate direkt verarbeiten (HTTP Tunneling) 516
A.17.6 Den HTTP-Server umgehen 518
A.18 JDBC und Datenbankverbindungspools 518
A.18.1 Erste Schritte zur Nutzung von JDBC 518
A.18.2 Datenbankdienstprogramme 519
A.18.3 Vorbereitete Anweisungen (Vorkompilierte Abfragen) 520
A.18.4 Schritte zur Implementierung von Verbindungspools 520
Stichwortverzeichnis 523