X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.lib.jetty%2Fsrc%2Forg%2Fargeo%2Fcms%2Fjetty%2FJettyHttpContext.java;h=c876f3dbe5682a362fbe7434e9b8291b9374bccc;hb=221681f8ac70c35e54690a42fea73319a43deb06;hp=2aa4abc43a3662e5325f6e9fec9112ff159ec637;hpb=81d9084e2c9fd9d33ca1d864171d28f9564647d8;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java index 2aa4abc43..c876f3dbe 100644 --- a/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java +++ b/org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java @@ -1,19 +1,11 @@ package org.argeo.cms.jetty; -import java.util.AbstractMap; import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Objects; -import java.util.Set; -import org.argeo.cms.servlet.httpserver.HttpContextServlet; -import org.eclipse.jetty.server.Handler; -import org.eclipse.jetty.server.handler.ContextHandler; -import org.eclipse.jetty.servlet.ServletContextHandler; -import org.eclipse.jetty.servlet.ServletHolder; +import org.argeo.cms.websocket.server.WebsocketEndpoints; +import org.eclipse.jetty.ee8.servlet.ServletContextHandler; import com.sun.net.httpserver.Authenticator; import com.sun.net.httpserver.Filter; @@ -21,12 +13,13 @@ import com.sun.net.httpserver.HttpContext; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; -/** Trivial implementation of @{HttpContext}. */ -class JettyHttpContext extends HttpContext { +/** + * An @{HttpContext} implementation based on Jetty. It supports web sockets if + * the handler implements {@link WebsocketEndpoints}. + */ +abstract class JettyHttpContext extends HttpContext { private final JettyHttpServer httpServer; private final String path; - private final ContextHandler contextHandler; - private final ContextAttributes attributes; private final List filters = new ArrayList<>(); private HttpHandler handler; @@ -34,17 +27,13 @@ class JettyHttpContext extends HttpContext { public JettyHttpContext(JettyHttpServer httpServer, String path) { this.httpServer = httpServer; + if (!path.endsWith("/")) + throw new IllegalArgumentException("Path " + path + " should end with a /"); this.path = path; - - ServletContextHandler servletContextHandler = new ServletContextHandler(); - servletContextHandler.setContextPath(path); - HttpContextServlet servlet = new HttpContextServlet(this); - servletContextHandler.addServlet(new ServletHolder(servlet), "/*"); - contextHandler = servletContextHandler; - - attributes = new ContextAttributes(); } + protected abstract ServletContextHandler getServletContextHandler(); + @Override public HttpHandler getHandler() { return handler; @@ -56,13 +45,6 @@ class JettyHttpContext extends HttpContext { throw new IllegalArgumentException("Handler is already set"); Objects.requireNonNull(handler); this.handler = handler; - - if (httpServer.isStarted()) - try { - contextHandler.start(); - } catch (Exception e) { - throw new IllegalStateException("Cannot start context handler", e); - } } @Override @@ -72,12 +54,11 @@ class JettyHttpContext extends HttpContext { @Override public HttpServer getServer() { - return httpServer; + return getJettyHttpServer(); } - @Override - public Map getAttributes() { - return attributes; + protected JettyHttpServer getJettyHttpServer() { + return httpServer; } @Override @@ -97,51 +78,4 @@ class JettyHttpContext extends HttpContext { return authenticator; } - public Handler getContextHandler() { - return contextHandler; - } - - private class ContextAttributes extends AbstractMap { - @Override - public Set> entrySet() { - Set> entries = new HashSet<>(); - for (Enumeration keys = contextHandler.getAttributeNames(); keys.hasMoreElements();) { - entries.add(new ContextAttributeEntry(keys.nextElement())); - } - return entries; - } - - @Override - public Object put(String key, Object value) { - Object previousValue = get(key); - contextHandler.setAttribute(key, value); - return previousValue; - } - - private class ContextAttributeEntry implements Map.Entry { - private final String key; - - public ContextAttributeEntry(String key) { - this.key = key; - } - - @Override - public String getKey() { - return key; - } - - @Override - public Object getValue() { - return contextHandler.getAttribute(key); - } - - @Override - public Object setValue(Object value) { - Object previousValue = getValue(); - contextHandler.setAttribute(key, value); - return previousValue; - } - - } - } }