显然,括号不URI路径允许的。
我不知道这是否是一个Tomcat的问题,但我得到与路径请求包含]
。
换一种说法
request.getRequestURL() == "http://localhost:8080/a]b"
request.getRequestURI() == "/a]b"
顺便说一句getRequestURL()和URI通常即转义为http://localhost:8080/ab
request.getRequestURL() == "http://localhost:8080/a%20b"
所以,如果你尝试这样做:
new URI("http://localhost:8080/a]b")
new URI(request.getRequestURL())
这将失败,URI解析异常。 如果我逃跑,这将使路径%20
双逃脱。
我如何把servlet请求的URL插入到URI?
Java的URI似乎是非常严格的,需要转义为排除的US-ASCII字符集 。
为了解决这个问题我编码这些,只有这些字符减去'%'
和'#'
作为URL可能已经包含这些字符。 我使用的HTTP客户端URI utils的由于某种原因不在HttpComponents。
private static BitSet badUriChars = new BitSet(256);
static {
badUriChars.set(0, 255, true);
badUriChars.andNot(org.apache.commons.httpclient.URI.unwise);
badUriChars.andNot(org.apache.commons.httpclient.URI.space);
badUriChars.andNot(org.apache.commons.httpclient.URI.control);
badUriChars.set('<', false);
badUriChars.set('>', false);
badUriChars.set('"', false);
}
public static URI toURIorFail(String url) throws URISyntaxException {
URI uri = URIUtil.encode(url, badUriChars, "UTF-8");
return new URI(uri);
}
编辑:下面是一些SO职位(更多的惊喜)相关: