request.getParameter(“mylink”)的jsp参数.toString()

时间:2013-05-21 19:36:05

标签: jsp

我在JSP URL中有一个参数

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

我希望在jsp中获取参数mylink的值为:

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

#after值未打印。

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

1 个答案:

答案 0 :(得分:1)

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

此网址为invalid格式。您的错误是您没有对mylink的{​​{3}}参数值进行URL编码,这与HTTP规范相反。这样,#部分被错误地解释为http://www.mydomain.com:8080上主网址的query string

此网址格式有效:

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完全没有指定参数时结束。