如何在Java客户端中读取来自servlet的响应?

4
我有一个Java应用程序:
-这个应用程序发送一个字符串:
HttpClient httpClient = new DefaultHttpClient();

    try {
        HttpPost request = new HttpPost(url);
        StringEntity params = new StringEntity(xml);
        request.addHeader("content-type", "application/x-www-form-urlencoded");
        request.setEntity(params);
        HttpResponse response = httpClient.execute(request);

        // handle response here...
        String res= response.toString();
        System.out.println("RESPONSE=>\n"+response); //where i read the response
    } catch (Exception ex) {
        // handle exception here
    } finally {
        httpClient.getConnectionManager().shutdown();
    }

我在servlet中使用这个字符串,只想发送一个字符串响应。
response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.print("TEST");

但是当我阅读回复时,我只看到了我的标题:
RESPONSE=>
HTTP/1.1 200 OK [X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Oracle Corporation/1.7), Server: GlassFish Server Open Source Edition 3.1.2.2, Content-Type: text/html;charset=UTF-8, Content-Length: 83, Date: Fri, 14 Dec 2012 17:17:07 GMT]

有人可以帮我吗?
1个回答

3

您使用的方法不正确,无法读取响应日期。请使用以下方式:

String res= response.toString();

这个方法只返回响应对象的字符串表示,而不是它所包含的数据。Apache Http Commons库有一个实用类叫做EntityUtils,可以方便地读取响应。使用它来读取整个响应正文。在这之前,不要忘记验证请求是否成功完成:

if(response.getStatusLine().getStatusCode() == 200) {
    final String res = EntityUtils.toString(response.getEntity());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接