Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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

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从查询字符串中读取参数和值?_Java_Url_Servlets_Character Encoding - Fatal编程技术网

如何使用java从查询字符串中读取参数和值?

如何使用java从查询字符串中读取参数和值?,java,url,servlets,character-encoding,Java,Url,Servlets,Character Encoding,我使用的是谷歌代码中的Ciui,所有的请求都是GET请求而不是POST。这些调用是由ajax进行的(我不确定)。我需要知道如何从这个URL读取“searchstring”参数。当我在Servlet中使用getQueryString()方法读取此内容时,我无法正确地形成实际文本。这种类似unicode(当%替换为/)的文本实际上是中文的。请告诉我如何解码搜索字符串和创建字符串 另一个参数是正确的百分比编码,我可以使用URL解码进行解码。提前谢谢 public void doGet(HttpSer

我使用的是谷歌代码中的Ciui,所有的请求都是GET请求而不是POST。这些调用是由ajax进行的(我不确定)。我需要知道如何从这个URL读取“searchstring”参数。当我在Servlet中使用getQueryString()方法读取此内容时,我无法正确地形成实际文本。这种类似unicode(当%替换为/)的文本实际上是中文的。请告诉我如何解码搜索字符串和创建字符串

另一个参数是正确的百分比编码,我可以使用URL解码进行解码。提前谢谢

public void doGet(HttpServletRequest request, HttpServletResponse response) {
    String searchString = request.getParameter("searchString");
    // process searchString
}

解码参数是自动完成的。

您对这些汉字的编码方案实际上违反了web标准(即:百分号是一个保留字符,除了标准的百分号编码外,不能使用它)


我强烈建议您使用标准编码方案(UTF-8字节和百分比编码);然后您可以简单地使用标准的
getParameter()
方法。如果您坚持违反标准,则很可能无法在符合标准的servlet容器中解决您的问题。

好的,在我的情况下,我从另一个来源获得了查询字符串,因此您可能需要:

    public static Map<String, String> getQueryMap(String query)  
{  
    String[] params = query.split("&");  
    Map<String, String> map = new HashMap<String, String>();  
    for (String param : params)  
    {  String [] p=param.split("=");
        String name = p[0];  
      if(p.length>1)  {String value = p[1];  
        map.put(name, value);
      }  
    }  
    return map;  
} 
使用Java8的解决方案。 这段代码转换键/值列表中的查询字符串:

List<AbstractMap.SimpleEntry<String, String>> list = 
        asList(queryString.split("&")).stream()
        .map(s -> copyOf(s.split("="), 2))
        .map(o -> new AbstractMap.SimpleEntry<String, String>(o[0], o[1]) )
        .collect(toList());
我建议使用
urldecker.decode(字符串s,字符串enc)

这两种解决方案都使用以下行打印集合内容:

list.stream().forEach(s -> System.out.println(s.getKey() + " = " + s.getValue()));

您正在使用servlet吗?为什么不请求.getParameter(…)方法?(请求类型为HttpServletRequest)。否。我在使用request.getParameter()时没有得到该参数。所以我尝试使用查询字符串:(给出调用servlet的javascript代码。
System.out.println(Collections.list(request.getParameterNames())
say?searchString是否在那里?(注意它区分大小写)。很好。我使用了
.collector.toMap(o->o[0],o->o[1])
获取映射并按键检索。@t如果有多个值与单个字段关联(例如
field1=value1&field1=value2&field1=value3),则解决方案不起作用。如果有多个值与单个字段关联(例如field1=value1&field1=value2&field1=value3),则此解决方案无法处理这种情况。
Map<String, List<String>> llist = 
       asList(queryString.split("&")).stream()
       .map(s -> copyOf(s.split("="), 2))
       .collect(groupingBy(s -> s[0], mapping(s -> s[1], toList())));
list.stream().forEach(s -> System.out.println(s.getKey() + " = " + s.getValue()));