要生成Excel和PDF,就要设置一个显示自定义视图的视图解析器,就是BeanNameViewResolver,因此首先在SpringMVC配置文件中加入这个视图解析器java
<!--自定义视图解析器--> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"/> </bean>
其中的order属性为视图解析器的优先级,数字越小则优先级越高,而默认的InternalResourceViewResolver的order值为Integer.MAX_VALUE,因此这里设置的100确定比这个数小,优先级就大。
意味着在请求视图的时候,SpringMVC先使用该视图解析器解析,若是没法解析,则继续使用优先级较低的InternalResourceViewResolver进行解析。web
接下来写Excel视图。建立一个ExcelView类,让它继承自AbstractExcelView,而后实现其buildExcelDocument方法。具体类代码以下spring
@Component public class ExcelView extends AbstractExcelView{ @Override protected void buildExcelDocument(Map<String, Object> map, org.apache.poi.hssf.usermodel.HSSFWorkbook hssfWorkbook, javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { // 新建一个工做簿 HSSFSheet sheet = hssfWorkbook.createSheet("list"); sheet.setDefaultColumnWidth(12); HSSFCell cell = getCell(sheet, 0, 0); setText(cell, "Spring Excel test"); // 获得一个单元格 cell = getCell(sheet, 1, 0); // 设置单元格的值 cell.setCellValue("日期:2008-10-23"); getCell(sheet, 2, 0).setCellValue("测试1"); getCell(sheet, 2, 1).setCellValue("测试2"); HSSFRow sheetRow = sheet.createRow(3); for (int i = 0; i < 10; i++) { sheetRow.createCell(i).setCellValue(i * 10); } } }
接下来建立PdfView类,继承自AbstractPdfView,并实现其buildPdfDocument方法,具体代码:apache
@Component public class PdfView extends AbstractPdfView { @Override protected void buildPdfDocument(Map<String, Object> map, com.lowagie.text.Document document, com.lowagie.text.pdf.PdfWriter pdfWriter, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { List<String> list = new ArrayList<String>(); list.add("<h1>Hello</h1>"); list.add("World"); for (int i = 0; i < list.size(); i++) document.add(new Paragraph(list.get(i))); document.addTitle("This is a PDF"); document.addHeader("Header1","Header2"); document.addAuthor("Elin"); } }
接下来,建立一个controller。建立一个名为ExcelAndPDF的类,并添加两个控制器方法,使其分别跳转到对应的视图tomcat
@Controller @RequestMapping("/ExcelAndPdf") public class ExcelAndPdf { @RequestMapping("/excel") public String excelView(){ System.out.println("Excel View"); return "excelView"; } @RequestMapping("/pdf") public String pdfView(){ System.out.println("PDF View"); return "pdfView"; } }
切记,其中的返回字符串必须为对应视图的类名且第一个字母小写。markdown
而后在index.jsp中添加入口app
<a href="ExcelAndPdf/excel">Excel</a><br> <a href="ExcelAndPdf/pdf">PDF</a>
运行tomcat,就能够正常获得Excel和PDF文件了。jsp