我正在使用java.io.BufferedReader的ready方法观察一个奇怪的行为,该方法在Tomcat中返回false,而当在Jetty中运行相同的servlet时它返回true。
BufferedReader bufferedReader = httpRequest.getReader();
System.out.println(bufferedReader.ready());
/** Perform some read operation */
输出:
true //Jetty
false //Tomcat
据我所知,BufferedReader #ready方法仅指示下一次读取是否不会为输入阻塞(true)或不阻止(false),但我无法理解两个Web服务器之间的行为差异环境。
如果有人之前已经遇到过这种情况,我需要帮助更好地理解这一点吗?
提前致谢。
答案 0 :(得分:4)
ready()
返回true。它返回false的事实并不能保证下一个读取将被阻塞,并且Reader实现被授权始终从此方法返回false。
Jetty和Tomcat是Java EE Web容器的两种不同实现,每种都提供自己的HttpServletRequest实现。因此,他们显然做出了不同的设计选择,但每个都尊重规范。
你应该完全不依赖这种方法。我从未遇到过使用它很有用的案例。