当带有数据的POST请求到达Java Servlet时读取URL参数

时间:2015-03-27 13:36:52

标签: java servlets jetty

在Java servlet中,您从POST请求中读取JSON,例如通过

new JSONObject(toString(httpRequest.getInputStream()))

除了JSON之外,我想在URL中指定参数,可以通过以下方式阅读:

httpRequest.getParameterMap().get("someURLParam")

一切正常(我在服务器端使用AJAX帖子请求和码头)

BUT

我担心并且当这两种方法相互影响时会感到困惑,因为来自javax.​servlet.​ServletRequest.getParamter(String)的javadoc说:

  

如果参数数据是在请求体中发送的,例如发生   使用HTTP POST请求,然后通过直接读取正文   ServletRequest.getInputStream或ServletRequest.getReader都可以   干扰这种方法的执行。

在我的情况下,这意味着什么?或者,如果内容类型为x-www-form-urlencoded,它们是否只会干扰?或者仅在使用getParameter并且方法getParameterMap没问题的情况下?

1 个答案:

答案 0 :(得分:0)

如果你只使用getParameter / getParameterMap,你会没事的。这是因为,在幕后,这些方法可能会调用getInputStream。规范说MAY是因为它取决于实现,因此行为可能因容器而异。

如果您的内容不是表单编码,或者您正在处理GET请求等,则getParameter / getParameterMap只需要从查询字符串中获取参数,因此Jetty不会读取正文中的参数那些案件。