struts2+spring+hibernate如何生成Excel文件

今天集合了struts2+spring+hibernate三大框架来生成excel文件,个人感觉生成excel文件很重要也很实用,所以把它叙述了下来。

对于struts2和spring 、hibernate三者之间的基本的配置不用太多的介绍了。我想学过j2ee的基本都懂得如何配置了(在web.xml要添加spring 的监听器<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>,在struts2中添加<constant name="struts.objectFactory"value="org.apache.struts2.spring.StrutsSpringObjectFactory" />),接下来重要的是创建一个接口如:

public interface IUserService {
 public List<User> getUsers();
 public InputStream getInputStream();
}
然后创建一个类来实现它(在创建这个类之前我们必须先添加Spring包中的poi.jar包):

public class UserServiceDao implements IUserService {

 @SuppressWarnings("deprecation")
 @Override
 public InputStream getInputStream() {
  HSSFWorkbook wb = new HSSFWorkbook();
  HSSFSheet sheet = wb.createSheet("sheet1");
  HSSFRow row = sheet.createRow(0);
  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> users = this.getUsers();
  for (int i = 0; i < users.size(); i++) {
   User user = users.get(i);
   row = sheet.createRow(i + 1);
   cell = row.createCell((short) 0);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue(i + 1);

   cell = row.createCell((short) 1);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue(user.getUsername());

   cell = row.createCell((short) 2);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue(user.getPassword());

   cell = row.createCell((short) 3);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue(user.getAge());

  }

  //此代码它不会在硬盘上才生垃圾文件,它是在内存中完成的一系列的工作,不会才生垃圾文件
  ByteArrayOutputStream bStream=new ByteArrayOutputStream();
  try {
   wb.write(bStream);
   
  } catch (IOException e) {
  
   e.printStackTrace();
  }
  
        byte[] context=bStream.toByteArray();
  InputStream inputStream=new ByteArrayInputStream(context);
  
  return inputStream;
 
//        //此处将产生随机的字符串以区别不同的用户,会在硬盘中产生垃圾文件
//  String filename=RandomStringUtils.randomAlphanumeric(10);
//        filename=new StringBuffer(filename).append(".xls").toString();
//       
//  File file = new File(filename);
//  try {
//   OutputStream outputStream = new FileOutputStream(file);
//
//   wb.write(outputStream);
//   outputStream.close();
//
//  } catch (Exception e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
//  
//  
//  InputStream inputStream=null;
//  try {
//   inputStream=new FileInputStream(file);
//  } catch (FileNotFoundException e) {
//   // TODO Auto-generated catch block
//   e.printStackTrace();
//  }
//  
//  return inputStream;
  


  
  

 }

 @Override
 public List getUsers() {
  List users = (List) new HibernateDAO().getObjects();

  return users;

 }

}

这样基本上大功告成,还差一步就是如何在struts.xml配置action:

<action name="genexcel" class="generateExcelAction">
   <result type="stream">
    <param name="contentType">application/vnd.ms-excel</param>
    <param name="contentDisposition">filename="allUsers.xls"</param>
    <param name="inputName">downloadFile</param>
   </result>
  </action>

要注意的是<param name="inputName">downloadFile</param>在相对应的action的中要有get方法如:

public class GenerateExcel extends ActionSupport {
 private UserServiceDao userServiceDao;

 public UserServiceDao getUserServiceDao() {
  return userServiceDao;
 }

 public void setUserServiceDao(UserServiceDao userServiceDao) {
  this.userServiceDao = userServiceDao;
 }

 public InputStream getDownloadFile() {
  return userServiceDao.getInputStream();

 }

 @Override
 public String execute() throws Exception {

  return super.execute();
 }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值