仅检索POST参数(Java)
有没有人知道从HttpServletRequest对象获取POST参数的方法?
IE,PHP有$ _POST超全局,而Perl的CGI.pm只会在HTTP方法为POST(默认情况下)时检索POST参数。
HttpServletRequest.getParameter(String)将包含 得到 即使HTTP方法是POST,也会显示URL参数。
我猜一种方法可能是手动解析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; }
根据我的理解,HTTP中没有POST参数和GET参数,还有POST和GET方法。 使用POST方法发出请求时,参数将在消息正文中进行。 如果是GET请求,参数将在URL中。
我的第一个想法是,它是servlet容器中的实现错误。 但是,由于事情并不总是如你所愿,java servlet规范(至少2.4版本)不区分这两种参数。 因此,无法使用servlet API获取post或url参数。
当然你已经有了一个计划B.但是,为了以防万一,我发布了两个我想到的替代方案:
-
如果您有权访问参数名称定义,则可以在迭代getParameterNames()结果时使用前缀来区分这两者。
-
您可以解析创建URL对象的URL,并使用getQuery()方法获取参数。 然后,使用HttpClient库中的一些实用程序类(如ParameterParser)解析查询字符串上的参数 。 最后,从getParameterNames()结果中减去这些名称。
难道你不能从HttpServlet的子类中的doPost
或doGet
中的HttpServletRequest获取参数吗?
你在doPost中获取的任何内容(通过getParemeter
)都是一个POST,而doGet中的任何内容都是GET。
我想你可以通过HttpServletRequest接口提供getMethod()。
Java doc 1.6
这也有1.4和1.5。
我不确定这是否可行,但你可以尝试使用request.getReader()
来提取POST主体的原始内容。 但是,在将控制权交给应用程序之前,容器可能会删除该数据,即使它没有,您也必须自己解码参数字符串。
这个相关post回答了这个问题:
Normaly你可以用同样的方式在servlet中获取和POST参数:
request.getParameter("cmd");
但是,只有将POST数据编码为内容类型的键值对: “application / x-www-form-urlencoded”,就像使用标准HTML表单一样。