http://www.mydomain.com:8080/?mylink=http://www.myweb.com/#12345
此 URL格式无效。您的错误是您没有对 的查询字符串参数值进行 URL 编码mylink
,这与 HTTP 规范相反。这样,该部分#
被错误地解释为.http://www.mydomain.com:8080
此 URL 的格式有效:
http://www.mydomain.com:8080/?mylink=http%3A%2F%2Fwww.myweb.com%2F%2312345
您可以在 Java 中创建如下 URL:
String url = "http://www.mydomain.com:8080/?mylink=" + URLEncoder.encode("http://www.myweb.com/#12345", "UTF-8");
或者在 JSP 中如下:
<c:url var="url" value="http://www.mydomain.com:8080/">
<c:param name="mylink" value="http://www.myweb.com/#12345" />
</c:url>
<a href="${url}">link</a>
无论哪种方式,请求参数现在都将被 servletcontainer 正确解码:
String mylink = request.getParameter("mylink");
请注意,解码步骤完全透明地进行,您不需要使用URLDecoder
左右。另请注意,toString()
之后的呼叫将被删除,因为它完全没有意义。它String
已经返回并且没有空检查的调用toString()
只会在NullPointerException
根本没有指定参数时结束。