1

我有一个网址,像这样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

检索参数的正确方法是什么?[假设使用两种Url编码方案中的一种是不可避免的]

(我正在使用 struts 动作)

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

我今天发生了这种情况。原来我正在通过电线传递编码的网址。提出请求时,应将其作为http://localhost/foo?bar=1&bat=2not as http://localhost/foo?bar=1&amp;bat=2

在这种情况下,我从 xml 文件中剪切了 url 并将其粘贴到浏览器中。

于 2015-05-05T19:12:44.940 回答