HTML頁面並不總是向用戶顯示數據輸出的最好方式,Spring支持從數據動態生成PDF或Excel文件,並使這一過程變得簡單。文檔本身就是視圖,從服務器以流的方式加上內容類型返回文檔,客戶端PC只要運行電子表格軟件或PDF瀏覽軟件就可以瀏覽。下面是一個簡單實現的例子:界面兩個button,一個實現excel ,一個pdf.爲了使用Excel電子表格,你需要在你的classpath中加入‘poi’庫文件,而對PDF文件,則需要iText.jar文件。它們都包含在Spring的主發佈包中。另外經過測試還需要加入包spring-beans.jar,spring-context.jar,spring-web.jar,spring-webmvc.jar。
1、web.xml配置文件,主要配置相應的servlet即可
<!-- Spring MVC 的Servlet,它將加載WEB-INF/spring-servlet.xml 以啓動Spring MVC模塊-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
2、控制文件及spring-servlet.xml配置,增加ViewController的配置
<!-- 生成excel或pdf視圖 -->
<bean class="com.lzk.controller.ViewController">
</bean>
3、ViewController的代碼
package com.lzk.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.supcon.electronic.its.common.ViewExcel;
import com.supcon.electronic.its.common.ViewPDF;
/**
* 生成excel或PDF類型試圖
* 根據參數進行數據組裝,並跳轉到相應的視圖頁面
* View Controller Bean<br>
*
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/
@Controller
@RequestMapping("/view.form")
public class ViewController extends BaseController {
@RequestMapping(params="method=exceltest",method=RequestMethod.GET)
public ModelAndView viewExcel(HttpServletRequest request, HttpServletResponse response){
log.debug("ViewController.viewExcel is started......");
List list = new ArrayList();
Map model = new HashMap();
list.add("test1");
list.add("test2");
model.put("list", list);
ViewExcel viewExcel = new ViewExcel();
log.debug("ViewController.viewExcel is ended......");
return new ModelAndView(viewExcel, model);
}
@RequestMapping(params="method=pdftest",method=RequestMethod.GET)
public ModelAndView viewPDF(HttpServletRequest request,
HttpServletResponse response) throws Exception {
List list = new ArrayList();
Map model = new HashMap();
list.add("test1");
list.add("test2");
model.put("list", list);
ViewPDF viewPDF = new ViewPDF();
return new ModelAndView(viewPDF, model);
}
}
4、用於Excel視圖的視圖子類
package com.lzk.common;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
/**
* 生成excel視圖,可用excel工具打開或者保存
* 由ViewController的return new ModelAndView(viewExcel, model)生成
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/
public class ViewExcel extends AbstractExcelView {
public void buildExcelDocument(Map model, HSSFWorkbook workbook,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HSSFSheet sheet = workbook.createSheet("list");
sheet.setDefaultColumnWidth((short) 12);
HSSFCell cell = getCell(sheet, 0, 0);
setText(cell, "Spring Excel test");
HSSFCellStyle dateStyle = workbook.createCellStyle();
//dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));
cell = getCell(sheet, 1, 0);
cell.setCellValue("日期:2008-10-23");
//cell.setCellStyle(dateStyle);
getCell(sheet, 2, 0).setCellValue("測試1");
getCell(sheet, 2, 1).setCellValue("測試2");
HSSFRow sheetRow = sheet.createRow(3);
for (short i = 0; i < 10; i++) {
sheetRow.createCell(i).setCellValue(i * 10);
}
}
}
5、用於PDF視圖的視圖子類
package lzk.common;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.document.AbstractPdfView;
import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
/**
* 生成PDF視圖,可用PDF瀏覽器打開或者保存
* 由ViewController的return new ModelAndView(viewPDF, model)生成
* @author Tony Lin Created on 2008-10-22
* @version Version 1.0
*/
public class ViewPDF extends AbstractPdfView {
public void buildPdfDocument(Map model, Document document,
PdfWriter writer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
List list = (List) model.get("list");
for (int i = 0; i < list.size(); i++)
document.add(new Paragraph((String) list.get(i)));
}
}
6、JSP頁面調用
<a href="<%=path %>/view.form?method=pdftest" target="blank">保存pdf</a>
<input name="button" type="button" id="button" value="保存excel"
οnclick="javascript:window.open('<%=path %>/view.form?method=exceltest');"/>
用spring MVC 生成Excel和PDF
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.