1 package org
.argeo
.cms
.jetty
;
3 import java
.util
.AbstractMap
;
4 import java
.util
.Enumeration
;
5 import java
.util
.HashSet
;
9 import javax
.servlet
.ServletContext
;
10 import javax
.websocket
.DeploymentException
;
11 import javax
.websocket
.server
.ServerContainer
;
13 import org
.argeo
.cms
.servlet
.httpserver
.HttpContextServlet
;
14 import org
.argeo
.cms
.websocket
.server
.WebsocketEndpoints
;
15 import org
.eclipse
.jetty
.server
.handler
.ContextHandler
;
16 import org
.eclipse
.jetty
.server
.session
.SessionHandler
;
17 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
18 import org
.eclipse
.jetty
.servlet
.ServletHolder
;
19 import org
.eclipse
.jetty
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
;
20 import org
.eclipse
.jetty
.websocket
.javax
.server
.config
.JavaxWebSocketServletContainerInitializer
.Configurator
;
22 import com
.sun
.net
.httpserver
.HttpHandler
;
25 * An @{HttpContext} implementation based on a Jetty
26 * {@link ServletContextHandler}.
28 class ContextHandlerHttpContext
extends JettyHttpContext
{
29 private final ServletContextHandler servletContextHandler
;
30 private final ContextHandlerAttributes attributes
;
32 public ContextHandlerHttpContext(JettyHttpServer httpServer
, String path
) {
33 super(httpServer
, path
);
35 // Jetty context handler
36 this.servletContextHandler
= new ServletContextHandler();
37 servletContextHandler
.setContextPath(path
);
38 HttpContextServlet servlet
= new HttpContextServlet(this);
39 servletContextHandler
.addServlet(new ServletHolder(servlet
), "/*");
40 SessionHandler sessionHandler
= new SessionHandler();
41 // FIXME find a better default
42 sessionHandler
.setMaxInactiveInterval(-1);
43 servletContextHandler
.setSessionHandler(sessionHandler
);
45 attributes
= new ContextHandlerAttributes(servletContextHandler
);
49 public void setHandler(HttpHandler handler
) {
50 super.setHandler(handler
);
53 if (handler
instanceof WebsocketEndpoints
) {
54 JavaxWebSocketServletContainerInitializer
.configure(servletContextHandler
, new Configurator() {
57 public void accept(ServletContext servletContext
, ServerContainer serverContainer
)
58 throws DeploymentException
{
59 for (Class
<?
> clss
: ((WebsocketEndpoints
) handler
).getEndPoints()) {
60 serverContainer
.addEndpoint(clss
);
66 if (getJettyHttpServer().isStarted())
68 servletContextHandler
.start();
69 } catch (Exception e
) {
70 throw new IllegalStateException("Cannot start context handler", e
);
75 public Map
<String
, Object
> getAttributes() {
80 protected ServletContextHandler
getServletContextHandler() {
81 return servletContextHandler
;