gpt4 book ai didi

java - 如何从从 HTTPClient 调用的 Servlet 获得对 HTTPClient 的响应?

转载 作者:行者123 更新时间:2023-11-30 11:48:29 24 4
gpt4 key购买 nike

我能够使用 HttpClient 成功地发布到 servlet。但是我需要一个 boolean 参数从 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 中,我能够成功获取参数目录、用户名和密码。进一步使用这些参数我正在做进一步的处理,并且能够检索我想要返回的 boolean 参数作为对 HttpClient 的响应。但是我不知道我该怎么做。上面的 responseBody SOP 是空白的,没有显示任何内容。

如有任何帮助,我们将不胜感激。

最佳答案

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

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

在httpclient上接收数据并解析。如果您只需要 boolean 值,那么一个表示 true/false 的字符串就可以了。但是,如果您想从 servlet 中抛出异常怎么办?在那种情况下,XML 更健壮。

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

编辑:回应评论:

在您的 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 并以与上述相同的方式处理它。

关于java - 如何从从 HTTPClient 调用的 Servlet 获得对 HTTPClient 的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com