You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/02/02 18:38:05 UTC
svn commit: r1656521 - in
/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal:
dispatch/ handler/ runtime/ whiteboard/
Author: cziegeler
Date: Mon Feb 2 17:38:04 2015
New Revision: 1656521
URL: http://svn.apache.org/r1656521
Log:
FELIX-4060 : Implement HTTP Service Update (RFC-189)
Modified:
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java Mon Feb 2 17:38:04 2015
@@ -505,11 +505,6 @@ public final class Dispatcher implements
}
/**
- * Request attribute that provides access to the request dispatcher provider.
- */
- public static final String REQUEST_DISPATCHER_PROVIDER = "org.apache.felix.http.requestDispatcherProvider";
-
- /**
* Catch-all filter chain that simple finishes all requests with a "404 Not Found" error.
*/
private static final FilterChain DEFAULT_CHAIN = new NotFoundFilterChain();
@@ -529,9 +524,9 @@ public final class Dispatcher implements
* @throws ServletException in case of exceptions during the actual dispatching;
* @throws IOException in case of I/O problems.
*/
- public void dispatch(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
+ public void dispatch(final HttpServletRequest req, final HttpServletResponse res) throws ServletException, IOException
{
- final String requestURI = getRequestURI(req);
+ String requestURI = getRequestURI(req);
// Determine which servlets we should forward the request to...
final ServletHandler servletHandler = this.handlerRegistry.getServletHander(requestURI);
@@ -543,10 +538,10 @@ public final class Dispatcher implements
return;
}
- // Provides access to the correct request dispatcher...
- req.setAttribute(REQUEST_DISPATCHER_PROVIDER, this);
+ // strip of context path
+ requestURI = requestURI.substring(servletHandler.getContext().getContextPath().length());
- String servletPath = (servletHandler != null) ? servletHandler.determineServletPath(requestURI) : "";
+ final String servletPath = servletHandler.determineServletPath(requestURI);
String pathInfo = UriUtils.compactPath(UriUtils.relativePath(servletPath, requestURI));
String queryString = null; // XXX
@@ -566,10 +561,6 @@ public final class Dispatcher implements
wrappedResponse.sendError(500);
}
- finally
- {
- req.removeAttribute(REQUEST_DISPATCHER_PROVIDER);
- }
}
@Override
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/HandlerRegistry.java Mon Feb 2 17:38:04 2015
@@ -115,12 +115,7 @@ public final class HandlerRegistry
}
return EMPTY_FILTER_HANDLER;
}
-/*
- public synchronized Servlet getServletByAlias(String alias)
- {
- return this.servletPatternMap.get(alias);
- }
-*/
+
public ServletHandler getServletHandlerByName(final Long contextId, final String name)
{
if ( contextId != null )
@@ -144,8 +139,7 @@ public final class HandlerRegistry
{
if ( requestURI.startsWith(r.getPrefixPath()))
{
- // TODO - we could stip of the prefix and simplify handler registration
- final ServletHandler handler = r.getServletHander(requestURI);
+ final ServletHandler handler = r.getServletHander(requestURI.substring(r.getPrefixPath().length() - 1));
if ( handler != null )
{
return handler;
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/PerContextHandlerRegistry.java Mon Feb 2 17:38:04 2015
@@ -37,7 +37,7 @@ public final class PerContextHandlerRegi
{
private final Map<Servlet, ServletHandler> servletMap = new HashMap<Servlet, ServletHandler>();
private final Map<Filter, FilterHandler> filterMap = new HashMap<Filter, FilterHandler>();
- private final Map<String, Servlet> servletPatternMap= new HashMap<String, Servlet>();
+ private final Map<String, Servlet> servletPatternMap = new HashMap<String, Servlet>();
private volatile HandlerMapping<ServletHandler> servletMapping = new HandlerMapping<ServletHandler>();
private volatile HandlerMapping<FilterHandler> filterMapping = new HandlerMapping<FilterHandler>();
private volatile ErrorsMapping errorsMapping = new ErrorsMapping();
@@ -123,7 +123,7 @@ public final class PerContextHandlerRegi
for (int i = 0; i < length; i++)
{
- String pattern = contextInfo != null ? contextInfo.getFullPath(patterns[i]) : patterns[i];
+ final String pattern = patterns[i];
if (this.servletPatternMap.containsKey(pattern))
{
throw new ServletException("Servlet instance " + handler.getName() + " already registered");
@@ -275,7 +275,7 @@ public final class PerContextHandlerRegi
for (int i = 0; i < length; i++)
{
- this.servletPatternMap.remove(contextInfo.getFullPath(patterns[i]));
+ this.servletPatternMap.remove(patterns[i]);
}
this.errorsMapping.removeServlet(handler.getServlet());
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/handler/ServletHandler.java Mon Feb 2 17:38:04 2015
@@ -62,7 +62,7 @@ public final class ServletHandler extend
this.patterns = new Pattern[length];
for (int i = 0; i < length; i++)
{
- String pattern = (contextInfo == null ? patterns[i] : contextInfo.getFullPath(patterns[i]));
+ final String pattern = patterns[i];
this.patterns[i] = Pattern.compile(PatternUtil.convertToRegEx(pattern));
}
if ( contextInfo != null )
@@ -76,7 +76,7 @@ public final class ServletHandler extend
}
@Override
- public int compareTo(ServletHandler other)
+ public int compareTo(final ServletHandler other)
{
return getId() - other.getId();
}
@@ -88,10 +88,14 @@ public final class ServletHandler extend
uri = "/";
}
- Matcher matcher = this.patterns[0].matcher(uri);
- if (matcher.find(0))
+ // Patterns are sorted on length in descending order, so we should get the longest match first...
+ for (int i = 0; i < this.patterns.length; i++)
{
- return matcher.groupCount() > 0 ? matcher.group(1) : matcher.group();
+ Matcher matcher = this.patterns[i].matcher(uri);
+ if (matcher.find(0))
+ {
+ return matcher.groupCount() > 0 ? matcher.group(1) : matcher.group();
+ }
}
return null;
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/runtime/ServletContextHelperInfo.java Mon Feb 2 17:38:04 2015
@@ -97,15 +97,6 @@ public final class ServletContextHelperI
return this.prefix;
}
- public String getFullPath(final String path)
- {
- if ( this.prefix == null )
- {
- return path;
- }
- return this.prefix.concat(path);
- }
-
public Map<String, String> getInitParams()
{
return initParams;
Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java?rev=1656521&r1=1656520&r2=1656521&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/ContextHandler.java Mon Feb 2 17:38:04 2015
@@ -67,8 +67,8 @@ public final class ContextHandler implem
this.info = info;
this.bundle = bundle;
this.sharedContext = new SharedServletContextImpl(webContext,
- info.getPrefix(),
info.getName(),
+ info.getPrefix(),
info.getInitParams(),
new ServletContextAttributeListener() {