2013-05-21 34 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時完全沒有指定參數。