Servlets und CGI

Die Speicherung von statischen Daten in Form von HTML-Seiten und die kontinuierliche Aktualisierung dieser Daten reicht heutzutage nicht mehr aus, um die vielfältigen Bedürfnisse der Web-Anwender zu befriedigen. Neben statischen Webseiten besteht ein enormer Bedarf an dynamischen Seiten, deren Inhalte dynamisch on the fly durch eine auf dem WWW-Server implementierte Anwendungslogik generiert werden.

Zur Erstellung derartiger dynamischer Seiten existieren verschiedene Techniken. Diese Techniken werden unter dem Begriff Server-Side-Scripting zusammengefasst. Der Grund dieser Bezeichnung liegt darin, dass viele Techniken zur Erzeugung dynamischer Seiten in Skriptsprachen (bspw. Perl oder Tcl) programmiert werden. Ein Skript unterscheidet sich von einem übersetzten Programm dadurch, dass es durch ein anderes Programm ausgeführt oder direkt interpretiert wird.

Common Gateway Interface (CGI)

Der Austausch dynamischer Inhalte war im Internet vor der Entwicklung von Servlets nur über die CGI-Schnittstelle möglich. Durch den Einsatz der Technologie des Common Gateway Interfaces (CGI) kann ein Entwickler ein Server-seitiges Programm, das eingelesene Daten verarbeitet, in Programmiersprachen wie Perl, C und C++ schreiben. CGI findet dort Anwendung, wo dynamische Webseiten benötigt werden. So sind bspw. Zugriffszähler weit verbreitet, die angeben, wie oft eine bestimmte Webseite angefordert wurde. Bei jedem Aufruf der Seite wird ein Programm auf dem Server über die CGI-Schnittstelle gestartet. Der Zähler wird um eins erhöht und der aktuelle Zählerstand in einer Datei auf dem Server abgelegt.

Einer der wichtigsten Anwendungsbereiche von CGI sind Datenbanken. Bei einer Datenbankabfrage hängt die resultierende HTML-Seite von den Suchbegriffen ab, die in ein Formular eingegeben wurden. CGI stellt eine Schnittstelle zu Programmen dar, die auf dem Server ausgeführt werden können, und erlaubt dem Benutzer weiterhin, mit einem Programm auf dem Server zu interagieren. Diese Interaktion beschränkt sich jedoch darauf, dass der Anwender ein Programm auf dem Server startet und auf eine mögliche Antwort des Servers wartet.

Ein Nachteil bei der Verwendung von CGI-Programmen besteht darin, dass CGI-Prozesse bei jeder Anfrage neu gestartet werden müssen. Des Weiteren müssen bei jeder Anfrage zusätzliche Parameter übermittelt werden. Diese Tatsache führt aber zu einer speicher- und zeitaufwendigen Ausführung, wodurch die Leistung der Client-Server-Kommunikation sinkt. Darüber hinaus ist die Kommunikation zwischen verschiedenen CGI-Programmen nur schwierig zu realisieren.

CGI versus Servlets

Im Folgenden werden Servlets und CGI bezüglich verschiedener Aspekte gegenübergestellt.

  • Leistung
    Servlets werden bereits bei der ersten Anfrage initialisiert und bleiben nach der Abarbeitung der Anfrage im Speicher des Servers erhalten, um weitere Anfragen bearbeiten zu können. Dadurch entfällt bei weiteren Anfragen der Lade- und Initialisierungsvorgang. CGI-Prozesse werden bei jeder Anfrage neu gestartet.
  • Plattformunabhängigkeit
    Servlets sind Java-Klassen und somit auf jeder beliebigen Plattform, die Java unterstützt, ohne erneute Übersetzung lauffähig.
    Perl-basierte CGI-Skripte sind von Plattform zu Plattform übertragbar. CGI-Erweiterungen des Servers, die in Hochsprachen wie C oder C++ geschrieben sind, sind nicht ohne weiteres portierbar.
  • Wiederverwendbarkeit und Modularität
    Servlets können als Klassen importiert werden und an anderer Stelle verwendet werden.
    CGI-Skripte sind meist eigenständige isolierte Anwendungen.
  • Sicherheit
    Eine Speicherzugriffsverletzung ist mit Servlets nicht möglich, da der Security-Manager von Java den Ressourcenmissbrauch verhindert.
    Eine derartige Funktion ist bei CGI nicht gegeben.
  • Netzwerkpflege
    Servlets erlauben eine Lastverteilung zwischen verschiedenen Servern.
    Die Lastverteilung kann mit CGI nur mit extremem Aufwand realisiert werden.

Ein großer Vorteil von Servlets liegt insbesondere in der Verwendung der Programmiersprache Java. Java ist robust und objektorientiert. Spezialisierte Java-Bibliotheken, Entwicklungswerkzeuge und Datenbank-Managementsysteme werden immer gebräuchlicher und sind daher auch bei Servlets verwendbar.


SPNavRight SPNavRight SPNavRight
BuiltByNOF