Java POST和GET数组

时间:2011-12-05 09:59:22

标签: java php

假设我有一个包含这些字段的表单(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"/>

我指的是检索数据数组,例如一组复选框或多重选择。

2 个答案:

答案 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)。