Java HTTPServlet请求。getInputStream()始终接收空行
客户:Java HTTPServlet请求。getInputStream()始终接收空行,java,servlets,file-upload,httpwebrequest,Java,Servlets,File Upload,Httpwebrequest,客户: public List<String> post(List<String> toWrite){ String result = ""; List<String> allResults = new ArrayList<String>(); try { openConnection(); connection.setDoOutput(tru
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");
}
public List post(List-toWrite){
字符串结果=”;
List allResults=new ArrayList();
试一试{
openConnection();
connection.setDoOutput(真);
connection.setRequestMethod(“POST”);
初始化OutputStream();
对于(int i=0;i0){
while(字节读取!=-1){
追加(charBuffer,0,字节读取);
}
}否则{
stringBuilder.append(“”);
}
}捕获(IOEX){
掷骰子;
}最后{
如果(bufferedReader!=null){
试试{
bufferedReader.close();
}捕获(IOEX){
掷骰子;
}
}
}
字符串体=stringBuilder.toString();
系统输出打印项次(正文);
out.println(body);
//BufferedReader in=新的BufferedReader(新的InputStreamReader(req.getInputStream());
//
//字符串tmp=“”;
//
////而(!(in.ready()){}
//
//while((tmp=in.readLine())!=null){
//系统输出打印LN(tmp);
// }
//
//
//out.println(tmp);
out.println(“结束”);
}
请注意注释掉的行-这是我尝试从客户那里获取内容的许多其他尝试之一
servlett中的System.out.printlns和out.printlns都返回一个空行。程序末尾的“end”返回时没有问题。在客户端读取多行不是问题-如果我输入多行out.println,那么我就可以很好地读取它们。System.out.println()对于inputstream,也返回空白。状态代码为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);
}
替换以下行
while(bytesRead != -1){
stringBuilder.append(charBuffer, 0, bytesRead);
}
与
希望它能起作用
bufferedReader.read(charBuffer);
String str = new String(charBuffer);
System.out.println(charBuffer);