Java HttpServletRequest getParameter无法使用&;检索参数;amp;
我有一个url,类似这样的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
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中编码)。