【问题标题】:Request timeout , Connection has been reset error while rendering jsp page请求超时,渲染jsp页面时连接已重置错误
【发布时间】:2012-03-01 16:33:22
【问题描述】:

我有一个用于生成多部分数据(一个 xls)的 jsp 页面。 我在这个 jsp 页面上没有得到任何数据,但是当我尝试在日志中打印数据时,我可以看到所有记录都已提取。

如何处理请求。

Request ---(goes to)---> Webservlet ---(delegate to handler)---> Java Class(ReportHandler.java)

现在我们调用ReportHandler.runReport() 的方法,它负责从数据库中获取数据。此方法需要很长时间(几乎 12 分钟)来获取记录。 一旦我们得到结果集中的数据,我们将它传递给jsp页面并使用结果集生成报告。

1> while(rs.next()) {system.out.println("<tr><td>"+partnerId+"</td></tr>")}

我可以看到 partnerId - 它正在控制台上打印。 但是jsp并没有在浏览器上呈现数据。 12-14 分钟后,浏览器显示错误消息(无状态码)、请求超时并重置连接。

现在我的问题是,如果连接在服务器超时,那么数据将不会在控制台上打印,如果连接在客户端超时,那么如何修复它,我试图修复客户端超时最后将 network.http.connection.timeout 属性设置为 long 但无效。

2> I am using out.print(<table><tr><td>"+rs.getInt(partnerId)+"</td></tr></table>")

生成报告,但它没有在 jsp 上生成任何数据,尽管 data(out.flush()) 被强制刷新。 我确定我们在 jsp 页面上获取数据,但它没有呈现,因为上面的 System.out.println() 正在 while 循环中打印记录。

请帮忙,因为我已经很久没有寻找解决方案但找不到任何线索来解决它。

【问题讨论】:

    标签: java html


    【解决方案1】:

    如果您不能将后端时间缩短到合理的程度(少于 5-10 秒,这取决于受众的类型),您最好改变您的模式。如果有意义,您可以安排在指定时间创建文档(例如使用 Quartz)。否则,您将需要某种服务器通知。由于长轮询是一种资源浪费,而且专门的彗星服务器不仅仅对这个东西有意义,我建议使用旧的 Javascript 轮询。基本上你有一个脚本,每X 秒检查文档是否准备好。您将通过实现两个不同的脚本来修改服务器端脚本以遵循此模式。一个负责实际工作,另一个负责管理后台进程及其状态表,并由另一个脚本通知。这是伪代码的实现

    //~client
    every 30 seconds check /document?id=12345 {
      if (ready) {
         display URL for download
         break
      } else {
         display loading.gif
      }
    }
    
    //~server (worker) not reachable by public URL, it's a background thread
    notify: processing document with id #1234
    .... do processing ....
    notify: finished document with id #1234
    
    //~server (notifier) has a URL like /document?id=1234
    if (#1234 isReady)
       output #1234.URL
    else
       output "processing..."
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2013-11-25
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2012-01-30
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多