- 浏览: 836289 次
文章分类
- 全部博客 (365)
- java (124)
- spring mvc (21)
- spring (22)
- struts2 (6)
- jquery (27)
- javascript (24)
- mybatis/ibatis (8)
- hibernate (7)
- compass (11)
- lucene (26)
- flex (0)
- actionscript (0)
- webservice (8)
- rabbitMQ/Socket (15)
- jsp/freemaker (5)
- 数据库 (27)
- 应用服务器 (21)
- Hadoop (1)
- PowerDesigner (3)
- EJB (0)
- JPA (0)
- PHP (2)
- C# (0)
- .NET (0)
- html (2)
- xml (5)
- android (7)
- flume (1)
- zookeeper (0)
- 证书加密 (2)
- maven (1)
- redis (2)
- cas (11)
最新评论
-
zuxianghuang:
通过pom上传报错 Artifact upload faile ...
nexus上传了jar包.通过maven引用当前jar,不能取得jar的依赖 -
流年末年:
百度网盘的挂了吧???
SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) -
953434367:
UfgovDBUtil 是什么类
Java发HTTP POST请求(内容为xml格式) -
smilease:
帮大忙了,非常感谢
freemaker自动生成源代码 -
syd505:
十分感谢作者无私的分享,仔细阅读后很多地方得以解惑。
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
最近要用JasperReport,试着和spring集成了一下,现总结如下:
spring提供了几种对应JasperReport的view,可以在spring的bean定义文件
中按需要定义好,在spring的controller中对报表数据进行填充,然后返回
ModelAndView就可以了,这样就和spring的MVC集成在一起了。
详细信息可以参看spring包中带的spring reference文档。
我是这么配置的,定义报表的ViewResolver:
- <bean id="reportViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
- <property name="order" value="1"/>
- <property name="location" value="/WEB-INF/reports.xml"/>
- </bean>
<bean id="reportViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver"> <property name="order" value="1"/> <property name="location" value="/WEB-INF/reports.xml"/> </bean>
spring可以定义多个ViewResolver,对于普通的jsp的view,还需要如下定义一个ViewResolver:
- <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- </bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> </bean>
报表的ViewResolver中引用的reports.xml在后面会说到。
对于报表的数据的填充,我试验了三种方式如下:
1. 直接指定DataSource
可以在View的定义时,直接指定DataSource,这时我们就不需要再获取数据对
报表进行填充,报表会自动从DataSource获取数据库连接,然后通过报表定义
中的SQL语句获取数据。在reports.xml中是这样定义的:
- <bean id="datasourceCustomerReport" class="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView">
- <property name="url" value="/pages/report/report1.jasper" />
- <property name="jdbcDataSource" ref="dataSource" />
- </bean>
<bean id="datasourceCustomerReport" class="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView"> <property name="url" value="/pages/report/report1.jasper" /> <property name="jdbcDataSource" ref="dataSource" /> </bean>
其中dataSource就是一般系统中定义的DataSource bean。spring refernce中
报表的ViewResolver用的是ResourceBundleViewResolver,View的定义是在一个
properties文件中完成的,但是我没找到在properties文件中指定jdbcDataSource
属性为一spring的bean(dataSource)的方法,所以用的是xml文件定义的方法。
这时controller的处理非常简单,没有获取数据的处理,代码如下:
- @RequestMapping(value = "/datasourceCustomer", method = RequestMethod.POST)
- public ModelAndView datasourceCustomerReport(HttpServletRequest request) {
- Map<String, String> model = new HashMap<String, String>();
- //这段代码是按用户操作分别返回pdf和excel格式的报表
- if (request.getParameter("excel") != null) {
- model.put("format", "xls");
- } else {
- model.put("format", "pdf");
- }
- return new ModelAndView("datasourceCustomerReport", model);
- }
@RequestMapping(value = "/datasourceCustomer", method = RequestMethod.POST) public ModelAndView datasourceCustomerReport(HttpServletRequest request) { Map<String, String> model = new HashMap<String, String>(); //这段代码是按用户操作分别返回pdf和excel格式的报表 if (request.getParameter("excel") != null) { model.put("format", "xls"); } else { model.put("format", "pdf"); } return new ModelAndView("datasourceCustomerReport", model); }
这种方法代码很简单,但是有一个问题,就是生成报表时的数据库操作,不在
spring的事务管理下,所以并不适用需要严格的事务管理的情况。
2. 通过的Hibernate Dao中获取数据
这种方式view的定义只要指定class和url就可以了,reports.xml中的定义如下:
- <bean id="customerReport" class="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView">
- <property name="url" value="/pages/report/report1.jasper" />
- </bean>
<bean id="customerReport" class="org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView"> <property name="url" value="/pages/report/report1.jasper" /> </bean>
这种方式是通过Hibernate Dao获取Collection类型的数据,然后保存在给View
的model中,Spring会自动寻找Collection类型的对象作为报表填充的数据。
Controller的代码如下:
- @RequestMapping(value = "/customer", method = RequestMethod.POST)
- public ModelAndView customerReport(HttpServletRequest request) {
- Map<String, Object> model = new HashMap<String, Object>();
- List data = reportService.customerReport();
- model.put("data", data);
- ...
- return new ModelAndView("customerReport", model);
- }
@RequestMapping(value = "/customer", method = RequestMethod.POST) public ModelAndView customerReport(HttpServletRequest request) { Map<String, Object> model = new HashMap<String, Object>(); List data = reportService.customerReport(); model.put("data", data); ... return new ModelAndView("customerReport", model); }
其中reportService通过Hibernate Dao获取数据,Dao中代码如下:
- @Override
- public List customerReport() {
- Session session = sessionFactory.getCurrentSession();
- return session.createCriteria(CustomerBaseInfo.class).list();
- }
@Override public List customerReport() { Session session = sessionFactory.getCurrentSession(); return session.createCriteria(CustomerBaseInfo.class).list(); }
此时,我们可以在service层定义Transaction,保证了事务管理。
但这种方式也有感觉不好的地方,如果我只是需要某个表的某几个字段,但这种
方法会把所有字段的数据都取出来,这是一种对系统资源的浪费,所以我又试
验了第三种方法:
3. 通过JdbcTemplate Dao获取数据
这种方式View的定义和Controller中的处理没什么变化,Controller中也是通过
service获取数据,但是service是通过一个JdbcTemplate的Dao获取的数据,这个
Dao的代码如下:
- public class ReportDaoImpl implements ReportDao {
- private JdbcTemplate jdbcTemplate;
- public void setDataSource(DataSource dataSource) {
- this.jdbcTemplate = new JdbcTemplate(dataSource);
- }
- @Override
- public List jdbcCustomerReport() {
- return jdbcTemplate.queryForList("select name, listlaiyuan, yejie from customerbaseinfo");
- }
- }
public class ReportDaoImpl implements ReportDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } @Override public List jdbcCustomerReport() { return jdbcTemplate.queryForList("select name, listlaiyuan, yejie from customerbaseinfo"); } }
通过这种方式,我们可以直接通过SQL语句或者存储过程灵活地获取数据,而且
由于HibernateTransactionManager能够检查到DataSource发起的数据库访问,所以
我们可以与系统中的其他Hibernate Dao一起用HibernateTransactionManager来
管理事务。
以上就是我试验的三种方式,三种方式各有侧重,可以根据具体情况选用。
以下附加上事务管理的定义:
- <bean id="transactionManager"
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
- <tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven />
以及JdbcTemplate Dao的定义
- <bean id="reportDao" class="daos.impl.ReportDaoImpl">
- <property name="dataSource" ref="dataSource" />
- </bean>
<bean id="reportDao" class="daos.impl.ReportDaoImpl"> <property name="dataSource" ref="dataSource" /> </bean>
最后,希望各位大侠拍砖,呵呵
发表评论
-
jackson annotations注解详解
2015-01-13 11:34 18903官方WIKI:https://github.com/Fast ... -
Ehcache 整合Spring 使用页面、对象缓存
2012-11-02 19:56 1028Ehcache在很多项目中都出现过,用法也比较简 ... -
Spring 3.1 M1 中的缓存功能
2012-11-02 19:26 799本文转自:http://www.oschina.net/ ... -
深入剖析Spring Web源码(八) - 处理器映射,处理器适配器以及处理器的实现 - 基于简单控制器流程的实现
2012-10-31 13:37 12151.1.1.1 ... -
spring 源码 阅读 笔记 之 HandlerMapping
2012-10-31 12:59 1613SpringCVSBeanHTMLAnt ... -
spring mvc重复提交拦截器方法
2012-10-31 11:37 8965import javax.servlet.http.HttpS ... -
不重复配置——利用Spring通用化配置
2012-10-17 09:40 948还记得 如下这种配置吗: 1、struts2作用域 ... -
Ehcache 整合Spring 使用页面、对象缓存
2012-10-16 09:44 753Ehcache在很多项目中都出现过,用法也比较简单。一般的 ... -
SpringMVC文件上传 多文件
2012-10-15 17:27 7036必须明确告诉DispatcherServlet如何处理Mult ... -
Spring MVC 3.1新特性 生产者、消费者请求限定
2012-10-12 11:50 11056.6.5、生产者、消费者限定 6.6.5.1、基本概念 ... -
spring + mybatis 多数据源切换
2012-10-10 11:42 1525[代码] DbContextHold ... -
spring MVC 文件上传
2012-10-06 10:03 2024spring支持在网络应用程序处理文件上传,提供拔插的org. ... -
Spring MVC+Jasper Report 及生成PDF的中文问题
2012-09-26 17:10 2先说两句报表框架的选择,JasperRepor ... -
Springmvc与jasperreport结合生成报表的一种方法
2012-09-26 16:42 1<script type="text/ja ... -
spring 3.1中的cache小结
2012-09-22 23:27 958spring 3.1中有cache了,下 ... -
Spring MVC和Struts2的区别
2012-09-08 08:59 10031. 机制:spring mvc的入口是servlet,而st ... -
SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结
2012-06-19 17:34 1347一 开发环境 1、动态web工程 2、部分依赖 ... -
用spring MVC 生成Excel和PDF
2012-06-16 19:16 35931 用spring MVC 生成Excel和PDF http ... -
SpringMVC+FreeMarker实现半自动静态化
2012-06-14 13:53 2468感谢imyourgod的原贴http://to ... -
文件下载(只需要简单的四步),Java中都通用
2012-06-15 08:33 1192Javadownload文件下载Spring ...
相关推荐
介绍jasperreport的使用及在spring中的设置、及导出html、excel、pdf等技术
介绍JasperReport与Spring集成,与使用例子和注意事项,包括中文乱码等
JasperReport iReport 集成到web应用操作说明
JasperReport+Ireport是非常实用的报表定制工具,最近自己动手对springMvc和JasperReport做了一次整合,写一下自己对整合过程中的理解和遇到的问题,以便以后查阅,又能够对学习jasperReport的同学有点帮助。
springboot整合JasperReport实现报表功能文章所需的全部资源
进行springmvc框架下有关jasperreport整合,包括配置文件等描述。
JasperReport与Ireport的配置与使用.pdf
程序员 使用 jasperreport studio生成中文报表 spring boot 教程
springmvc框架整合jasperreport和ireport简单易用,框架清晰,maven仓库
使用Spring2.5+Struts2+ibatis+jasperreport3.1.4 实现Struts2与Jasperreport报表结合
JasperReport 与iReport 的配置与使用
jasperreport与ireport的配置与使用教程 PDF,对java开发不是太懂,需要的朋友下载吧。
ireport 也是开源组织sf.net 中的一款免费软件,其主要作用是用来以可视化的方式设计 生成jasperreport 所使用的报表格式文件,因为jasperreport 本身并未提供很好的可视化报 表设计工具,ireport 的出现...
整合Struts2+JasperReport3 详细讲解利用iReport开发报表
springMvc集成JasperReport超简单一个简单方法搞定,支持excel、html,扩展方便简单实用
JasperReport 与 iReport 的配置与使用.pdf;作者:裴贺先 内容概况: 第一章:JasperReport 与 iReport 简介 第二章:安装与配置 第三章:iReport 的使用 第四章:JasperReport 在程序中的应用 第五章:参考信息及...
JasperReport与iReport的安装配置与使用说明.doc
博文链接:https://zoeque.iteye.com/blog/213811