Merge remote-tracking branch 'origin/jetty-9.4.x'

This commit is contained in:
Greg Wilkins 2016-09-14 18:29:28 +10:00
commit 26cfaa2efb
2 changed files with 18 additions and 32 deletions

View File

@ -169,13 +169,12 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
__serverInfo = serverInfo; __serverInfo = serverInfo;
} }
protected Context _scontext; protected Context _scontext;
private final AttributesMap _attributes; private final AttributesMap _attributes;
private final Map<String, String> _initParams; private final Map<String, String> _initParams;
private ClassLoader _classLoader; private ClassLoader _classLoader;
private String _contextPath = "/"; private String _contextPath = "/";
private String _contextPathEncoded = "/";
private String _displayName; private String _displayName;
@ -507,7 +506,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/** /**
* @return Returns the _contextPath. * @return Returns the contextPath.
*/ */
@ManagedAttribute("True if URLs are compacted to replace the multiple '/'s with a single '/'") @ManagedAttribute("True if URLs are compacted to replace the multiple '/'s with a single '/'")
public String getContextPath() public String getContextPath()
@ -515,6 +514,15 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
return _contextPath; return _contextPath;
} }
/* ------------------------------------------------------------ */
/**
* @return Returns the encoded contextPath.
*/
public String getContextPathEncoded()
{
return _contextPathEncoded;
}
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
/* /*
* @see javax.servlet.ServletContext#getInitParameter(java.lang.String) * @see javax.servlet.ServletContext#getInitParameter(java.lang.String)
@ -1108,7 +1116,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
if (_contextPath.length() == 1) if (_contextPath.length() == 1)
baseRequest.setContextPath(""); baseRequest.setContextPath("");
else else
baseRequest.setContextPath(_contextPath); baseRequest.setContextPath(_contextPathEncoded);
baseRequest.setServletPath(null); baseRequest.setServletPath(null);
baseRequest.setPathInfo(pathInfo); baseRequest.setPathInfo(pathInfo);
} }
@ -1485,6 +1493,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu
} }
_contextPath = contextPath; _contextPath = contextPath;
_contextPathEncoded = URIUtil.encodePath(contextPath);
if (getServer() != null && (getServer().isStarting() || getServer().isStarted())) if (getServer() != null && (getServer().isStarting() || getServer().isStarted()))
{ {

View File

@ -18,53 +18,31 @@
package org.eclipse.jetty.servlet; package org.eclipse.jetty.servlet;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.Matchers.startsWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List;
import javax.servlet.AsyncContext; import javax.servlet.AsyncContext;
import javax.servlet.DispatcherType; import javax.servlet.DispatcherType;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestWrapper;
import javax.servlet.ServletResponse; import javax.servlet.ServletResponse;
import javax.servlet.ServletResponseWrapper;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.eclipse.jetty.server.Dispatcher;
import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.LocalConnector; import org.eclipse.jetty.server.LocalConnector;
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection; import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.URIUtil; import org.eclipse.jetty.util.URIUtil;
import org.eclipse.jetty.util.UrlEncoded;
import org.hamcrest.Matchers; import org.hamcrest.Matchers;
import org.junit.After; import org.junit.After;
import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -75,7 +53,6 @@ public class EncodedURITest
private ContextHandlerCollection _contextCollection; private ContextHandlerCollection _contextCollection;
private ServletContextHandler _context0; private ServletContextHandler _context0;
private ServletContextHandler _context1; private ServletContextHandler _context1;
private ResourceHandler _resourceHandler;
@Before @Before
public void init() throws Exception public void init() throws Exception
@ -116,7 +93,7 @@ public class EncodedURITest
String response = _connector.getResponse("GET /c%6Fntext%20path/test%20servlet/path%20info HTTP/1.0\n\n"); String response = _connector.getResponse("GET /c%6Fntext%20path/test%20servlet/path%20info HTTP/1.0\n\n");
assertThat(response,startsWith("HTTP/1.1 200 ")); assertThat(response,startsWith("HTTP/1.1 200 "));
assertThat(response,Matchers.containsString("requestURI=/c%6Fntext%20path/test%20servlet/path%20info")); assertThat(response,Matchers.containsString("requestURI=/c%6Fntext%20path/test%20servlet/path%20info"));
assertThat(response,Matchers.containsString("contextPath=/context path")); assertThat(response,Matchers.containsString("contextPath=/context%20path"));
assertThat(response,Matchers.containsString("servletPath=/test servlet")); assertThat(response,Matchers.containsString("servletPath=/test servlet"));
assertThat(response,Matchers.containsString("pathInfo=/path info")); assertThat(response,Matchers.containsString("pathInfo=/path info"));
} }
@ -127,7 +104,7 @@ public class EncodedURITest
String response = _connector.getResponse("GET /context%20path/test%20servlet/path%20info?async=true HTTP/1.0\n\n"); String response = _connector.getResponse("GET /context%20path/test%20servlet/path%20info?async=true HTTP/1.0\n\n");
assertThat(response,startsWith("HTTP/1.1 200 ")); assertThat(response,startsWith("HTTP/1.1 200 "));
assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info")); assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info"));
assertThat(response,Matchers.containsString("contextPath=/context path")); assertThat(response,Matchers.containsString("contextPath=/context%20path"));
assertThat(response,Matchers.containsString("servletPath=/test servlet")); assertThat(response,Matchers.containsString("servletPath=/test servlet"));
assertThat(response,Matchers.containsString("pathInfo=/path info")); assertThat(response,Matchers.containsString("pathInfo=/path info"));
} }
@ -138,7 +115,7 @@ public class EncodedURITest
String response = _connector.getResponse("GET /context%20path/test%20servlet/path%20info?async=true&wrap=true HTTP/1.0\n\n"); String response = _connector.getResponse("GET /context%20path/test%20servlet/path%20info?async=true&wrap=true HTTP/1.0\n\n");
assertThat(response,startsWith("HTTP/1.1 200 ")); assertThat(response,startsWith("HTTP/1.1 200 "));
assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info")); assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info"));
assertThat(response,Matchers.containsString("contextPath=/context path")); assertThat(response,Matchers.containsString("contextPath=/context%20path"));
assertThat(response,Matchers.containsString("servletPath=/test servlet")); assertThat(response,Matchers.containsString("servletPath=/test servlet"));
assertThat(response,Matchers.containsString("pathInfo=/path info")); assertThat(response,Matchers.containsString("pathInfo=/path info"));
} }
@ -149,7 +126,7 @@ public class EncodedURITest
String response = _connector.getResponse("GET /context%20path/async%20servlet/path%20info HTTP/1.0\n\n"); String response = _connector.getResponse("GET /context%20path/async%20servlet/path%20info HTTP/1.0\n\n");
assertThat(response,startsWith("HTTP/1.1 200 ")); assertThat(response,startsWith("HTTP/1.1 200 "));
assertThat(response,Matchers.containsString("requestURI=/context%20path/test servlet/path info")); assertThat(response,Matchers.containsString("requestURI=/context%20path/test servlet/path info"));
assertThat(response,Matchers.containsString("contextPath=/context path")); assertThat(response,Matchers.containsString("contextPath=/context%20path"));
assertThat(response,Matchers.containsString("servletPath=/test servlet")); assertThat(response,Matchers.containsString("servletPath=/test servlet"));
assertThat(response,Matchers.containsString("pathInfo=/path info")); assertThat(response,Matchers.containsString("pathInfo=/path info"));
} }
@ -160,7 +137,7 @@ public class EncodedURITest
String response = _connector.getResponse("GET /context%20path/async%20servlet/path%20info?encode=true HTTP/1.0\n\n"); String response = _connector.getResponse("GET /context%20path/async%20servlet/path%20info?encode=true HTTP/1.0\n\n");
assertThat(response,startsWith("HTTP/1.1 200 ")); assertThat(response,startsWith("HTTP/1.1 200 "));
assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info")); assertThat(response,Matchers.containsString("requestURI=/context%20path/test%20servlet/path%20info"));
assertThat(response,Matchers.containsString("contextPath=/context path")); assertThat(response,Matchers.containsString("contextPath=/context%20path"));
assertThat(response,Matchers.containsString("servletPath=/test servlet")); assertThat(response,Matchers.containsString("servletPath=/test servlet"));
assertThat(response,Matchers.containsString("pathInfo=/path info")); assertThat(response,Matchers.containsString("pathInfo=/path info"));
} }