java如何在servlet中访问发布的表单数据?
如果我有一个运行JVM1的servlet。4.2,并且它正在接收带有表单数据字段的POST请求。我使用req。getParameterNames()来获取我所期望的所有查询字符串和表单数据。然而,我得到的只是查询字符串参数
来自各种sources的文献I amreading说getParameterNames()和getParameterValues(String)应该是获取JDK 1.4浏览器发送的所有查询字符串和发布表单数据的方法。以下是我用来提取所有参数的方法,我希望这些参数包括已发布的表单数据:
public Map getParameterMap(HttpServletRequest req) {
Map params= new HashMap();
String name = null;
System.out.println("<< Getting Parameter Map.>>");
Enumeration enumParams = req.getParameterNames();
for (; enumParams.hasMoreElements(); ) {
// Get the name of the request parameter
name = (String)enumParams.nextElement();
// Get the value of the request parameters
// If the request parameter can appear more than once
// in the query string, get all values
String[] values = req.getParameterValues(name);
params.put(name, values);
String sValues = "";
for(int i=0;i<values.length;i++){
if(0<i) {
sValues+=",";
}
sValues +=values[i];
}
System.out.println("Param " + name + ": " + sValues);
}
System.out.println("<< END >>");
return params;
}
This问题也符合我的期望,但servlet没有拾取表单数据。很明显,我错过了什么
更新:post数据非常直截了当,不是多部分形式或富媒体。只是通过一篇AJAX文章提交的纯文本,在文章正文中看起来像这样
c1=值%20A&;c2=值%20B&;c3=值%20C
# 1 楼答案
我设法找出了问题所在。由于JDK1.5+中有太多的闲话,并且讨论了1.5中的getParameterMaps()方法,因此关于1.4如何处理表单post数据的信息非常稀少且不明确。(如果您发现1.4中有特定内容,请发表评论)
在1.5之前,您必须通过getInputStream手动获取表单数据,然后将其解析出来。我从JavaSun站点找到了this方法(发布在下面),它使用哈希表做得很好。我不得不为不推荐的方法做一个小的修改。但它似乎非常有效,“开箱即用”,所以你应该可以直接剪切n-paste。我知道这是“老技术”,但我认为对于那些可能与我处于相同处境的人来说,这是值得的,因为他们一直在解决(似乎是)直接的问题
# 2 楼答案
没错。getParameterNames()、getParameterValues()和getParameter()方法是访问表单数据的方法,除非它是一个多部分表单,在这种情况下,您必须使用类似Commons Fileupload的方法来解析多部分请求,然后才能访问所有参数
编辑:您可能没有在AJAX调用中正确编码POST数据。POST数据必须包含application/x-www-form-urlencoded或多部分/表单数据的内容类型。如果您将其作为其他内容发送,则它不符合请求参数的条件,并且我希望您能够看到所描述的行为。您设计的解决方案基本上包括设置自定义内容的自定义解析