Java Servlets: Differentiate between GET and POST



有没有可靠的方法使用HttpServletRequest分别提取GETPOST参数?

也就是说,区分在查询字符串(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超全局变量提供的。

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

按"&"拆分查询字符串,然后按"="细分每个标记。 对于每个键和值,执行 URLDecoder.decode()。就这样。

将所有此类键扔成一组。如果参数在 uri 查询中,则很有可能它只在那里。如果你必须找到它是否也在帖子中,实际上,帖子表单编码的数据也是这样编码的,但是那个帖子被消耗了,所以为时已晚。此外,该帖子也可以是非平凡解码的多部分编码。

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

最新更新