- 浏览: 69302 次
- 性别:
- 来自: 南京
最新评论
-
アリス:
楼主你这篇是我找到的最有水平的,能不能告诉我怎么把html报表 ...
JasperReport 在Spring中的使用 问题 -
chinadeng:
websocket-bench 如何安装 ?根据github ...
socket.io的1000+连接 -
weiawe:
...
JasperReport 在Spring中的使用 问题 -
liyueling:
...
小心隐式类型转换 -
liyueling:
使用SecureCRT的SSH端口转发,使用PLSQL访问内网数据库
最近看了《JasperReports for Java Developers》,里面讲了怎么在Spring里使用JasperReport
照着里面的例子做了一下,例子是没有问题的,但是我把展现方式改为由JasperReportsHtmlView 展现就出问题了,所有的图片都出不来,是不是使用JasperReportsHtmlView还要配置其它的拦截器或是什么?我在Google里找了一通,也没能解决主要是E文不太好国外的论坛也找了,看得头大,所以把代码贴出来,那位用过的能指点一下,谢过了
web配置文件
前台Jsp页面:
jasperSpring-servlet.xml的内容:
控制器JasperSpringController的源码:
JasperReport页面在IReport中的效果:
页面输出PDF效果:
但把输出改为JasperReportsHtmlView页面上的所有图片都显示不出来,应该是还有什么属性值设置的不对,哪位知道的请指点一下,项目里面的Jar包太大了不然把整个项目都上传上来
照着里面的例子做了一下,例子是没有问题的,但是我把展现方式改为由JasperReportsHtmlView 展现就出问题了,所有的图片都出不来,是不是使用JasperReportsHtmlView还要配置其它的拦截器或是什么?我在Google里找了一通,也没能解决主要是E文不太好国外的论坛也找了,看得头大,所以把代码贴出来,那位用过的能指点一下,谢过了
web配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>ReportWebApp</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>jasperSpring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jasperSpring</servlet-name> <url-pattern>/jasperSpring/*</url-pattern> </servlet-mapping> </web-app>
前台Jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Generate Report</title> </head> <body> Click on the button to generate the report. <form name="reportForm" action="jasperSpring/report" method="get"><input type="submit" name="submitButton" value="Submit" /></form> </body> </html>
jasperSpring-servlet.xml的内容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </property> <property name="url"> <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value>sa</value> </property> </bean> <bean id="publicUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="report">jasperController</prop> </props> </property> </bean> <bean id="jasperController" class="net.aachina.jasperreport.JasperSpringController"> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basename" value="views" /> </bean> <bean id="ImageServlet" class="net.sf.jasperreports.j2ee.servlets.ImageServlet"> </bean> </beans>
引用
views.properties中的内容
report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView #report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView #report.class=net.aachina.jasperreport.render.JasperReportsHtmlView report.url=reports/ChartReportDemo.jasper
控制器JasperSpringController的源码:
package net.aachina.jasperreport; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import net.sf.jasperreports.engine.JRResultSetDataSource; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class JasperSpringController implements Controller { private DataSource dataSource; public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException { return new ModelAndView("report", getModel()); } @SuppressWarnings("unchecked") private Map getModel() throws ClassNotFoundException, SQLException { Connection connection; Statement statement; ResultSet resultSet; HashMap model = new HashMap(); String query = "SELECT"+ " Employees.[LastName] AS Employees_LastName,"+ " Employees.[FirstName] AS Employees_FirstName,"+ " Employees.[EmployeeID] AS Employees_EmployeeID,"+ " Orders.[OrderID] AS Orders_OrderID,"+ " Orders.[OrderDate] AS Orders_OrderDate "+ " FROM "+ " Employees INNER JOIN Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]"; connection = dataSource.getConnection(); statement = connection.createStatement(); resultSet = statement.executeQuery(query); JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet); model.put("datasource", resultSetDataSource); return model; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } }
JasperReport页面在IReport中的效果:
页面输出PDF效果:
但把输出改为JasperReportsHtmlView页面上的所有图片都显示不出来,应该是还有什么属性值设置的不对,哪位知道的请指点一下,项目里面的Jar包太大了不然把整个项目都上传上来
评论
7 楼
アリス
2017-04-13
楼主你这篇是我找到的最有水平的,能不能告诉我怎么把html报表和引用的图片打包成一个zip进行下载
6 楼
weiawe
2015-03-16
5 楼
揣神再现
2008-08-05
没有上传这个文件吗???ChartReportDemo.jasper
4 楼
htp2002
2007-12-12
这样做,connection何时关闭?
以下做法供参考:将datasource(jdbc)作为一个value放入model,这样spring的jasper相关view就会取到这个datasource,进而获取connection,fillreport后由spring关闭connection。
请参考代码AbstractJasperReportsView.fillReport
以下做法供参考:将datasource(jdbc)作为一个value放入model,这样spring的jasper相关view就会取到这个datasource,进而获取connection,fillreport后由spring关闭connection。
请参考代码AbstractJasperReportsView.fillReport
JRDataSource jrDataSource = getReportData(model); if (jrDataSource != null) { // Use the JasperReports JRDataSource. if (logger.isDebugEnabled()) { logger.debug("Filling report with JRDataSource [" + jrDataSource + "]."); } return JasperFillManager.fillReport(this.report, model, jrDataSource); } else { if (this.jdbcDataSource == null) { this.jdbcDataSource = (DataSource) CollectionUtils.findValueOfType(model.values(), DataSource.class); } if (this.jdbcDataSource != null) { // Use the JDBC DataSource. if (logger.isDebugEnabled()) { logger.debug("Filling report with JDBC DataSource [" + this.jdbcDataSource + "]."); } Connection con = this.jdbcDataSource.getConnection(); try { return JasperFillManager.fillReport(this.report, model, con); } finally { try { con.close(); } catch (SQLException ex) { logger.debug("Could not close JDBC Connection", ex); } } } else { // Assume that the model contains parameters that identify // the source for report data (e.g. Hibernate or JPA queries). return JasperFillManager.fillReport(this.report, model); } }
3 楼
hejianhuacn
2007-11-12
在上面的Controller中传入的是JRResultSetDataSource 如何传入Connection?因为报表文件里已经存在SQL语句了,如何直接传入Connection呢?这样最少页面看上去要整齐一点
2 楼
hejianhuacn
2007-11-07
终于解决了!
方法来源于:http://forum.springframework.org/showthread.php?t=25030 其实自己也应该想到的BS一下自己。为了不让后来人受累,我把代码再Copy过来使帖子完整^_^
看代码就应该能明白了,哎 为什么我就没想到这么写呢
对了控制器里面也要修改一下:
方法来源于:http://forum.springframework.org/showthread.php?t=25030 其实自己也应该想到的BS一下自己。为了不让后来人受累,我把代码再Copy过来使帖子完整^_^
package net.aachina.jasperreport.render; import java.io.ByteArrayOutputStream; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.ui.jasperreports.JasperReportsUtils; import org.springframework.util.CollectionUtils; import org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsSingleFormatView; import org.springframework.web.util.WebUtils; import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.j2ee.servlets.ImageServlet; public class JasperReportsHtmlViewExtend extends AbstractJasperReportsSingleFormatView { private static final int OUTPUT_BYTE_ARRAY_INITIAL_SIZE = 4096; public JasperReportsHtmlViewExtend() { setContentType("text/html; charset=UTF-8"); } protected JRExporter createExporter() { JRHtmlExporter jrHtmlExporter = new JRHtmlExporter(); jrHtmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image="); return jrHtmlExporter; } protected boolean useWriter() { return true; } @Override protected void renderReport(JasperPrint populatedReport, Map model, HttpServletResponse response) throws Exception { // TODO 自动生成方法存根 if (model.containsKey("requestObject")) { HttpServletRequest request = (HttpServletRequest) model .get("requestObject"); request.getSession().setAttribute( ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, populatedReport); } // Prepare report for rendering. JRExporter exporter = createExporter(); // Set exporter parameters - overriding with values from the Model. Map mergedExporterParameters = mergeExporterParameters(model); if (!CollectionUtils.isEmpty(mergedExporterParameters)) { exporter.setParameters(mergedExporterParameters); } if (useWriter()) { // We need to write text to the response Writer. // Copy the encoding configured for the report into the response. String contentType = getContentType(); String encoding = (String) exporter .getParameter(JRExporterParameter.CHARACTER_ENCODING); if (encoding != null) { // Only apply encoding if content type is specified but does not // contain charset clause already. if (contentType != null && contentType.toLowerCase().indexOf( WebUtils.CONTENT_TYPE_CHARSET_PREFIX) == -1) { contentType = contentType + WebUtils.CONTENT_TYPE_CHARSET_PREFIX + encoding; } } response.setContentType(contentType); // Render report into HttpServletResponse's Writer. JasperReportsUtils.render(exporter, populatedReport, response .getWriter()); } else { // We need to write binary output to the response OutputStream. // Apply the content type as specified - we don't need an encoding // here. response.setContentType(getContentType()); // Render report into local OutputStream. // IE workaround: write into byte array first. ByteArrayOutputStream baos = new ByteArrayOutputStream( OUTPUT_BYTE_ARRAY_INITIAL_SIZE); JasperReportsUtils.render(exporter, populatedReport, baos); // Write content length (determined via byte array). response.setContentLength(baos.size()); // Flush byte array to servlet output stream. ServletOutputStream out = response.getOutputStream(); baos.writeTo(out); out.flush(); } } }
看代码就应该能明白了,哎 为什么我就没想到这么写呢
对了控制器里面也要修改一下:
package net.aachina.jasperreport; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; import net.sf.jasperreports.engine.JRResultSetDataSource; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; public class JasperSpringController implements Controller { private DataSource dataSource; public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException { return new ModelAndView("report", getModel(request)); } @SuppressWarnings("unchecked") private Map getModel(HttpServletRequest request) throws ClassNotFoundException, SQLException { Connection connection; Statement statement; ResultSet resultSet; HashMap model = new HashMap(); String query = "SELECT"+ " Employees.[LastName] AS Employees_LastName,"+ " Employees.[FirstName] AS Employees_FirstName,"+ " Employees.[EmployeeID] AS Employees_EmployeeID,"+ " Orders.[OrderID] AS Orders_OrderID,"+ " Orders.[OrderDate] AS Orders_OrderDate "+ " FROM "+ " Employees INNER JOIN Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]"; connection = dataSource.getConnection(); statement = connection.createStatement(); resultSet = statement.executeQuery(query); JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet); model.put("datasource", resultSetDataSource); model.put("requestObject",request); System.out.println("well done!"); return model; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } }
1 楼
hejianhuacn
2007-11-07
直接使用Servlet 可以正确的输出为HTML,代码为:
web.xml修改为:
index.jsp的form action修改为:htmlReport
输出效果:图片上传不知道怎么编辑^_^
package net.aachina.jasperreport; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.util.HashMap; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.JRHtmlExporter; import net.sf.jasperreports.engine.export.JRHtmlExporterParameter; import net.sf.jasperreports.j2ee.servlets.ImageServlet; public class HtmlReportServlet extends HttpServlet { public static final String REPORT_DIRECTORY = "/reports"; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection connection; ServletContext context = this.getServletConfig().getServletContext(); String reportName = "ChartReportDemo"; PrintWriter printWriter = response.getWriter(); InputStream reportStream = getServletConfig().getServletContext() .getResourceAsStream( "/" + REPORT_DIRECTORY + "/" + reportName + ".jasper"); JasperPrint jasperPrint; try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); connection = DriverManager .getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind","sa","sa"); jasperPrint = JasperFillManager.fillReport(reportStream, new HashMap(), connection); JRHtmlExporter htmlExporter = new JRHtmlExporter(); response.setContentType("text/html"); request.getSession().setAttribute( ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint); htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); htmlExporter.setParameter(JRExporterParameter.OUTPUT_WRITER, printWriter); htmlExporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "gb2312"); htmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image?image="); htmlExporter.exportReport(); connection.close(); System.out.println("done!"); } catch (Throwable t) { // display stack trace in the browser t.printStackTrace(printWriter); } } }
web.xml修改为:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" 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 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name> ReportWebApp</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>jasperSpring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>ImageServlet</servlet-name> <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class> </servlet> <servlet> <servlet-name>HtmlReportServlet</servlet-name> <servlet-class> net.aachina.jasperreport.HtmlReportServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>jasperSpring</servlet-name> <url-pattern>/jasperSpring/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>HtmlReportServlet</servlet-name> <url-pattern>/htmlReport</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <url-pattern>/image</url-pattern> </servlet-mapping> </web-app>
index.jsp的form action修改为:htmlReport
输出效果:图片上传不知道怎么编辑^_^
相关推荐
介绍jasperreport的使用及在spring中的设置、及导出html、excel、pdf等技术
程序员 使用 jasperreport studio生成中文报表 spring boot 教程
springmvc框架整合jasperreport和ireport简单易用,框架清晰,maven仓库
进行springmvc框架下有关jasperreport整合,包括配置文件等描述。
使用Spring2.5+Struts2+ibatis+jasperreport3.1.4 实现Struts2与Jasperreport报表结合
介绍JasperReport与Spring集成,与使用例子和注意事项,包括中文乱码等
该课程是一套政府对企业的管理信息系统,所以安全非常重要,本系统基于springSecurity3.x的安全管理,并且使用目前最新报表技术(JasperReport5.1+Ireport5.1)完成交叉表及饼图设计,还给同学们介绍了基于JAX-WS的web...
JasperReport+struts+spring+hibernate+extjs4.1
spring框架里运用jasperreport显示PDF,一个完整的演示工程项目,我自己研究了一天的成果,贡献给大家下载
自己写的ssh整合jasperreport实例,没有用struts集成jasperreport的插件,自己封装的导出类,可以导出各种格式,读的是jasperreport的xml文件,不是编译过的文件,可以进行自定义报表开发
SPRING-MVC-JasperReport Spring MVC 和 Jasper 报告使用的技术: * Maven* Spring MVC* Ireport Design* Tiles: in order to create the template (header, body, menu, footer)* logback: Logback is intended as ...
在本教程中,我们将学习如何在一个简单的Spring MVC Web应用中集成Jasper报表工具。教程涵盖的技术点有:报表自定义数据源的使用;报表渲染、呈现的配置与实现;iReport报表设计器的使用(报表模板设计)等
Ireport4.0.2+jasperReport4.0.2整合 的开发工具 用于strust2的完美结合 生成任何格式的报表(pdf、xml、xls、html)。。。。。。本人已实现
SSH+jquery+springScurity权限管理+jasperreport报表+webService调用天气预报+完整分页 整合小型OA项目源码下载 里面还有需要完善的地方,有些是需要重复做的代码,最近时间比较紧,没有来得功夫搞了!发出来供大家...
历时一周的学习成果,代码有详细注释,还有笔记资料。绝对带你从入门到中级。哈哈哈。
JasperReport整合springmvc eclipse工程源码包含ireport源文件。共4个文件,一起解压后直接导入eclipse中即可。simpleReport.class=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView 访问...
SSH+jquery+springScurity权限管理+jasperreport报表+webService调用天气预报+完整分页 整合小型OA项目源码下载 里面还有需要完善的地方,有些是需要重复做的代码,最近时间比较紧,没有来得功夫搞了!发出来供大家...
课程从项目需求为开始,为了实现一套报表自动化系统,而做的相关功能开发。目的:部署这套系统后,...技术包括:jqwidgets(html5)、springmvc、jdbc、log4j、Jasperreport、Javamail、spring task、文件上传、下载等。
1、springmvc3.2.5+hiberante4.2.0+spring3.2.5+maven-3.0.4+jasperreport5.5.1 + ireport4.5.1 2、请导入 WEB-INFO/doc/test.sql 3、直接访问http://localhost:8080/express/hello