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
|
Java Source File Name | Type | Comment |
BaseRequestInterceptor.java | Class | |
C_Jo.java | Interface | |
ForwardRequestWrapper.java | Class | |
IncludeRequestWrapper.java | Class | |
IncludeResponseWrapper.java | Class | |
InterceptorException.java | Class | |
InterceptorResult.java | Class | |
I_JoFileTransferCompression.java | Interface | Interface for filetransfercompression. |
I_JoHost.java | Interface | Represents a virtual host. |
I_JoRequestDispatcher.java | Interface | Extension of the Servlet-API-RequestDispatcher. |
I_JoServletConfig.java | Interface | Describes the configuration of a servlet. |
I_JoServletContext.java | Interface | |
I_JoServletContextPeer.java | Interface | Peer of a
I_JoServletContext . |
I_JoServletModel.java | Interface | Serves as a managing container for servlets. |
I_JoServletRequest.java | Interface | Makes the actually immutable request object mutable. |
I_JoServletResponse.java | Interface | Extends the response with some methods needed by the server. |
I_JoServletService.java | Interface | Extends the
I_TCPService with jo!-specific methods. |
I_JoSession.java | Interface | Adds some methods. |
I_JoSessionContext.java | Interface | Manages sessions. |
I_JoWebAppElement.java | Interface | Corresponds to the xml based configuration. |
Jo.java | Class | Jo starter. |
JoAbstractModel.java | Class | Encapsulates the servlet instance or instances. |
JoException.java | Class | |
JoFileTransferCompression.java | Class | Manages the creation and deletion of compressed files. |
JoFilterChain.java | Class | |
JoFilterConfig.java | Class | |
JoFilterHolder.java | Class | |
JoHost.java | Class | Represents a virtual host. |
JoIcon.java | Class | Represents an icon for a servlet, webapplication, etc. |
JoIgnition.java | Class | Minimalistic GUI with just a button. |
JoIgnitionNG.java | Class | Non-Graphical user unterface for jo! Starts a metaserver that allows for shutting
down jo! properly. |
JoInputStream.java | Class | Implementation of ServletInputStream . |
JoMBean.java | Interface | Jo starter. |
JoOutputStream.java | Class | Implementation of ServletOutputStreams . |
JoRequestDispatcher.java | Class | Implementation of
I_JoRequestDispatcher . |
JoRuntimeException.java | Class | |
JoServletConfig.java | Class | Describes the configuration of a servlet. |
JoServletContext.java | Class | Context (webapp) of a group of servlets. |
JoServletContextPeer.java | Class | Kontext eines Servlets. |
JoServletHandler.java | Class | Initializes
I_JoServletRequest and
I_JoServletResponse and executes the matching servlet. |
JoServletModel.java | Class | Encapsulates the servlet instance or instances. |
JoServletRequest.java | Class | Represents the request. |
JoServletResponse.java | Class | Represents the response. |
JoServletService.java | Class | One of the main classes of the server. |
JoSession.java | Class | Realizes the session. |
JoSessionContext.java | Class | SessionContext that is accessible for the engine, but not for the
servlet. |
JoTagLib.java | Class | Represents a taglib entry in web.xml. |
JoWriter.java | Class | Overwrites the close method of PrintWriter to prevent the stream from being closed. |
ListenerSupport.java | Class | Support class that eases the firing of certain ServletContext/HttpSession events
to listeners declared in the deployment descriptor. |
ModelMatch.java | Class | |
RequestInterceptor.java | Interface | |
RequestInterceptorConfig.java | Class | |
RequestWrapper.java | Class | |
TestAll.java | Class | |
TestJoInputStream.java | Class | |
TestJoServletRequest.java | Class | |
TestJoSessionContext.java | Class | |
TestListenerSupport.java | Class | |
TestServletTestWebapp.java | Class | |