- All Superinterfaces:
org.eclipse.jetty.util.component.Destroyable,org.eclipse.jetty.util.thread.Invocable,org.eclipse.jetty.util.component.LifeCycle,Request.Handler
- All Known Subinterfaces:
Handler.Collection,Handler.Container,Handler.Singleton,HandlerContainer
- All Known Implementing Classes:
AbstractHandler,AbstractHandlerContainer,BufferedResponseHandler,ConnectHandler,ContextHandler,ContextHandlerCollection,DebugHandler,DefaultHandler,DelayedHandler,EventsHandler,GracefulHandler,GzipHandler,Handler.Abstract,Handler.Abstract.NonBlocking,Handler.AbstractContainer,Handler.Sequence,Handler.Wrapper,HotSwapHandler,IdleTimeoutHandler,InetAccessHandler,LatencyRecordingHandler,MovedContextHandler,PathMappingsHandler,ProxiedRequestHandler,ResourceHandler,ResourceHandler.ResourceContext,SecuredRedirectHandler,Server,ShutdownHandler,SizeLimitHandler,StatisticsHandler,StatisticsHandler.MinimumDataRateHandler,ThreadLimitHandler,TryPathsHandler
A Jetty component that handles HTTP requests, of any version (HTTP/1.1, HTTP/2 or HTTP/3).
A Handler is a Request.Handler with the addition of LifeCycle
behaviours, plus variants that allow organizing Handlers as a tree structure.
Handlers may wrap the Request, Response and/or Callback and
then forward the wrapped instances to their children, so that they see a modified request;
and/or to intercept the read of the request content; and/or intercept the generation of the
response; and/or to intercept the completion of the callback.
A Handler is an Invocable and implementations must respect
the Invocable.InvocationType they declare within calls to
Request.Handler.handle(Request, Response, Callback).
A minimal tree structure could be:
Server `- YourCustomHandler
A more sophisticated tree structure:
Server
`- DelayedHandler.UntilContent
`- GzipHandler
`- ContextHandlerCollection
+- ContextHandler (contextPath="/user")
| `- YourUserHandler
|- ContextHandler (contextPath="/admin")
| `- YourAdminHandler
`- DefaultHandler
A simple Handler implementation could be:
class SimpleHandler extends Handler.Abstract.NonBlocking
{
@Override
public boolean handle(Request request, Response response, Callback callback)
{
// Implicitly sends a 200 OK response with no content.
callback.succeeded();
return true;
}
}
A more sophisticated example of a Handler that decides whether to handle
requests based on their URI path:
class YourHelloHandler extends Handler.Abstract.NonBlocking
{
@Override
public boolean handle(Request request, Response response, Callback callback)
{
if (request.getHttpURI().getPath().startsWith("/yourPath"))
{
// The request is for this Handler
response.setStatus(200);
// The callback is completed when the write is completed.
response.write(true, callback, "hello");
return true;
}
return false;
}
}
An example of a Handler that decides whether to pass the request to
a child:
class ConditionalHandler extends Handler.Wrapper
{
@Override
public boolean handle(Request request, Response response, Callback callback)
{
if (request.getHttpURI().getPath().startsWith("/yourPath")
return super.handle(request, response, callback);
if (request.getHttpURI().getPath().startsWith("/wrong"))
{
Response.writeError(request, response, callback, 400);
return true;
}
return false;
}
}
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic classAn abstract implementation ofHandlerthat is aContainerLifeCycle.static classAHandler.Abstractthat implementsHandler.Container.static interfaceAHandler.Containerthat can contain multiple otherHandlers.static interfaceAHandlerthat contains one or more otherHandlers.static classAHandler.Containerthat contains a list of otherHandlers that are tried in sequence byHandler.Sequence.handle(Request, Response, Callback).static interfaceAHandler.Containerthat can contain a single otherHandler.static classAn implementation ofHandler.Singleton, which is aHandler.Containerthat wraps a single otherHandler.Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.Invocable
org.eclipse.jetty.util.thread.Invocable.Callable, org.eclipse.jetty.util.thread.Invocable.InvocationType, org.eclipse.jetty.util.thread.Invocable.ReadyTask, org.eclipse.jetty.util.thread.Invocable.TaskNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener -
Field Summary
Fields inherited from interface org.eclipse.jetty.util.thread.Invocable
__nonBlocking, NOOP -
Method Summary
Methods inherited from interface org.eclipse.jetty.util.thread.Invocable
getInvocationTypeMethods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stopMethods inherited from interface org.eclipse.jetty.server.Request.Handler
handle
-
Method Details
-
getServer
@ManagedAttribute(value="the Server instance associated to this Handler", readonly=true) Server getServer()- Returns:
- the
Serverassociated with thisHandler
-
setServer
- Parameters:
server- theServerto associate to thisHandler
-
destroy
void destroy()- Specified by:
destroyin interfaceorg.eclipse.jetty.util.component.Destroyable
-