我创建了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个请求时只有一张纸。
答案 0 :(得分:5)
启动程序时,servlet会被实例化一次。意思是行
HSSFWorkbook wb = new HSSFWorkbook();
只被调用一次。因此,每次调用getGet()时,它都将重用 wb 变量并创建另一个工作表。
如果你在getGet()中移动HSSFWorkbook构造函数,它将为每个get请求创建一个新的构造函数。