仅检索POST参数(Java)

dan*_*uck 12 java post servlets

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

IE,PHP有$ _POST超全局,而Perl的CGI.pm只会在HTTP方法为POST(默认情况下)时检索POST参数.

HttpServletRequest.getParameter(String)将包含 得到 即使HTTP方法是POST,也会显示URL参数.

df.*_*df. 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()方法获取参数.然后,解析使用一些工具类的查询字符串参数,如ParameterParserHttpClient的库.最后,从getParameterNames()结果中减去这些名称.


yka*_*ich 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;
}
Run Code Online (Sandbox Code Playgroud)