Java Servlets:区分GET和POST

时间:2018-04-23 22:45:27

标签: java http servlets java-ee

是否有可靠的方法使用GET分别提取POSTHttpServletRequest参数?

也就是说,将查询字符串(GET)中发送的参数区分为请求正文(POST)中发送的参数,假设为Content-Type: application/x-www-form-urlencoded

示例

POST /path HTTP/1.1
Host: test.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 42

first_name=posted_foo&last_name=posted_bar

我想最终得到两个变量,一个包含来自URL的值,另一个包含来自请求正文的值:

get = {"first_name": "foo", "last_name": "bar"}
post = {"first_name": "posted_foo", "last_name": "posted_bar"}

我似乎能够提取这些参数的唯一方法是getParameter*方法。

  • HttpServletRequest.getParameter:返回单个字符串,并且往往是URL(GET)中提供的值。
  • HttpServletRequest.getParameterValues:返回包含查询字符串和请求正文中提供的所有值的字符串数组。通过查询字符串传递的那些往往首先出现。但是,如果字符串的返回数组中只存在一个值,则无法可靠地确定该值是来自查询字符串还是请求正文。

为了说明,使用PHP,这些值是通过$_GET$_POST超全球提供的。

1 个答案:

答案 0 :(得分:1)

查询字符串很容易解析,因此为您提供URI查询参数名称,而getParameterNames()为您提供整个集合。

将查询字符串拆分为'&',然后通过' ='对每个标记进行子网划分。 对于每个键和值,执行URLDecoder.decode()。这就是全部。

将所有这些键放入一组中。如果param位于uri查询中,那么它很有可能只在那里存在。如果你必须发现它是否也在帖子中,实际上,发布表格编码的数据也是这样编码的,但是这个帖子被消费所以为时已晚。此外,帖子也可以是多部分编码,这是非平凡的解码。

最后,你需要这种区别是奇怪的。你能解释一下你寻求这种区别的目的吗?