1 package org
.argeo
.cms
.jetty
;
3 import java
.util
.Collections
;
4 import java
.util
.HashMap
;
7 import javax
.websocket
.DeploymentException
;
8 import javax
.websocket
.server
.ServerContainer
;
9 import javax
.websocket
.server
.ServerEndpointConfig
;
11 import org
.argeo
.api
.cms
.CmsLog
;
12 import org
.argeo
.cms
.servlet
.httpserver
.HttpContextServlet
;
13 import org
.argeo
.cms
.websocket
.server
.WebsocketEndpoints
;
14 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
15 import org
.eclipse
.jetty
.servlet
.ServletHolder
;
17 import com
.sun
.net
.httpserver
.HttpHandler
;
20 * A {@link JettyHttpContext} based on registering a servlet to the root handler
21 * of the {@link JettyHttpServer}, in order to integrate the sessions.
23 public class ServletHttpContext
extends JettyHttpContext
{
24 private final static CmsLog log
= CmsLog
.getLog(ServletHttpContext
.class);
26 private Map
<String
, Object
> attributes
= Collections
.synchronizedMap(new HashMap
<>());
28 public ServletHttpContext(JettyHttpServer httpServer
, String path
) {
29 super(httpServer
, path
);
31 ServletContextHandler rootContextHandler
= httpServer
.getRootContextHandler();
32 HttpContextServlet servlet
= new HttpContextServlet(this);
33 rootContextHandler
.addServlet(new ServletHolder(servlet
), path
+ "*");
37 public void setHandler(HttpHandler handler
) {
38 super.setHandler(handler
);
41 if (handler
instanceof WebsocketEndpoints
) {
42 ServerContainer serverContainer
= getJettyHttpServer().getRootServerContainer();
43 for (Class
<?
> clss
: ((WebsocketEndpoints
) handler
).getEndPoints()) {
45 serverContainer
.addEndpoint(clss
);
46 log
.debug(() -> "Added web socket " + clss
+ " to " + getPath());
47 } catch (DeploymentException e
) {
48 log
.error("Cannot deploy Web Socket " + clss
, e
);
55 public Map
<String
, Object
> getAttributes() {
60 protected ServletContextHandler
getServletContextHandler() {
61 return getJettyHttpServer().getRootContextHandler();