需求:用户点击浏览器中的链接,可以把数据库中的表格下载到自己电脑中
一.数据库准备:
数据库中需要准备一张表格
二.后端准备:
service层和mapper中需要有查询所有或者分页查询的方法,可用表现层调用
三:前端准备:
有一个链接可供用户点击
四.代码实现
private void getExcel(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
//获取分页查询的参数
String rows = request.getParameter("rows");
String currentPageStr = request.getParameter("currentPage");
//这句话的作用是:点击链接时可以直接下载
response.setHeader("content-disposition","attachment;filename=Puser.xls");
//创建表格
Workbook wb=new HSSFWorkbook();
//创建工作空间
Sheet sheet = wb.createSheet();
//分页查询user
UserService userService=new UserServiceImpl();
Pagebean<User> page = userService.findUserByPage(Integer.valueOf(currentPageStr), Integer.valueOf(rows));
List<User> list = page.getList();
//把数据填充到表格中
//第一行
Row row = sheet.createRow(0);
row.createCell(0).setCellValue("id");
row.createCell(1).setCellValue("用户名");
row.createCell(2).setCellValue("真实姓名");
row.createCell(3).setCellValue("邮箱");
row.createCell(4).setCellValue("qq");
row.createCell(5).setCellValue("手机");
// row.createCell(6).setCellValue("注册时间");
//for循环填充数据
for(int i=0;i<list.size();i++){
User user = list.get(i);
Row row1 = sheet.createRow(i + 1);
row1.createCell(0).setCellValue(user.getId());
row1.createCell(1).setCellValue(user.getUsername());
row1.createCell(2).setCellValue(user.getRealname());
row1.createCell(3).setCellValue(user.getEmail());
row1.createCell(4).setCellValue(user.getQq());
row1.createCell(5).setCellValue(user.getPhone());
}
//把表格下载到内存
//把list写出到excel中
String realPath = getServletContext().getRealPath("Puser.xls");
File file = new File(realPath);
FileOutputStream fos=new FileOutputStream(file);
//写入服务器
wb.write(fos);
//先读到内存,再写出去
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
ServletOutputStream outputStream = response.getOutputStream();
byte[] bytes=new byte[1024];
int len=0;
while ((len=bis.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
outputStream.flush();
outputStream.close();
}