使用SpringMVC框架生成XLS和PDF格式的WEB应用视图
2010-09-27 01:30
549 查看
在WEB应用开发中,有可能要求动态生成非HTML格式(比如XLS或PDF)的视图以显示或保存查询得到的结果。使用强大的SpringMVC框架,可以非常方便地实现这个功能。下面是动态生成XLS和PDF格式的“九九乘法表”的例子。该例子使用到Spring框架,生成XLS的POI组件,生成PDF的iText组件: Spring http://www.springframework.org
POI http://jakarta.apache.org/poi
iText http://www.lowagie.com/iText
首先,我们编写产生“九九乘法表”的业务对象
package service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** *//**
* @author jaqcy.Ya
*
*/
public class MapService
...{
public static Map createMap(int num)
...{
List sheetList=new ArrayList();
for(int i=1;i<=num;i++)
...{
List rowList=new ArrayList();
for(int j=1;j<=i;j++)
...{
rowList.add(new String(i+"*"+j+"="+i*j));
}
sheetList.add(rowList);
}
Map map=new HashMap();
map.put("sheet",sheetList);
return map;
}
}
接着编写产生XLS格式视图的对象,该类继承SpringFrameWork的AbstractExcelView,并实现其抽象方法buildExcelDocument(Map,HSSFWorkbook,HttpServletRequest,HttpServletResponse)s package view;
import java.util.Iterator;
import java.util.List;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
/** *//**
* @author jaqcy.Ya
*
*/
public class ExcelView extends AbstractExcelView
...{
@Override
protected void buildExcelDocument(Map map, HSSFWorkbook workbook, HttpServletRequest req, HttpServletResponse resp) throws Exception
...{
HSSFSheet sheet=workbook.createSheet("sheet");
List sheetList=(List)map.get("sheet");
Iterator sheetIt=sheetList.iterator();
int i=0;
while(sheetIt.hasNext())
...{
HSSFRow row=sheet.createRow(i++);
int j=0;
List rowList=(List)sheetIt.next();
Iterator rowIt=rowList.iterator();
while(rowIt.hasNext())
...{
HSSFCell cell=row.createCell((short)j++);
cell.setCellValue((String)rowIt.next());
}
}
}
}
编写生成PDF格式视图的对象,该类继承SpringFrameWork的AbstractPdfView,并实现其抽象方法buildPdfDocument(Map,Document,PdfWriter,HttpServletRequest,HttpServletResponse) package view;
import java.util.Iterator;
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.Table;
import com.lowagie.text.pdf.PdfWriter;
/** *//**
* @author jaqcy.Ya
*
*/
public class PdfView extends AbstractPdfView
...{
protected void buildPdfDocument(Map map, Document doc, PdfWriter writer, HttpServletRequest req, HttpServletResponse resp) throws Exception
...{
Table table=new Table(9);
table.setWidth(90);
table.setBorderWidth(1);
List sheetList=(List)map.get("sheet");
Iterator sheetIt=sheetList.iterator();
while(sheetIt.hasNext())
...{
List rowList=(List)sheetIt.next();
Iterator rowIt=rowList.iterator();
while(rowIt.hasNext())
...{
table.addCell((String)rowIt.next());
}
}
doc.add(table);
}
}
接着就是连接XLS和PDF视图的控制器了 package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/** *//**
* @author jaqcy.Ya
*
*/
public class XlsViewController extends AbstractController
...{
protected ModelAndView handleRequestInternal(HttpServletRequest req,
HttpServletResponse resp) throws Exception
...{
return new ModelAndView(new view.ExcelView(),service.MapService.createMap(9));
}
}
package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/** *//**
* @author jaqcy.Ya
*
*/
public class PdfViewController extends AbstractController
...{
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception
...{
return new ModelAndView(new view.PdfView(),service.MapService.createMap(9));
}
}
接着就是Spring的IoC配置文件xlspdf-servlet.xml <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd“ >
<beans>
<bean id="xlsView"
class="controller.XlsViewController" />
<bean id="pdfView"
class="controller.PdfViewController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/*.xls">xlsView</prop><!-- 影射所有XLS后缀的请求到控制器 -->
<prop key="/*.pdf">pdfView</prop><!-- 影射所有PDF后缀的请求到控制器 -->
</props>
</property>
</bean>
</beans>
接下来就是编写WEB应用配置文件web.xml了 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xlspdf-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>xlspdf</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xlspdf</servlet-name>
<url-pattern>*.xls</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>xlspdf</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
</web-app>
最后就是打包工作了,这个就不再说什么了。
POI http://jakarta.apache.org/poi
iText http://www.lowagie.com/iText
首先,我们编写产生“九九乘法表”的业务对象
package service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** *//**
* @author jaqcy.Ya
*
*/
public class MapService
...{
public static Map createMap(int num)
...{
List sheetList=new ArrayList();
for(int i=1;i<=num;i++)
...{
List rowList=new ArrayList();
for(int j=1;j<=i;j++)
...{
rowList.add(new String(i+"*"+j+"="+i*j));
}
sheetList.add(rowList);
}
Map map=new HashMap();
map.put("sheet",sheetList);
return map;
}
}
接着编写产生XLS格式视图的对象,该类继承SpringFrameWork的AbstractExcelView,并实现其抽象方法buildExcelDocument(Map,HSSFWorkbook,HttpServletRequest,HttpServletResponse)s package view;
import java.util.Iterator;
import java.util.List;
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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
/** *//**
* @author jaqcy.Ya
*
*/
public class ExcelView extends AbstractExcelView
...{
@Override
protected void buildExcelDocument(Map map, HSSFWorkbook workbook, HttpServletRequest req, HttpServletResponse resp) throws Exception
...{
HSSFSheet sheet=workbook.createSheet("sheet");
List sheetList=(List)map.get("sheet");
Iterator sheetIt=sheetList.iterator();
int i=0;
while(sheetIt.hasNext())
...{
HSSFRow row=sheet.createRow(i++);
int j=0;
List rowList=(List)sheetIt.next();
Iterator rowIt=rowList.iterator();
while(rowIt.hasNext())
...{
HSSFCell cell=row.createCell((short)j++);
cell.setCellValue((String)rowIt.next());
}
}
}
}
编写生成PDF格式视图的对象,该类继承SpringFrameWork的AbstractPdfView,并实现其抽象方法buildPdfDocument(Map,Document,PdfWriter,HttpServletRequest,HttpServletResponse) package view;
import java.util.Iterator;
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.Table;
import com.lowagie.text.pdf.PdfWriter;
/** *//**
* @author jaqcy.Ya
*
*/
public class PdfView extends AbstractPdfView
...{
protected void buildPdfDocument(Map map, Document doc, PdfWriter writer, HttpServletRequest req, HttpServletResponse resp) throws Exception
...{
Table table=new Table(9);
table.setWidth(90);
table.setBorderWidth(1);
List sheetList=(List)map.get("sheet");
Iterator sheetIt=sheetList.iterator();
while(sheetIt.hasNext())
...{
List rowList=(List)sheetIt.next();
Iterator rowIt=rowList.iterator();
while(rowIt.hasNext())
...{
table.addCell((String)rowIt.next());
}
}
doc.add(table);
}
}
接着就是连接XLS和PDF视图的控制器了 package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/** *//**
* @author jaqcy.Ya
*
*/
public class XlsViewController extends AbstractController
...{
protected ModelAndView handleRequestInternal(HttpServletRequest req,
HttpServletResponse resp) throws Exception
...{
return new ModelAndView(new view.ExcelView(),service.MapService.createMap(9));
}
}
package controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
/** *//**
* @author jaqcy.Ya
*
*/
public class PdfViewController extends AbstractController
...{
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception
...{
return new ModelAndView(new view.PdfView(),service.MapService.createMap(9));
}
}
接着就是Spring的IoC配置文件xlspdf-servlet.xml <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd“ >
<beans>
<bean id="xlsView"
class="controller.XlsViewController" />
<bean id="pdfView"
class="controller.PdfViewController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/*.xls">xlsView</prop><!-- 影射所有XLS后缀的请求到控制器 -->
<prop key="/*.pdf">pdfView</prop><!-- 影射所有PDF后缀的请求到控制器 -->
</props>
</property>
</bean>
</beans>
接下来就是编写WEB应用配置文件web.xml了 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/xlspdf-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>xlspdf</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>xlspdf</servlet-name>
<url-pattern>*.xls</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>xlspdf</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
</web-app>
最后就是打包工作了,这个就不再说什么了。
相关文章推荐
- 使用SpringMVC框架生成XLS和PDF格式的WEB应用视图
- SpringMVC框架使用iReport生成pdf文档
- 关于Java Web 使用 iText 将数据库中的 表 的数据 生成 PDF 格式文件(升級版本)
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- 使用GitBook工具生成PDF格式的文档
- Jasperreport 与Springmvc结合生成PDF web页面笔记(含解决中文问题)
- 《Java高手真经_应用框架卷_Java_Web核心框架》所用软件、使用版本、下载地址列表:
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)
- Maven Web项目SpringMVC框架应用出现JSP不能访问的问题
- 实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架
- 完整使用SSM框架(Spring SpringMVC Mybatis)搭建web服务器实现登录功能
- 在 WEB 应用中使用 Spring(框架)
- SpringMVC使用iReport生成pdf
- web 应用 使用 shiro 安全框架 在 was7访问性能慢
- Apache Geronimo 和 Spring 框架,第 6 部分: Spring MVC:使用 Web 视图技术
- 国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用04:服务层Service使用
- 在springmvc中使用itext生成pdf文件
- 【学习笔记二】struts2的动态下载,使用Apache PoI生成excel表格,将用户信息以xls文件格式供用户下载
- 免费使用的PDF格式web/移动/平板设计草图模板 - INTERFACE SKETCH
- springmvc 使用BeanNameViewResolver解析excel,pdf,json,xml视图