的servelt请求参数值包含符号?(servelt request parameter value

2019-10-18 15:08发布

我有下面的网址。

http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott

在上面的URL我有如下3个请求参数。

user=John
message=hai&hello
recipient=scott

这里的问题是message的请求参数的value.because这里它的值包含ampersend()。 当我尝试request.getParameter("message")然后我得到的只有hai而不是hai&hello 。 我怎样才能解决这个问题呢?

谢谢!

Answer 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]);
  }
}


Answer 2:

如果您确信&recipient总是后&message&message可能会作为最后一个参数或你认识的一组可能的参数,那么你将需要得到从请求的查询字符串,并尝试相应的分割它。

例如,如果&recipient送花儿给人来后&message ,那么你可以做的(伪代码/未经测试):

int s = queryString.indexOf("&message");
int e = queryString.indexOf("&recipient");
String messageValue = queryString.substring(s + "&message".length(), e);


文章来源: servelt request parameter value contains ampersand?