0

JSP URLにパラメーターがあります

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

mylink次のようにjspのパラメータの値を取得したい:

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

#after値が印刷されていません。

これを解決する方法を教えてもらえますか? ソース URL パラメータは # 形式から変更できないことに注意してください。

4

1 に答える 1

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

この URL の形式は無効です。あなたの間違いは、HTTP 仕様に反して、のクエリ文字列パラメータ値をURL エンコードしなかったことです。mylinkこのように、この部分は上のメイン URL のURL フラグメント識別子#として誤って解釈されます。http://www.mydomain.com:8080

この URL は有効な形式です:

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>

どちらの場合でも、リクエスト パラメータはサーブレット コンテナによって適切にデコードされます。

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

デコード手順は完全に透過的に行われることに注意してください。使用する必要はありませんURLDecodertoString()また、その後の呼び出しはまったく意味がないため、削除されることに注意してください。すでに返されており、 null チェックなしStringで呼び出すと、パラメーターがまったく指定されていない場合にのみ終了します。toString()NullPointerException

于 2013-05-21T19:48:51.200 に答える