假设我有一个包含这些字段的表单(HTML)
<input type="text" name="user[name]" value="name"/>
<input type="text" name="user[email]" value="email"/>
<input type="text" name="user[age]" value="age"/>
如何在java Servlet中获取此信息?
在php中它只是
$_POST["user"]["name"]
或
$_GET["user"]["name"]
我不是指像
这样的简单字段 <input type="text" name="user" value="jimmy"/>
我指的是检索数据数组,例如一组复选框或多重选择。
答案 0 :(得分:1)
在java servlet子类中,重写doGet和doPost,
class subServlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
request.getParameter("paraname");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
request.getParameter("paraname");
}
....
}
更新:使用getParameterMap
返回参数图。
答案 1 :(得分:1)
要记住的一点是,字段名称中的括号没有特殊含义,只是名称的一部分,因此在使用ServletRequest::getParameter
时必须包含它们:
request.getParameter("user[name]");
它只是PHP(或另一个额外的框架),“自动”将带括号的名称视为数组(或者如果Java更可能是Map
)。
如果你是这样的地图并且你没有使用这样的框架,你需要自己创建它,例如,通过循环ServletRequest::getParameterNames
。
示例:
public static Map<String, String> getParameterMap(ServletRequest request, String mapName) {
Map<String, String> result = new HashMap<String, String>();
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.getNextElement();
if (name.startsWith(mapName + "[") && name.endsWith("]")) {
result.put(name.substring(mapName.length()+1, name.length() - 2), request.getParameter(name));
}
}
return result;
}
这只是一个快速(未经测试)的例子。它不支持多个级别的地图(user[name][last]
),也不支持一个名称的多个值(需要getParameterValues
)。