来自 servlet 但不是来自独立应用程序的“SocketException:来自服务器的意外文件结尾”

2023-12-30

我想从我的 servlet 中调用一个 servlet。我可以从独立应用程序调用远程 servlet,但无法从我的 servlet(它位于 Glassfish 上)调用它。我使用完全相同的代码进行调用(我在最后一个代码行收到错误):

URL serverAddress = new URL(endpoint);
//Set up the initial connection
HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setReadTimeout(timeOut);
connection.setRequestProperty("Content-Type", "text/xml; charset=ISO-8859-1");
connection.connect();
OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream());
wr.write(requestBody);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));

可疑的是,此代码无法读取远程 servlet 的响应,因此 servlet 可能根本不响应。但是,为什么当我从独立应用程序调用它时它会回复?我真的不明白... 我得到了这个例外:

java.net.SocketException: Unexpected end of file from server
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1049)

有人有什么想法吗? servlet 是否可能存在不使用 HttpURLConnection 的限制?谢谢!


发生这种情况可能是因为Content-Length未设置标头。并且因为 POST 请求正文的结束未发送。服务器最终会等待流结束超时。

您应该尝试以下两件事才能使其正常工作:

  • 在执行之前设置内容长度标头和请求正文大小connect()
  • 尝试关闭connection.getOutputStream().close()发送 POST 请求结束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

来自 servlet 但不是来自独立应用程序的“SocketException:来自服务器的意外文件结尾” 的相关文章

随机推荐