我从谷歌代码使用Ciui,所有请求只是GET请求而不是POST。这些电话是由ajax发出的(我不确定)。我需要知道如何从这个URL读取“searchstring”参数。当我使用getQueryString()方法在我的Servlet中读取它时,我无法正确地形成实际文本。这个unicode(当%替换为/时)就像文本一样实际上是中文的。请让我如何解码搜索字符串并创建字符串。
另一个参数是适当的百分比编码,我可以使用URL解码进行解码。提前谢谢。
答案 0 :(得分:6)
好吧,在我的情况下,我有来自其他来源的查询字符串,所以你可能需要这个:
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;
}
那么你可以使用:
Map params=getQueryMap(querystring);
String id=(String)params.get("id");
String anotherparam=(String)params.get("anotherparam");
答案 1 :(得分:2)
这些中文字符的编码方案实际上违反了Web标准(即RFC 3986):百分号是保留字符,除标准百分比编码外,不能使用。
我强烈建议您使用标准编码方案(UTF-8字节和百分比编码);那么你可以简单地使用标准的getParameter()
方法。如果您坚持违反标准,则很可能无法在符合标准的servlet容器中解决您的问题。
答案 2 :(得分:2)
这段代码转换了键/值列表中的查询字符串:
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());
@Tuno的评论激励我写一个新的答案,这个替代(和更短)的解决方案使用groupingBy
方法:
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())));
我建议使用URLDecoder.decode(String s, String enc)
两个解决方案都使用以下行打印集合内容:
list.stream().forEach(s -> System.out.println(s.getKey() + " = " + s.getValue()));
答案 3 :(得分:1)
public void doGet(HttpServletRequest request, HttpServletResponse response) {
String searchString = request.getParameter("searchString");
// process searchString
}
自动完成对参数的解码。