]> git.argeo.org Git - lgpl/argeo-commons.git/blob - ServletHttpContext.java
b2a472b449910ef7276fd8ac5434032eea3feb59
[lgpl/argeo-commons.git] / ServletHttpContext.java
1 package org.argeo.cms.jetty;
2
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import javax.websocket.DeploymentException;
8 import javax.websocket.server.ServerContainer;
9
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;
15
16 import com.sun.net.httpserver.HttpHandler;
17
18 /**
19 * A {@link JettyHttpContext} based on registering a servlet to the root handler
20 * of the {@link JettyHttpServer}, in order to integrate the sessions.
21 */
22 public class ServletHttpContext extends JettyHttpContext {
23 private final static CmsLog log = CmsLog.getLog(ServletHttpContext.class);
24
25 private Map<String, Object> attributes = Collections.synchronizedMap(new HashMap<>());
26
27 public ServletHttpContext(JettyHttpServer httpServer, String path) {
28 super(httpServer, path);
29
30 ServletContextHandler rootContextHandler = httpServer.getRootContextHandler();
31 HttpContextServlet servlet = new HttpContextServlet(this);
32 rootContextHandler.addServlet(new ServletHolder(servlet), path + "*");
33 }
34
35 @Override
36 public void setHandler(HttpHandler handler) {
37 super.setHandler(handler);
38
39 // web socket
40 if (handler instanceof WebsocketEndpoints) {
41 ServerContainer serverContainer = getJettyHttpServer().getRootServerContainer();
42 for (Class<?> clss : ((WebsocketEndpoints) handler).getEndPoints()) {
43 try {
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);
48 }
49 }
50 }
51 }
52
53 @Override
54 public Map<String, Object> getAttributes() {
55 return attributes;
56 }
57
58 @Override
59 protected ServletContextHandler getServletContextHandler() {
60 return getJettyHttpServer().getRootContextHandler();
61 }
62
63 }