繁体   English   中英

如何从HTTPClient调用的Servlet获取对HTTPClient的响应?

[英]How to get a response to HTTPClient from a Servlet which is called from the HTTPClient?

我能够使用HttpClient成功发布到servlet。 但是我需要一个从servlet返回到HttpClient的布尔参数,并且不确定如何执行相同的操作。

Earleir我当时使用的是common-httpclient-3.1.jar。但是后来我意识到将httpclient升级到4.0,这有助于HttpResponse处理响应。 现在我正在使用httpclient.4.0.3,httpcore-4.1和httpmime-4.1.1。 我正在尝试的代码如下所示,用于HttpClient。

HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost("http://localhost:9090/drools-guvnor/KeystoneServlet");
HttpEntity entity = method.getEntity();
List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair("directory", directory));
nvps.add(new BasicNameValuePair("username", username));
nvps.add(new BasicNameValuePair("password", password));
method.setEntity(new UrlEncodedFormEntity(nvps));
ResponseHandler responseHandler = new BasicResponseHandler();
HttpResponse response = client.execute(method, responseHandler);
System.out.println("responseBody: "+responseHandler.handleResponse(response));

在KeyStoneServlet中,我能够成功获取参数目录,用户名和密码。 进一步使用这些参数可以进行进一步的处理,并且能够检索一个布尔参数,我想将其作为对HttpClient的响应。 但是我不知道我该怎么做。 上面的responseBody SOP空白,没有显示任何内容。

对此的任何协助将不胜感激。

有很多方法可以从servlet返回数据。JSON,XML,纯文本。 您要做的就是:

response.setContentType("text/xml");
PrintWriter pw=response.getWriter();
pw.write(<reponse data string xml>);

在httpclient上接收数据并进行解析。 如果您只需要布尔值,那么应该使用单个字符串true / false进行操作。但是,如果要从Servlet中抛出异常,该怎么办? 在这种情况下,XML更加健壮。

如果不想解析xml或文本并处理响应,请尝试使用Web服务。

编辑:回应评论:

在您的Servlet中,您可以访问HTTPResponse对象。 让我们使用响应来表示该对象。

response.setContentType("text/plain");
PrintWriter pw=response.getWriter();
pw.write(<true or false based on your processing>);

现在在您的客户端代码中,我与httpclient 4并没有太多合作。所以这与httpclient 3在一起-

HttpClient client = new DefaultHttpClient();
HttpPost method = new HttpPost("http://localhost:9090/drools-guvnor/KeystoneServlet");
HttpEntity entity = method.getEntity();
List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair("directory", directory));
nvps.add(new BasicNameValuePair("username", username));
nvps.add(new BasicNameValuePair("password", password));
method.setEntity(new UrlEncodedFormEntity(nvps));
HttpResponse httpResponse = client.execute(method);
int statusCode = httpResponse.getStatusLine().getStatusCode(); 
if (statusCode == HttpStatus.SC_OK) {
    InputStream is = httpResponse.getEntity().getContent();

    //convert your stream into a string and convert it into a boolean
}

抱歉,我没有httpclient 4可以检查。。但是我确信上面的方法可以工作..

我不建议发送回纯文本。 而是使用XML并以与上述相同的方式处理它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM