Мне кажется, я понимаю, что вы пытаетесь сделать (хотя, возможно, я не в ногах)
вам не нужно так много кода - проверьте метод записи -
HSSFWorkbook wb = new HSSFWorkBook();
//populate
ServletOutputStream out = response.getOutputStream();
try {
wb.write(out);
out.flush();
}
catch (IOException ioe) {
//whatever
}
out.close();
Насколько я помню, когда я работал с POI, это то, что я делал. Если вы находитесь внутри веб-фреймворка, вам, возможно, придется его обдумать, чтобы фреймворк не пытался что-то делать с этим ServletOutputStream после того, как вы его закрыли. Если он попытается, вы получите исключение, сообщающее, что выходной поток уже закрыт.