是否已弃用javax.servlet.http.HttpUtils.parseQueryString?

时间:2008-10-30 00:42:59

标签: java url parsing query-string

我希望解析一个URL以获取Java中的查询字符串参数的集合。为了清楚起见,我需要解析给定的URL(或URL对象的字符串值),而不是来自servlet请求的URL。

看起来好像javax.servlet.http.HttpUtils.parseQueryString方法是明显的选择,但它已被弃用。

是否有一种我缺少的替代方法,或者只是在没有等效替换/增强功能的情况下弃用它?

5 个答案:

答案 0 :(得分:5)

我认为这个想法是使用HttpServletRequest代替。有getParameterMap(),getParameterNames()和getParameterValues()方法可以启动。

还有getParameter(String paramname)方法来获取特定方法的值。

这些在查询字符串参数和表单参数之间没有区别,尽管如此,如果你的目的是寻找特定的查询字符串,那么我想这无济于事。

答案 1 :(得分:2)

好吧,正如您所提到的,URL并非来自servlet请求,正确答案是取决于

url的查询部分的问题在于没有关于如何处理参数重复的明确规范。

例如,考虑一下这样的网址:

http://www.example.com?param1=value1&param2=value2&param1=value3

您对param1的价值有何看法?第一个值,最后一个,一个数组?问题是,根据规范,所有这些答案都是有效的,服务器供应商可以自由支持其中一个或另一个。有些人使用param1 []符号表示必须将其视为数组,但同样,这不是一个统一的解决方案。

因此,“最佳”解决方案是了解目标如何处理参数,并使用自制的实用程序类模仿行为。

答案 2 :(得分:2)

答案 3 :(得分:0)

据我所知,没有一个。

虽然自己写一个不应该太难。我想,最困难的部分是解码URL名称/值(如果你考虑的话,这真的不是那么难),你可以使用java.net.URLDecoder#decodeURL(String,String)

答案 4 :(得分:0)

对于所有Kotlin爱好者,我想到了:

fun splitQuery(url: URL): Map<String, List<String?>> = url.query?.let {
        it.split("&").map {
            it.split("=").let {
                Pair(it[0], it.getOrNull(1))
            }
        }.groupBy({ it.first }, {
            it.second
        })
    } ?: emptyMap()