Java Grundlagen: JDBC, Servlets und I/O Streams
Eingeordnet in Informatik
Geschrieben am in
Deutsch mit einer Größe von 9,04 KB
Typen von JDBC-Treibern
Die JDBC-Spezifikation von Sun definiert vier verschiedene Arten von JDBC-Treibern (auch Brücken-Treiber genannt):
- Typ 1 (JDBC-ODBC Bridge Driver): Verwendet das System als Gateway oder Brücke. Ein Beispiel ist die JDBC-ODBC-Brücke. Dies ist nicht die beste Lösung, da oft spezielle Client-Software installiert werden muss und der Datenbankzugriff langsam ist.
- Typ 2 (Native API Driver): Enthält Java-Code, der Aufrufe an native Datenbankmethoden (in C oder C++) macht. Manchmal ist die Installation von Client-Software erforderlich.
- Typ 3 (Network Protocol Driver/Middleware): Kommuniziert über Sockets mit einem mittleren Application Server (Middleware). Vorteil: Es ist keine spezielle Software auf dem Client erforderlich.
- Typ 4 (Native Protocol Driver/Pure Java): Verwendet Netzwerkprotokolle, die im DBMS (Datenbankmanagementsystem) enthalten sind, und kommuniziert somit direkt über Java-Sockets mit der Datenbank. Dies ist die beste Lösung, da diese Treiber komplett in Java geschrieben sind. Die meisten dieser Treiber werden vom Hersteller Ihres DBMS bereitgestellt.
Die Methode createStatement() erzeugt einen offenen Kanal zur Ausführung von Abfragen.
Die Methode executeQuery() liefert ein ResultSet-Objekt, mit dem auf die zurückgegebenen Datensätze zugegriffen werden kann.
Servlets und JSPs
Voraussetzungen für die Ausführung von Servlets und JSPs
- Einen HTTP-Webserver (z. B. Apache HTTP Server oder IIS).
- Einen Server, der Servlets unterstützt (Servlet-Container).
- Die notwendigen Servlet-Klassen-Pakete:
javax.servletundjavax.servlet.http.
Eine Web-Anwendung ist eine Sammlung von Servlets, JSPs, Java-Klassen, Beschreibungsdateien, statischen Dokumenten (HTML, XHTML, Bilder usw.) und anderen Ressourcen. Diese können verpackt und auf verschiedenen Servern unterschiedlicher Hersteller ausgeführt werden. Eine Web-Anwendung definiert somit die Web-Schicht einer beliebigen Anwendung.
Der Container (oder Servlet-Container) beherbergt die Web-Applikation. Er stellt die Verzeichnisstruktur bereit, in der alle für die Ausführung der Anwendung benötigten Dateien abgelegt werden.
Der JSP-Entwicklungszyklus (drei Schritte)
JSP-Quellcode
Wird vom Programmierer oder JSP-Entwickler geschrieben. Er liegt in einer Textdatei mit der Endung .jsp vor und besteht aus einer Mischung von HTML, Java-Anweisungen, JSP-Direktiven und Aktionen, die beschreiben, wie eine Webseite als Reaktion auf eine Client-Anfrage aufgebaut werden soll.
Java-Quellcode
Der JSP-Container übersetzt den JSP-Quellcode in den Quellcode eines äquivalenten Java-Servlets. Dieser Quellcode wird in einem Arbeitsbereich gespeichert und kann für Debugging-Zwecke nützlich sein.
Kompilierte Java-Klasse
Wie jedes andere Java-Programm wird das erzeugte Servlet in Bytecode kompiliert, was zu einer .class-Datei führt, die vom Server geladen und ausgeführt werden kann.
Arten von JSP-Elementen
- Skripte (Scripting Elements), die unter anderem Ausdrücke und Scriptlets umfassen.
- Richtlinien (Directives).
- Aktionen (Actions).
Deklarationen (Declarations)
Eine Deklaration weist den Java-Interpreter an, neue Variablen oder Methoden in der generierten Klassendatei zu definieren. Die Syntax lautet:
<%! Deklaration; [Deklarationen, ... ]%>
Scriptlets
Ein Scriptlet ist eine Reihe von Java-Anweisungen oder -Ausdrücken, die in eine HTML-Seite eingebettet sind. Die Tags <% und %> signalisieren dem JSP-Interpreter, dass der gesamte Code innerhalb dieser Tags verarbeitet werden muss. Die Syntax ist:
<% Anweisung; [Anweisungen, ...]%>
Das Request-Objekt
Es ist eine Instanz von javax.servlet.ServletRequest und enthält Informationen, die vom Client über eine Webseite an den Server gesendet wurden. Zum Beispiel liefert die Methode getParameter() des Request-Objekts Werte, die über ein Formular oder eine URL übergeben wurden. So können wir den Wert und den Inhalt von Feldern in einem Webseitenformular abrufen, z. B.:
<%
String name = request.getParameter("name");
%>Java I/O Streams
Was ist ein Stream (Datenstrom)?
Ein Stream (Datenstrom) ist ein Kommunikationsmechanismus, der im java.io-Paket implementiert ist und dazu dient, Informationen auf verschiedenen Speichergeräten zu speichern und abzurufen.
Die Standard-Streams
Java verfügt, wie andere Programmiersprachen, über eigene Methoden zur Erfassung von Informationen über Standard-Ein- und Ausgabegeräte. Die Standard-Streams sind:
Eingabedatenstrom (Input Stream):
- Wird durch die Klasse
System.inrealisiert und empfängt oft Daten von der Tastatur. - Verwendet die Methode
read(), um Zeichen von der Tastatur zu lesen.
- Wird durch die Klasse
Ausgabedatenstrom (Output Stream):
- Wird durch die Klasse
System.outrealisiert und sendet Daten oft an den Bildschirm. - Verwendet die Methoden
print()undprintln()zur Bildschirmausgabe.
- Wird durch die Klasse
Fehlerdatenstrom (Error Stream):
- Wird durch die Klasse
System.errrealisiert. - Stellt sicher, dass die Ausgabe auf den Monitor umgeleitet wird, um Fehlermeldungen an den Benutzer zu senden.
- Wird durch die Klasse
Abstrakte Stream-Klassen in java.io
Java bietet zwei abstrakte Klassen zur Verwaltung des Datenflusses von entfernten Rechnern oder Dateien: java.io.InputStream und java.io.OutputStream.
Streams für den Dateizugriff
Diese Streams werden für das Lesen oder Schreiben von Dateien verwendet. In Java gibt es die Klasse FileInputStream für die Interaktion mit einem Kommunikationskanal zu einer Eingabedatei für unsere Anwendung und die Klasse FileOutputStream für eine Ausgabedatei.
Die Konstruktoren von FileInputStream und FileOutputStream akzeptieren als Parameter den Namen der zu lesenden oder zu schreibenden Datei. Es gibt zwei Varianten: eine, die ein Objekt vom Typ File erhält, und eine, die ein Objekt vom Typ FileDescriptor erhält. Wir betrachten die erste Alternative, da die File-Klasse für diesen Zweck verwendet wird.
Die Klasse File
Die File-Klasse wird verwendet, um die Interaktion unserer Programme mit dem Dateisystem zu kapseln. Mit der File-Klasse können wir nicht nur den Inhalt der Datei lesen (wie bei der FileInputStream-Klasse), sondern auch zusätzliche Informationen wie Dateigröße, Typ, Erstellungsdatum, Zugriffsrechte usw. abrufen.
Die Klasse DataOutputStream
Die Klasse DataOutputStream ist eine Erweiterung der OutputStream-Klasse und ermöglicht das Schreiben von "komplexen" Daten in einen Ausgabestream. Wenn wir von "komplexen" Daten sprechen, meinen wir primitive Datentypen, die nicht nur auf Bytes und Byte-Arrays beschränkt sind, wie es bei OutputStream der Fall ist.
Mit der Klasse DataOutputStream können Daten der Typen int, float, double, char usw. geschrieben werden. Wir können auch Objekte wie String-Daten in verschiedenen Formaten schreiben.
Die Klasse DataInputStream
Wenn wir formatierte Daten schreiben, müssen wir sie auch bequem lesen können. Dies wird durch die Klasse DataInputStream ermöglicht.
Die Klasse DataInputStream wurde entwickelt, um Daten zu lesen, die von einem DataOutputStream-Objekt erzeugt wurden. Die Spezifikation dieser Klasse stellt sicher, dass jede Datei, die von einem DataOutputStream geschrieben wurde, auf jeder Plattform und jedem Betriebssystem korrekt von einem DataInputStream lesbar ist, ohne sich Gedanken darüber machen zu müssen, ob die Maschinen "Little-Endian" oder "Big-Endian" sind.