0

我在 JSP URL 中有一个参数为

'http://www.mydoamin.com':8080/?mylink=http://www.myweb.com/#12345'

我想mylink在我的jsp中获取参数的值:

<%
   String conferencelink = request.getParameter("mylink").toString();
   out.println(conferencelink);
%>

#after值未打印。

谁能指导我如何解决这个问题?请注意源 URL 参数不能从 # 格式更改。

4

1 回答 1

1
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根本没有指定参数时结束。

于 2013-05-21T19:48:51.200 回答