com.tagtraum.jo |
Enthält die Servlet-Engine jo!
jo! basiert auf dem Package {@link de.webapp.Framework.Server}. Die Hauptfeatures sind:
- intelligentes und leistungsfähiges Threadmanagement
- HTTP/1.0, einzelne Features aus HTTP/1.1
- Servlet API 2.1.1 kompatibel
- Virtuelle Hosts
- Hochgradig konfigurierbar
- Reines Java
Zur Konfiguration von jo! sind mehrere Konfigurationsdateien notwendig:
- Ein Einträge in
Registry.cfg (siehe {@link de.webapp.Framework.ConfigManager}) für jo! sowie jeden virtuellen Host
- Server-Grundkonfiguration in
server.cfg
- Konfiguration für virtuelle Hosts in
hosts.properties
- Factory-Konfiguration in
factory.cfg
- MIME-Typ-Definitionen in
mimeType.properties
- Servlet-Konfigurationen in
servlet.properties für jeden virtuellen Host
Einträge in Registry.cfg
In Registry.cfg muß ein Eintrag für die Servlet-Engine selbst sowie für jeden virtuellen Host. Der Eintrag für die Engine muß neben dem Pfad auch einen Dateinamen beinhalten. Dieser Dateiname bezeichnet die Server-Grundkonfiguration und sollte server.cfg heißen. Beispiel:
jo = {
PATH = "../projects/jo/etc";
FILE = "server.cfg";
} ;
Soll von dem Feature virtuelle Hosts nicht Gebrauch gemacht werden, ist es nicht unbedingt nötig einen Extra-Eintrag für einen Hosts anzulegen. Sie können genauso gut die hostspezifischen Dateien im selben Verzeichnis wie die Server-Grundkonfiguration hinterlegen. Sollten Sie virtuelle Hosts anlegen wollen, müssen Sie für jeden Hosts einen Eintrag in Registry.cfg einfügen. Die Einträge lauten etwa so:
HostA = {
PATH = "../projects/jo/etc/HostA";
} ;
HostB = {
PATH = "../projects/jo/etc/HostB";
} ;
Auf diese Weise spezifizieren Sie das Verzeichnis der hostspezifischen Konfigurationsdatei servlet.properties .
Server-Grundkonfiguration in server.cfg
Die Server-Grundkonfiguration sieht fast genauso aus, wie bei allen anderen Services, die mit dem ServerKit ({@link de.webapp.Framework.Server}) erstellt worden sind (siehe {@link de.webapp.Framework.Server.Service}). Beispiel:
{
// Portnummer
PORT = 8080
// IP-Adress, an die jo! gebunden werden soll.
// Wenn keine angegeben wird, werden automatisch
// alle Adressen der Maschine benutzt. Dies führt
// jedoch leider bei jedem Start von jo! zu einem
// DNS-Lookup (Java-Bug)
BINDADDRESS = "127.0.0.1"
// Größe der Verbindungswarteschlange
BACKLOG = 50
// Maximale Anzahl an HandlerThreads
MAXHANDLERTHREADS = 100
// Minimale Anzahl an HandlerThreads
MINHANDLERTHREADS = 5
// Symbolischer Handlerklassenname
HANDLERCLASSNAME = "I_TCPHandler"
// Zeit, die ohne Request verstreichen soll,
// bevor der Handlerpool auf Minimalgröße
// reduziert wird.
SO_TIMEOUT = 30000
// Hauptversionsnummer: z.B. 0 für 0.9
MAJORVERSION = 0
// Nebenversionsnummer: z.B. 9 für 0.9
MINORVERSION = 92
}
Diese Datei muß von dem Eintrag in der Registry.cfg referenziert werden.
Host-Konfiguration in hosts.properties
Die Host-Konfiguration definiert die virtuellen Hosts. Mindestens ein Eintrag muß vorhanden sein. Beispiel:
# Syntax:
#
# host..hostname=[|*]
# host..docRoot=
#
# Optional:
#
# host..relative2cfgroot=[true|false]
# host..aliases=[,...]
# host..classname=
host.jo.hostname=*
host.jo.docRoot=../projects/jo/htdocs/
host.jo.relative2cfgroot=true
Die obige Datei definiert den virtuellen Host jo , der über keinen besonderen Hostnamen verfügt. Das bedeutet alle ankommenden Requests werden auf diesen Host gemappt. Darüber hinaus wird angegeben, daß sich das Dokumentenbasisverzeichnis in ../projects/jo/htdocs/ relativ zur Datei Registry.cfg bedinden soll.
Factory-Konfiguration in factory.cfg
Die Factory-Konfiguration definiert, für welchen symbolischen Klassenname, welche Klasse instantiiert wird. Es handlet sich im Grunde um eine einfache Hashtable. Beispiel:
{
I_JoServletConfig = "de.webapp.Framework.ServletEngine.JoServletConfig"
I_JoServletModel = "de.webapp.Framework.ServletEngine.JoServletModel"
I_JoServletContext = "de.webapp.Framework.ServletEngine.JoServletContext"
I_JoServletContextPeer = "de.webapp.Framework.ServletEngine.JoServletContextPeer"
I_JoServletRequest = "de.webapp.Framework.ServletEngine.JoServletRequest"
I_JoServletResponse = "de.webapp.Framework.ServletEngine.JoServletResponse"
I_JoServletService = "de.webapp.Framework.ServletEngine.JoServletService"
I_JoSession = "de.webapp.Framework.ServletEngine.JoSession"
I_JoSessionContext = "de.webapp.Framework.ServletEngine.JoSessionContext"
I_TCPHandler = "de.webapp.Framework.ServletEngine.JoServletHandler"
I_JoRequestDispatcher = "de.webapp.Framework.ServletEngine.JoRequestDispatcher"
I_JoHost = "de.webapp.Framework.ServletEngine.JoHost"
}
MIME-Typ-Definitionen in mimeType.properties
Hier wird die Zuordnung von Dateiendungen zu MIME-Typen festgelegt. Die Datei hat folgendes Format:
# MimeTypes
#
# Format:
# suffix/mime-type
txt=text/plain
java=text/plain
css=text/plain
html=text/html
htm=text/htm
Servlet-Konfigurationen in servlet.properties
Die Servlet-Konfigurationen muß für jeden virtuellen Host einzeln erfolgen. Dazu muß in jedem Konfigurations-Verzeichnis eines virtuellen Hosts eine Datei servlet.properties existieren. Sie definiert sowohl die einzelnen Servlets als auch die ServletContexte (siehe {@link de.webapp.Framework.ServletEngine.I_JoServletContextPeer}).
Für Servlets lassen sich bestimmte Attribute angeben, von denen jedoch nur code notwendig ist:
- Der Klassenname:
servlet.<name>.code=class
- Die Initialisierungsargumente:
servlet.<name>.initArgs=<durch Kommata getrennte Schlüssel-Wert-Paare>
- Laden beim Start der Engine:
servlet.<name>.preload=[true|false]
- Aliases des Servlets:
servlet.<name>.aliases=<durch Kommata getrennte URIs>
- Destroytimeout des Servlets:
servlet.<name>.destroytimeout=<Zeit in ms>
- Maximale Anzahl an Instanzen eines SingleThreadModel-Servlets:
servlet.<name>.maxactiveinstances=<anzahl>
- ServletContexte, denen das Servlet zugeordnet wird:
servlet.<name>.contexts=<durch Kommata getrennte Liste von ServletContexten>
ServletContexte lassen sich folgendermaßen anlegen. Notwendig ist dabei nur das Attribut path :
- URI-Pfad auf den der ServletContext abgebildet werden soll:
context.<name>.path=<URI-Pfad>
- Klassenname des I_JoServletContext, der verwendet werden soll:
context.<name>.classname=<Klassenname>
- Document Root des ServletContextes:
context.<name>.docRoot=<Basisverzeichnis>
- Angabe, ob DocumentRoot relativ zu
Registry.cfg interpretiert werden soll: context.<name>.docRoot.relative2cfgroot=[true|false]
Beispiel:
# DefaultContext
context.default.path=/
context.default.classname=I_JoServletContextPeer
# File-Servlet
servlet.file.code=de.webapp.Framework.ServletEngine.JoFileServlet
servlet.file.initArgs=indexFiles=index.html,index.htm
servlet.file.aliases=/
servlet.file.preload=true
servlet.file.contexts=default
# Hello-World-Servlet
servlet.HelloWorld.code=de.webapp.Examples.Servlet.HelloWorld
|