java ee拥有 ServletRequest.getParameterValues()
.
在非ee平台上, URL.getQuery()
只返回一个字符串。
当不在javaee上时,正确解析url中的查询字符串的正常方法是什么?
在答案中,尝试创建自己的解析器是很流行的。这是一个非常有趣和令人兴奋的微编码项目,但我不能说这是一个好主意。
下面的代码片段通常是有缺陷或损坏的。打破它们对读者来说是一个有趣的练习。以及攻击使用它们的网站的黑客。
解析查询字符串是一个定义良好的问题,但是阅读规范并理解其中的细微差别是非常重要的。最好让一些平台库编码人员来为您做艰苦的工作,并进行修复!
25条答案
按热度按时间yk9xbfzb1#
此方法获取par name和par value的uri和返回Map
siv3szwd2#
这对我很有用。。我不知道为什么每个人都想要一张Map,我只需要一张简单的名值Map。
为了简单起见,我使用了内置的uri.getquery();
4nkexdtk3#
仅供参考,这是我最终得到的结果(基于urlencodedutils,并返回一个Map)。
特征:
它接受url的查询字符串部分(您可以使用
request.getQueryString()
)一个空的查询字符串将产生一个空的
Map
没有值(?test)的参数将Map到空值List<String>
代码:兼容性帮助程序(值存储在字符串数组中,就像在servletrequest.getparametermap()中一样):
x6h2sr284#
Guava的多重Map更适合这种情况。下面是一个简短的干净版本:
vql8enpb5#
在android上,我尝试使用@diyism answer,但遇到了@rpetrich提出的空格字符问题,例如:我填写了一个表单,其中
username = "us+us"
以及password = "pw pw"
导致url字符串如下所示:但是,@diyism代码返回
"us+us"
以及"pw+pw"
,即不检测空格字符。如果url是用%20
标识空格字符:这将导致以下修复:
dl5txlt96#
ApacheAxis2有一个querystringparser.java的独立实现。如果您不使用axis2,只需从这里下载源代码和测试用例-
http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/querystringparser.java
http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/util/querystringparsertest.java
zlhcx6iw7#
在android上:
dluptydi8#
我认为jre里没有。您可以在其他包(如apachehttpclient)中找到类似的函数。如果您不使用任何其他软件包,您只需编写自己的软件包。没那么难。这是我用的,
zazmityj9#
sshcrbum10#
对于servlet或jsp页面,可以使用request.getparameter(“paramname”)获取querystring键/值对
还有其他方法可以做到这一点,但我在创建的所有servlet和jsp页面中都是这样做的。
628mspwn11#
使用apache httpcomponents并将其与一些集合代码连接起来,以便按值访问参数:http://www.joelgerard.com/2012/09/14/parsing-query-strings-in-java-and-accessing-values-by-key/
q9yhzks012#
wvyml7n513#
如果类路径上有jetty(服务器或客户机)libs,则可以使用jetty util类(参见javadoc),例如:
niknxzdl14#
在android上,apache库提供了一个查询解析器:
http://developer.android.com/reference/org/apache/http/client/utils/urlencodedutils.html 以及http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/urlencodedutils.html
6ovsh4lw15#