servlet 请求参数值包含与号?
Posted
技术标签:
【中文标题】servlet 请求参数值包含与号?【英文标题】:servelt request parameter value contains ampersand? 【发布时间】:2013-09-17 17:55:26 【问题描述】:我有下面的网址。
http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott
在上面的 url 中,我有 3 个请求参数,如下所示。
user=John
message=hai&hello
recipient=scott
这里的问题在于message
请求参数的值。因为这里它的值包含ampersend (&)。当我尝试request.getParameter("message")
时,我只得到hai
而不是hai&hello
。我该如何解决这个问题?
谢谢!
【问题讨论】:
【参考方案1】:试试这个,而不是....&message=hi%26hello....
。我的意思是,编码它。
[已编辑]
正如你所说,你无法控制它,它是遗留应用程序,他们无法修复它;那么我想你仍然可以使用URLEncoder
对 URL 进行编码。
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]);
【讨论】:
@Ansari,感谢您的回复。我无法控制 url。它是由一些外部客户端发送的...【参考方案2】:如果您确定&recipient
总是在&message
之后,或者&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要从请求中获取查询字符串并尝试相应地拆分它。
例如,如果&recipient
总是在&message
之后,那么你可以这样做(伪代码/未经测试):
int s = queryString.indexOf("&message");
int e = queryString.indexOf("&recipient");
String messageValue = queryString.substring(s + "&message".length(), e);
【讨论】:
以上是关于servlet 请求参数值包含与号?的主要内容,如果未能解决你的问题,请参考以下文章