servlet请求参数值是否包含&符号?

时间:2013-09-13 06:30:00

标签: java url urlencode url-parameters

我在网址下方。

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。我该如何解决这个问题?

谢谢!

2 个答案:

答案 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);