1

服务代码

System.out.println(" ================servlet==================");
InputStream in = request.getInputStream();
int a = in.available();
byte[] b = new byte[a];
in.read(b);
String stringValue = new String(b,"utf-8");
System.out.println("receive data==="+stringValue);
OutputStream dataOut = response.getOutputStream();
String responseData = "<test>test</test>";
System.out.println("response datea==="+responseData);
dataOut.write(responseData.getBytes("utf-8"));
dataOut.flush();
dataOut.close();

客户代码

System.out.println("================client======================");
java.net.URL url = new java.net.URL("test address");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setUseCaches(false);
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestMethod("POST");
String sendData = "<data>send</data>";
System.out.println("send data="+sendData);
OutputStream dataOut = con.getOutputStream();
dataOut.write(sendData.getBytes("utf-8"));
dataOut.flush();
dataOut.close();
InputStream in = con.getInputStream();
int a = in.available();
byte[] b = new byte[a];
in.read(b);
String stringValue = new String(b,"utf-8");
in.close();
System.out.println("receive data="+stringValue);

我得到打印结果servlet控制台================servlet==================接收数据===响应日期a= ==测试

客户端控制台

================client======================
send data=<data>send</data>
receive data=<test>test</test>

我的问题是 servlet 无法从客户端接收数据

谁能帮我?

4

2 回答 2

4

我的问题是 servlet 无法从客户端接收数据

这可能不是唯一的问题,但是这段代码完全被破坏了:

int a = in.available();
byte[] b = new byte[a];
in.read(b);

您假设所有数据在一开始就可用。相反,您应该从流中读取数据,直到它用完数据。鉴于您希望将结果作为文本,我会将流包装在 an 中InputStreamReader并从那里读取。例如:

BufferdReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println("Servlet read line: " + line);
}

如果您真的想将它作为 XML 来阅读,您应该能够将InputStream(or Reader) 传递给 XML 解析器库以创建 DOM。

顺便说一句,您也应该在客户端代码中做同样的事情。基本上:

  • 永远不要忽略的返回值InputStream.read
  • 避免使用available(); 这很少合适
  • 使用 anInputStreamReader从流中读取文本,而不是自己从字节构造它
  • 使用 XML API 读取 XML,而不是将其作为原始文本处理
于 2013-06-20T06:27:38.150 回答
0

到目前为止,我可以看到 is 的值,int b因此0它没有从输入流中读取任何数据。

根据这个文档

available

将始终返回0已扩展的 InputStream ServletInputStream。正如乔恩或 编辑所说:

InputStream is=request.getInputStream();
OutputStream os=response.getOutputStream();
byte[] buf = new byte[1024];
int chunk = is.read(buf);
于 2013-06-20T06:36:19.367 回答