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
;
10 import org
.argeo
.api
.cms
.CmsLog
;
11 import org
.argeo
.cms
.servlet
.httpserver
.HttpContextServlet
;
12 import org
.argeo
.cms
.websocket
.server
.WebsocketEndpoints
;
13 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
14 import org
.eclipse
.jetty
.servlet
.ServletHolder
;
16 import com
.sun
.net
.httpserver
.HttpHandler
;
19 * A {@link JettyHttpContext} based on registering a servlet to the root handler
20 * of the {@link JettyHttpServer}, in order to integrate the sessions.
22 public class ServletHttpContext
extends JettyHttpContext
{
23 private final static CmsLog log
= CmsLog
.getLog(ServletHttpContext
.class);
25 private Map
<String
, Object
> attributes
= Collections
.synchronizedMap(new HashMap
<>());
27 public ServletHttpContext(JettyHttpServer httpServer
, String path
) {
28 super(httpServer
, path
);
30 ServletContextHandler rootContextHandler
= httpServer
.getRootContextHandler();
31 HttpContextServlet servlet
= new HttpContextServlet(this);
32 rootContextHandler
.addServlet(new ServletHolder(servlet
), path
+ "*");
36 public void setHandler(HttpHandler handler
) {
37 super.setHandler(handler
);
40 if (handler
instanceof WebsocketEndpoints
) {
41 ServerContainer serverContainer
= getJettyHttpServer().getRootServerContainer();
42 for (Class
<?
> clss
: ((WebsocketEndpoints
) handler
).getEndPoints()) {
44 serverContainer
.addEndpoint(clss
);
45 log
.debug(() -> "Added web socket " + clss
+ " to " + getPath());
46 } catch (DeploymentException e
) {
47 log
.error("Cannot deploy Web Socket " + clss
, e
);
54 public Map
<String
, Object
> getAttributes() {
59 protected ServletContextHandler
getServletContextHandler() {
60 return getJettyHttpServer().getRootContextHandler();