sunlabs.brazil.server
public interface Handler
The {@link #init(Server, String)} method is called before this
Handler
processes the first HTTP request, to allow it to
prepare itself, such as by allocating any resources needed for the
lifetime of the server
.
The {@link #respond(Request)} method is called to handle an HTTP request. This method, and all methods it calls must be thread-safe since they may handle HTTP requests from multiple sockets concurrently. However, each concurrent request gets its own individual {@link Request} object.
Any instance variables should be initialized in the {@link #init(Server, String)}, and only referenced, but not set in the {@link #respond(Request)} method. If any state needs to be retained, it should be done either by associating it with the {@link Request} object, or using the {@link sunlabs.brazil.session.SessionManager session manager}. Class statics should be avoided, as it is possible, and even common to run multiple unrelated Brazil servers in the same JVM. As above, the {@link sunlabs.brazil.session.SessionManager session manager} should be used instead.
Version: 2.3
Method Summary | |
---|---|
boolean | init(Server server, String prefix)
Initializes the handler.
|
boolean | respond(Request request)
Responds to an HTTP request.
|
Parameters: server
The HTTP server that created this Handler
.
Typical Handler
s will use {@link Server#props}
to obtain run-time configuration information.
prefix
The handlers name.
The string this Handler
may prepend to all
of the keys that it uses to extract configuration information
from {@link Server#props}. This is set (by the {@link Server}
and {@link ChainHandler}) to help avoid configuration parameter
namespace collisions.
Returns: true
if this Handler
initialized
successfully, false
otherwise. If
false
is returned, this Handler
should not be used.
Parameters: request
The Request
object that represents the HTTP
request.
Returns: true
if the request was handled. A request was
handled if a response was supplied to the client, typically
by calling Request.sendResponse()
or
Request.sendError
.
Throws: IOException
if there was an I/O error while sending the response to
the client. Typically, in that case, the
The Server
will (try to) send an error message to the client and then
close the client's connection.
IOException
should not be used to silently
ignore problems such as being unable to access some
server-side resource (for example getting a
FileNotFoundException
due to not being able
to open a file). In that case, the Handler
's
duty is to turn that IOException
into a
HTTP response indicating, in this case, that a file could
not be found.