1 package org
.argeo
.cms
.jetty
;
5 import javax
.servlet
.ServletContext
;
6 import javax
.websocket
.DeploymentException
;
7 import javax
.websocket
.server
.ServerContainer
;
9 import org
.argeo
.cms
.servlet
.httpserver
.HttpContextServlet
;
10 import org
.argeo
.cms
.websocket
.server
.WebsocketEndpoints
;
11 import org
.eclipse
.jetty
.ee8
.nested
.SessionHandler
;
12 import org
.eclipse
.jetty
.ee8
.servlet
.ServletContextHandler
;
13 import org
.eclipse
.jetty
.ee8
.servlet
.ServletHolder
;
14 import org
.eclipse
.jetty
.ee8
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
;
15 import org
.eclipse
.jetty
.ee8
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
.Configurator
;
17 import com
.sun
.net
.httpserver
.HttpHandler
;
20 * An @{HttpContext} implementation based on a Jetty
21 * {@link ServletContextHandler}.
23 class ContextHandlerHttpContext
extends JettyHttpContext
{
24 private final ServletContextHandler servletContextHandler
;
25 private final ContextHandlerAttributes attributes
;
27 public ContextHandlerHttpContext(JettyHttpServer httpServer
, String path
) {
28 super(httpServer
, path
);
30 // Jetty context handler
31 this.servletContextHandler
= new ServletContextHandler();
32 servletContextHandler
.setContextPath(path
);
33 HttpContextServlet servlet
= new HttpContextServlet(this);
34 servletContextHandler
.addServlet(new ServletHolder(servlet
), "/*");
35 SessionHandler sessionHandler
= new SessionHandler();
36 // FIXME find a better default
37 sessionHandler
.setMaxInactiveInterval(-1);
38 servletContextHandler
.setSessionHandler(sessionHandler
);
40 attributes
= new ContextHandlerAttributes(servletContextHandler
);
44 public void setHandler(HttpHandler handler
) {
45 super.setHandler(handler
);
48 if (handler
instanceof WebsocketEndpoints
) {
49 JavaxWebSocketServletContainerInitializer
.configure(servletContextHandler
, new Configurator() {
52 public void accept(ServletContext servletContext
, ServerContainer serverContainer
)
53 throws DeploymentException
{
54 for (Class
<?
> clss
: ((WebsocketEndpoints
) handler
).getEndPoints()) {
55 serverContainer
.addEndpoint(clss
);
61 if (getJettyHttpServer().isStarted())
63 servletContextHandler
.start();
64 } catch (Exception e
) {
65 throw new IllegalStateException("Cannot start context handler", e
);
70 public Map
<String
, Object
> getAttributes() {
75 protected ServletContextHandler
getServletContextHandler() {
76 return servletContextHandler
;