Wollis Homepage
Studienarbeiten

Tipps und Tricks
IoT
Studienarbeiten
  Diplomarbeiten
    DI
    DII
  Seminararbeiten
Privates
Suche
Startseite > Studienarbeiten > Diplomarbeiten > DI

Jeeves - Der Java Server von Javasoft

Diplomarbeit - 3. Jeeves - Der Java Server von Javasoft

3. Jeeves - Der Java Server von Javasoft

3.1 Allgemeine Informationen zum Jeeves Server

Die folgenden Ausführungen beziehen sich auf die Alpha 2 Version des WWW-Servers Jeeves. Da es sich um eine Alpha Version handelt, ist damit zu rechnen, daß die API-Klassen demnächst noch geändert und erweitert werden. Ein Termin für die endgültige Version des Programms steht noch nicht fest. Des weiteren wird sich wahrscheinlich der Name des Servers ändern, da der Name Jeeves ein Trademark einer anderen Firma ist.

 

Die für die Internetnutzung häufig verwendete Client-Server-Kommunikation ist bis zur Entwicklung von Jeeves nur über die CGI-Schnittstelle möglich. Durch den Einsatz der CGI-Schnittstelle hat man die Möglichkeit, das CGI-Programm, welches übergebene Daten verarbeitet, in Programmiersprachen wie Perl, C und C++ zu schreiben. Ein Nachteil bei der Verwendung von CGI-Programmen liegt darin, daß die Programme bei jeder Anfrage neu gestartet werden müssen. Außerdem sind bei jeder Anfrage zusätzlich Parameter zu übermitteln. Das führt dazu, daß die Performance der Client-Server-Kommunikation niedrig ist. Darüber hinaus ist die Kommunikation zwischen verschiedenen CGI-Programmen nur sehr schwierig realisierbar.

 

Aufgrund dieser Mängel ist der WWW-Server Jeeves entwickelt worden. Die Besonderheit dieses Servers ist darin zu sehen, daß er die Verwendung von sogenannten Servlets, die die Client-Server-Kommunikation unterstützen, erlaubt. Servlets sind Java-Programme, die auf WWW-Servern ablaufen. Wenn eine Anfrage vom Client an den WWW-Server stattfindet, wird das sich auf dem Server befindliche Servlet aufgerufen, in den Speicher geladen und kann die vom Client angeforderten Daten liefern.37 Wenn einmal eine Verbindung aufgebaut ist, können der Client und das Servlet über eine neue Verbindung mit einem frei definierbaren Protokoll miteinander kommunizieren.38 Man kann sich Servlets als Server Side Java Applets vorstellen, die keine Benutzeroberfläche besitzen. Servlets können sowohl auf Dateien und Datenbanken zugreifen, als auch mit den Java-Programmen auf der Client-Seite kommunizieren. So ist es möglich, Netzwerkzugriffe, die durch Applets aufgrund von Sicherheitsmaßnahmen nicht durchführbar sind, mit Servlets zu realisieren.39 Des weiteren können sie die Rückgaben von HTML-Formularen auswerten und dynamische HTML-Seiten generieren.

 

Für die Programmierung von Servlets wird mit Jeeves ein Application Programming Interface (API) ausgeliefert, in das grundlegende Klassen und Methoden zu Client-Server Kommunikation integriert sind. So enthält das API beispielsweise Methoden zum Initialisieren von Servlets, zur Bearbeitung von Anfragen, zur Rückgabe von Daten und zum Zerstören von Servlets. Das Servlet API ist so allgemein gehalten, daß Servlets nicht nur auf WWW-Servern laufen, sondern auch auf allen anderen Arten von Servern ausführbar sind.40 Es ist ein Standard für Servlets und wird von Netscape zusammen mit Sun Microsystems entwickelt.41 Bei der Entwicklung des Servlet APIs hat Sun Microsystems folgende Ziele verfolgt: 42

 

  • Es soll einfach sein, Servlets zu schreiben.
  • Die Servlets sollen eine hohe Performance haben und einen Overhead bei jeder Anfrage vermeiden.
  • Servlets sollen auf jedem Server laufen, der das Servlet API unterstützt
  • Das Servlet API soll zum Industriestandard werden.
  • Das Servlet API soll abwärts kompatibel zur CGI-Schnittstelle sein.
  • Es soll möglich sein, unbekannte Servlets sicher auf einem Server laufen zu lassen.

 

Eine besonders wichtige Aufgabe bei der Entwicklung des APIs ist es, die Sicherheit des WWW-Servers zu gewährleisten, da es auch möglich sein soll, fremde Servlets sowie Netzwerkservlets auszuführen. Um ungewollte Zugriffe zu vermeiden, benutzt Jeeves ein Konzept mit der Bezeichnung "Server Security Sandbox". Damit sollen Servlets auf Servern effektiv laufen, und trotzdem sollen Server sicher vor Angriffen böswilliger Servlets sein. Dazu werden die Servlets in folgende vier Arten unterteilt: 43

 

  • Jeeves Servlets:
    Servlets, die vom Jeeves Server benutzt werden.
  • Lokale Servlets:
    Servlets, die auf dem Rechner abgelegt sind, auf dem auch der Jeeves Server installiert ist.
  • Signierte Netzwerkservlets:
    Servlets, die aus dem Netz geladen werden und bekannt sind.
  • Unsignierte Netzwerkservlets:
    Servlets, die aus dem Netz geladen werden und nicht bekannt sind.

 

Die Servlets unterscheiden sich in ihren Rechten. Jeeves Servlets haben vollen Zugriff auf den Server. Der Zugriff auf den Server durch die lokalen Servlets ist dann uneingeschränkt, wenn sie als bekannt eingetragen werden. Bei den bekannten Netzwerkservlets muß der Zugriffsbereich in Jeeves eingestellt werden. Die nicht bekannten Netzwerkservlets werden streng kontrolliert.44

 

Folgende Basiszugriffsrechte bestehen in der "Sandbox" für Servlets:45

 

  • HTTP request objects:
    Erlaubt den Zugriff auf eine eingehende Anfrage und auf alle Informationen, die mit der Anfrage zusammenhängen.
  • HTTP response objects:
    Erlaubt die Erstellung einer HTTP Antwort zum Client.
  • HTML File Access:
    Erlaubt es, die Dateien zu lesen und zu verarbeiten, die vom Jeeves Server bedient werden.
  • Jeeves Configuration Files:
    Erlaubt den Zugriff auf die Jeeves Konfigurationsdaten.
  • Access Control Lists:
    Erlaubt dem Servlet, mit anderen Servlets zu kommunizieren.
  • Peer Servlet Thread access:
    Erlaubt den Zugriff auf laufende Threads anderer Servlets zur Kommunikation.
  • Peer Servlet Capabilities context:
    Erlaubt den Zugriff auf Informationen über die Fähigkeiten anderer Servlets.
  • Networking APIs:
    Erlaubt es, das Java Netzwerk API zu benutzen.

 

Neben dem hier beschriebenen HTTP-Server Jeeves werden Servlets auch von den folgenden HTTP-Servern unterstützt:

  • IBM's ICS WWW Server (http://www.ics.raleigh.ibm.com)
  • James (http://james.vpro.nl:7007/)
  • Jigsaw (http://www.w3.org/pub/WWW/Jigsaw/)
  • MBServer (http://www.ozemail.com.au/~mortbay/)

 

In dieser Arbeit wurde ausschließlich der WWW-Server Jeeves verwendet. Der Grund hierfür ist, daß die anderen genannten Server zwar Servlets unterstützen, das API jedoch noch unterschiedlich ist. Da Sun aber einen Teil des API in die Java Version 1.1 einbauen will, ist davon auszugehen, daß sich das API von Sun auch bei anderen WWW-Servern durchsetzen wird.46

 

3.2 Programmierung von Servlets

 

Als Vorbereitung für die Programmierung und Ausführung von Servlets müssen folgende grundlegende Schritte durchgeführt werden. Um den Jeeves Server nutzen zu können, muß er nach der beiliegenden Anleitung installiert werden. Der Installationsvorgang ist stark vom Betriebssystem abhängig, so wird die Windows-Version über Menüs installiert und die Unix-Version über Kommandozeilenbefehle. Wenn der Server gestartet ist, kann man nun mit einem WWW-Browser auf den Jeeves Server zugreifen. Als Standardport wird bei der Alpha 2 Version die Portnummer 8080 verwendet. Ein Zugriff auf den Server ist einfach möglich, indem die HTTP Adresse um den Port erweitert wird (zum Beispiel aus http://www.wi-inf.uni-essen.de wird http://www.wi-inf.uni-essen.de:8080). Die weiteren Servereinstellungen lassen sich nach dem Aufrufen der vorinstallierten HTML-Seiten komplett unter dem Link Server Administration vornehmen.

 

Die folgenden zwei Beispiele zeigen, wie Servlets programmiert werden können. Die Aufgaben, die die Servlets erledigen, ähneln denen in dem Programm KIS. Das erste Servlet generiert eine HTML-Seite, die "Hallo Welt" im WWW-Browser anzeigt.

 

import java.servlet.*;

import java.io.*;

public class HalloWelt extends GenericServlet {

public void service(ServletRequest req, ServletResponse res) throws IOException {

res.setContentType("text/html");

PrintStream out=new PrintStream(res.getOutputStream());

out.println("<h1>Hallo Welt!</h1>");

}

}

Bevor das Programm kompiliert werden kann, müssen die zusätzlichen Servlet-API-Klassen des Servers, die sich im Unterverzeichnis Lib befinden, in den Klassenpfad (Umgebungsvariable CLASSPATH) eingefügt werden. Das erweitern des Klassenpfades ist Betriebssystemabhängig und ist in der Anleitung des Betriebssystems beschrieben.47 Nun kann man das Servlet, so wie eine Java Applikation, kompilieren. Die HalloWelt.class Datei muß in das Verzeichnis Servlets kopiert werden. Als nächstes bekommt der HTTP-Server die Erlaubnis, das Servlet auszuführen. Es gibt zwei Möglichkeiten, um dies zu realisieren. Dies kann über die Administrator Einstellungen geschehen oder man kann direkt im Verzeichnis des HTTP-Servers die Datei servlet.properties editieren. Um das HalloWelt Servlet mit dem Texteditor anzumelden, wird folgende Zeile am Ende der Datei eingefügt:

 

HalloWelt.code=HalloWelt

 

Wenn der Jeeves Server neu gestartet wird, kann man unter der Adresse http://localhost:8080/servlet/HalloWelt das Ergebnis des Servlets betrachten. Anstatt "localhost" als Adresse zu nehmen, muß man bei entfernten Servern die IP-Adresse oder den Namen des Servers angeben werden.

 

Nun werden die Befehle des Programms analysiert. In der ersten Zeile des HalloWelt-Servlets werden einige Klassen des Servlet APIs importiert. Bei der Klassendefinition wird angegeben, daß die Klasse HalloWelt die allgemeine GenericServlet Klasse erweitert. Als nächstes wird die Funktion service definiert, die von der Klasse GenericServlet zur Kommunikation mit dem Browser bzw. mit der HTML-Seite benötigt wird. Diese Funktion wird automatisch beim Aktivieren des Servlets aufgerufen. Die Funktion benötigt die Parameter ServletRequest für eingehende Daten und ServletResponse für ausgehende Daten. Die Erweiterung throws IOException dient dazu, beim Auftreten von Eingabe-/Ausgabefehlern die Fehler abzufangen und die Funktion abzubrechen. Die Zeile res.setContentType("text/html"); gibt an, daß die zurückgegebenen Daten vom Typ Text oder HTML sind. In der nächsten Zeile wird ein Ausgabestrom geöffnet, in dem dann <h1>Hallo Welt</h1> geschrieben wird.

 

Das nächste Beispiel zeigt eine Kommunikation eines HTML-Formulars mit einem Servlet über die CGI-Schnittstelle. Hier wird nur die Funktionsweise der POST Methode beschrieben, da sie wesentlich flexibler ist und weniger Einschränkungen unterliegt, als die noch von vielen CGI-Programmen benutzte GET Methode.48 Die Servlets können mit beiden Methoden umgehen.

Folgende HTML-Seite zeigt ein Formular mit einem Eingabetextfeld an, in dem der Benutzer seinen Namen eintragen kann.

 

<html>

<head>

<title>Namensregistrierung</title>

</head>

<body>

<b> Bitte geben Sie Ihren Namen ein: </b>

<form action=/servlet/gruss method=post>

<input type=text name=Benutzername>

<input type=submit value="Absenden">

</form>

</body>

</html>

 

Das folgende Servlet wertet die Daten aus dem Formular aus und generiert eine HTML-Seite, die den Benutzer persönlich begrüßt.

 

import java.io.*;

import java.util.*;

import java.servlet.http.*;

public class gruss extends FormServlet {

public void sendResponse (HttpServletResponse res, Hashtable tab) throws IOException {

String Benutzer=(String) tab.get ("Benutzername");

res.setContentType("text/html");

PrintStream out=new PrintStream(res.getOutputStream());

out.println("<h1>Hallo "+Benutzer+"!</h1>");

out.println("Willkommen auf dieser HTML-Seite.");

}

}

 

Nachdem dieses Applet beim Server angemeldet ist, kann man die HTML-Seite aufrufen. Es erscheint ein Formular, in dem ein Name eingegeben werden kann. Nach Absenden der Daten erscheint eine HTML-Seite, auf der der Benutzer persönlich begrüßt wird.

Der Java-Code vom vorangegangenen Beispiel ist ein wenig modifiziert worden. Als erstes wird java.servlet.http.* anstatt java.servlet.* importiert. Das Beispiel erweitert die Klasse FormServlet, die eine abgeleitete Klasse von der GenericServlet Klasse ist und die um einige Kommunikationsmethoden erweitert ist.49 Von der Klasse FormServlet kann die Methode sendResponse gebraucht werden, um mit einer HTML-Seite über die CGI-Schnittstelle mit der POST Methode zu kommunizieren. Es sind zwei Parameter beim Aufruf der Methode anzugeben. Als erstes ist die Variable vom Typ HttpServletResponse anzugeben, die eine erweiterte Methode von ServletResponse ist. Die zweite Variable ist ein Vektor vom Typ Hashtable50. Diese Variable bekommt die Daten, die über die CGI-Schnittstelle übertragen werden, zugewiesen. Die Zeile String Benutzer=(String) tab.get("Benutzername"); erstellt eine neue Stringvariable mit dem Namen Benutzer und weist dieser Variablen den Wert aus dem Hashtable Objekt tab, das unter Benutzername (der Bezeichnung aus dem HTML-Dokument) gespeichert ist, zu. Da die Methode get ein Objekt zurückgibt, muß dieses Objekt mit dem Casting-Operator (String) in einen String umgewandelt werden. In den nächsten Zeilen wird dann ein Ausgabestrom geöffnet, der das HTML-Dokument unter dem Gebrauch der Variablen Benutzer erstellt.

 

Die weiteren Möglichkeiten, die der Jeeves Server bietet, werden hier nicht weiter beschrieben, da sie im Rahmen dieser Diplomarbeit nicht benutzt werden.  

Druckversion
(C)1996-2024 Wolfgang Büning  >> Impressum