2013-05-21 29 views
0

我在JSP URL参数作为JSP参数的request.getParameter( “myLink的”)的toString()

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

我想在我的JSP作为参数mylink值:

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

#after值未打印。

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

+0

你不需要toString()调用。 – EJP

回答

1
http://www.mydomain.com:8080/?mylink=http://www.myweb.com/#12345 

此URL格式为invalid。您的错误在于,您没有对的query string参数值进行URL编码,这与HTTP规范相反。这样,#部分被错误地解释为http://www.mydomain.com:8080上的主要URL的URL fragment identifier

该URL格式无效:

http://www.mydomain.com:8080/?mylink=http%3A%2F%2Fwww.myweb.com%2F%2312345 

您可以创建这样一个URL中的Java如下:

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> 

无论是方式,请求参数现在将被servlet容器正确解码:

String mylink = request.getParameter("mylink"); 

请注意,解码步骤完全透明,您不需要使用URLDecoder左右。请注意,之后拨打toString()将被删除,因为它没有任何意义。它已经返回String,并且调用toString()而没有空检查只会在NullPointerException时完全没有指定参数。