0

我已经创建了 Servlet,它在第一个获取/发布请求时下载 POI XLS 文件,新文件正在使用 sheet0 下载。当我做第二个请求时,新文件正在下载两张表 sheet0 是以前的请求 sheet1 是新请求。同样明智的是,如果我做了 4 次请求,则 4 表可用。

我只想要一张新请求。

小服务程序代码:

HSSFWorkbook wb = new HSSFWorkbook();

getGet(){
    String reportname = request.getParameter("repname");
    response.setContentType("application/vnd.ms-excel");
   response.setHeader("Content-Disposition", "attachment; filename=" + reportname + ".xls");
    HSSFSheet sheet = wb.createSheet();
    int i=0;
    while(i<10)
    {
        sheet.createRow(i);
        HSSFCell cell = sheet.getRow(i).createCell(0);
        cell.setCellValue("Test"+i);
        i++;
    }
    ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
    wb.write(outByteStream);
    byte [] outArray = outByteStream.toByteArray();
    OutputStream outStream = response.getOutputStream();
    outStream.write(outArray);
    outStream.flush();
    outStream.close();
}

网页代码:

<body>
    <a href="../../DownloadXLS?repname=Myreport1">One</a>
    <a href="../../DownloadXLS?repname=Myreport2">two</a>
    <a href="../../DownloadXLS?repname=Myreport3">three</a>
</body>

在第 n 个请求时,我也只想要一张纸。

  • 我哪里错了?
  • 有什么逻辑错误吗?
4

1 回答 1

5

当您启动程序时,您的 servlet 会被实例化一次。这意味着该行

HSSFWorkbook wb = new HSSFWorkbook();

只被调用一次。因此,每次调用 getGet() 时,它都会重用wb变量并创建另一个工作表。

如果您在 getGet() 中移动 HSSFWorkbook 构造函数,它将为每个 get 请求创建一个新的构造函数。

于 2014-10-07T09:34:40.463 回答