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
時完全沒有指定參數。
你不需要toString()調用。 – EJP