Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servelt请求参数值包含符号AND?_Java_Url_Urlencode_Url Parameters - Fatal编程技术网

Java servelt请求参数值包含符号AND?

Java servelt请求参数值包含符号AND?,java,url,urlencode,url-parameters,Java,Url,Urlencode,Url Parameters,我有下面的网址 http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott 在上面的url中,我有3个请求参数,如下所示 user=John message=hai&hello recipient=scott 这里的问题在于消息请求参数的值。因为这里的值包含符号(&)。当我尝试request.getParameter(“message”)时,我只得到hai而没有hai&he

我有下面的网址

http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott
在上面的url中,我有3个请求参数,如下所示

user=John
message=hai&hello
recipient=scott
这里的问题在于
消息
请求参数的值。因为这里的值包含符号(&)。当我尝试
request.getParameter(“message”)
时,我只得到
hai
而没有
hai&hello
。我如何解决这个问题


谢谢

试试这个,而不是
…&message=hi%26hello…
。我是说,对它进行编码

[编辑]

正如您所说,您无法控制它,它是遗留应用程序,他们无法修复它;然后,我想您仍然可以使用
urlcoder
对URL进行编码

String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
[编辑]

..或将其视为
字符串
。很简单,不是吗

// 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]);
  }
}
//请重构。
字符串[]paramPart=url.split(“?”);
字符串[]params=paramPart[1]。拆分(&);
Map paraMap=newhashmap();

对于(int i=0;i试试这个,而不是
…&message=hi%26hello…
。我的意思是,对它进行编码

[编辑]

正如您所说的,您无法控制它,它是遗留应用程序,他们无法修复它;然后,我想您仍然可以使用
urlcoder
对URL进行编码

String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
[编辑]

…或者把它当作一个
字符串
。很简单,不是吗

// 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]);
  }
}
//请重构。
字符串[]paramPart=url.split(“?”);
字符串[]params=paramPart[1]。拆分(&);
Map paraMap=newhashmap();

对于(int i=0;i如果您确定
&recipient
总是在
&message
之后,或者
&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要从请求中获取查询字符串并尝试相应地拆分它

例如,如果
&收件人总是在
&消息
之后,那么您可以执行以下操作(伪代码/未测试):


如果您确定
&recipient
总是在
&message
之后,或者
&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要从请求中获取查询字符串并尝试相应地拆分它

例如,如果
&收件人总是在
&消息
之后,那么您可以执行以下操作(伪代码/未测试):


@Ansari,谢谢你的回复。我无法控制url。它是由某个外部客户端发送的…@Ansari,谢谢你的回复。我无法控制url。它是由某个外部客户端发送的。。。