![]() |
|||||||||||||||||||||||||||
|
Eine wichtige Eigenschaft von Webseiten ist die Integration von interaktiven Komponenten. Web-Dokumente enthalten dadurch nicht nur statische, sondern auch dynamische Informationen. Diese Dynamik bezieht sich nicht nur auf das Layout, sondern auch auf die in Dokumenten enthaltene Information. CGI-Skripte und Java-Servlets sind Möglichkeiten, Web-Dokumente um dynamische Inhalte anzureichern. Sowohl CGI-Skripte als auch Java-Servlets nehmen Anfragen von Clients entgegen, bearbeiten sie, und liefern dynamisch erzeugte HTML_Dokumente als Ergebnis zurück. Eigenschaften von Servlets Die Funktionalität von Webservern kann mit Hilfe von Servlets erweitert werden. Servlets sind in Java geschriebene Server_Komponenten, die es ermöglichen, einen Webserver dynamisch zu erweitern. Dynamisch bedeutet hierbei, dass während des Betriebs des Servers sowohl Dienste zur Funktionalität des Servers hinzugefügt als auch entfernt werden können. Servlets verfügen im Gegensatz zu Applets nicht über eine GUI-Komponente und werden daher auch als faceless bezeichnet. Ebenso wie bei Applets, für die der Browser zur Ausführung eine Java-VM (JVM) zur Verfügung stellen muss, muss der Server über eine VM verfügen und das Application Programming Interface (API) von Servlets unterstützen, um diese ausführen zu können. Servlets besitzen im Gegensatz zu Applets je nach Einsatzzweck Zugriffsmöglichkeiten auf Dateisysteme und Netzwerkressourcen. Ebenso wie das Swing-API stellt das Servlet-API eine Standarderweiterung des Java-APIs dar, das den Entwicklern Klassen und Schnittstellen zur Programmierung von Servlets zur Verfügung stellt. Ein Servlet arbeitet nach dem Black-Box-Prinzip (siehe Abb. 13-1). Hierbei existieren fest definierte Ein- und Ausgabeströme, die beim Aufruf des Servlets angesprochen werden.
Abb. 13.1: Black-Box-Arbeitsweise eines Servlets Einsatz von Servlets Die Hauptnutzung von Servlets liegt im Empfang, in der Verarbeitung und in der Versendung von Daten. Servlets lassen sich grundsätzlich für Aufgaben einsetzen, die auf dem Abfrage-Antwort-Paradigma (Request Response Paradigm) beruhen. Servlets können sowohl auf Dateien und Datenbanken zugreifen, als auch mit den Java-Programmen auf der Client-Seite kommunizieren. Hierdurch wird es möglich, Netzwerkzugriffe, die durch Applets aufgrund von Sicherheitsmaßnahmen nicht durchführbar sind, mit Servlets zu realisieren. Des Weiteren können Servlets die Rückgabewerte von HTML-Formularen auswerten und dynamische HTML-Seiten generieren.
Abb. 13.2: Einsatzmöglichkeiten von Servlets Die wichtigsten Verwendungsarten von Servlets sind im Folgenden dargestellt.
Einbindung von Servlets Ein Applet wird durch das Applet-Tag in ein HTML-Dokument eingebunden. Die Einbindung von Servlets kann mittels einer der folgenden Methoden erfolgen:
<param name=param1 value=Wert1> </servlet>
http://<JavaServer>/Servlets/<ServletKlassenName>
Servlet-Engines Ähnlich wie bei einem Applet, bei dem eine VM auf dem Client (Browser) installiert sein muss, um das Applet laufen lassen zu können, muss bei Servlets eine Server-seitige VM auf dem Server installiert werden, um dort Servlets starten zu können. Zusätzlich muss der Server das API der Java-Servlets (siehe Kapitel 13.3) unterstützen. Das API der Java-Servlets ist als ein Standarderweiterungs-API (Standard Extension API) konzipiert und beinhaltet eine Menge an Klassen und Methoden, mittels derer Daten vom Server geladen, bzw. zum Server gesendet werden können. Meist wird dieses API den Herstellern von Webservern als Zusatz zum Server angeboten. Neben dem Java-Webserver, der von der Firma Sun direkt angeboten wird, implementiert der Referenz-Server des W3-Konsortiums, Jigsaw, das Servlet-API. Des Weiteren können viele der in der Praxis eingesetzten (nicht auf Java basierenden) HTTP-Server, insbesondere Apache, Netscape Enterprise und Microsoft IIS, inzwischen ebenfalls eine Implementierung von Java-Servlets vorweisen. |
|||||||||||||||||||||||||||
|
|
Tab. 13.1: Auswahl von Webservern, die Servlets unterstützen Übersetzung, Installation und Testen von Servlets Das Java Servlet Development Kit (JSDK) beinhaltet eine sog. Servlet-Engine, um entwickelte Servlets testen zu können. Sowohl das Package javax.servlet als auch die entsprechende Spezifikation und Dokumentation können kostenlos vom Webserver der Firma JavaSoft bezogen werden (http://java.sun.com/products/servlet/). Nach der Installation des JSDK-Packages muss die Variable CLASSPATH derart modifiziert werden, dass der Eintrag jsdk.jar eingefügt wird. Die Übersetzung eines Servlets gleicht der einer Java-Anwendung bzw. der eines Applets und erfolgt durch den Aufruf:
javac ServletName.java Nachdem ein Servlet implementiert und erfolgreich übersetzt ist, kann es mit dem im JSDK-Package enthaltenen Programm servletrunner getestet werden. Das Dienstprogramm servletrunner ist ein Multithread-fähiger Prozess, der Anfragen an Servlets bearbeiten kann. Die Fähigkeit des Multithreading erlaubt es dem Programm, mehrere Servlets parallel ablaufen zu lassen, sowie den Aufruf eines Servlets innerhalb eines anderen Servlets durchzuführen. Es ist zu beachten, dass servletrunner eine neu verfügbare Version des zu testenden Servlets nicht automatisch lädt. Aus diesem Grund muss bei jeder Änderung im Programm-Code das getestete Servlet beendet und neu gestartet werden. Aufruf von Servletrunner servletrunner befindet sich im Verzeichnis <jsdk>/bin, wobei jsdk das Hauptverzeichnis des Java Servlet Development Kits (JDK) bezeichnet. Zum Starten des Programms muss die Variable PATH gesetzt werden:
servletrunner -help Das Resultat dieses Aufrufs ist in Abb. 13-3 dargestellt.
Abb. 13.3: Ergebnis des Aufrufs von servletrunner -help Die Standardwerte dieser Parameter erhält man, wenn man servletrunner ohne Argument aufruft. Für JSDK in der Version 2.0 unter Windows sind diese Werte in Abb. 13-4 dargestellt.
Abb. 13.4: Standardwerte des Programms servletrunner Servlet-Properties Das Programm servletrunner bietet eine einfache Möglichkeit, Servlets zu testen und der Allgemeinheit zur Verfügung zu stellen. Diese Möglichkeit wird durch sog. Properties (Eigenschaften) realisiert. Eigenschaften werden dazu verwendet, um ein Servlet zu initialisieren, zu konfigurieren und zu starten. Servlet-Eigenschaften werden immer in Form von Wertepaaren angegeben, die aus dem Namen einer Eigenschaft und aus deren Wert bestehen. Ein Servlet wird durch maximal zwei Eigenschaftseinträge gekennzeichnet. Diese Einträge stellen den Code eines Servlets und dessen Anfangswerte dar:
servlet.name.code Code-Eigenschaft Die Eigenschaft Code legt ein Kürzel fest, durch das ein Servlet angesprochen werden kann. Als Wert dieser Eigenschaft wird der Aufrufname des Servlets mit vollständiger Angabe des Package-Namens verwendet. So stellt bspw. der folgende Aufruf eine Servlet-Eigenschaft dar, deren Code meinServlet und deren Wert openjava.HalloServlet ist:
servlet.meinServlet.code = openjava.HalloServlet Der Aufruf von meinServlet entspricht somit dem Aufruf von openjava.HalloServlet. initArgs-Eigenschaft Die Eigenschaft initArgs beinhaltet alle Parameter, die notwendig sind, um ein Servlet zu initialisieren. Die Syntax hierfür lautet wie folgt:
servlet.meinServlet.initArgs =\ Mehrere Eingaben werden durch eine Kombination aus Komma und Backslash (,\) getrennt:
servlet.meinServlet.initArgs =\ Property-Dateien Die Eigenschaften eines Servlets werden in einer Textdatei abgespeichert. Diese Datei hat den Namen servlet.properties und wird beim Start von servletrunner automatisch eingelesen. Wie in Abb. 13-3 dargestellt wird, besteht auch die Möglichkeit, servletrunner mit einer anderen Property-Datei zu starten, indem die Option -s verwendet wird. Ein Beispiel einer Property-Datei ist nachfolgend angegeben:
# Hier sind die Kommentare. # Festlegen des Servlets # Festlegen der Eigenschaften dieses Servlets |
|
|