1

私はこのようなURLを持っていますlocalhost:8080/foo.action?param1=7&param2=8&param3=6

これが(そのままの)URLの場合、[正解]request.getParmeter("param2")を教えてください8

i)エンコーディングがこのURLをに変換するときlocalhost:8080/foo.action?param1=7%26param2=8%26param3=6

この場合、request.getParameter("param1")私に7&param2=8&param3=6

ii)エンコーディングがこのURLをに変換するときlocalhost:8080/foo.action?param1=7&param2=8&param3=6

この場合、request.getParameter("param1")7request.getParameter("param2")与え、私にnullを与えます

パラメータを取得する正しい方法は何ですか?[2つのUrlエンコード方式のいずれかを使用することは避けられないと仮定します]

(私はストラットアクションを使用しています)

4

4 に答える 4

3

これを防ぐために、デリメータでパラメータをエンコードしないでください。パラメータ値のみをエンコードしてください。これが最善の方法です。パラメータのエンコードを処理できない場合は、解析する前にサーバー側でデコードを実行してください。

String queryString = request.getQueryString();
String decoded = URLDecoder.decode(queryString, "UTF-8");
String[] pares = decoded.split("&");
Map<String, String> parameters = new HashMap<String, String>();
for(String pare : pares) {
    String[] nameAndValue = pare.split("=");
    parameters.put(nameAndValue[0], nameAndValue[1]);
}

// Now you can get your parameter:
String valueOfParam2 = parameters.get("param2");
于 2012-06-15T07:06:36.787 に答える
1

を呼び出しreq.getQueryString()てクエリパラメータ全体を取得し、選択したエンコード方法に基づいてサーバー側のデコードを実行できます。

于 2012-06-15T07:00:37.257 に答える
0

使ってみてください

String[] Parameters = = URLDecoder.decode(Request.getQueryString(), 'UTF-8').splitat('&') ;

お役に立てれば。

于 2012-06-15T07:03:50.407 に答える
0

私は今日これを私に起こさせました。エンコードされたURLをネットワークに渡していたことがわかりました。リクエストが行われるときは、として行われるべきではありhttp://localhost/foo?bar=1&bat=2ませんhttp://localhost/foo?bar=1&amp;bat=2

この場合、xmlファイルからURLを切り取って、ブラウザーに貼り付けました。

于 2015-05-05T19:12:44.940 に答える