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.