麻烦老师看看,为什么我的导出功能无法实现?
以下是在index页面提示的错误信息:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Servlet execution threw an exception
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.NoClassDefFoundError: org/apache/commons/compress/archivers/zip/ZipFile
org.apache.poi.openxml4j.opc.OPCPackage.create(OPCPackage.java:365)
org.apache.poi.xssf.usermodel.XSSFWorkbook.newPackage(XSSFWorkbook.java:495)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:261)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:257)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:245)
org.imooc.service.ExcelService.export(ExcelService.java:56)
org.imooc.servlet.ExportExcelServlet.doPost(ExportExcelServlet.java:18)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause
java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.zip.ZipFile
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1309)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1138)
org.apache.poi.openxml4j.opc.OPCPackage.create(OPCPackage.java:365)
org.apache.poi.xssf.usermodel.XSSFWorkbook.newPackage(XSSFWorkbook.java:495)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:261)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:257)
org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:245)
org.imooc.service.ExcelService.export(ExcelService.java:56)
org.imooc.servlet.ExportExcelServlet.doPost(ExportExcelServlet.java:18)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
然后这是我exportExcel.jsp页面的代码。
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" /> <title></title> <link rel="stylesheet" type="text/css" href="css/all.css" /> <link rel="stylesheet" type="text/css" href="css/pop.css" /> <link rel="stylesheet" type="text/css" href="css/main.css" /> </head> <body style="background: #e1e9eb;"> <form action="${basePath}/exportExcel" id="mainForm" method="post"> <div class="right"> <div class="current"> 当前位置:<a href="#">导入/导出</a> > 导出Excel </div> <div class="rightCont"> <p class="g_title fix">导出Excel</p> <table class="tab1"> <tbody> <tr> <td align="right" width="80">标题:</td> <td width="280"><input id="title" value="" style="width: 100%;" class="allInput" type="text" /></td> <td style="text-align: right;" width="150"><input class="tabSub" value="查询" onclick="" type="button" /> <input class="tabSub" value="导出" onclick="document.getElementById('mainForm').submit();" type="button" /></td> </tr> </tbody> </table> <div class="zixun fix"> <table class="tab2" width="100%"> <tbody> <tr> <th>序号</th> <th>姓名</th> <th>年龄</th> <th>出生日期</th> </tr> <tr> <td>1</td> <td>张三</td> <td>25</td> <td>1990-09-01</td> </tr> <tr> <td>2</td> <td>李四</td> <td>25</td> <td>1990-09-01</td> </tr> <tr> <td>3</td> <td>王五</td> <td>25</td> <td>1990-09-01</td> </tr> </tbody> </table> </div> </div> </div> </form> </body> </html>
然后是Servlet
package org.imooc.servlet; import org.apache.poi.ss.usermodel.Workbook; import org.imooc.service.ExcelService; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "ExportExcelServlet") public class ExportExcelServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ExcelService service=new ExcelService(); Workbook workbook = service.export(true); response.setHeader("Content-Disposition","attachment;filename=export.xlsx"); ServletOutputStream outputStream = response.getOutputStream(); //直接将文件输出提供下载导出 workbook.write(outputStream); outputStream.flush(); outputStream.close(); workbook.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } }
package org.imooc.servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ExportExcelInitServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("/WEB-INF/jsp/exportExcel.jsp").forward(req,resp); } }
下面的是ExcelService
package org.imooc.service; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.imooc.dto.ImportExcelParamDto; import org.imooc.dto.ImportExcelResultDto; import org.imooc.entity.Student; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ExcelService { public ImportExcelResultDto imp(ImportExcelParamDto dto){ ImportExcelResultDto result = new ImportExcelResultDto(); result.setTitle(dto.getTitle()); List<Student> studentList = new ArrayList<Student>(); result.setStudentList(studentList); Workbook workbook = null; try { workbook = WorkbookFactory.create(dto.getExcel().getInputStream()); Sheet sheet = workbook.getSheetAt(0); int rowNum = sheet.getLastRowNum(); for (int i = 1; i <= rowNum; i++) { Row row = sheet.getRow(i); Student student = new Student(); studentList.add(student); student.setName(row.getCell(0).getStringCellValue()); student.setAge((int)row.getCell(1).getNumericCellValue()); student.setTime(row.getCell(2).getDateCellValue()); } } catch (IOException e) { e.printStackTrace(); result.setMsg("解析Excel失败"); }finally { if (workbook!=null){ try { workbook.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } public Workbook export(boolean isXlsx){ Workbook workbook; if (isXlsx){ workbook = new XSSFWorkbook(); }else{ workbook = new HSSFWorkbook(); } Sheet sheet = workbook.createSheet("My Sheet"); List<List<String>> content = this.getContent(); for (int i=0;i<content.size();i++){ Row row = sheet.createRow(i); List<String> rowData = content.get(i); for (int j = 0; j < rowData.size(); j++) { row.createCell(j).setCellValue(rowData.get(j)); } } return workbook; } private List<List<String>> getContent() { List<List<String>> result = new ArrayList<>(); List<String> row = new ArrayList<>(); result.add(row); row.add("序号"); row.add("姓名"); row.add("年龄"); row.add("时间"); row = new ArrayList<>(); result.add(row); row.add("1"); row.add("路人甲"); row.add("18"); row.add("2010-01-01"); row = new ArrayList<>(); result.add(row); row.add("2"); row.add("路人乙"); row.add("19"); row.add("2010-01-02"); row = new ArrayList<>(); result.add(row); row.add("3"); row.add("路人丙"); row.add("20"); row.add("2010-01-03"); return result; } }
麻烦老师指点迷津……
正在回答
你好!我用你的代码替换了源代码中的代码,导出没有问题,你用的是老师源码中的POI jar包,还是其他版本的?
祝学习愉快!
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星