Class EventsHandler
- All Implemented Interfaces:
Handler, Handler.Container, Handler.Singleton, Request.Handler, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle, Invocable
- Direct Known Subclasses:
LatencyRecordingHandler, StatisticsHandler
A Handler.Wrapper that fires events during the processing of the requests.
EventsHandler will emit events for the various phases the server goes through while processing an HTTP request and response.
Subclasses may listen to those events to track timing and/or other values such as request URI, etc.
The events parameters, especially the Request object, may be
in a transient state depending on the event, and not all properties/features
of the parameters may be available inside a listener method.
It is recommended that the event parameters are not acted upon in the listener methods, or undefined behavior may result. On the other hand, it is legit to store request attributes in one listener method that may be possibly retrieved in another listener method in a later event.
Listener methods are invoked synchronously from the thread that is performing the request processing, and they should not call blocking code (otherwise the request processing will be blocked as well).
The kind of chunk passed to onRequestRead(Request, Content.Chunk) depends on
the parent of this handler. For instance, if the parent is the Server, then raw chunks
are always passed. If somewhere in the parent chain is the GzipHandler then
unzipped chunks are passed.
-
Nested Class Summary
Nested classes/interfaces inherited from class Handler.Abstract
Handler.Abstract.NonBlockingNested classes/interfaces inherited from class AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface Container
Container.InheritedListener, Container.ListenerNested classes/interfaces inherited from interface Dumpable
Dumpable.DumpableContainerNested classes/interfaces inherited from interface Handler
Handler.Abstract, Handler.AbstractContainer, Handler.Collection, Handler.Container, Handler.Sequence, Handler.Singleton, Handler.WrapperNested classes/interfaces inherited from interface Invocable
Invocable.Callable, Invocable.InvocationType, Invocable.ReadyTask, Invocable.TaskNested classes/interfaces inherited from interface LifeCycle
LifeCycle.ListenerNested classes/interfaces inherited from interface Request.Handler
Request.Handler.AbortException -
Field Summary
Fields inherited from interface Invocable
__nonBlocking, NOOP -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanInvoked to handle the passed HTTP request and response.protected voidonAfterHandling(Request request, boolean handled, Throwable failure) Invoked after application handling (i.e. just after the call to theRunnablereturned fromHttpChannel.onRequest(MetaData.Request)returns).protected voidonBeforeHandling(Request request) Invoked just before calling the server handler tree (i.e. just before theRunnablereturned fromHttpChannel.onRequest(MetaData.Request)is run).protected voidonComplete(Request request, int status, HttpFields headers, Throwable failure) Invoked when the request and response processing are complete, just before the request and response will be recycled (i.e. after theRunnablereturn fromHttpChannel.onRequest(MetaData.Request)has returned and theCallbackpassed toRequest.Handler.handle(Request, Response, Callback)has been completed).protected voidonComplete(Request request, Throwable failure) Deprecated.protected voidonRequestRead(Request request, Content.Chunk chunk) Invoked every time a request content chunk has been parsed, just before making it available to the application (i.e. from within a call toRequest.read()).protected voidonResponseBegin(Request request, int status, HttpFields headers) Invoked just before the response is line written to the network (i.e. from within the first call toResponse.write(boolean, ByteBuffer, Callback)).protected voidonResponseTrailersComplete(Request request, HttpFields trailers) Invoked after the response trailers have been written and the finalonResponseWriteComplete(Request, Throwable)event was fired.protected voidonResponseWrite(Request request, boolean last, ByteBuffer content) Invoked before each response content chunk has been written (i.e. from within the any call toResponse.write(boolean, ByteBuffer, Callback)).protected voidonResponseWriteComplete(Request request, Throwable failure) Invoked after each response content chunk has been written (i.e. immediately before calling theCallbackpassed toResponse.write(boolean, ByteBuffer, Callback)).Methods inherited from class Handler.Wrapper
getHandler, getInvocationType, setHandlerMethods inherited from class Handler.AbstractContainer
findContainerOf, getDescendant, getDescendants, isDynamic, setDynamic, setServerMethods inherited from class Handler.Abstract
destroy, doStart, doStop, getServerMethods inherited from class ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, installBean, installBean, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeansMethods inherited from class AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toStringMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface Container
getCachedBeans, getEventListenersMethods inherited from interface Destroyable
destroyMethods inherited from interface Dumpable.DumpableContainer
isDumpableMethods inherited from interface Handler.Container
getContainer, getDescendant, getDescendants, getDescendantsMethods inherited from interface Handler.Singleton
getHandlers, getTail, insertHandler, setHandlerMethods inherited from interface LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
-
Constructor Details
-
EventsHandler
public EventsHandler() -
EventsHandler
-
-
Method Details
-
handle
Description copied from interface:Request.HandlerInvoked to handle the passed HTTP request and response.
The request is accepted by returning true, then handling must be concluded by completing the passed callback. The handling may be asynchronous, i.e. this method may return true and complete the given callback later, possibly from a different thread. If this method returns false, then the callback must not be invoked and any mutation on the response reversed.
Exceptions thrown by this method may be subsequently handled by an error
Request.Handler, if present, otherwise a default HTTP 500 error is generated and the callback completed while writing the error response.The simplest implementation is:
public boolean handle(Request request, Response response, Callback callback) { callback.succeeded(); return true; }A HelloWorld implementation is:
public boolean handle(Request request, Response response, Callback callback) { response.write(true, ByteBuffer.wrap("Hello World\n".getBytes(StandardCharsets.UTF_8)), callback); return true; }- Specified by:
handlein interfaceRequest.Handler- Overrides:
handlein classHandler.Wrapper- Parameters:
request- the HTTP request to handleresponse- the HTTP response to handlecallback- the callback to complete when the handling is complete- Returns:
- True if and only if the request will be handled, a response generated and the callback eventually called. This may occur within the scope of the call to this method, or asynchronously some time later. If false is returned, then this method must not generate a response, nor complete the callback.
- Throws:
Exception- if there is a failure during the handling. Catchers cannot assume that the callback will be called and thus should attempt to complete the request as if a false had been returned.- See Also:
-
onBeforeHandling
Invoked just before calling the server handler tree (i.e. just before theRunnablereturned fromHttpChannel.onRequest(MetaData.Request)is run).This is the final state of the request before the handlers are called. This includes any request customization.
- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.- See Also:
-
onRequestRead
Invoked every time a request content chunk has been parsed, just before making it available to the application (i.e. from within a call toRequest.read()).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.chunk- a potentially null request content chunk, includingerrorandTrailerschunks. If a reference to the chunk (or itsByteBuffer) is kept, thenRetainable.retain()must be called.- See Also:
-
onAfterHandling
Invoked after application handling (i.e. just after the call to theRunnablereturned fromHttpChannel.onRequest(MetaData.Request)returns).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.handled- if the server handlers handled the requestfailure- the exception thrown by the application- See Also:
-
onResponseBegin
Invoked just before the response is line written to the network (i.e. from within the first call toResponse.write(boolean, ByteBuffer, Callback)).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.status- the response statusheaders- the immutable fields of the response object- See Also:
-
onResponseWrite
Invoked before each response content chunk has been written (i.e. from within the any call toResponse.write(boolean, ByteBuffer, Callback)).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.last- indicating last writecontent- TheByteBufferof the response content chunk (readonly).- See Also:
-
onResponseWriteComplete
Invoked after each response content chunk has been written (i.e. immediately before calling theCallbackpassed toResponse.write(boolean, ByteBuffer, Callback)). This will always fire beforeonResponseTrailersComplete(Request, HttpFields)is fired.- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.failure- if there was a failure to write the given content- See Also:
-
onResponseTrailersComplete
Invoked after the response trailers have been written and the finalonResponseWriteComplete(Request, Throwable)event was fired.- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.trailers- the written trailers.
-
onComplete
Deprecated.OverrideonComplete(Request, int, HttpFields, Throwable)instead.Invoked when the request and response processing are complete, just before the request and response will be recycled (i.e. after theRunnablereturn fromHttpChannel.onRequest(MetaData.Request)has returned and theCallbackpassed toRequest.Handler.handle(Request, Response, Callback)has been completed).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.failure- if there was a failure to complete.
-
onComplete
Invoked when the request and response processing are complete, just before the request and response will be recycled (i.e. after theRunnablereturn fromHttpChannel.onRequest(MetaData.Request)has returned and theCallbackpassed toRequest.Handler.handle(Request, Response, Callback)has been completed).- Parameters:
request- the request object. Theread(),demand(Runnable)andfail(Throwable)methods must not be called by the listener.status- the response status.headers- the immutable fields of the response object.failure- if there was a failure to complete.
-
onComplete(Request, int, HttpFields, Throwable)instead.