SELFHTML

CGI und HTML

Informationsseite

nach unten Die CGI-Schnittstelle
nach unten CGI-Aufrufe aus HTML und HTML-Ausgabe über CGI
nach unten Beispiel für die Wechselwirkung zwischen HTML und CGI

 nach unten 

Die CGI-Schnittstelle

Die Seite CGI-Schnittstelle (Common Gateway Interface - Allgemeine Vermittlungsrechner-Schnittstelle) bietet eine Möglichkeit, Programme oder Scripts im Web bereitzustellen, die von HTML-Dateien aus aufgerufen werden und die selbst HTML-Code erzeugen und an einen Web-Browser senden können. Traditionell ist Seite Perl die Programmiersprache, die zum Erstellen von CGI-Scripts eingesetzt wird, es gibt aber auch eine ganze Reihe weiterer möglicher und effektiver Technologien.

Wenn Sie in einer anderen Programmiersprache als Perl, z.B. in C, Pascal oder Visual Basic, bereits viel Erfahrung haben, können Sie auch diese Sprachen für CGI-Programme verwenden. Das Problem bei diesen Sprachen ist, dass der damit erstellte Code erst ausführbar ist, nachdem er für die Betriebssystemumgebung, unter der er ausführbar sein soll, compiliert und gelinkt wurde. Wenn Sie beispielsweise ein C-Programm schreiben und dieses Programm als CGI-Programm im Web auf einem Server-Rechner mit Unix-Betriebssystem zum Einsatz bringen wollen, muss das Programm unter Unix compiliert werden. Ein C-Compiler, den Sie vielleicht auf Ihrem DOS-/Windows-System haben, nutzt Ihnen da nichts.

nach obennach unten

CGI-Aufrufe aus HTML und HTML-Ausgabe über CGI

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; andererseits kann ein CGI-Script HTML-Code an den Web-Browser übertragen, den dieser dann am Bildschirm ausgibt.

Ein CGI-Script kann Daten verarbeiten, die von einer HTML-Datei aus beim Aufruf übergeben wurden. Zum Beispiel kann ein CGI-Script eine Datenbank durchsuchen, wenn der Anwender einen Begriff, nach dem gesucht werden soll, in einem Formular angegeben hat. Die Ergebnisse einer Datenverarbeitung kann ein CGI-Script dem Web-Server übergeben, der sie dann in Form von HTML-Code an den aufrufenden Web-Browser zurücksendet. 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 Web-Browser ausliefern.

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 desselben CGI-Scripts kann anschließend HTML-Code mit allen gespeicherten Beiträgen zurückgeben.

Ein CGI-Script kann aus einer HTML-Datei heraus auf verschiedene Arten aufgerufen werden:

nach obennach unten

Beispiel für die Wechselwirkung zwischen HTML und CGI

Das folgende Beispiel erzeugt 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 aus, splittet sie in ihre Bestandteile auf und erzeugt eine vollständige HTML-Datei, in der es die eingelesenen Daten ausgibt. Der Web-Browser zeigt diesen von comments.pl generierten HTML-Code am Bildschirm an. Studieren Sie das Beispiel in Ruhe und verzweifeln Sie nicht an dem Perl-Programmcode (es geht nämlich auch einfacher als in diesem Beispiel gezeigt, das Beispiel dient nur dazu, zu zeigen, wie das CGI-Script an die Formulardaten kommt)!

Beispiel: HTML-Datei mit CGI-Aufruf

Beispiel-Seite Anzeigebeispiel: So sieht's aus (beim Absenden des Formulars ist eine Internet-Verbindung erforderlich)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Kommentarseite</title>
</head>
<body bgcolor="#E0E0E0">
<h1>Ihr Kommentar</h1>
<form action="http://de.selfhtml.org/cgi-bin/comments.pl" method="post">
<p>Name:<br><input type="text" name="AnwenderName" size="40" maxlength="40"></p>
<p>Text:<br><textarea rows="5" cols="50" name="Kommentartext"></textarea></p>
<p><input type="submit" value="Absenden"></p>
</form>
</body>
</html>

Beispiel: CGI-Script comments.pl mit HTML-Ausgabe

#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

read(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'});
my @Formularfelder = split(/&/, $Daten);
my ($Feld, $Name, $Wert);
my %Formular;
foreach $Feld (@Formularfelder) {
  (my $Name, my $Wert) = split(/=/, $Feld);
  $Wert =~ tr/+/ /;
  $Wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $Wert =~ s/</&lt;/g;
  $Wert =~ s/>/&gt;/g;
  $Formular{$Name} = $Wert;
 }
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>CGI-Feedback</title></head>\n";
print "<body><h1>CGI-Feedback vom Programm <i>comments.pl</i></h1>\n";
print "<p><b>Name:</b> $Formular{AnwenderName}</p>\n";
print "<p><b>Kommentartext:</b> $Formular{Kommentartext}</p>\n";
print "</body></html>\n";

Erläuterung:

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="50" name="Kommentartext"></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, als ob Sie ein Programm auf Ihrem Rechner mit einem Parameter, etwa dem Namen einer zu öffnenden Datei, aufrufen.

Mit der Anweisung read(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'}); werden im Perl-Script comments.pl, das im CGI-Verzeichnis liegt, die Daten der Standardeingabe ausgelesen.
Mit der Anweisung @Formularfelder = split(/&/, $Daten); splittet das Script die ausgelesenen 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, die mit dem MIME-Typ application/x-www-form-urlencoded gekennzeichnet wird. In diesem Kodierungstyp werden Leerzeichen und Satz- sowie Sonderzeichen durch hexadezimale Umschreibungen dargestellt (siehe auch Seite Datenstrom bei Übertragung von Formulardaten.

Nach der Dekodierungsarbeit beginnt das Script mit dem Erzeugen der HTML-Datei, die es an den Web-Browser zurücksendet. Dazu dienen die print-Anweisungen, die eine normale HTML-Datei konstruieren. Im Beispiel gibt das Perl-Script die Inhalte der beiden Formularfelder HTML-formatiert im Browser aus.

Aus Sicht des Anwenders verschwindet nun die HTML-Datei mit dem Eingabeformular vom Bildschirm. Stattdessen baut der Web-Browser eine neue Seite auf, die den von comments.pl erzeugten HTML-Code enthält.

Beachten Sie:

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. Es gibt auch Techniken wie das Seite CGI-Modul, das die Programmierung von CGI-Scripts in Perl erleichtert.

 nach oben
weiter Seite CGI-Scripts auf öffentlichem Webserver installieren
zurück Seite HTTP-Status-Codes
 

© 2005 Seite Impressum