diff options
author | Joakim Erdfelt | 2015-12-14 18:22:24 +0000 |
---|---|---|
committer | Joakim Erdfelt | 2015-12-15 21:41:37 +0000 |
commit | 77d4b54082f6789168ea7ef1523e8e1b924bb560 (patch) | |
tree | ee9d8ec6492dcae62a5596dc17fe1f57f6db9302 /jetty-servlet | |
parent | a52a182369e397e26d0739228338f9af5cddd792 (diff) | |
download | org.eclipse.jetty.project-77d4b54082f6789168ea7ef1523e8e1b924bb560.tar.gz org.eclipse.jetty.project-77d4b54082f6789168ea7ef1523e8e1b924bb560.tar.xz org.eclipse.jetty.project-77d4b54082f6789168ea7ef1523e8e1b924bb560.zip |
482042 - New API, Allow customization of ServletHandler path mapping
+ Swapping out PathMap for PathMappings in ServletHandler
Conflicts:
jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java
jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java
Diffstat (limited to 'jetty-servlet')
3 files changed, 23 insertions, 16 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java index 56df44c2de..9ed32be55b 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java @@ -47,6 +47,7 @@ import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.MimeTypes; import org.eclipse.jetty.http.PathMap.MappedEntry; +import org.eclipse.jetty.http.pathmap.MappedResource; import org.eclipse.jetty.io.WriterOutputStream; import org.eclipse.jetty.server.HttpOutput; import org.eclipse.jetty.server.InclusiveByteRange; @@ -691,9 +692,9 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory if ((_welcomeServlets || _welcomeExactServlets) && welcome_servlet==null) { - MappedEntry<?> entry=_servletHandler.getHolderEntry(welcome_in_context); - if (entry!=null && entry.getValue()!=_defaultHolder && - (_welcomeServlets || (_welcomeExactServlets && entry.getKey().equals(welcome_in_context)))) + MappedResource<ServletHolder> entry=_servletHandler.getHolderEntry(welcome_in_context); + if (entry!=null && entry.getResource()!=_defaultHolder && + (_welcomeServlets || (_welcomeExactServlets && entry.getPathSpec().getDeclaration().equals(welcome_in_context)))) welcome_servlet=welcome_in_context; } diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Invoker.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Invoker.java index 999a086346..0edd706a70 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Invoker.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Invoker.java @@ -32,6 +32,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; +import org.eclipse.jetty.http.PathMap.MappedEntry; +import org.eclipse.jetty.http.pathmap.MappedResource; import org.eclipse.jetty.server.Dispatcher; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HttpChannel; @@ -72,7 +74,7 @@ public class Invoker extends HttpServlet private ContextHandler _contextHandler; private ServletHandler _servletHandler; - private Map.Entry<String, ServletHolder> _invokerEntry; + private MappedResource<ServletHolder> _invokerEntry; private Map<String, String> _parameters; private boolean _nonContextServlets; private boolean _verbose; @@ -171,12 +173,12 @@ public class Invoker extends HttpServlet // Check for existing mapping (avoid threaded race). String path=URIUtil.addPaths(servlet_path,servlet); - Map.Entry<String, ServletHolder> entry = _servletHandler.getHolderEntry(path); + MappedResource<ServletHolder> entry = _servletHandler.getHolderEntry(path); if (entry!=null && !entry.equals(_invokerEntry)) { // Use the holder - holder=(ServletHolder)entry.getValue(); + holder=(ServletHolder)entry.getResource(); } else { diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java index c3b152c6c3..e767851454 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java @@ -52,7 +52,10 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpHeaderValue; -import org.eclipse.jetty.http.PathMap; +import org.eclipse.jetty.http.pathmap.MappedResource; +import org.eclipse.jetty.http.pathmap.PathMappings; +import org.eclipse.jetty.http.pathmap.PathSpec; +import org.eclipse.jetty.http.pathmap.ServletPathSpec; import org.eclipse.jetty.io.EofException; import org.eclipse.jetty.io.RuntimeIOException; import org.eclipse.jetty.security.IdentityService; @@ -121,7 +124,8 @@ public class ServletHandler extends ScopedHandler private MultiMap<FilterMapping> _filterNameMappings; private final Map<String,ServletHolder> _servletNameMap=new HashMap<>(); - private PathMap<ServletHolder> _servletPathMap; + // private PathMap<ServletHolder> _servletPathMap; + private PathMappings<ServletHolder> _servletPathMap; private ListenerHolder[] _listeners=new ListenerHolder[0]; @@ -383,7 +387,7 @@ public class ServletHandler extends ScopedHandler * @param pathInContext Path within _context. * @return PathMap Entries pathspec to ServletHolder */ - public PathMap.MappedEntry<ServletHolder> getHolderEntry(String pathInContext) + public MappedResource<ServletHolder> getHolderEntry(String pathInContext) { if (_servletPathMap==null) return null; @@ -470,14 +474,14 @@ public class ServletHandler extends ScopedHandler if (target.startsWith("/")) { // Look for the servlet by path - PathMap.MappedEntry<ServletHolder> entry=getHolderEntry(target); + MappedResource<ServletHolder> entry=getHolderEntry(target); if (entry!=null) { - servlet_holder=entry.getValue(); + PathSpec pathSpec = entry.getPathSpec(); + servlet_holder=entry.getResource(); - String servlet_path_spec= entry.getKey(); - String servlet_path=entry.getMapped()!=null?entry.getMapped():PathMap.pathMatch(servlet_path_spec,target); - String path_info=PathMap.pathInfo(servlet_path_spec,target); + String servlet_path=pathSpec.getPathMatch(target); + String path_info=pathSpec.getPathInfo(target); if (DispatcherType.INCLUDE.equals(type)) { @@ -1432,7 +1436,7 @@ public class ServletHandler extends ScopedHandler } else { - PathMap<ServletHolder> pm = new PathMap<>(); + PathMappings<ServletHolder> pm = new PathMappings<>(); Map<String,ServletMapping> servletPathMappings = new HashMap<String,ServletMapping>(); //create a map of paths to set of ServletMappings that define that mapping @@ -1495,7 +1499,7 @@ public class ServletHandler extends ScopedHandler if (LOG.isDebugEnabled()) LOG.debug("Chose path={} mapped to servlet={} from default={}", pathSpec, finalMapping.getServletName(), finalMapping.isDefault()); servletPathMappings.put(pathSpec, finalMapping); - pm.put(pathSpec,_servletNameMap.get(finalMapping.getServletName())); + pm.put(new ServletPathSpec(pathSpec),_servletNameMap.get(finalMapping.getServletName())); } _servletPathMap=pm; |