仅检索POST参数(Java)

时间:2009-07-29 02:05:50

标签: java post servlets

有没有人知道从HttpServletRequest对象中获取POST参数的方法?

IE,PHP有$ _POST超全局,而Perl的CGI.pm只会在HTTP方法为POST时默认检索POST参数。(/ p>

即使HTTP方法是POST,HttpServletRequest.getParameter(String)也将包含 GET URL参数。

6 个答案:

答案 0 :(得分:7)

根据我的理解,HTTP中没有POST参数和GET参数之类的东西,有POST和GET方法。使用POST方法发出请求时,参数将在消息正文中进行。如果是GET请求,参数将在URL中找到。

我的第一个想法是,它是servlet容器中的实现错误。但是,由于事情并不总是如你所愿,java servlet规范(至少2.4版本)不区分这两种参数。因此,无法使用servlet API获取post或url参数。

当然你已经有了一个计划B.但是,为了以防万一,我发布了两个我想到的替代方案:

  1. 如果您有权访问参数名称定义,则可以在迭代getParameterNames()结果时使用前缀来区分这两者。

  2. 您可以解析创建URL对象的URL,并使用getQuery()方法获取参数。然后,使用ParameterParser库中的HttpClient等实用程序类解析查询字符串上的参数。最后,从getParameterNames()结果中减去这些名称。

答案 1 :(得分:6)

我想一种方法可能是手动解析HttpServletRequest.getQueryString()并检查其中是否存在参数。

一个天真的实现(忽略url-escaped键值)会像这样(未经测试):

public boolean isInQuery(HttpServletRequest request, String key) {
  String query = request.getQueryString();
  String[] nameValuePairs = query.split("&");
  for(String nameValuePair: nameValuePairs) {
    if(nameValuePair.startsWith(key + "=")) {
      return true;
    }
  }
  return false;
}

答案 2 :(得分:3)

难道你不能在HttpServlet的子类中的doPostdoGet内获取HttpServletRequest中的参数吗?

你在doPost中抓取的任何内容(通过getParemeter)都是一个POST,而doGet中的任何内容都是GET。

答案 3 :(得分:2)

我认为你可以通过HttpServletRequest接口提供getMethod()。

Java doc 1.6

这也可以在1.4和1.5中使用。

答案 4 :(得分:1)

我不确定这是否可行,但您可以尝试使用request.getReader()提取POST正文的原始内容。但是,在将控制权交给应用程序之前,容器可能会删除该数据,即使它没有,您也必须自己解码参数字符串。

答案 5 :(得分:1)

问题已在this related post中解答:

  

Normaly你可以用同样的方式在servlet中获取和POST参数:

request.getParameter("cmd");
     

但前提是POST数据被编码为内容的键值对   类型:" application / x-www-form-urlencoded" 就像使用标准时一样   HTML表单。