Grundlagen der Java-Webentwicklung: JDBC, JSP-Objekte und I/O Streams

Eingeordnet in Informatik

Geschrieben am in Deutsch mit einer Größe von 6,71 KB

JDBC-Technologie

Diese Technologie ermöglicht es uns, mittels Java- oder JSP-Programmen Verbindungen zu einer Datenbank herzustellen und SQL-Anweisungen auszuführen, um Abfragen zu stellen. Diese Technologie wird ausführlich unter folgender Web-Adresse beschrieben: http://java.sun.com/jdbc/.

Die JDBC-API

Die JDBC-API ist eine Standard-Technologie von Sun, und ihre Verwendung ermöglicht es Entwicklern von Java- und JSP-Seiten, auf eine datenbankunabhängige Engine zuzugreifen.

Wichtige Merkmale der JDBC-API:

  • Möglichkeit zur Interaktion mittels SQL (Structured Query Language).
  • Einfacher Zugriff auf alle SQL-Funktionen.
  • SQL-Ergebnisse werden als Objekte behandelt, sodass Fehler als Ausnahmen verarbeitet werden können.

Die JDBC-API von Sun ist von der Philosophie des von Microsoft entwickelten ODBC-Standards (Open Database Connectivity) inspiriert. Diese Philosophie basiert auf der Schaffung eines Standards für die Datenbanknutzung mittels Java. Daher wurde eine Art Gateway oder Brücke zwischen JDBC und ODBC geschaffen. Diese Brücke ist für die transparente Umwandlung von JDBC-Aufrufen in ODBC-Aufrufe für den Programmierer verantwortlich. Die JDBC-ODBC-Brücke ist jedoch nicht die optimale Lösung, da der Konvertierungsprozess von einer API zur anderen zu einer geringeren Performance in Anwendungen führen kann, insbesondere bei umfangreichen Datenbankabfragen.

Typen von JDBC-Treibern

Die JDBC-Spezifikation von Sun definiert vier verschiedene Typen von JDBC-Treibern (auch Brücken-Treiber genannt):

  • Typ 1: JDBC-ODBC-Brücke

    Treiber, die das System als Gateway oder Brücke nutzen. Ein Beispiel ist die JDBC-ODBC-Brücke. Dies ist nicht die beste Lösung, da in vielen Fällen spezielle Client-Software installiert werden muss und der Datenbankzugriff langsam ist.

  • Typ 2: Native API-Treiber

    Diese Art von Treiber wird als native API bezeichnet. Der Treiber enthält Java-Code, der Aufrufe an die nativen Datenbankmethoden (in C oder C++) für den Datenbankzugriff tätigt. Manchmal ist es notwendig, Client-Software zu installieren, um diese Art von Treibern zu verwenden.

  • Typ 3: Netzwerkprotokoll-Treiber (Middleware)

    JDBC-Treiber dieses Typs kommunizieren über Sockets mit einem Application Server (Middleware), der die Anfragen des Client-Programms an eine spezielle Treiber-API weiterleitet. Diese Art von Treiber hat den Vorteil, dass keine Software auf dem Client installiert werden muss.

  • Typ 4: Native Protokoll-Treiber (rein Java)

    Treiber dieses Typs verwenden Netzwerkprotokolle, die im DBMS (Datenbankmanagementsystem) enthalten sind, und kommunizieren somit direkt mit der Datenbank, oft auch unter Verwendung von Java-Sockets. Dies ist die beste Lösung, da diese Treiber vollständig in Java geschrieben sind. Die meisten dieser Treiber werden vom Hersteller Ihres DBMS bereitgestellt.

Implizite JSP-Objekte

Es gibt einige implizite oder eingebettete Objekte, die JSP-Entwicklern jederzeit zur Verfügung stehen. Eine Instanziierung ist nicht erforderlich, da sie vom JSP-Container bereitgestellt werden. Diese Objekte vereinfachen die JSP-Programmierung.

Das page-Objekt

Es ist eine Instanz der Klasse java.lang.Object und sein Anwendungsbereich ist vom Typ Seite. Es repräsentiert die aktuelle JSP-Seite, d.h. eine Instanz der Klasse, die von der JSP-Seite generiert wird. Um auf diese JSP-Seite zu verweisen, wird das Schlüsselwort this verwendet.

Das config-Objekt

Es ist eine Instanz der Klasse javax.servlet.ServletConfig und verwaltet alle Aspekte der Servlet-Konfiguration, die durch die JSP-Seite generiert wurden. Sein Anwendungsbereich ist vom Typ Seite.

Das request-Objekt

Es ist eine Instanz von javax.servlet.ServletRequest und enthält Informationen, die ü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 aus einem Webseitenformular abrufen, z.B.:

<%
String name = request.getParameter("name");
%>

Das session-Objekt

Es ist eine Instanz der Klasse javax.servlet.http.HttpSession. Die Aufgabe dieses Objekts ist es, alle Aktivitäten im Zusammenhang mit der Benutzersitzung zu verwalten; sein Anwendungsbereich ist vom Typ Sitzung. Eine Sitzung wird automatisch erstellt (sofern nicht anders angegeben), wenn ein Benutzer eine JSP-Seite aufruft, und ermöglicht es uns, Informationen über den Benutzer zu speichern.

Wenn wir beispielsweise ein Objekt in der Session speichern und später wiederherstellen möchten:

<%
HttpSession unaSesion = request.getSession();
unaSesion.setAttribute("user", "pancho_lopez");
%>

Das application-Objekt

Es ist eine Instanz der Klasse javax.servlet.ServletContext und sein Anwendungsbereich ist vom Typ Anwendung. Es repräsentiert die Webanwendung, in der die JSP ausgeführt wird.

Java I/O Streams (Flows)

Das einfachste Modell eines Algorithmus besteht aus drei Phasen: Datenerfassung, -verarbeitung und -ausgabe. Input/Output (I/O) ist ein grundlegender Aspekt der Computerwissenschaft. Der Computer wäre nicht sehr sinnvoll, wenn er keine Daten von der Außenwelt empfangen und berechnete Daten präsentieren könnte.

Was ist ein Stream?

Ein Stream ist ein im java.io-Paket entwickeltes Kommunikationssystem, das Informationen in verschiedenen Speichergeräten speichern und abrufen kann. Wir können uns einen Stream wie eine Röhre vorstellen, durch die wir Bytes lesen und schreiben können. Es ist unerheblich, was sich am anderen Ende der Röhre befindet: Es kann eine Tastatur, ein Monitor, eine Datei, ein Prozess, eine TCP/IP-Verbindung oder ein Java-Objekt sein.

Alle Stream-Operationen in Java sind im Paket java.io enthalten und basieren auf zwei allgemeinen abstrakten Klassen: java.io.InputStream für Eingabeströme (aus denen wir lesen) und java.io.OutputStream für Ausgabeströme (in die wir schreiben).

Diese Streams können verschiedene Quellen haben (eine Datei, ein TCP-Socket usw.), aber sobald wir eine Referenz darauf haben, arbeiten wir immer auf die gleiche Weise: Daten lesen mit den Methoden der read()-Familie oder Daten schreiben mit den write()-Methoden.

Verwandte Einträge: