【问题标题】:CSV file truncated after downloadCSV 文件在下载后被截断
【发布时间】:2016-04-08 09:37:16
【问题描述】:

旧版 J2EE 应用程序详细信息:

  • JSP + Servlets(2.4)
  • Websphere 应用服务器 7.0
  • 视图正在使用 IE 框架、核心 javascript 等

用户的操作:

  • 返回 > 900 行的用户搜索需要一些时间才能显示(无分页)
  • 然后用户单击“下载”按钮再次触发表单提交。

下面是在action servlet中执行的代码sn-p:

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)或系统测试环境(Linux,WAS 8.5)上模拟的,而是在 ACCEPTANCE(WAS 7,Linux)和 PRODUCTION(WAS 7,Linux)上出现)。 ACCEPTANCE 和 PRODUCTION 具有负载平衡器、Web 服务器设置但不在 systest 或本地

我该怎么做?

【问题讨论】:

  • 你在哪里以及如何声明(不是实例化)LineBuffer?它是 servlet 类级别的字段吗?还是局部变量?
  • @OlafKock 添加了更多代码,你可以看看吗?

标签: java jsp servlets jakarta-ee websphere


【解决方案1】:

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

【讨论】:

  • 涉及到一个负载平衡器和一个 Web 服务器,您是否建议仅在 Web 服务器级别进行此更改(抱歉,我对服务器的事情很幼稚)?您是在暗示 Websphere 环境吗?
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 2016-04-08
相关资源
最近更新 更多