2014-10-07 2 views
0

Я создал Servlet, который загружает POI XLS-файл, при первом запросе на получение/отправку нового файла загружается с помощью sheet0. Когда я делаю второй запрос, новый файл загружается с двумя листами sheet0, это предыдущий лист запроса1 - новый запрос. Как и мудрый, если я сделал 4 запроса, имеется 4 листа.POI HSSF XLS Ошибка загрузки в Servlet - новый файл XLS загружается с использованием предыдущих листов

Я хочу только один лист для нового запроса.

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'th запроса также.

  • Где я ошибаюсь?
  • Любая логическая ошибка?
+0

Помог ли мой ответ решить вашу проблему? Если да, пожалуйста, примите ответ или уточните, в чем проблема. – lcersly

ответ

5

Ваш сервлет получает экземпляр один раз при запуске программы. Это означает, что линия

HSSFWorkbook wb = new HSSFWorkbook(); 

только один раз вызывается. Поэтому каждый раз, когда вы вызываете getGet(), он будет повторно использовать переменную wb wb и создать другой лист.

Если вы переместите конструктор HSSFWorkbook внутри своего getGet(), он создаст новый, с которым будет работать для каждого запроса на получение.