8. Datenbanken im Internet Begriffe und Techniken Anwendungsszenarien Kopplungstechniken Zustandsrealisierung Applikationsserver VL Datenmanagement – 8–1 Begriffe Hypertext-Dokumente (HTML) mit Verweisen (Links) auf andere Objekte (Dokumente, Multimedia-Objekte) Von Web-Servern bereitgestellt Links: durch URL spezifiziert Web-Datei: einzelne Datei (mit einem HTTP-Request) Web-Seite: Menge von Web-Dateien (eine Nutzeraktion) Web-Site: Menge von Web-Seiten (ein Server) VL Datenmanagement – 8–2 Uniform Resource Locator Adresse einer Ressource im Web Format: <schema>:<schema spezifikation> <schema> Protokoll (http, news, mailto, telnet) Für HTTP Vollständig: http://<host >.<domain>:<port >/<path>/<filename> Relativ: <path>/<filename> Verweis in Dokument: . . . <path>/<filename>#<anchor > Funktionsaufruf: . . . <path>/<procname>?<params> VL Datenmanagement – 8–3 HTTP Einfaches Protokoll zum Datenaustausch auf Basis von TCP/IP Zustandsloses Protokoll: jede Anforderung ist unabhängig von allen anderen Methoden/Kommandos: GET: Holen einer Web-Seite HEAD: Holen der Header-Informationen POST: Senden von Daten (Bytestrom) zum Server VL Datenmanagement – 8–4 HTTP: Beispiel Anforderung an www.mitp.de: GET /index.html HTTP/1.0 Antwort: HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Fri, 02 Feb 2001 07:51:09 GMT Content-Type: text/html Accept-Ranges: bytes Last-Modified: Thu, 01 Feb 2001 15:33:35 GMT ETag: "4034757648cc01:441e" Content-Length: 31516 <html> <head> ... VL Datenmanagement – 8–5 MIME Multipurpose Internet Mail Extensions Spezifikation von Inhaltstypen von Emails, Web-Dokumenten Form <typ>/<subtyp> Wird als Antwort auf ein HTTP-GET vor dem Dokument geliefert (Content-Type) Typen: text, image, audio, video, application Bsp.: text/html, image/gif, application/postscript VL Datenmanagement – 8–6 HTML Hypertext Markup Language (Tim Berners-Lee, CERN 1990) Auszeichnungssprache des Web erfordert Browser zur Präsentationn strukturelle Bestandteile eines Dokumentes (Absätze, Überschriften, Listen usw.) Hypertext-Sprache: Verweise auf andere Dokumente, die vom Benutzer verfolgt werden können Weitere Elemente Interaktive Elemente (Formulare) Multimedia-Inhalte VL Datenmanagement – 8–7 Interaktion mit HTML Formular: Gruppe von Eingabemöglichkeiten Zurücksenden von Informationen an Web-Server erfordert interaktive Elemente (Textfelder, Schalter, ...) serverseitigen Mechanismus zur Verarbeitung Kommunikation zwischen Browser und Server (HTTP) Schnittstelle zwischen Server und Verarbeitungsmechanismus (CGI) VL Datenmanagement – 8–8 HTML: Formulare <form method=POST action="http://www.air-fun.de/cgi-bin/lookup"> Produkt: <input type="text" name="prodname"><br> Preis: <input type="text" name="prodpreis"><br> <input type="submit"> <input type="reset"> </form> VL Datenmanagement – 8–9 Anwendungsszenarien Web-Dienst als Informationssystem: Sammlung von statischen Web-Seiten Web-Dienst als Verteilungsmechanismus für Anwendungsfunktionen: Java-Applets Web-Dienst mit Schnittstelle zum Datenbanksystem: Generierung von Web-Seiten aus DB-Inhalten Web-Seiten im Datenbanksystem: LOBs bzw. eigene Datentypen für Speicherung von Seiten im DBS Komplette Web-Strukturen im Datenbanksystemen: Speicherung von Web-Strukturen (inkl. Links) VL Datenmanagement – 8–10 Web-Dienst mit Schnittstelle zum DBS WWW-Browser Internet / HTTP WWW-Server HTML HTML HTML CGI CGI select-from-where select-from-where DBMS VL Datenmanagement – 8–11 Web-Seiten im DBS WWW-Browser Internet / HTTP WWW-Server DBMS HTML HTML VL Datenmanagement – 8–12 Komplette Web-Strukturen im DBS WWW-Browser Internet / HTTP WWW-Server ODBMS + VL Datenmanagement – 8–13 Aufgaben und Anforderungen Aufruf „externer“ Programme mit Datenbankoperationen Parameterübergabe Client → Server → DB-Programm dynamische Generierung von Web-Dokumenten mit Ergebnissen von DB-Operationen Realisierung von Zuständen (Sitzungen, Transaktionen) VL Datenmanagement – 8–14 Common Gateway Interface (CGI) CGI: ursprüngliche Schnittstelle zwischen Web-Server und Programm zur Anbindung externer Quellen Gateway: Umformung einer Informationsquelle in ein Web-Dokument Programm/Skript zur Bearbeitung einer Dokumentenanforderung, das • HTML-Text, eine URL oder andere Daten liefert • in beliebiger Sprache implementiert ist VL Datenmanagement – 8–15 CGI: Prinzip (1) Anfrage Web-Browser Web-Server (5) HTML (4) HTML (2) CGI (3) CGI-Programm VL Datenmanagement – 8–16 Parameterübergabe Übergabe von Parametern an CGI-Programme durch Browser z.B. Inhalte von Formularelementen Methoden GET: durch Anhängen an URL • für wenige Parameter geeignet (Längenbegrenzung) • kann direkt mit URL angegeben werden • Parameter für Nutzer sichtbar POST: über Standardeingabe des CGI-Programms • für Nutzer nicht sichtbar • Parameter nicht Teil der URL VL Datenmanagement – 8–17 GET-Methode Parameteraufbau Trennung von URL durch ? Trennzeichen & Ersetzung von Leerzeichen durch + Umlaute durch Escape-Notation %hexwert Beispiel: Parameter: feld1: "Eins" feld2: "Zwei Drei" URL: http://host/cgi-prog?feld1=Eins&feld2=Zwei+Drei VL Datenmanagement – 8–18 POST-Methode Parameteraufbau wie bei GET-Methode Übergabe als Standardeingabe unbegrenzte Länge geeignet für große Datenmengen Beispiel (Eingabedatei): feld1=Eins&feld2=Zwei+Drei VL Datenmanagement – 8–19 Kommunikation CGI-Programm → Web-Server Erzeugung eines HTML-Dokumentes und Senden zur Standardausgabe HTML-Dokument muß Content Type enthalten Aufbau: Content-Type: text/html Leerzeile !!!! <html> ... </html> Umlenkung durch Senden einer neuen URL Location: URL Leerzeile !!!! VL Datenmanagement – 8–20 Kommunikation /2 Web-Server → CGI-Programm Umgebungsvariablen, die vor Ausführung des Programms vom Server initialisiert werden Variable Bedeutung + Beispiel REQUEST_METHOD REQUEST_HOST REMOTE_USER QUERY_STRING CONTENT_LENGTH CONTENT_TYPE Request-Methode: GET Host des Browsers: 141.44.45.32 Benutzername (nur bei Authentisierung) Anfrageparameter: p1=12&p2=abc Länge der Anfrageparameter: 20 Format der Anfrageparameter: application/x-www-form-urlencoded VL Datenmanagement – 8–21 CGI: Beispiel Bourne-Shell-Programm #!/bin/sh echo "Content-Type: text/html" echo "" echo "<html><body>Zugriff um = " date echo " von: " echo $REMOTE_HOST echo " mit Parametern: " echo $QUERY_STRING echo "</body></html>" VL Datenmanagement – 8–22 Weiterentwicklungen Probleme des CGI Performance: jeder Aufruf = Start eines neuen Prozesses Aufbau einer neuen DB-Verbindung Programm läuft unter UID des Web-Servers FastCGI „persistente“ Prozesse Interprozeßkommunikation zwischen Server und FastCGI-Prozeß Server-Erweiterungen Erweiterung als Programmbibliothek, die zum Server dynamisch gebunden wird (NSAPI, ISAPI) VL Datenmanagement – 8–23 Java Servlets Servlet = Java-Objekt, das im Kontext eines Web-Servers abläuft Alternative zu CGI verarbeitet Dokumentanforderungen liefert Dokumente als Ergebnis Unterstützung von Cookies Session-Management Ablauf direkt im Server (Java-WebServer) in separatem Prozeß (Servlet-Engines) VL Datenmanagement – 8–24 Java Servlets: Schnittstelle interface javax.servlet.Servlet void init (ServletConfig config) Initialisierung des Servlets (z.B. Öffnen benötigter Dateien, Öffnen einer Datenbank-Verbindung, . . . ) void destroy () Aufräumarbeiten (z.B. DB-Verbindung schließen, Daten speichern) void service (ServletRequest req, ServletResponse res) Bearbeitung der Anfrage (Parameterabfrage, Ergebnisgenerierung) VL Datenmanagement – 8–25 Beispiel-Servlet public class HelloServlet extends javax.servlet.GenericServlet { // Bearbeitung der Anforderung public void service (ServletRequest req, ServletResponse res) throws ServletException, IOException { // MIME-Typ des Antwortdokuments res.setContentType ("text/html"); // Ausgabestrom ServletOutputStream out = res.getOutputStream (); out.println ("Hello World !"); } } VL Datenmanagement – 8–26 Einbettung Einbettung von Kommandos (z.B. Datenbankoperationen) in HTML-Dokument Skriptsprachen wie Perl, Visual Basic, PHP, ... Kennzeichnung durch spezielle Tags (z.B. <% . . . %>) Verarbeitung Parsen des Dokumentes vor Auslieferung Intepretieren der Kommandos in Tags Ersetzen durch Ergebnis der Ausführung VL Datenmanagement – 8–27 Einbettung: Prinzip <html> <body> <? query_db () ?> </body> </html> SkriptInterpreter <html> <body> <table> <tr> ... </tr> </table> </body> </html> VL Datenmanagement – 8–28 Einbettung mit PHP PHP: Skriptsprache für server-seitige Einbettung in HTML Features C-ähnliche Syntax, objektorientierte Konzepte einfache Verarbeitung von Dokumentanforderung dynamische Generierung von HTML-Dokumenten Schnittstellen zu vielen Systemfunktionen und DBMS Prinzip <html><body> <?php echo "Hello World !" ?> </body></html> VL Datenmanagement – 8–29 Einbettung mit PHP Einbindung externer Dateien (z.B. HTML-Vorlagen) require ’dateiname’ Einfügen des Inhaltes include ’dateiname’ Einfügen und Auswerten Verarbeitung von Formularen Auswertung der Umgebungsvariablen durch PHP-Interpreter Zugriff auf Werte der Felder: Variablen mit Elementnamen Beispiel: HTML: <input type="text" name="var" > PHP: $var VL Datenmanagement – 8–30 PHP-Beispiel: Formular <form method=POST action="/path/query.php3"> <input type="text" name="autor"> <input type="submit"> </form> VL Datenmanagement – 8–31 PHP-Beispiel: PHP-Skript <html><body> <table border=1> <tr><th>Autor</th><th>Titel</th><th>Preis</th></tr> <?php if (isset($author)) { $query = "SELECT autor, titel, preis FROM " . "buch WHERE autor like=’%$author%’"; mysql_connect ($host, $user, $passwd); mysql_select_db ("my_db"); $result = mysql_query ($query); while ($row = mysql_fetch_row ($result)) { echo "<tr><td>$row[0]</td><td>$row[1]</td>"; echo "<td>$row[2]</td></tr>"; } }?> </table></body></html> VL Datenmanagement – 8–32 Java Server Pages Java-Quelltext in HTML Integration von Java-Komponenten (Beans) Prinzip basierend auf Servlets Compilieren des eingebetteten Codes: → Generierung eines Servlet bei wiederholter Anforderung: → Nutzung des compilierten Servlets Vorteil: Performance VL Datenmanagement – 8–33 Java Server Pages Zugriff auf vollständigen Java-Sprachumfang implizite Objekte (Requests, Sessions) Server-Page Übersetzungseinheit: HTML + Scriptlets (eingebetteter Java-Code) + eingebundene Dateien (über include-Direktive) Markierung in HTML-Seite <% ...%> VL Datenmanagement – 8–34 JSP: Syntax Include-Direktiven <%@ include file="relativeURL" %> Deklarationen (Variablen, Methoden) <%! String printMessage (String s) { return "ERROR: " + s; } %> <%! int var = 0; %> Expressions (Ausdrücke): Einfügen von Werten <%= output %> <%= Math.sqrt (2) %> VL Datenmanagement – 8–35 Makroprogrammierung HTML-Schablone <html> <body> <table> <tr> ... </tr> </table> </body> </html> <html> <body> <% Makro %> </body> </html> Makro SELECT * FROM tabelle MakroProzessor VL Datenmanagement – 8–36 Internet Database Connector (IDC) Einfache Erweiterung für MS Internet Information Server auf Basis von ODBC stark eingeschränkte Skriptsprache kaum Anwendungslogik implementierbar wenig Kontrolle über Ausgabe einfach anwendbar Prinzip idc-Datei mit DB-Operationen htx-Datei mit HTML-Templates VL Datenmanagement – 8–37 IDC: Aufbau der idc-Datei beinhaltet ODBC-Datenquelle (Datasource) Verweis auf HTML-Template (Template) Anfragen (SQLStatement) SQLStatement mit Anfrageparametern (Wert eines Formularelementes) SQLStatement: + SELECT autor, titel, preis + FROM buch + WHERE autor=<%autor%>; VL Datenmanagement – 8–38 IDC: Aufbau der htx-Datei Vorlage für HTML-Seiten mit Anfrageergebnissen bestehend aus Kopf-, Fußbereich (unabhängig vom Ergebnis) Detailbereich (in Abhängigkeit vom Ergebnis: Wiederholung für jedes Ergebnistupel) • Kennzeichnung des Detailbereiches <%begindetail%> <%enddetail%> • Kennzeichnung der Ergebnisdaten <%attribut%> VL Datenmanagement – 8–39 IDC: Aufbau der htx-Datei Beispiel: <table border=1> <tr><th>Autor</th><th>Titel</th> <th>Preis</th></tr> <%begindetail%> <tr><td><%autor%></td> <td><%titel%></td> <td><%preis%></td> </tr> <%enddetail%> </table> VL Datenmanagement – 8–40 IDC: Kontrollstrukturen Unterstützung bedingter Ausführung durch if...else...endif spezielle Tags: <%if bedingung %> HTML [ <%else%> HTML ] <%endif%> Bedingungen mit Operatoren EQ, LT, GT, CONTAINS Variablen: Ergebnisdaten, Servervariablen, spezielle Variablen (CurrentRecord, MaxRecords) VL Datenmanagement – 8–41 IDC: Aufruf Aufruf der IDC-Skripte wie CGI-Programme als URL im ACTION-Attribut eines Formulars <form method=post action="/shop/query.idc"> ... <input type="text" name="autor"> <input type="submit> </form> VL Datenmanagement – 8–42 Vergleich und Bewertung Programmierschnittstellen Vorteile Performance Codegröße Optimierbarkeit für konkrete Anforderungen Nachteile unflexibel (u.U. Neuübersetzung bei Änderungen) Aufwand: • neues Programm für jedes Problem • Generierung von HTML Performance bei CGI VL Datenmanagement – 8–43 Vergleich und Bewertung Einbettung Vorteile Lesbarkeit durch Plazierung von SQL-Anweisungen an die spätere Position der Daten Erstellung und Wartung mit HTML-Wekzeugen möglich eine gemeinsame Datei Nachteile bei größeren Projekten unübersichtlich durch Mischung von HTML und SQL Performanceprobleme durch Parsen und Interpretieren von eingebetteten Anweisungen VL Datenmanagement – 8–44 Vergleich und Bewertung Makroprogrammierung Vorteile Bearbeitung von HTML-Dateien mit HTML-Werkzeugen möglich übersichtliche Spezifikation aller SQL-Anfragen Wiederverwendbarkeit von Anfragen und HTML-Templates schnelleres Parsen durch kleinere Dateien Nachteile schlechte Überschaubarkeit durch Verteilung auf mehrere Dateien mehrere Dateizugriffe notwendig VL Datenmanagement – 8–45 Realisierung von Zuständen Problem: Zustandslosigkeit von HTTP im Normalfall: Anforderung = 1. Aufbau der DB-Verbindung 2. Ausführung der Anfrage 3. Abbruch der Verbindung keine Sitzung mit mehreren Verarbeitungsschritten möglich (Transaktionskonzept) potentiell paralleler Zugriff vieler Nutzer VL Datenmanagement – 8–46 Realisierung von Zuständen Aufgabe: server-seitige „Speicherung“ des Kontextes (Zustandes) des Clients → Session-ID Verfahren: URL-Kodierung Formularvariable Cookies HTTP-Authentisierung notwendig: Timeout-Mechanismen für Sitzungsende und Freigabe belegter Ressourcen VL Datenmanagement – 8–47 URL-Kodierung Übergabe der Session-ID als Teil der URL explizite Kodierung als Parameter (GET-Request) Beispiel: http://bookshop.com/buy?session=42 server-seitige Behandlung wie Formularvariable Kodierung in Pfad Beispiel: http://bookshop.com/42/daten.html bei relativer Adressierung kein weiterer Aufwand zur Generierung Vorteil: Browser-unabhängig Problem: Initialisierung VL Datenmanagement – 8–48 Formularvariable Speichern der Session-ID in einem (versteckten) Formularelement <input type="hidden" name="session" value="42"> Übergabe des Wertes mit HTTP-Request Sitzungsmanagement Auslesen des Feldwertes Erzeugen eines neuen Feldes mit aktuellem Wert für Folgeseiten Vorteil: Browser-unabhängig Probleme: Im HTML-Quelltext sichtbar, dynamische Generierung der Folgeseiten notwendig VL Datenmanagement – 8–49