CSV文件在下载后被截断

时间:2016-04-08 09:37:17

标签: java jsp servlets java-ee websphere

遗留J2EE应用程序详细信息:

  • JSP + Servlets(2.4)
  • Websphere Application Server 7.0
  • 视图使用IE框架,核心javascript等

用户的行动:

  • 用户的搜索返回> 900行需要一些时间来显示(没有分页)
  • 用户点击“下载”按钮,再次触发表单提交。

以下是在操作servlet中执行的代码片段:

public class DownloadFileEvent extends ActionGeneric {

    java.text.SimpleDateFormat df_file = new java.text.SimpleDateFormat("yyyyMMdd_HHmmss");

    public void run(HttpServletRequest request, HttpServletResponse response) throws Exception {

        String errormsg = null;
        StringBuffer LineBuffer = null;

        // read parameters.
        String _v = request.getParameter("view");

        // Start traitment.
        try {
            // get sessions.
            ServletOutputStream out = response.getOutputStream();

            // Create title columns.
            response.setContentType("application/csv");
            response.setHeader("Content-Disposition", "inline; filename = " + getFilename(_v));
            LineBuffer = new StringBuffer();

            //Get the string response from some business method
            //String v_wrk = getOutflow(request, _v).toString();

            LineBuffer.append(v_wrk);
            LineBuffer.append("\r\n");
            out.print(LineBuffer.toString());
            out.flush();
            // end.

        }// fin try
        catch (Exception e) {
            errormsg = e.getMessage();
        } finally {
            // to do.
        }
    }// end run.

}// fin class

问题

  • 由于“下载”需要一些时间,因此用户会移至其他屏幕

  • 当他回来时,'打开/保存/另存为'提示已经有一段时间了。现在,当用户保存/打开文件而不是900行时,行数少于100行

  • 令人惊讶的是,如果立即执行打开/保存,则会下载所有行

  • 在catch区块中,我已经放了一个日志,但在任何地方都没有例外

  • 问题不在我的本地计算机(Windows,WAS 7)或SYSTEM测试环境(Linux,WAS 8.5)上模拟,而是在ACCEPTANCE(WAS 7,Linux)和PRODUCTION(WAS 7,Linux)上进行模拟。 )。 ACCEPTANCE和PRODUCTION有负载均衡器,Web服务器设置但不在系统或本地

我该怎么办?

1 个答案:

答案 0 :(得分:0)

在Web服务器中尝试使用高SendBufferSize。如果客户端在对话框启动时没有读取,这将阻止Web服务器看到写入最终阻塞然后超时。