POI HSSF XLS下载Servlet中的问题 - 新的XLS文件正在下载以前的工作表

时间:2014-10-07 07:09:36

标签: java servlets apache-poi poi-hssf

我创建了Servlet,它下载了POI XLS文件,在第一个get / post请求新文件下载了sheet0。当我正在进行第二次请求时,新文件正在下载两张纸.pip0是先前请求sheet1是新请求。如果我做了4个请求4张可用就好了。

我只想要一张新请求。

Servlet代码:

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个请求时只有一张纸。

  • 哪里错了?
  • 任何逻辑错误?

1 个答案:

答案 0 :(得分:5)

启动程序时,servlet会被实例化一次。意思是行

HSSFWorkbook wb = new HSSFWorkbook();

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

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