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