如何使用NameValuePair将数组值发送到servlet?

时间:2013-02-28 05:52:39

标签: java google-app-engine servlets

我正在尝试向servlet发送布尔值数组。 这是我到目前为止所做的,而且我很困惑:

HttpClient client = new DefaultHttpClient();  
    String postURL = "http://APP_NAME.appspot.com/listenforrestclient";
    HttpPost post = new HttpPost(postURL);
        List<NameValuePair> params = new ArrayList<NameValuePair>();

        for (int i=0; i<arrBool.length; i++) {
        arrBool[i] = r.nextBoolean();
        String[] user = {"","","","","",""};
        if (arrBool[i] == true) {
            params.add(new BasicNameValuePair("user[i]", arrBool.toString()));
        }
        else if (arrBool[i] == false) {
            params.add(new BasicNameValuePair("user[i]", arrBool.toString()));
    }
        }
        UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params,HTTP.UTF_8);
        post.setEntity(ent);
        HttpResponse responsePOST = client.execute(post);  
        HttpEntity resEntity = responsePOST.getEntity();  
        if (resEntity != null) {    
            System.out.printf("RESPONSE: ", EntityUtils.toString(resEntity));
        }
} catch (Exception e) {
    e.printStackTrace();
}

我试图只做用户[i],“用户[i]”,用户。仍然找不到它。

在servlet上我有:

 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException 
{
    resp.setContentType("text/plain");

    for (int i=0; i<mmaa.length; i++) {
        mmaa = req.getParameterValues("user");
        resp.getWriter().println(mmaa[i]);
    }

}

我在网上搜索了很多,找不到合适的东西。如果有人能帮助我,我真的很感激。

由于

2 个答案:

答案 0 :(得分:2)

您有params.add(new BasicNameValuePair("user[i]", arrBool.toString()));

但你的密钥是字符串"user[i]"。请改用String.format("user[%d]", i)。 所以,改变

params.add(new BasicNameValuePair("user[i]", arrBool.toString()));

params.add(new BasicNameValuePair(String.format("user[%d]", i), arrBool.toString()));

在servlet中,您可以通过执行以下操作获取参数值:

for(int i = 0; i < ...){
    String value = request.getParameter(String.format("user[%d]", i);
    //process value  
}

答案 1 :(得分:1)

您正在添加params.add(new BasicNameValuePair("user[i]", arrBool.toString()));的新对象,而不是尝试

params.add(new BasicNameValuePair(user[i].toString(), arrBool.toString()));

首先在servlet中,你需要从request参数中获取数组列表,并为数组列表中的每个值创建一个具有相同BeanNameValuePair的对象,并使用getValue()检查它的值。检查是否得到了servlet中的值正确检查是否通过调试正确获取ArrayList。