分享
 
 
 

JasperReport在Spring上的应用

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最近机缘巧合,霉运当头,糊里糊涂答应别人做一个简单的报表,结果是焦头烂额,缺觉少睡。。。。。。只怪以前结合struts、JasperReport做过报表,而最近看了几天Spring,技痒难耐。唉,长叹一声先,然后做点痛定思痛的安慰性的总结(或许我该先去提高智商)。

嘿嘿,人类总是喜欢炫耀嘛,所以先说我的JasperReport在Spring上应用的方法,其次呢,说一下和普通的web应用的不同(包括struts),最后呢,当然是去补觉了(想看我家丑的朋友,不要太失望啊),吼吼!!

我们知道,Spring内置了对多种输出格式的支持,如pdf,xls等,而报表通常也要求生产多种格式,那么他们结合,岂不是天造地设、王八绿豆??反正我这么认为。

由于每种格式的方法差不多,下面我只说pdf的过程。

开发web应用,当然是先要有个web.xml嘛,这里定义Spring的入口org.springframework.web.servlet.DispatcherServlet

<servlet>

<servlet-name>testReport</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

然后设定它处理的范围

<servlet-mapping>

<servlet-name>countries</servlet-name>

<url-pattern>*.htm</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>countries</servlet-name>

<url-pattern>*.pdf</url-pattern>

</servlet-mapping>

这里的*.pdf是不能少的。如果想先提交到 XXX.htm,然后返回pdf,就会提示下载XXX.htm。

Spring对pdf的支持是通过AbstractPdfView,用户要继承这个类自己写pdf的内容,但JasperReport已经有生成pdf的功能了,而我们想要的,只是借助它的MVC框架,在需要时,返回给客户想要的pdf页面,所以,我们直接继承AbstractView(下边是一个通用程序具体代码)

public class IamPdfView extends AbstractView {

private Log logger = LogFactory.getLog(this.getClass());

public IamPdfView() {

setContentType("application/pdf");

}

/*

* @see org.springframework.web.servlet.view.AbstractView#renderMergedOutputModel(java.util.Map,

* javax.servlet.http.HttpServletRequest,

* javax.servlet.http.HttpServletResponse)

*/

protected void renderMergedOutputModel(Map model,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

JReportParam jReportParam = (JReportParam)model.get("jReportParam");

byte[] bytes = null;

try {

bytes = JasperRunManager.runReportToPdf(jReportParam

.getJasperFilePath(), jReportParam.getParameters(),

jReportParam.getDataSet());

} catch (JRException e) {

logger.info("zzzzzzzzzzzzzzzzz!IamPdfView Exception e:" + e);

}

ByteArrayOutputStream baos = new ByteArrayOutputStream();

baos.write(bytes);

response.setContentLength(baos.size());

response.setContentType(getContentType());

ServletOutputStream out = response.getOutputStream();

baos.writeTo(out);

out.flush();

out.close();

}

}

其中 JReportParam 是对报表参数的一个简单封装。

Spring提供了很多viewResolver,我选用的是org.springframework.web.servlet.view.ResourceBundleViewResolver,因为可以将页面相关信息写作配置文件中,如

pdfView.class=com.iam.testreport.report.view.IamPdfView

这样,当 return new ModelAndView("pdfView"...)时,就可以调用com.iam.testreport.report.view.IamPdfView了。

下面说一下和普通的web应用的不同(包括struts),其实就一点,就是Spring比他们多了viewResolver,而它的DEFAULT_CONTENT_TYPE = "text/html; charset=ISO-8859-1";所以我们需要扩展AbstractView或影射报表servlet为 name.pdf(这种方法不用扩展Spring的特有类)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有