Merge remote-tracking branch 'origin/jetty-9.4.x' into jetty-10.0.x
This commit is contained in:
commit
fcca9e07d2
|
@ -0,0 +1,195 @@
|
|||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2020 Mort Bay Consulting Pty Ltd and others.
|
||||
// ========================================================================
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
[[writing-custom-handlers]]
|
||||
=== Writing Custom Handlers
|
||||
|
||||
The Handler is the Jetty component that deals with received requests.
|
||||
|
||||
Many users of Jetty never need to write a Jetty Handler, but instead use the link:{JDURL}/org/eclipse/jetty/servlet/package-summary.html[Servlet API.]
|
||||
You can reuse the existing Jetty handlers for context, security, sessions and servlets without the need for extension.
|
||||
However, some users might have special requirements or footprint concerns that prohibit the use of the full servlet API.
|
||||
For them implementing a Jetty handler is a straight forward way to provide dynamic web content with a minimum of fuss.
|
||||
|
||||
See the section on xref:basic-architecture[] to understand more about Handlers vs. Servlets.
|
||||
|
||||
[[handler-api]]
|
||||
==== The Handler API
|
||||
|
||||
The link:{JDURL}/org/eclipse/jetty/server/Handler.html[Handler] interface provides Jetty's core of content generation or manipulation.
|
||||
Classes that implement this interface are used to coordinate requests, filter requests and generate content.
|
||||
|
||||
The core API of the Handler interface is:
|
||||
|
||||
[source, java, subs="{sub-order}"]
|
||||
----
|
||||
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
|
||||
throws IOException, ServletException
|
||||
----
|
||||
|
||||
An implementation of this method can handle a request and pass the request onto another handler (or servlet), or it can modify and/or wrap the request before passing it on.
|
||||
This gives three styles of handler:
|
||||
|
||||
* Coordinating Handlers - Handlers that route requests to other handlers (`HandlerCollection`, `ContextHandlerCollection`)
|
||||
* Filtering Handlers - Handlers that augment a request and pass it on to other handlers (`HandlerWrapper`, `ContextHandler`, `SessionHandler`)
|
||||
* Generating Handlers - Handlers that produce content (`ResourceHandler` and `ServletHandler`)
|
||||
|
||||
[[target]]
|
||||
===== The Target
|
||||
|
||||
The target of a handler is an identifier for the resource that should handle the passed request.
|
||||
This is normally the URI that is parsed from an HTTP Request.
|
||||
However, in two key circumstances the target may differ from the URI of the passed request:
|
||||
|
||||
* If the request has been dispatched to a named resource, such as a named servlet, the target is the name of that resource.
|
||||
* If the request is being made by a call to link:http://docs.oracle.com/javaee/7/api/javax/servlet/RequestDispatcher.html[`RequestDispatcher`], the target is the URI of the included resource and is different to the URI of the actual request.
|
||||
|
||||
[[request-and-response]]
|
||||
===== The Request and Response
|
||||
|
||||
The request and response objects used in the signature of the handle method are
|
||||
link:http://docs.oracle.com/javaee/7/api/javax/servlet/ServletRequest.html[`ServletRequest`] and link:http://docs.oracle.com/javaee/7/api/javax/servlet/ServletResponse.html[`ServletResponse`].
|
||||
These are the standard APIs and are moderately restricted in what they can do to the request and response.
|
||||
More often than not, access to the Jetty implementations of these classes is required: link:{JDURL}/org/eclipse/jetty/server/Request.html[`Request`] and link:{JDURL}/org/eclipse/jetty/server/Response.html[`Response`].
|
||||
However, as the request and response may be wrapped by handlers, filters and servlets, it is not possible to pass the implementation directly.
|
||||
The following mantra retrieves the core implementation objects from under any wrappers:
|
||||
|
||||
[source, java, subs="{sub-order}"]
|
||||
----
|
||||
Request base_request = request instanceof Request ? (Request)request : HttpConnection.getCurrentConnection().getHttpChannel().getRequest();
|
||||
Response base_response = response instanceof Response ? (Response)response : HttpConnection.getCurrentConnection().getHttpChannel().getResponse();
|
||||
----
|
||||
|
||||
Notice that if the handler passes the request on to another handler, it should use the Request/Response objects passed in, and not the base objects.
|
||||
This is to preserve any wrapping done by up stream handlers.
|
||||
|
||||
[[dispatch]]
|
||||
===== The Dispatch
|
||||
|
||||
The dispatch argument indicates the state of the handling of the call and may be:
|
||||
|
||||
* `REQUEST == 1` - An original request received from a connector.
|
||||
* `FORWARD == 2` - A request being forwarded by a RequestDispatcher.
|
||||
* `INCLUDE == 4` - A request being included by a RequestDispatcher.
|
||||
* `ERROR == 8` - A request being forwarded to a error handler by the container.
|
||||
|
||||
These mostly have significance for servlet and related handlers.
|
||||
For example, the security handler only applies authentication and authorization to REQUEST dispatches.
|
||||
|
||||
[[handling-requests]]
|
||||
==== Handling Requests
|
||||
|
||||
A Handler may handle a request by:
|
||||
|
||||
* xref:generating-response[]
|
||||
* xref:filtering-request-or-response[]
|
||||
* xref:passing-request-and-response[]
|
||||
|
||||
[[generating-response]]
|
||||
===== Generating a Response
|
||||
|
||||
The link:{JDURL}/org/eclipse/jetty/embedded/OneHandler.html[`OneHandler`] embedded example shows how a simple handler can generate a response.
|
||||
|
||||
You can use the standard servlet response API, which will typically set some status, content headers and then write out the content:
|
||||
|
||||
[source, java, subs="{sub-order}"]
|
||||
----
|
||||
response.setContentType("text/html");
|
||||
response.setStatus(HttpServletResponse.SC_OK);
|
||||
response.getWriter().println("<h1>Hello OneHandler</h1>");
|
||||
----
|
||||
|
||||
It is also very important that a handler indicate that it has completed handling the request and that the request should not be passed to other handlers:
|
||||
|
||||
[source, java, subs="{sub-order}"]
|
||||
----
|
||||
Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getHttpChannel().getRequest();
|
||||
base_request.setHandled(true);
|
||||
----
|
||||
|
||||
[[filtering-request-or-response]]
|
||||
===== Filtering the Request and/or Response
|
||||
|
||||
Once the base request or response object is obtained, you can modify it.
|
||||
Typically you would make modifications to accomplish:
|
||||
|
||||
* Breaking the URI into contextPath, servletPath and pathInfo components.
|
||||
* Associating a resource base with a request for static content.
|
||||
* Associating a session with a request.
|
||||
* Associating a security principal with a request.
|
||||
* Changing the URI and paths during a request dispatch forward to another resource.
|
||||
|
||||
You can also update the context of the request:
|
||||
|
||||
* Setting the current threads context classloader.
|
||||
* Setting thread locals to identify the current `ServletContext`.
|
||||
|
||||
Typically Jetty passes a modified request to another handler and undoes modifications in a finally block afterwards:
|
||||
|
||||
[source, java, subs="{sub-order}"]
|
||||
----
|
||||
try
|
||||
{
|
||||
base_request.setSession(a_session);
|
||||
next_handler.handle(target,request,response,dispatch);
|
||||
}
|
||||
finally
|
||||
{
|
||||
base_request.setSession(old_session);
|
||||
}
|
||||
----
|
||||
|
||||
The classes that implement the link:{JDURL}/org/eclipse/jetty/server/handler/HandlerWrapper.html[`HandlerWrapper`] class are typically handler filters of this style.
|
||||
|
||||
[[passing-request-and-response]]
|
||||
===== Passing the Request and Response to Another Handler
|
||||
|
||||
A handler might simply inspect the request and use the target, request URI or other information to select another handler to pass the request to.
|
||||
These handlers typically implement the link:{JDURL}/org/eclipse/jetty/server/HandlerContainer.html[`HandlerContainer`] interface.
|
||||
|
||||
Examples include:
|
||||
|
||||
* link:{JDURL}/org/eclipse/jetty/server/handler/HandlerCollection.html[Class `HandlerCollection`] -
|
||||
A collection of handlers, where each handler is called regardless of the state of the request.
|
||||
This is typically used to pass a request to a link:{JDURL}/org/eclipse/jetty/server/handler/ContextHandlerCollection.html[`ContextHandlerCollection`,] and then the link:{JDURL}/org/eclipse/jetty/server/handler/RequestLogHandler.html[`RequestLogHandler`.]
|
||||
* link:{JDURL}/org/eclipse/jetty/server/handler/HandlerList.html[`HandlerList`] - A list of handlers that are called in turn until the request state is set as handled.
|
||||
* link:{JDURL}/org/eclipse/jetty/server/handler/ContextHandlerCollection.html[`ContextHandlerCollection`] - A collection of Handlers, of which one is selected by best match for the context path.
|
||||
|
||||
[[injecting-handlers]]
|
||||
==== Injecting Handlers
|
||||
|
||||
The `Handler` needs to be added to the server classpath as described in xref:startup-classpath[].
|
||||
Then it can be added to the server, either by overriding some existing XML configuration files such as `jetty.xml` as shown below, or by defining a custom module as described in xref:custom-modules[].
|
||||
|
||||
[source, xml]
|
||||
----
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
|
||||
<Configure id="Server" class="org.eclipse.jetty.server.Server">
|
||||
<Call name="setHandler">
|
||||
<Arg>
|
||||
<New id="myCustomJettyHandler" class="com.my.handler.CustomJettyHandler" />
|
||||
</Arg>
|
||||
</Call>
|
||||
</Configure>
|
||||
----
|
||||
|
||||
[[more-about-handlers]]
|
||||
==== More About Handlers
|
||||
|
||||
See the link:{JDURL}/[latest Jetty JavaDoc] for detailed information on each Jetty handler.
|
|
@ -0,0 +1,189 @@
|
|||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2020 Mort Bay Consulting Pty Ltd and others.
|
||||
// ========================================================================
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
[[jetty-server-dump]]
|
||||
=== Jetty Server Dump
|
||||
|
||||
The dump feature in Jetty provides a snapshot of the bean containment tree of the main Jetty components together with a summary of their configuration. This includes threadpool, connectors, contexts, webapplications, servlets and so forth.
|
||||
|
||||
[[configuring-dump-feature]]
|
||||
==== Configuring the Jetty Server Dump
|
||||
|
||||
You can request that Jetty do a dump immediately after starting and just before stopping by calling the appropriate setters on the `Server` instance.
|
||||
For embedded usage this can be used by calling the setters directly.
|
||||
```java
|
||||
server.setDumpAfterStart(true);
|
||||
server.setDumpBeforeStop(true);
|
||||
```
|
||||
|
||||
Standalone Jetty uses two properties to control this behaviour which are referenced in `jetty.xml` to call these setters.
|
||||
These properties are `jetty.server.dumpAfterStart` and `jetty.server.dumpBeforeStop`.
|
||||
|
||||
These can be temporarily enabled by supplying these properties as command line arguments,
|
||||
or they can be enabled via the `server.ini` file (see xref:quick-start-configure[]).
|
||||
```
|
||||
java -jar $JETTY_HOME/start.jar jetty.server.dumpAfterStart=true jetty.server.dumpBeforeStop=true
|
||||
```
|
||||
|
||||
[[extra-threadpool-info]]
|
||||
==== Extra ThreadPool Information
|
||||
|
||||
To get maximum detail from the `QueuedThreadPool` in the dump, you need to `setDetailDump(true)` on any instances of `QueuedThreadPool` you are using.
|
||||
This extra detail in the detailed dump consists of full stack traces for every running thread, and a list of queued jobs waiting to be run.
|
||||
|
||||
For embedded usage this can be used by calling the setters directly.
|
||||
```java
|
||||
threadPool.setDetailedDump(true);
|
||||
```
|
||||
|
||||
For standalone jetty you can enable the `threadpool` module and configure the `jetty.threadPool.detailedDump` property.
|
||||
See xref:startup-modules[] for information on how to enable a module.
|
||||
This same property can also be set via the command line the same as the server dump property.
|
||||
|
||||
[[dump-tool-via-jmx]]
|
||||
==== Using the Dump Feature via JMX
|
||||
|
||||
The `dump` method is on the Server instance and many of its nested components (Handlers, Connectors, and so forth).
|
||||
Dumps may be obtained by calling these methods either in code or via JMX (see xref:using-jmx[]).
|
||||
|
||||
The Server MBean has a `dump()` method, which dumps everything, plus a `dumpStdErr()` operation that dumps to StdErr rather than replying to JConsole.
|
||||
|
||||
[[examing-jetty-distro-dump]]
|
||||
==== Explanation of the Dump Key
|
||||
|
||||
- `+- bean` is a java POJO that is contained by the parent object as a bean added with the addBean method.
|
||||
- `+= managed` is a bean that is also a LifeCycle that is started and stopped with the parent object.
|
||||
- `+~ unmanaged` is a bean that is also a LifeCycle that is started and stopped with the parent object. It is typically shared with other objects (hence its children are not dumped).
|
||||
- `+? auto` is a bean that has been added to an unstarted parent. If it is a LifeCycle that is not started when the parent is started, then it is started and becomes a managed bean, otherwise it becomes either unmanaged or just a bean.
|
||||
- `+: iterable` is an object that is contained within an iterable field of the parent (eg a list, set etc).
|
||||
- `+] array` is an object that is contained within an array field of the parent.
|
||||
- `+@ map` is an object that is contained within an map field of the parent.
|
||||
- `+> undefined` is an object that is contained within the parent by an undefined relationship.
|
||||
|
||||
==== Jetty Server Dump Example
|
||||
|
||||
This is a dump of the OneServletContext embedded example with extra threadpool information:
|
||||
|
||||
....
|
||||
Server@59906517{STARTED}[9.4.32-SNAPSHOT] - STARTED
|
||||
+= QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}] - STARTED
|
||||
| += ReservedThreadExecutor@77e4c80f{s=0/4,p=0} - STARTED
|
||||
| +> threads size=8
|
||||
| | +> 12 qtp1740189450-12 SELECTING RUNNABLE 5
|
||||
| | +> 14 qtp1740189450-14-acceptor-0@4c78251c-ServerConnector@76707e36{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} ACCEPTING RUNNABLE 3
|
||||
| | +> 16 qtp1740189450-16 IDLE TIMED_WAITING 5
|
||||
| | +> 18 qtp1740189450-18 IDLE TIMED_WAITING 5
|
||||
| | +> 15 qtp1740189450-15 SELECTING RUNNABLE 5
|
||||
| | +> 19 qtp1740189450-19 IDLE TIMED_WAITING 5
|
||||
| | +> 17 qtp1740189450-17 IDLE TIMED_WAITING 5
|
||||
| | +> 13 qtp1740189450-13 IDLE TIMED_WAITING 5
|
||||
| +> jobs size=0
|
||||
+= ServerConnector@76707e36{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
|
||||
| +~ Server@59906517{STARTED}[9.4.32-SNAPSHOT] - STARTED
|
||||
| +~ QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}] - STARTED
|
||||
| += ScheduledExecutorScheduler@7fe8ea47{STARTED} - STARTED
|
||||
| +- org.eclipse.jetty.io.ArrayByteBufferPool@226a82c4
|
||||
| += HttpConnectionFactory@711f39f9[HTTP/1.1] - STARTED
|
||||
| | +- HttpConfiguration@731f8236{32768/8192,8192/8192,https://:0,[]}
|
||||
| | +> customizers size=0
|
||||
| | +> formEncodedMethods size=2
|
||||
| | | +> POST
|
||||
| | | +> PUT
|
||||
| | +> outputBufferSize=32768
|
||||
| | +> outputAggregationSize=8192
|
||||
| | +> requestHeaderSize=8192
|
||||
| | +> responseHeaderSize=8192
|
||||
| | +> headerCacheSize=1024
|
||||
| | +> secureScheme=https
|
||||
| | +> securePort=0
|
||||
| | +> idleTimeout=-1
|
||||
| | +> blockingTimeout=-1
|
||||
| | +> sendDateHeader=true
|
||||
| | +> sendServerVersion=true
|
||||
| | +> sendXPoweredBy=false
|
||||
| | +> delayDispatchUntilContent=true
|
||||
| | +> persistentConnectionsEnabled=true
|
||||
| | +> maxErrorDispatches=10
|
||||
| | +> minRequestDataRate=0
|
||||
| | +> minResponseDataRate=0
|
||||
| | +> cookieCompliance=RFC6265
|
||||
| | +> setRequestCookieCompliance=RFC6265
|
||||
| | +> notifyRemoteAsyncErrors=true
|
||||
| | +> relativeRedirectAllowed=false
|
||||
| += SelectorManager@ServerConnector@76707e36{HTTP/1.1, (http/1.1)}{0.0.0.0:8080} - STARTED
|
||||
| | += ManagedSelector@564718df{STARTED} id=0 keys=0 selected=0 updates=0 - STARTED
|
||||
| | | += EatWhatYouKill@51b7e5df/SelectorProducer@18a70f16/PRODUCING/p=false/QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}][pc=0,pic=0,pec=0,epc=0]@2020-08-26T08:51:02.711784+10:00 - STARTED
|
||||
| | | | +- SelectorProducer@18a70f16
|
||||
| | | | +~ QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}] - STARTED
|
||||
| | | +> updates @ 2020-08-26T08:51:02.705944+10:00 size=0
|
||||
| | | +> keys @ 2020-08-26T08:51:02.706914+10:00 size=0
|
||||
| | += ManagedSelector@62e136d3{STARTED} id=1 keys=0 selected=0 updates=0 - STARTED
|
||||
| | += EatWhatYouKill@c8e4bb0/SelectorProducer@6279cee3/PRODUCING/p=false/QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}][pc=0,pic=0,pec=0,epc=0]@2020-08-26T08:51:02.717119+10:00 - STARTED
|
||||
| | | +- SelectorProducer@6279cee3
|
||||
| | | +~ QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}] - STARTED
|
||||
| | +> updates @ 2020-08-26T08:51:02.715887+10:00 size=0
|
||||
| | +> keys @ 2020-08-26T08:51:02.716158+10:00 size=0
|
||||
| +- sun.nio.ch.ServerSocketChannelImpl[/0:0:0:0:0:0:0:0:8080]
|
||||
| +- qtp1740189450-14-acceptor-0@4c78251c-ServerConnector@76707e36{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
|
||||
+= AttributeContainerMap@4206a205{size=0} - STARTED
|
||||
+= o.e.j.s.ServletContextHandler@4ba2ca36{/,file:///tmp/,AVAILABLE} - STARTED
|
||||
| += org.eclipse.jetty.server.session.SessionHandler2007331442==dftMaxIdleSec=-1 - STARTED
|
||||
| | += ServletHandler@29ba4338{STARTED} - STARTED
|
||||
| | | +> listeners ServletHandler@29ba4338{STARTED} size=2
|
||||
| | | | +> ListenerHolder@57175e74{STARTED}: org.eclipse.jetty.embedded.OneServletContext$InitListener - STARTED
|
||||
| | | | +> ListenerHolder@7bb58ca3{STARTED}: org.eclipse.jetty.embedded.OneServletContext$RequestListener - STARTED
|
||||
| | | +> filters ServletHandler@29ba4338{STARTED} size=2
|
||||
| | | | +> org.eclipse.jetty.embedded.OneServletContext$TestFilter-29b5cd00@29b5cd00==org.eclipse.jetty.embedded.OneServletContext$TestFilter,inst=true,async=true - STARTED
|
||||
| | | | | +> org.eclipse.jetty.embedded.OneServletContext$TestFilter@c540f5a
|
||||
| | | | +> org.eclipse.jetty.embedded.OneServletContext$TestFilter-7113b13f@7113b13f==org.eclipse.jetty.embedded.OneServletContext$TestFilter,inst=true,async=true - STARTED
|
||||
| | | | +> org.eclipse.jetty.embedded.OneServletContext$TestFilter@770c2e6b
|
||||
| | | +> filterMappings ServletHandler@29ba4338{STARTED} size=2
|
||||
| | | | +> [/test/*]/[]/[REQUEST]=>org.eclipse.jetty.embedded.OneServletContext$TestFilter-29b5cd00
|
||||
| | | | +> [*.test]/[]/[REQUEST, ASYNC]=>org.eclipse.jetty.embedded.OneServletContext$TestFilter-7113b13f
|
||||
| | | +> servlets ServletHandler@29ba4338{STARTED} size=3
|
||||
| | | | +> org.eclipse.jetty.embedded.HelloServlet-6b57696f@99887e98==org.eclipse.jetty.embedded.HelloServlet,jsp=null,order=-1,inst=false,async=true - STARTED
|
||||
| | | | | +> class org.eclipse.jetty.embedded.HelloServlet
|
||||
| | | | +> debug@5b09653==org.eclipse.jetty.embedded.DumpServlet,jsp=null,order=-1,inst=false,async=true - STARTED
|
||||
| | | | | +> class org.eclipse.jetty.embedded.DumpServlet
|
||||
| | | | +> org.eclipse.jetty.servlet.DefaultServlet-38bc8ab5@f1bd2681==org.eclipse.jetty.servlet.DefaultServlet,jsp=null,order=-1,inst=false,async=true - STARTED
|
||||
| | | | +> class org.eclipse.jetty.servlet.DefaultServlet
|
||||
| | | +> servletMappings ServletHandler@29ba4338{STARTED} size=4
|
||||
| | | +> [/hello/*]=>org.eclipse.jetty.embedded.HelloServlet-6b57696f
|
||||
| | | +> [/dump/*]=>debug
|
||||
| | | +> [*.dump]=>debug
|
||||
| | | +> [/]=>org.eclipse.jetty.servlet.DefaultServlet-38bc8ab5
|
||||
| | += org.eclipse.jetty.server.session.DefaultSessionCache@6328d34a[evict=-1,removeUnloadable=false,saveOnCreate=false,saveOnInactiveEvict=false] - STARTED
|
||||
| | | += org.eclipse.jetty.server.session.NullSessionDataStore@145eaa29[passivating=false,graceSec=3600] - STARTED
|
||||
| | +~ DefaultSessionIdManager@15bb6bea{STARTED}[worker=node0] - STARTED
|
||||
| +> No ClassLoader
|
||||
| +> eventListeners o.e.j.s.ServletContextHandler@4ba2ca36{/,file:///tmp/,AVAILABLE} size=2
|
||||
| | +> org.eclipse.jetty.embedded.OneServletContext$InitListener@8b96fde
|
||||
| | +> org.eclipse.jetty.embedded.OneServletContext$RequestListener@2d2e5f00
|
||||
| +> handler attributes o.e.j.s.ServletContextHandler@4ba2ca36{/,file:///tmp/,AVAILABLE} size=1
|
||||
| | +> org.eclipse.jetty.server.Executor=QueuedThreadPool[qtp1740189450]@67b92f0a{STARTED,8<=8<=200,i=5,r=4,q=0}[ReservedThreadExecutor@77e4c80f{s=0/4,p=0}]
|
||||
| +> context attributes o.e.j.s.ServletContextHandler@4ba2ca36{/,file:///tmp/,AVAILABLE} size=2
|
||||
| | +> org.eclipse.jetty.util.DecoratedObjectFactory=org.eclipse.jetty.util.DecoratedObjectFactory[decorators=1]
|
||||
| | +> X-Init=true
|
||||
| +> initparams o.e.j.s.ServletContextHandler@4ba2ca36{/,file:///tmp/,AVAILABLE} size=0
|
||||
+= ErrorHandler@2ea6137{STARTED} - STARTED
|
||||
+= DefaultSessionIdManager@15bb6bea{STARTED}[worker=node0] - STARTED
|
||||
| += HouseKeeper@3439f68d{STARTED}[interval=660000, ownscheduler=true] - STARTED
|
||||
+> jdk.internal.loader.ClassLoaders$AppClassLoader@2c13da15
|
||||
+> jdk.internal.loader.ClassLoaders$PlatformClassLoader@41ee392b
|
||||
key: +- bean, += managed, +~ unmanaged, +? auto, +: iterable, +] array, +@ map, +> undefined
|
||||
....
|
Loading…
Reference in New Issue