servelt代码
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 ================== 接收数据=== 响应日期===测试
客户端控制台
================client======================
send data=<data>send</data>
receive data=<test>test</test>
我的问题是servlet无法从客户端
接收数据 谁能帮助我?答案 0 :(得分:4)
我的问题是servlet无法从客户端
接收数据
它可能不是唯一的问题,但此代码完全被破坏了:
int a = in.available();
byte[] b = new byte[a];
in.read(b);
您假设所有数据在开始时可用。您应该从流中读取,直到数据耗尽为止。鉴于您希望将结果作为文本,我将流包装在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
(或Reader
)传递给XML解析器库以创建DOM。
顺便说一下,你也应该在客户端代码中做同样的事情。基本上是:
InputStream.read
available()
;它很少适合InputStreamReader
从流中读取文本,而不是自己从字节答案 1 :(得分:0)
截至目前,我可以看到int b
的值为0
,因此它不会从输入流中读取任何数据。
available
对于已经扩展的InputStream,将始终返回0
ServletInputStream
。
正如Jon或者所说
修改强>
InputStream is=request.getInputStream();
OutputStream os=response.getOutputStream();
byte[] buf = new byte[1024];
int chunk = is.read(buf);