[英]Java 8 SpringBoot HttpServletRequest return always -1 in InputStream
[英]HttpServletRequest InputStream read return -1
我正在嘗試讀取InputStream
請求,但已到達流的末尾。
唯一的類(servlet)是:
public class TestServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
InputStream clientIn = request.getInputStream();
OutputStream clientOut = response.getOutputStream();
byte[] buffer = new byte[4096];
int n;
try
{
while ((n = clientIn.read(buffer)) != -1) // ---------> Here, n is -1
{
System.out.println(new String(buffer,0,n));
clientOut.write(("Ok = " + n).getBytes());
}
}
catch (Exception e)
{
System.err.println(e);
}
}
}
沒有任何其他類(例如過濾器,偵聽器或其他servlet)
客戶端代碼為:
public class Main { public static void main(String[] args) throws IOException, InterruptedException { String postCommand = "POST / HTTP/1.1\r\n" + "Host: localhost\r\n" + "Content-Type: binary/octet-stream\r\n" + "Connection: keep-alive\r\n\r\n" + "name1=value1&name2=value2"; Socket socket = new Socket("localhost", 8080); InputStream serverIn = socket.getInputStream(); OutputStream serverOut = socket.getOutputStream(); serverOut.write(postCommand.getBytes()); int n = 0, count = 1; byte[] buffer = new byte[4096]; do { if (n != 0) System.out.println(new String(buffer, 0, n)); serverOut.write(("foo " + count).getBytes()); } while ((n = serverIn.read(buffer)) != -1 && count++
先感謝您。 親切的問候!
您的客戶端沒有發送有效的HTTP 1.1。 沒有內容長度標頭,因此Servlet無法知道何時停止讀取。 流沒有實際結束,因為HTTP客戶端必須保持連接打開才能讀取響應。
使用HttpURLConnection。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.