1.首先是演示工程概览
2.struts.xml
浏览器输入http://localhost:8080/listArticles.action查询所有文章,返回articleList.jsp页。
3.articleList.jsp
点击链接“导出Excel”访问ArticleAction.java处理器类的exportArticle()方法。
4.ArticleAction.java
根据<action name="exportArticles"/>的配置,返回的输入流将从ArticleAction.java的getDownloadFile()负责得到。
getDownloadFile()方法调用了service层。
这里我直接把要导出的文件名定义在属性上了,开发中自己要根据业务去setDownloadFileName()。
5.ArticleService.java
6.ArticleServiceImpl.java
这里使用了ByteArrayOutputStream和ByteArrayInputStream,直接在内存中返回字节数组输入流,好处是不产生服务器的临时文件。
原先我使用FileOutputStream和FileInputStream来处理,还得开启线程延迟删除临时文件,考虑到这期间内服务器有可能关闭,所以又要写Servlet或者服务器启动定时任务来删除此类文件。颇为麻烦。
7.ArticleDao.java
8.applicationContext.xml
用了spring的自动装配<beans ... default-autowire="byName"/>,
这里略去dataSource、sessionFactory等配置。
9.web.xml
最终效果: