[英]java.io.IOException: read failed: EBADF (Bad file descriptor)
[英]How to fix/avoid java.io.IOException: Socket read failed?
我们有一个应用程序,它经常对servlet进行ajax调用。 我们不一致地得到以下异常。
20:39:15.016 com.abc.xyzhome.util.XYZLog:XYZDashboardServlet::buildXYZDashboardRequest::Exception:
java.io.IOException: Socket read failed
at org.apache.coyote.ajp.AjpProcessor.read(AjpProcessor.java:313)
at org.apache.coyote.ajp.AjpProcessor.readMessage(AjpProcessor.java:364)
at org.apache.coyote.ajp.AjpProcessor.receive(AjpProcessor.java:331)
at org.apache.coyote.ajp.AbstractAjpProcessor.refillReadBuffer(AbstractAjpProcessor.java:664)
at org.apache.coyote.ajp.AbstractAjpProcessor$SocketInputBuffer.doRead(AbstractAjpProcessor.java:1142)
at org.apache.coyote.Request.doRead(Request.java:422)
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
at org.apache.catalina.connector.InputBuffer.realReadChars(InputBuffer.java:353)
at org.apache.tomcat.util.buf.CharChunk.substract(CharChunk.java:439)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:416)
at org.apache.catalina.connector.CoyoteReader.read(CoyoteReader.java:108)
at org.apache.catalina.connector.CoyoteReader.readLine(CoyoteReader.java:163)
at com.abc.xyzhome.XYZDashboardServlet.buildXYZDashboardRequest(XYZDashboardServlet.java:456)
当我们尝试从inputStream读取数据时,有时会发生这种异常。 PFB,发生此异常的地方。
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (IOException e) {
e.printStackTrace();
}
我们从HttpServletRequest
获取BufferedReader
对象。 发生在reader.readLine()
的异常。
我们的应用程序托管在Tomcat 7.0.54中。 PFB,我们针对特定请求从客户端进行的angularJS ajax调用。
$http({
method: 'POST',
url: 'XYZDashboard',
headers: {'Content-Type': 'application/json'},
data: {'xyzStatus':fav_value,'xyzRequestType':'getDataForXYZDashboard'},
cache: false,
}).success(function (data)
{
//Some code here
});
内容类型为JSON。 请让我知道如何避免此异常。 谢谢。
编辑:我已经尝试过BufferedReader ready()
来检查流是否准备好被读取,但是它总是返回false。 我在博客中读到,在Tomcat中,ready()始终返回false。 请指教。
将代码包装在引发IOException的try / catch中
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
} catch (IOException e1) {
e1.printStackTrace();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.