Jetty als Servlet-Container
Was ist ein Servlet?
Der Servlet-Standard war (und ist) ein Ansatz, um die rein statische Anzeige
von Text, die normale HTTP-Server zur Verfügung stellen, um dynamische Komponenten
zu erweitern. Ein HTTP-Server beherrscht normalerweise nur das "Servieren" statischer Resourcen
(Bilder, Textdokumente,...). Der Einbau dynamischer Komponenten (Resultate von Datenbankabfragen,...)
geschieht dann meist über Plugins für Skriptsprachen. Auch die Sprache Java wurde
irgendwann dafür genutzt und es entstand der Standard für Servlets, was soviel bedeutet, wie
"kleine Einheit, die den Server ergänzt". Der Standard definiert zum einen Methoden, wie
der Programmierer auf die Umgebung des Servlets zugreift (den HTTP-Request mit seinen Parametern)
und zum anderen, wie die dynamischen Elemente in den Datenstrom, den der HTTP-Server zur
Verfügung stellt, integriert werden.
Was ist in Servlet-Container?
Ein Servlet Container ist letztlich ein Plugin, das in der Lage ist, die Umgebung herzustellen,
die der Programmierer der Servlets laut Standard erwarten kann. Das beinhaltet zum einen
das Laden des Servlets, wenn es gebraucht wird, das Verwalten von Sessions, das Cookie-Management,
URL-Rewriting und vieles andere mehr. Zum anderen muß der Container durch diese Umgebung
Mittel bereitstellen, damit Servlets Daten in den Ausgabestrom des HTTP-Servers integrieren kann.
Alternativen
Ein oder wohl der bekannteste Servlet-Container ist zur Zeit TomCat von der Apache Group.
Er hat sich vor allem deshalb weitgehend durchgesetzt, weil er als Modul oder Plugin
für den verbreitetsten HTTP-Server Apache (ebenfalls von der Apache-Group) zur
Verfügung steht.
Eine weitere Alternative, und um diese soll es ja hier schließlich gehen, ist Jetty.
Jetty ist verfügbar unter der Adresse www.mortbay.org/jetty. Jetty stellt einen vollständigen
Servlet-Container dar, bringt aber genau wie TomCat einen HTTP-Server mit, so daß die
Anwendung auch allein betrieben werden kann.
Einer der Vorteile gegenüber TomCat ist die leichte Einbettbarkeit des Containers (und Servers)
in eigene Anwendungen und das unkomplizierte Setup: Wenn die Servlets und die
statischen Resourcen als Webanwendung zur Verfügung stehen, ist das Aufsetzen eines kleinen Servers
aus einer eigenen Anwendung heraus kinderleicht.
Doch zunächst einige Anmerkungen zu dem Begriff "Webanwendung"
Was ist eine Webanwendung?
Der Begriff Webanwendung (oder Web-Archiv) stellt im Zusammenhang mit Servlets oder Servlet-
Containern eine Sammlung von vier verschiedenen Dateiarten dar, die im Zusammenspiel
einem bestimmten Zweck dienen sollen:
1)statische Resourcen (Bilder, Texte,...)
2)Servlets
3)Bibliotheken, die von den Servlets benötigte Funktionalität zur Verfügung stellen
4)Konfigurationsdateien, die das Verhalten der Servlets steuern.
Eine Webanwendung, die gegebenenfalls aus vielen Einzeldateien besteht, wird wegen
der einfacheren Handhabung in einer sogenannten Archivdatei mit Endung ".war"
zusammengefaßt. Dieses Archiv ist unter Umständen mittels des IP-Algorithmus komprimiert.
Innerhalb folgt die Webanwendung einem festgelegten Schema: Es gibt Verzeichnisse und Dateien,
die einem bestimmten Zweck dienen und einen bestimmten Namen tragen müssen.
/
|-web.xml
|-WEB-INF/
|-classes/
|-lib/
Das Unterverzeichnis WEB-INF enthält alle Dateien, die über den Java-Mechanismus
zum Finden von Klassen gesucht werden (Properties, Resourcen zur Internationalisierung
oder Lokalisierung,... Alle Einzeldateien (Klassen, Properties,...), die also
nicht in jar-Dateien zusammengefaßt sind, sind unter dem Unterverzeichnis classes/
untergebracht, alle jar-Dateien - und dabei ist es egal, ob eigene Klassen enthalten sind,
oder solche dritter Parteien - sind unter dem Verzeichnis lib/ zu finden.
Statische Resourcen können relativ frei in der Webanwendung angeordnet werden, also zum Beispiel
gleich auf der obersten Ebene, wo sich auch die Datei web.xml befindet. Man sollte sie nicht
unterhalb von WEB-INF/ platzieren.
In der Datei web.xml schließlich wird festgelegt, welches der Servlets wann aufgerufen
werden soll, um einen Request zu bedienen. Dies geschieht über die Zuordnung eines symbolischen
Namens zu einem Klassennamen (des jeweiligen Servlets), und eine Zuordnung dieses symbolischen
Namens zu einem Request-Pfad. Daher sollte man darauf achten, daß die Pfade, die den Servlets
zugeordnet werden, nicht als reale Pfade in der Struktur der Webanwendung wiederkehren, da man
auf eventuelle statische Resourcen in einem solchen Pfad dann nicht mehr zugreifen könnte.
Jetty als eingebetteter Server für Webanwendungen (zum Test eigener Webanwendungen)
Dazu ist eigentlich nur ein fünfzeiliges Programm zu schreiben und mit einem
Klassenpfad zu starten,
der alle zum Betrieb von Jetty erforderlichen jar-Dateien enthält.
Der Quelltext sieht dann so aus:
package de.netsysit.webapplicationtest;
public class WebApplicationTest extends java.lang.Object
{
public static void main(java.lang.String[] args)throws java.lang.Exception
{
//Der Server als abstraktes Konstrukt
org.mortbay.jetty.Server server = new org.mortbay.jetty.Server();
//Ein Listener, der eingehende Requests entgegennimmt und sie an den Server weiterleitet
org.mortbay.http.SocketListener listener = new org.mortbay.http.SocketListener();
//Festlegen des Ports, an dem der Listener lauschen soll
listener.setPort(9999);
//Zuordnung Server<->Listener
server.addListener(listener);
//Laden und ausrollen unserer zu testenden Webanwendung
//Man beachte die Syntax für den Laufwerksbuchstaben unter Windows!
server.addWebApplication("/AaaUtil/","c:/Webanwendung.war");
//Start des Servers
server.start();
}
}
Wenn dieses Programm über eine Konsole gestartet wird, wird Jetty melden, daß die
Anweidung zur Verfügung steht, und man kann jetzt mit einem Browser
auf die entsprechende IP-Adresse und Port zugreifen und die Webanwendung testen.
ein einfaches CTRL-C (STRG-C) beendet den Server wieder.
Möchte man den Server nicht so brutal beenden, kann man das Programm oben auch so
aufrüsten, daß einzelne Webanwendungen geschlossen und entfernt werden, der Server
jedoch weiterläuft. Auch das Hinzufügen von Webanwendungen zur Laufzeit ist ohne
Beenden des Servers möglich.
 <jkey@netsys-it.de>
© 2004 NetSys.IT GbR
|