Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpServletRequest getParameter无法使用&;检索参数;amp;_Java_Jsp_Servlets_Struts_Httprequest - Fatal编程技术网

Java HttpServletRequest getParameter无法使用&;检索参数;amp;

Java HttpServletRequest getParameter无法使用&;检索参数;amp;,java,jsp,servlets,struts,httprequest,Java,Jsp,Servlets,Struts,Httprequest,我有一个url,类似这样的localhost:8080/foo.action?param1=7¶m2=8¶m3=6 当这是Url(按原样)时,request.getParmeter(“param2”)会给我8[正确] i) 当编码将此url转换为localhost:8080/foo.action?param1=7%26param2=8%26param3=6 在这种情况下,request.getParameter(“param1”)为我提供7¶m2=8¶m3=6 i

我有一个url,类似这样的
localhost:8080/foo.action?param1=7¶m2=8¶m3=6

当这是Url(按原样)时,
request.getParmeter(“param2”)
会给我
8
[正确]

i) 当编码将此url转换为
localhost:8080/foo.action?param1=7%26param2=8%26param3=6

在这种情况下,
request.getParameter(“param1”)
为我提供
7¶m2=8¶m3=6

ii)当编码将此url转换为
localhost:8080/foo.action时?param1=7&;参数2=8&;参数3=6

在这种情况下,
request.getParameter(“param1”)
给我
7
,而
request.getParameter(“param2”)
给我空值

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


(我正在使用struts操作)

您可以调用
req.getQueryString()
获取整个查询参数,然后根据您选择的任何编码方法执行服务器端解码。

您可以调用
req.getQueryString()
获取整个查询参数,然后根据您选择的任何编码方法执行服务器端解码。

尝试使用

String[] Parameters = = URLDecoder.decode(Request.getQueryString(), 'UTF-8').splitat('&') ;
希望这有帮助。

尝试使用

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

希望这有帮助。

要防止这种情况,请不要使用delimeters对参数进行编码,只对参数值进行编码。这将是最好的办法。如果无法处理参数编码,请在解析之前在服务器端执行解码:

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");
String queryString=request.getQueryString();
String decoded=urldecker.decode(查询字符串,“UTF-8”);
字符串[]pares=decoded.split(&);
映射参数=新的HashMap();
用于(字符串排列:排列){
字符串[]name和value=pare.split(“”);
参数.put(nameAndValue[0],nameAndValue[1]);
}
//现在您可以获取您的参数:
字符串valueOfParam2=参数.get(“param2”);

为防止出现这种情况,请不要使用delimeters对参数进行编码,只对参数值进行编码。这将是最好的办法。如果无法处理参数编码,请在解析之前在服务器端执行解码:

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");
String queryString=request.getQueryString();
String decoded=urldecker.decode(查询字符串,“UTF-8”);
字符串[]pares=decoded.split(&);
映射参数=新的HashMap();
用于(字符串排列:排列){
字符串[]name和value=pare.split(“”);
参数.put(nameAndValue[0],nameAndValue[1]);
}
//现在您可以获取您的参数:
字符串valueOfParam2=参数.get(“param2”);

我今天遇到了这种事。原来我是在通过电线传递编码的url。当发出请求时,应按
http://localhost/foo?bar=1&bat=2
不作为
http://localhost/foo?bar=1&bat=2


在本例中,我从xml文件中剪切url并将其粘贴到浏览器中

我今天遇到了这种事。原来我是在通过电线传递编码的url。当发出请求时,应按
http://localhost/foo?bar=1&bat=2
不作为
http://localhost/foo?bar=1&bat=2


在本例中,我从xml文件中剪切url并将其粘贴到浏览器中

您应该解码URL&;应该是&在我的struts操作中,我说request.getParameter(“paramName”)。如何显式解码整个Url?您应该解码Url&;应该是&在我的struts操作中,我说request.getParameter(“paramName”)。如何显式解码整个Url?虽然我不想这样做,但我找不到更好的方法。谢谢你的提示。请不要这样做。更确切地说,不要对符号进行编码,因为它们应该是专门用于正确解析的。见alexey28的答案。虽然我不想这样做,但我找不到更好的方法。谢谢你的提示。请不要这样做。更确切地说,不要对符号进行编码,因为它们应该是专门用于正确解析的。请参阅alexey28的答案。向映射添加键和值时,应调用URLDecode.decode()。否则,如果查询字符串包含编码字符(如%26),则可能会遇到问题。在这种情况下,decoded.split()调用将“生成”不需要的键/值对。是。正如@Marcel所说,代码不正确-不要使用它。在向映射添加键和值时,应该调用URLDecode.decode()。否则,如果查询字符串包含编码字符(如%26),则可能会遇到问题。在这种情况下,decoded.split()调用将“生成”不需要的键/值对。是。正如@Marcel所说,代码不正确-不要使用它。代码不正确-解码查询字符串时,您可能会得到额外的“&”字符(在URL中编码)。代码不正确-解码查询字符串时,您可能会得到额外的“&”字符(在URL中编码)。