我在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更改。
答案 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
完全没有指定参数时结束。