java - 如何修复/避免 java.io.IOException : Socket read failed?

标签 java angularjs apache tomcat httpd.conf

我们有一个应用程序经常对 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();
}

关于java - 如何修复/避免 java.io.IOException : Socket read failed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330392/

相关文章:

javascript - 这两个 Controller 有何关联?

java - Tomcat 8 URL 重写

apache - 使用 mod_jk 的 HTTPD + JBOSS 通信

Javafx Gridpane 单元格背景颜色

java - 无法启用 SSLv2Hello

javascript - 输入类型 number + ng-keypress 以允许 '-' 符号

php - 从 Zend framework 2 开始,找不到类错误

java - 尽管设置了属性,但 Fragment GridView 第一项并未显示

java - HTTP 状态 500 - 无法在 struts 中创建路径/adduser 的操作实例

angularjs - 几秒钟后中止 $HTTP 请求并在 Ionic 中强制执行错误 block