Хотя верно, что писать двоичное вложение с использованием сервлета, а не jsp, более обычным является запись двоичного вложения из jsp. И преимущество этого в том, что вам не нужно беспокоиться о настройке web.xml или перезагрузке приложения. Это может быть важным фактором в зависимости от среды вашего веб-сервера.
Вот пример jsp, который использует poi для отправки двоичного вложения в браузер.
<%@page import="org.apache.poi.hssf.usermodel.*" %><%@page import="java.io.*" %><%
// create a small spreadsheet
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
cell.setCellValue("Some text");
// write it as an excel attachment
ByteArrayOutputStream outByteStream = new ByteArrayOutputStream();
wb.write(outByteStream);
byte [] outArray = outByteStream.toByteArray();
response.setContentType("application/ms-excel");
response.setContentLength(outArray.length);
response.setHeader("Expires:", "0"); // eliminates browser caching
response.setHeader("Content-Disposition", "attachment; filename=testxls.xls");
OutputStream outStream = response.getOutputStream();
outStream.write(outArray);
outStream.flush();
%>
Важная Хитрость заключается в том, чтобы убедиться, что есть только одна строки со всем импортом и другими директивами до начала «<%», который начинается ваш код. В противном случае jsp может выводить некоторые начальные новые строки и испортить ваш вывод.
Кроме того, я предлагаю вам всегда устанавливать длину содержимого. Некоторые браузеры не будут работать правильно, если они не установлены. Вот почему я сначала выводил свою таблицу в массив байтов, поэтому я мог установить длину до фактической отправки данных.
writableworkbook является частью jexcel api правильно? это должно работать, даже если я использую poi правильно? – user571099
@ user571099 рабочая книга - это «HSSFWorkbook» здесь, а не «WritableWorkbook». –
Это именно то, что я искал! Я предполагаю, что это можно сделать с помощью веб-сервиса Джерси RESTful? – Brian