在工作中需要在JSP页面中,将POI生成的Excel文件直接下载,开发平台是基于Struts2+Spring2的,在网上查了一下,例子不少,也都给我提供了一定的帮助,但很少有拿来不需要进行调试就直接能用的代码例子。所以我把自己最后的实现代码贴出来,希望能对后来者有一定的帮助,或许实现方法不是最好的,但应该是不需要进行过多调试就可以直接用的。
主要关注@Result的params参数设置部分的代码
public class EfficDataAction extends ActionSupport {
//...省略部分代码
private InputStream inputStream;
private String contentDisposition;
private String documentFormat = "xls";
private String contentType;
public String getContentType() {
return documentFormat == "xlsx" ? "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
: "application/vnd.ms-excel;charset=ISO8859-1";
}
@Resource
private EfficDataService efficdataservice;
public String getContentDisposition() {
return contentDisposition;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public void setContentDisposition(String contentDisposition) {
this.contentDisposition = contentDisposition;
}
public String getDocumentFormat() {
return documentFormat;
}
public void setDocumentFormat(String documentFormat) {
this.documentFormat = documentFormat;
}
public EfficDataService getEfficdataservice() {
return efficdataservice;
}
@Resource
public void setEfficdataservice(EfficDataService efficdataservice) {
this.efficdataservice = efficdataservice;
}
//...省略部分代码
//这里的params参数配置是关键
@Action(value = "/createefficfile", results = { @Result(name = "success", type = "stream") }, params = {
"contentType", "${contentType}", "inputName", "${inputStream}",
"contentDisposition", "${contentDisposition}", "bufferSize", "2048" })
public String createefficfile() throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//...下面的3行代码是我生成Excel文件用的,请更具实际需要裁减
HSSFWorkbook book = new HSSFWorkbook();
book = efficdataservice.createEfficCollectFile(this);
book.write(baos);
//...下面的代码是设置Excel文件下载的一些必须内容
//...文件名需要进行转码,不然中文的话可能会有问题
this.setInputStream(new ByteArrayInputStream(baos.toByteArray()));
this.setContentDisposition("filename=\\"
+ java.net.URLEncoder.encode(getUploadFileFileName(), "UTF-8")
+ getDocumentFormat());
return "success";
}
}
我是用注解来配置Struts2的Action的,用xml配置文件应该也不会有问题。
转载请注明出处...
分享到:
相关推荐
通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...
Struts实时生成Excel文件下载
下面将详细介绍如何在Struts2中利用POI在内存中生成Excel文件并提供下载。 首先,了解Apache POI的基本用法。POI提供了HSSFWorkbook类,用于处理Excel的XLS格式,而XSSFWorkbook则处理XLSX格式。这里我们主要讨论...
这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成Excel文件并将其导出给用户下载。 在Java开发中,导出数据到Excel是常见的需求,特别是在处理大量结构化数据时,如报表或数据分析。JXL库提供了一个...
然后,将这个输出流作为输入流提供给 Struts2 的结果配置,通过 `HttpServletRequest` 获取请求响应对象,设置响应头(如 Content-Type 和 Content-Disposition),最后将输出流写入响应输出流,完成文件下载。...
总的来说,Struts2提供了便捷的方式来处理文件下载,而Apache POI使我们能够在Java中动态生成Excel文件,这两者结合为Web应用提供了强大的文件操作能力。在实际开发中,你需要根据具体的需求进行适当的调整和优化,...
本示例涉及的是从Excel文件中读取数据,并将其转换成TXT文件的过程。这个过程通常用于数据迁移、数据分析或者格式转换等场景。以下是对这个主题的详细阐述: 1. **读取Excel文件**: 在Java开发中,我们可以使用...
项目:Struts2UpAndDownLoadFile 1.实现文件的上传和下载 项目:Struts2HandleExcelFile 1.实现文件的上传和下载 2.利用apache的poi-3.5-FINAL-20090928.jar组件实现创建Excel表格。
将Workbook写入到HttpServletResponse的OutputStream中,设置合适的Content-Type(如application/vnd.ms-excel)和文件名头(Content-Disposition),这样浏览器就会弹出下载对话框,用户可以选择保存Excel文件。...
最后,通过Struts2的拦截器机制,当用户请求这个Action时,将会触发`exportExcel`方法,生成Excel文件并自动触发下载。 总结起来,利用Struts2和Apache POI,我们可以方便地实现从Web应用中导出数据到Excel的功能。...
最后,使用Struts2的`StreamingActionResult`或者自定义的Result类型,将Workbook对象转换为流,返回给浏览器下载。 6. **运行说明**: 源码中通常会包含一个README文件,说明如何配置环境(如设置Struts2的配置...
5. 生成Excel文件时,可以将工作簿写入到OutputStream,然后由Struts框架返回给客户端,或者保存到服务器的指定位置。 描述中提到,代码中有详细的注释,这对于初学者来说是非常宝贵的资源。通过阅读这些注释,可以...
- **结果类型**:Struts2的结果类型可以配置为生成Excel文件,然后返回给客户端下载。 3. **Hibernate框架的角色**: - **数据持久化**:Hibernate简化了数据库操作,允许开发者通过对象模型与数据库交互。在生成...
在客户端,用户可以通过点击一个链接或按钮触发这个Action,浏览器将弹出一个对话框让用户选择保存或打开生成的Excel文件。 这就是使用Struts2和Apache POI实现Excel导出的基本步骤。注意,实际的项目可能需要考虑...
- **动态生成下载内容**:不同于传统的文件下载,这里的“动态生成”意味着文件内容可能不是预先存在的,而是根据某些条件在服务器端即时生成的,比如从数据库中提取数据,组合成Excel或CSV格式供用户下载。...
然后,创建一个Action类,定义一个方法来生成Excel文件,该方法将查询到的数据转换为POI的工作表对象。最后,通过Struts2的StreamingResult或者FileNameAwareOutputStreamActionOutputStream结果类型,将生成的Excel...
在"Struts2+JXL 下载 Excel 文档"的场景中,开发者通常会创建一个Action,这个Action负责生成Excel文档并提供下载。用户通过浏览器访问特定URL,Struts2框架接收到请求后,会路由到相应的Action。Action内部会利用...
此方法接受一个包含多种数据类型的列表,并返回一个 `InputStream`,该流可以被 Struts2 动作类用来生成并下载 Excel 文件。 3. **服务层接口实现**: 创建 `ExcelServiceImpl` 类来实现 `IExcelService` 接口。在...
这样,当用户访问特定的URL时,服务器就会触发`ExportExcelAction`的`execute`方法,生成Excel文件并发送给客户端下载。 总结一下,Struts2结合Apache POI实现数据导出到Excel的关键步骤包括: 1. 引入Apache POI的...
5. **响应流**: 为了将生成的Excel文件发送到浏览器,你需要将Excel内容转换为字节流,并设置响应头,告知浏览器这是一个Excel文件,例如设置Content-Type为"application/vnd.ms-excel"。 6. **Struts2配置**: 配置...