从GWT客户端下载Excel文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从GWT客户端下载Excel文件相关的知识,希望对你有一定的参考价值。
我需要在我的GWT应用程序上生成一个xls文件(在服务器端使用apache-poi生成)来自客户端。我希望当用户点击一个按钮时,出现一个文件选择器,允许他保存生成的文件。
首先,我创建了我的servlet:
public class DownloadServlet extends HttpServlet
{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
// What I have to insert here?!
}
public void getXlsFile()
{
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Datatypes in Java");
Object[][] datatypes = { { "Datatype", "Type", "Size(in bytes)" }, { "int", "Primitive", 2 }, { "float", "Primitive", 4 }, { "double", "Primitive", 8 }, { "char", "Primitive", 1 }, { "String", "Non-Primitive", "No fixed size" } };
int rowNum = 0;
for (Object[] datatype : datatypes) {
Row row = sheet.createRow(rowNum++);
int colNum = 0;
for (Object field : datatype) {
Cell cell = row.createCell(colNum++);
if( field instanceof String ) {
cell.setCellValue((String) field);
}
else if( field instanceof Integer ) {
cell.setCellValue((Integer) field);
}
}
}
try {
FileOutputStream outputStream = new FileOutputStream("MyFirstExcel.xlsx");
workbook.write(outputStream);
workbook.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
现在的问题是:
- 我如何填写doGet方法?
- 我如何从客户端调用这个servlet?
请注意,客户端我不知道xls文件路径,因为我想在服务器端“动态”创建xls文件。
答案
您已经创建了一个servlet并准备好了xls文件。您所要做的就是将数据推送到HttpServletResponse
对象。
首先,您不需要保存文件。更改getXlsFile()
方法以返回XSSFWorkbook
并删除最后的try / catch
块。
现在,doGet
方法:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HSSFWorkbook workbook = getXlsFile();
String fileName = "MyFirstExcel.xlsx";
resp.setStatus(HttpServletResponse.SC_OK);
resp.setHeader("Content-disposition", "attachment; filename="" + fileName + """);
resp.setContentType("application/vnd.ms-excel");
resp.getOutputStream().write(workbook.getBytes());
resp.getOutputStream().close();
resp.flushBuffer();
workbook.close();
}
如何调用服务器?
您需要在web.xml
文件中添加servlet映射:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>fully.qualified.className</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/path/to/the/servlet</url-pattern>
</servlet-mapping>
简而言之:servlet映射将url映射到servlet类。所以,当你打开/path/to/the/servlet
时,会调用fully.qualified.className
servlet。
以上是关于从GWT客户端下载Excel文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 GWT RemoteServiceServlet 下载文件