CGI und HTML |
|
Die CGI-Schnittstelle |
|
CGI (Common Gateway Interface) erlaubt es einem WWW-Browser, über einen WWW-Server Programme auszuführen. Solche Programme (oder Scripts) können beispielsweise Formulareingaben aus HTML-Dateien verarbeiten, auf dem Server-Rechner Daten speichern und dort gespeicherte Daten auslesen. Auf diese Weise werden WWW-Seiten zu Oberflächen für "Anwendungen", beispielsweise für elektronische Warenbestellung oder zum Abfragen von Datenbanken.
Die sogenannte CGI-Schnittstelle steht zur Verfügung, wenn ein WWW-Server installiert ist, der CGI unterstützt. Sie können sich selbst auf Ihrem PC lokal einen WWW-Server einrichten, um dort eine CGI-Schnittstelle zur Verfügung zu haben. Wenn Sie bei einem Provider auf einem öffentlichen WWW-Server im Internet Speicherplatz für eigene WWW-Seiten erhalten, können Sie die CGI-Schnittstelle dieses WWW-Servers benutzen, um eigene CGI-Scripts im WWW einzusetzen. Ihr Provider muß Ihnen allerdings den Zugriff auf die CGI-Schnittstelle ermöglichen. Fragen Sie den Provider im Zweifelsfall danach!
Die CGI-Schnittstelle besteht aus:
Derzeit liegt die CGI-Schnitstellendefinition in der Version 1.1 vor. Neue, andere Schnittstellen für ausführbare Programme im WWW, die von kommerziellen Herstellern wie Netscape oder Microsoft eingeführt wurden, machen der klassischen CGI-Schnittstelle jedoch zunehmend Konkurrenz. Von Netscape stammt beispielsweise die API-Schnittstelle, von Microsoft die ISAPI-Schnittstelle. Beide Schnittstellen sind für die Server-Software-Produkte der jeweiligen Hersteller optimiert. Dabei wird allerdings auch eine Performance bei der Datenverarbeitung im WWW erreicht, die ein Mehrfaches der CGI-Schnittstelle beträgt. Ein entscheidender Vorteil der CGI-Schnittstelle bleibt jedoch die Tatsache, daß es sich - ähnlich wie bei HTML - um einen kommerziell unabhängigen, kostenlosen, produktübergreifenden Standard handelt.
Perl ist noch immer die meistbenutzte Programmiersprache für CGI-Scripts. Der Grund dafür ist, daß Perl sehr mächtige Funktionen besitzt, z.B. für Zeichenkettenoperationen oder für das Lesen und Schreiben von Daten. Der Perl-Interpreter, der zum Ausführen eines Perl-Scripts erforderlich ist, ist für fast alle Betriebssysteme als Freeware verfügbar und auf fast allen Server-Rechnern im WWW installiert (siehe auch Perl einrichten).
Wenn Sie in einer anderen Programmiersprache, z.B. in C, Pascal oder Fortran, bereits viel Erfahrung haben, können Sie auch diese Sprachen für CGI-Programme verwenden. Das Problem bei diesen Sprachen ist, daß der damit erstellte Code erst ausführbar ist, nachdem er für die Betriebssystemumgebung compiliert und gelinkt wurde, unter der er ausführbar sein soll. Wenn Sie beispielsweise ein C-Programm schreiben und dieses Programm als CGI-Programm im WWW auf einem Server-Rechner mit Unix-Betriebssystem zum Einsatz bringen wollen, muß das Programm unter Unix compiliert werden. Ein C-Compiler, den Sie vielleicht auf Ihrem DOS/Windows-PC haben, nutzt Ihnen da nichts.
In diesem Abschnitt wird vorausgesetzt, daß Sie mit HTML vertraut sind und sich auch über grundsätzliche Abläufe bei der CGI-unterstützten Kommunikation zwischen WWW-Browser und Server-Rechner im klaren sind. Lesen Sie dazu vor allem den Abschnitt CGI (Common Gateway Interface) in der Einführung zu diesem Dokument.
HTML und CGI kommunizieren in beide Richtungen: es ist einerseits möglich, aus einer HTML-Datei, die gerade am Bildschirm angezeigt wird, ein CGI-Script aufzurufen; anderseits kann ein CGI-Script HTML-Code an den WWW-Browser übertragen, den dieser dann am Bildschirm ausgibt.
Ein CGI-Script kann Daten verarbeiten, die von einer HTML-Datei aus beim Aufruf übergeben werden. Zum Beispiel kann ein CGI-Script eine Datenbank durchsuchen, wobei der Anwender den Begriff, nach dem gesucht werden soll, in einem Formular angegeben hat. Die Ergebnisse einer Datenverarbeitung kann ein CGI-Script an den WWW-Browser in Form von HTML-Code zurücksenden. So kann ein Script, das eine Datenbank nach Begriffen durchsucht, zum Beispiel die Suchtreffer eines Suchvorgangs in Form einer dynamisch generierten HTML-Datei an den WWW-Browser zurücksenden.
CGI-Scripts können auch Daten auf dem Server speichern und zu einem späteren Zeitpunkt auslesen. Auf diesem Prinzip basieren beispielsweise Gästebücher oder Nachrichtenforen (Bulletin-Boards). Ein Anwender kann in einer HTML-Datei in einem Formular einen Beitrag eingeben. Beim Absenden des Formulars wird ein CGI-Script aufgerufen, das den Beitrag in einer Datei speichert. Ein zweites CGI-Script oder ein anderer Aufruf des CGI-Scripts kann anschließend HTML-Code mit allen gespeicherten Beiträgen an einen WWW-Browser übertragen.
Ein CGI-Script kann aus einer HTML-Datei heraus auf verschiedene Arten aufgerufen werden:
Anzeigebeispiel: So sieht's aus
Das Beispiel bewirkt einen einfachen CGI-Vorgang, der die Wechselwirkung zwischen HTML und CGI verdeutlicht: in einer HTML-Datei kann der Anwender in einem Formular seinen Namen und einen Kommentartext eingeben. Wenn er das Formular absendet, wird ein CGI-Programm comments.pl aufgerufen. Dieses Script ist in Perl geschrieben. Es liest die ankommenden Formulardaten ein, splittet sie in ihre Bestandteile auf und erzeugt eine vollständige HTML-Datei, in der es die eingelesenen Daten ausgibt. Der WWW-Browser zeigt diesen von comments.pl generierten HTML-Code am Bildschirm an. Studieren Sie das Beispiel in Ruhe und verzweifeln Sie nicht gleich an dem Perl-Programmcode!
<html> <head> <title>Kommentarseite</title> </head> <body> <h1>Ihr Kommentar</h1> <form action="/cgi-bin/comments.pl" method=post> Name: <input size=40 maxlength=40 name="AnwenderName"><br> Text: <textarea rows=5 cols=70 name="Kommentartext" wrap=virtual></textarea><p> <input type=submit value="Absenden"> </form> </body> </html> |
#!/usr/bin/perl read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); print "Content-type: text/html\n\n"; print "<html><head><title>CGI-Feedback</title></head>\n"; print "<body><h1>CGI-Feedback vom Programm <i>comments.pl</i></h1>\n"; @Formularfelder = split(/&/, $Daten); foreach $Feld (@Formularfelder) { ($name, $value) = split(/=/, $Feld); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; $Formular{$name} = $name; $Formular{$value} = $value; print "$Formular{$name} = $Formular{$value}", "<br>\n"; } print "</body></html>\n"; |
In der HTML-Datei wird ein Formular mit zwei Eingabefeldern definiert. Das erste Feld (<input size=40 maxlength=40 name="AnwenderName">) ist ein einzeiliges Eingabefeld, in dem der Anwender seinen Namen eingeben soll. Das zweite Feld (<textarea rows=5 cols=70 name="Kommentartext" wrap=virtual></textarea>) ist ein mehrzeiliger Eingabebereich, in dem der Anwender einen beliebigen Text eingeben kann. Durch Klicken auf den Absendebutton (<input type=submit value="Absenden">) wird das Formular abgesendet. Was mit den Formulardaten geschehen soll, ist im einleitenden Formular-Tag angegeben: mit der Angabe action="/cgi-bin/comments.pl" wird ein CGI-Script aufgerufen, das die abgesendeten Formulardaten verarbeiten soll. Die Daten werden dem CGI-Script mit method=post übergeben. Das bedeutet, das Script bekommt die Daten von der Standardeingabe als Parameter übergeben. Das ist genau so, wie wenn Sie ein Programm auf Ihrem Rechner mit einem Parameter, etwa dem Namen einer zu öffnenden Datei, aufrufen.
Im Perl-Script comments.pl, das im CGI-Verzeichnis liegt, werden die Daten der Standardeingabe mit der Anweisung read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); eingelesen. Anschließend beginnt das Programm mit dem Erzeugen der HTML-Datei, die es an den WWW-Browser zurücksendet. Dazu dienen die print-Anweisungen, die eine HTML-Datei mit den dafür üblichen Befehlen konstruieren. Unterbrochen wird die HTML-Ausgabe durch die Anweisung @Formularfelder = split(/&/, $Daten);. Diese Anweisung splittet die eingelesenen Daten nach Formularfeldern getrennt in einzelne Elemente auf. Innerhalb der darauffolgenden foreach-Schleife bearbeitet das Script die Daten. Die ziemlich kryptisch anmutenden Befehle dienen dazu, die übergebenen Daten in lesbaren Text umzuwandeln. Denn die Daten, die das Script empfangen hat, sind nach einer bestimmten Konvention kodiert - dem Mime-Type application/x-www-form-urlencoded. In diesem Kodierungstyp werden Leerzeichen und Satz- sowie Sonderzeichen durch hexadezimale Umschreibungen dargestellt (siehe auch Datenstrom bei Übertragung von Formulardaten). Nach der Dekodierung gibt das Perl-Script die Daten der einzelnen Formularfelder aus (wir befinden uns dabei immer noch im Erzeugen des HTML-Codes, der an den Browser zurückgesendet wird). Nach Beenden der foreach-Schleife endet das Perl-Script mit den abschließenden Befehlen zum Erzeugen der HTML-Datei.
Aus Sicht des Anwenders verschwindet nun die HTML-Datei mit dem Eingabeformular vom Bildschirm. Stattdessen baut der WWW-Browser eine neue Seite auf, die den von comments.pl erzeugten HTML-Code enthält.
Das obige Beispiel ist lediglich zur Veranschaulichung der Wechselbeziehung zwischen HTML und CGI gedacht. Wenn Sie sich bislang noch nie mit Perl beschäftigt haben und Ihnen das Perl-Script völlig unverständlich vorkommt, ist das ganz normal. Perl ist eine mächtige, aber ziemlich eigenwillige Programmiersprache. Auf die einzelnen Sprachelemente von Perl wird hier nicht näher eingegangen. Lesen Sie dazu den Abschnitt Perl Sprachelemente. Bevor Sie sich jedoch näher mit Perl beschäftigen, sollten Sie zuerst das Kapitel CGI und Perl: Voraussetzungen/Allgemeines durcharbeiten. Die dort vermittelten Kenntnisse benötigen Sie, um eigene CGI-Scripts erstellen zu können.
weiter: | WWW-Server lokal auf einem PC einrichten |
zurück: | Bilderbuch zum Umblättern |