package org.dynmap.web; import org.eclipse.jetty.http.PathMap; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HandlerRouter extends AbstractHandler { PathMap pathMap = new PathMap(); public HandlerRouter() { } public void addHandler(String path, Handler handler) { pathMap.put(path, handler); } public void addServlet(String path, Servlet servlet) { pathMap.put(path, servlet); } public void clear() { pathMap.clear(); } @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String pathInfo = request.getPathInfo(); PathMap.Entry e = pathMap.getMatch(pathInfo); String mappedPath = e.getMapped(); String childPathInfo = pathInfo; if (mappedPath != null) { int i = 0; while(i<mappedPath.length() && mappedPath.charAt(i) == pathInfo.charAt(i)){ i++; } childPathInfo = childPathInfo.substring(i); } org.eclipse.jetty.server.Request r = (org.eclipse.jetty.server.Request)request; r.setPathInfo(childPathInfo); Object o = e.getValue(); if (o instanceof Handler) { Handler h = (Handler)o; h.handle(target, baseRequest, request, response); } else if (o instanceof Servlet) { Servlet s = (Servlet)o; s.service(request, response); } r.setPathInfo(pathInfo); } }