gpt4 book ai didi

java - HTTPServlet Request.getInputStream() 总是接收空行

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

客户端:

    public List<String> post(List<String> toWrite){
String result = "";
List<String> allResults = new ArrayList<String>();

try {
openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
initializeOutputStream();
for(int i = 0; i < toWrite.size(); i++){
out.write(toWrite.get(i));
out.newLine();
}
System.out.println(connection.getResponseCode());
System.out.println(connection.getResponseMessage());
initializeInputStream();
while((result = in.readLine()) != null){
allResults.add(result);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
closeConnection();
}

return allResults;
}

One of the attempts at the host:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
List<String> incoming = new ArrayList<String>();

// BufferedReader in = req.getReader();
//
// String tmp = in.readLine();

resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();

StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
InputStream inputStream = req.getInputStream();
if (inputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream));
char[] charBuffer = new char[128];
int bytesRead = -1;
//while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
while(bytesRead != -1){
stringBuilder.append(charBuffer, 0, bytesRead);
}
} else {
stringBuilder.append("");
}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
String body = stringBuilder.toString();
System.out.println(body);

out.println(body);

// BufferedReader in = new BufferedReader(new InputStreamReader(req.getInputStream()));
//
// String tmp = "";
//
// //while(!(in.ready())){}
//
// while((tmp = in.readLine()) != null){
// System.out.println(tmp);
// }
//
//
// out.println(tmp);

out.println("end");

}

请注意注释掉的行 - 这是我尝试从客户那里获取信息的众多其他尝试之一。

servlett 中的 System.out.printlns 和 out.printlns 都返回空行。程序结束时的“结束”返回没有问题。这不是在客户端读回多行的问题 - 如果我放置多个 out.println,那么我可以很好地读取它们。输入流的 system.out.println() 也返回空白。状态码是200,看来没有连接错误。

有人吗?

最佳答案

看起来你的 while 循环在这里没有做任何事情,因为在你的情况下,bytesRead 总是 -1 因此它永远不会进入循环,而且,你不'根本不要使用您的 bufferedReader 从输入流中读取:-

    int bytesRead = -1;
while (bytesRead != -1) {
stringBuilder.append(charBuffer, 0, bytesRead);
}

试试这个:-

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();

StringBuilder stringBuilder = new StringBuilder(1000);
Scanner scanner = new Scanner(req.getInputStream());
while (scanner.hasNextLine()) {
stringBuilder.append(scanner.nextLine());
}

String body = stringBuilder.toString();

System.out.println(body);
out.println(body);

}

关于java - HTTPServlet Request.getInputStream() 总是接收空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175203/

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