Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;SocketException:来自服务器的文件意外结束";来自servlet,但不来自独立应用程序_Java_Servlets_Httpurlconnection - Fatal编程技术网

Java &引用;SocketException:来自服务器的文件意外结束";来自servlet,但不来自独立应用程序

Java &引用;SocketException:来自服务器的文件意外结束";来自servlet,但不来自独立应用程序,java,servlets,httpurlconnection,Java,Servlets,Httpurlconnection,我想从我的servlet调用servlet。我可以从一个独立的应用程序调用远程servlet,但不能从我的servlet调用它(它在Glassfish上)。我对调用使用完全相同的代码(我在最后一行代码中得到错误): 这段代码无法读取远程servlet的响应是可疑的,因此可能servlet根本没有响应。然而,当我从standlone应用程序调用它时,它为什么会回复?我真的不明白。。。 我得到了一个例外: java.net.SocketException: Unexpected end of fil

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

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

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?谢谢

这可能是因为未设置
内容长度
标题。并且因为POST请求正文的结尾未发送。服务器正在等待流结束,直到超时

您应该尝试以下两种方法以使其正常工作:

  • 在执行
    connect()
  • 尝试关闭发送POST结束请求的
    连接.getOutputStream().close()

查看您正在点击的url。 我也有同样的问题,经过多次回归后,我知道正在生成的url和被点击的url中有一个空格,这是问题的原因,通过将
空格
替换为
下划线


您还可以通过调用
URIEncoder.encode(uri)将其编码为url
记住,只有
后面的uri部分应该被编码。

在我们的例子中,tomcat被设置为http2协议(默认情况下强制http2协议删除, 去除
从tomcat
config
文件夹中的
server.xml

,但客户端使用的是http1.1,java也需要使用证书(keyimport工具)进行签名,所以根本的问题有点棘手……

在这两种情况下“endpoint”真的是一样的吗?对我来说,它是一个包含空格字符的URL参数!:(我必须使用URLEncoder.encode作为参数将其转换为web友好格式!!:)谢谢
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)