使用SpringMVC框架生成XLS和PDF格式的WEB应用视图

在WEB应用开发中,有可能要求动态生成非HTML格式(比如XLS或PDF)的视图以显示或保存查询得到的结果。使用强大的SpringMVC框架,可以非常方便地实现这个功能。下面是动态生成XLS和PDF格式的“九九乘法表”的例子。该例子使用到Spring框架,生成XLS的POI组件,生成PDF的iText组件:

Springhttp://www.springframework.org
POIhttp://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 >

最后就是打包工作了,这个就不再说什么了。

最终效果:

怎样,很方便吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值