Oberon || Library || Module Index || Search Engine || Definition || Module

Ulm's Oberon Library:


WebHandlers - HTTP request processing


TYPE Handler = POINTER TO HandlerRec;
TYPE HandlerRec =

TYPE Request = POINTER TO RequestRec; TYPE RequestRec = RECORD serverAddress: Networks.Address; (* To distinguish clients on different ports *) clientAddress: Networks.Address; (* address of the client *) method: Streams.Stream; (* requested Method *) url: InetURLs.URL; (* requested resource *) versionMajor: SHORTINT; (* of Client *) versionMinor: SHORTINT; (* of Client *) headers: HTTPHeaders.HeaderSet; body: Streams.Stream; (* NIL, if there is no body *) response: Streams.Stream; (* where to send the response *) END;

HandleRequestProc = PROCEDURE (handler: Handler; request: Request; errors: RelatedEvents.Object); Interface = POINTER TO InterfaceRec; InterfaceRec = RECORD (Objects.ObjectRec) handleRequest: HandleRequestProc; END;

PROCEDURE Init(handler: Handler; if: Interface); PROCEDURE HandleRequest(handler: Handler; request: Request; errors: RelatedEvents.Object);


The module WebHandlers defines an abstraction to processes a HTTP request of a client. It searches for the web object identified by the URL and creates a response. WebObjects is used to obtain the data, to create the status line, the headers of the response and the body.

Request structure

The Request-record provides all necessary information of a client request. It contains the message method, the URL to determine the web object, information about the client used HTTP version, all request headers and if supplied the body of the client request.

In serverAddress you can find the port of the daemon providing the request. So you can use one web handler to maintain different ports. clientAddress provides the address of the client (not yet implemented; clientAddress is always NIL).

The response-stream ist the network stream to the client. A web handler must send his responses to that stream.

Providing Web-handlers

Implementations must initialize new instances of web handlers using Init, specifying an interface if. if only contains the HandleRequest procedure.

handleRequest: PROCEDURE(handler: Handler; request: Request; errors: RelatedEvents.Object);
is normally called by a Daemon wenn a request occurs. request contains all necessary information about the request. This request has to be processed by the Handler and the response must be sent to request.response. request.response will remain open if it isn't explicitly closed by HandleRequest (so a client can make repeated request on the same connection). Because of simultaneous requests, the Implementor must be aware of creating a reentrant procedure.

Using Web-handlers.

HandleRequest is normally called by a HTTP daemon. In request the caller provides the split response of the client. If there is an error during the work it should raised related to errors.


WebHandler itself does not generate error events. Only the underlying implementations of HandleRequest raise errors as RelatedEvents to the given errors parameter.


addresses for web pages
manage HTTP-header fields
write HTTP-structures to client stream
receiving a request from a client
error handling
stream operations
abstraction for world wide web objects


Manfred Rueß, University of Ulm
Edited by: borchert, last change: 1998/04/24, revision: 1.1, converted to HTML: 1998/04/24

Oberon || Library || Module Index || Search Engine || Definition || Module