我在网址下方。
http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott
在上面的网址中,我有3个请求参数,如下所示。
user=John
message=hai&hello
recipient=scott
问题在于message
请求参数的值。因为此处它的值包含ampersend(&)。当我尝试request.getParameter("message")
时,我只获得hai
而不是hai&hello
。我该如何解决这个问题?
谢谢!
答案 0 :(得分:4)
试试这个,而不是....&message=hi%26hello....
。我的意思是,编码。
<强> [编辑] 强>
正如你所说,你无法控制它,它是遗留应用程序,他们无法解决它;那么你仍然可以使用URLEncoder
来对网址进行编码。
String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
<强> [编辑] 强>
..或者只是将其视为String
。简单,不是吗?
// Please refactor.
String[] paramPart = url.split("?");
String[] params = paramPart[1].split("&");
Map<String, String> paraMap = new HashMap<>();
for(int i=0; i<params.length; i++) {
String[] keyValue;
if(params[i].contains("=")) {
keyValue = params[i].split("=");
paraMap.put(keyValue[0], keyValue[1]);
} else {
params[i-1] = params[i-1] + "&" + params[i];
keyValue = params[i-1].split("=");
paraMap.put(keyValue[0], keyValue[1]);
}
}
答案 1 :(得分:0)
如果您确定&recipient
始终位于&message
之后,或者&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要获取查询来自请求的字符串,并尝试相应地拆分它。
例如,如果&recipient
总是在&message
之后,那么你可以做(伪代码/未经测试):
int s = queryString.indexOf("&message");
int e = queryString.indexOf("&recipient");
String messageValue = queryString.substring(s + "&message".length(), e);