struts2动态下载运用:
实例:
将用户的信息以xls(excel)文件的格式供用户下载。
注:需要使用Apache PoI ,需要引进jar包,即poi-2.5.1.jar
1.定义一个InputStream接口,代码如下
2.然后继承实现接口方法,代码如下:
@Override
public InputStream getInputStream() {
HSSFWorkbook wb = new HSSFWorkbook();// 用apache poi ,生成HSSFWorkbook对象
HSSFSheet sheet = wb.createSheet("sheet");// 创建sheet,名字为sheet
// 创建行,0代表第一行
HSSFRow row = sheet.createRow(0);
// 设置第一行的单元格,单元格是short型,必须强转
HSSFCell cell = row.createCell((short) 0);
// 设置字符编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// 设置第一个单元格内容
cell.setCellValue("序号");
cell = row.createCell((short) 1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("姓");
cell = row.createCell((short) 2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("名");
cell = row.createCell((short) 3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("年龄");
// 把数据库中的用户信息展现出来
List<User> list = this.findAll();
// 通过for循环,把内容取出,添加在单元格内
for (int i = 0; i < list.size(); i++) {
// 得到user对象
User user = list.get(i);
// 创建第i+1行
row = sheet.createRow(i + 1);
// 穿点i+1行内的单元格
cell = row.createCell((short) 0);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getId());
cell = row.createCell((short) 1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getFirstname());
cell = row.createCell((short) 2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getLastname());
cell = row.createCell((short) 3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(user.getAge());
}
// 创建file对象
File file = new File("user.xls");
// 创建输出流OutputStream
try {
OutputStream os = new FileOutputStream(file);
wb.write(os);//写入输出流
os.close();//关闭资源
} catch (Exception e) {
e.printStackTrace();
}
//定义输入流
InputStream is=null;
try {
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回输入流
return is;
}
//3.配置sturts.xml的信息
如下图
4.配置spring信息
5.然后创建GenerateExcelAction,代码如下
package com.test.action.user;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
import com.test.service.UserService;
public class GenerateExcelAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public InputStream getDownloadFile(){
//DownladFile必须和strutsw.中的配置的param中的值一致
return this.userService.getInputStream();
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
//6.运行结果,如下图
7.总结: 只要用心学,用心理解,没有做不到的,加油,继续培养兴趣!!