JasperReport 在Spring中的使用 问题

来源:互联网 发布:淘宝店铺标语怎么改 编辑:程序博客网 时间:2024/06/08 11:42

关键字: spring, jasperreport
最近看了《JasperReports for Java Developers》,里面讲了怎么在Spring里使用JasperReport
照着里面的例子做了一下,例子是没有问题的,但是我把展现方式改为由JasperReportsHtmlView 展现就出问题了,所有的图片都出不来,是不是使用JasperReportsHtmlView还要配置其它的拦截器或是什么?我在Google里找了一通,也没能解决主要是E文不太好国外的论坛也找了,看得头大,所以把代码贴出来,那位用过的能指点一下,谢过了

web配置文件
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <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">   
  3.     <display-name>ReportWebApp</display-name>   
  4.     <welcome-file-list>   
  5.         <welcome-file>index.jsp</welcome-file>   
  6.     </welcome-file-list>   
  7.     <servlet>   
  8.         <servlet-name>jasperSpring</servlet-name>   
  9.     <servlet-class>org.springframework.web.servlet.DispatcherServlet    
  10.         </servlet-class>   
  11.         <load-on-startup>1</load-on-startup>   
  12.     </servlet>   
  13.     <servlet-mapping>   
  14.         <servlet-name>jasperSpring</servlet-name>   
  15.         <url-pattern>/jasperSpring/*</url-pattern>   
  16.     </servlet-mapping>   
  17. </web-app>  
<?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页面:
Java代码 复制代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  4. <html>   
  5.     <head>   
  6.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  7.     <title>Generate Report</title>   
  8.     </head>   
  9. <body>   
  10.             Click on the button to generate the report.   
  11. <form name="reportForm" action="jasperSpring/report" method="get"><input   
  12.     type="submit" name="submitButton" value="Submit" /></form>   
  13. </body>   
  14. </html>  
<%@ 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"><inputtype="submit" name="submitButton" value="Submit" /></form></body></html>


jasperSpring-servlet.xml的内容:
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">   
  3. <beans>   
  4.     <bean id="dataSource"  
  5.         class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">   
  6.         <property name="driverClassName">   
  7.             <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>   
  8.         </property>   
  9.         <property name="url">   
  10.             <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind</value>   
  11.         </property>   
  12.         <property name="username">   
  13.             <value>sa</value>   
  14.         </property>   
  15.         <property name="password">   
  16.             <value>sa</value>   
  17.         </property>   
  18.     </bean>   
  19.     <bean id="publicUrlMapping"  
  20.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
  21.         <property name="mappings">   
  22.             <props>   
  23.                 <prop key="report">jasperController</prop>   
  24.             </props>   
  25.         </property>   
  26.     </bean>   
  27.     <bean id="jasperController"  
  28.         class="net.aachina.jasperreport.JasperSpringController">   
  29.         <property name="dataSource">   
  30.             <ref local="dataSource" />   
  31.         </property>   
  32.     </bean>   
  33.     <bean id="viewResolver"  
  34.         class="org.springframework.web.servlet.view.ResourceBundleViewResolver">   
  35.         <property name="basename" value="views" />   
  36.     </bean>   
  37.     <bean id="ImageServlet" class="net.sf.jasperreports.j2ee.servlets.ImageServlet">   
  38.     </bean>   
  39. </beans>  
<?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中的内容

Java代码 复制代码
  1. report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView   
  2. #report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView   
  3. #report.class=net.aachina.jasperreport.render.JasperReportsHtmlView   
  4. report.url=reports/ChartReportDemo.jasper  
report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView#report.class=org.springframework.web.servlet.view.jasperreports.JasperReportsHtmlView#report.class=net.aachina.jasperreport.render.JasperReportsHtmlViewreport.url=reports/ChartReportDemo.jasper


控制器JasperSpringController的源码:
Java代码 复制代码
  1. package net.aachina.jasperreport;   
  2.   
  3. import java.io.IOException;   
  4. import java.sql.Connection;   
  5. import java.sql.ResultSet;   
  6. import java.sql.SQLException;   
  7. import java.sql.Statement;   
  8. import java.util.HashMap;   
  9. import java.util.Map;   
  10.   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServletRequest;   
  13. import javax.servlet.http.HttpServletResponse;   
  14. import javax.sql.DataSource;   
  15.   
  16. import net.sf.jasperreports.engine.JRResultSetDataSource;   
  17.   
  18. import org.springframework.web.servlet.ModelAndView;   
  19. import org.springframework.web.servlet.mvc.Controller;   
  20.   
  21. public class JasperSpringController implements Controller {   
  22.   
  23.     private DataSource dataSource;   
  24.   
  25.     public ModelAndView handleRequest(HttpServletRequest request,   HttpServletResponse response) throws ServletException,  IOException, ClassNotFoundException, SQLException   
  26.     {   
  27.            
  28.         return new ModelAndView("report", getModel());   
  29.     }   
  30.   
  31.     @SuppressWarnings("unchecked")   
  32.     private Map getModel() throws ClassNotFoundException, SQLException   
  33.     {   
  34.         Connection connection;   
  35.         Statement statement;   
  36.         ResultSet resultSet;   
  37.         HashMap model = new HashMap();   
  38.         String query = "SELECT"+   
  39.                  " Employees.[LastName] AS Employees_LastName,"+   
  40.                       " Employees.[FirstName] AS Employees_FirstName,"+   
  41.                       " Employees.[EmployeeID] AS Employees_EmployeeID,"+   
  42.                       " Orders.[OrderID] AS Orders_OrderID,"+   
  43.                       " Orders.[OrderDate] AS Orders_OrderDate "+   
  44.                         "  FROM "+   
  45. " Employees INNER JOIN  Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]";   
  46.         connection = dataSource.getConnection();   
  47.         statement = connection.createStatement();   
  48.         resultSet = statement.executeQuery(query);   
  49.         JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet);   
  50.         model.put("datasource", resultSetDataSource);   
  51.         return model;   
  52.         }   
  53.        
  54.     public void setDataSource(DataSource dataSource)    
  55.     {   
  56.         this.dataSource = dataSource;   
  57.     }   
  58. }  
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包太大了不然把整个项目都上传上来
  • 描述: PDF效果图
  • 大小: 42.5 KB
  • 大小: 35.5 KB
  • 查看图片附件
js中cloneNode()的使用 (Blog合并)
  • 11:51
  • 浏览 (1744)
  • 论坛浏览 (4842)
  • 评论 (5)
  • 相关推荐
评论
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
Java代码 复制代码
  1. JRDataSource jrDataSource = getReportData(model);   
  2.   
  3. if (jrDataSource != null) {   
  4.     // Use the JasperReports JRDataSource.   
  5.     if (logger.isDebugEnabled()) {   
  6.         logger.debug("Filling report with JRDataSource [" + jrDataSource + "].");   
  7.     }   
  8.     return JasperFillManager.fillReport(this.report, model, jrDataSource);   
  9. }   
  10.   
  11. else {   
  12.     if (this.jdbcDataSource == null) {   
  13.         this.jdbcDataSource = (DataSource) CollectionUtils.findValueOfType(model.values(), DataSource.class);   
  14.     }   
  15.   
  16.     if (this.jdbcDataSource != null) {   
  17.         // Use the JDBC DataSource.   
  18.         if (logger.isDebugEnabled()) {   
  19.             logger.debug("Filling report with JDBC DataSource [" + this.jdbcDataSource + "].");   
  20.         }   
  21.         Connection con = this.jdbcDataSource.getConnection();   
  22.         try {   
  23.             return JasperFillManager.fillReport(this.report, model, con);   
  24.         }   
  25.         finally {   
  26.             try {   
  27.                 con.close();   
  28.             }   
  29.             catch (SQLException ex) {   
  30.                 logger.debug("Could not close JDBC Connection", ex);   
  31.             }   
  32.         }   
  33.     }   
  34.   
  35.     else {   
  36.         // Assume that the model contains parameters that identify   
  37.         // the source for report data (e.g. Hibernate or JPA queries).   
  38.         return JasperFillManager.fillReport(this.report, model);   
  39.     }   
  40. }  
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过来使帖子完整^_^

Java代码 复制代码
  1. package net.aachina.jasperreport.render;   
  2.   
  3. import java.io.ByteArrayOutputStream;   
  4. import java.util.Map;   
  5.   
  6. import javax.servlet.ServletOutputStream;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. import org.springframework.ui.jasperreports.JasperReportsUtils;   
  11. import org.springframework.util.CollectionUtils;   
  12. import org.springframework.web.servlet.view.jasperreports.AbstractJasperReportsSingleFormatView;   
  13. import org.springframework.web.util.WebUtils;   
  14.   
  15. import net.sf.jasperreports.engine.JRExporter;   
  16. import net.sf.jasperreports.engine.JRExporterParameter;   
  17. import net.sf.jasperreports.engine.JasperPrint;   
  18. import net.sf.jasperreports.engine.export.JRHtmlExporter;   
  19. import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;   
  20. import net.sf.jasperreports.j2ee.servlets.ImageServlet;   
  21.   
  22. public class JasperReportsHtmlViewExtend extends  
  23.         AbstractJasperReportsSingleFormatView {   
  24.   
  25.     private static final int OUTPUT_BYTE_ARRAY_INITIAL_SIZE = 4096;   
  26.   
  27.     public JasperReportsHtmlViewExtend() {   
  28.         setContentType("text/html; charset=UTF-8");   
  29.     }   
  30.   
  31.     protected JRExporter createExporter() {   
  32.         JRHtmlExporter jrHtmlExporter = new JRHtmlExporter();   
  33.         jrHtmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,   
  34.                 "image?image=");   
  35.         return jrHtmlExporter;   
  36.     }   
  37.   
  38.     protected boolean useWriter() {   
  39.         return true;   
  40.     }   
  41.   
  42.     @Override  
  43.     protected void renderReport(JasperPrint populatedReport, Map model,   
  44.             HttpServletResponse response) throws Exception {   
  45.         // TODO 自动生成方法存根   
  46.         if (model.containsKey("requestObject")) {   
  47.             HttpServletRequest request = (HttpServletRequest) model   
  48.                     .get("requestObject");   
  49.             request.getSession().setAttribute(   
  50.                     ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,   
  51.                     populatedReport);   
  52.   
  53.         }   
  54.         // Prepare report for rendering.   
  55.         JRExporter exporter = createExporter();   
  56.   
  57.         // Set exporter parameters - overriding with values from the Model.   
  58.         Map mergedExporterParameters = mergeExporterParameters(model);   
  59.         if (!CollectionUtils.isEmpty(mergedExporterParameters)) {   
  60.             exporter.setParameters(mergedExporterParameters);   
  61.         }   
  62.   
  63.         if (useWriter()) {   
  64.             // We need to write text to the response Writer.   
  65.   
  66.             // Copy the encoding configured for the report into the response.   
  67.             String contentType = getContentType();   
  68.             String encoding = (String) exporter   
  69.                     .getParameter(JRExporterParameter.CHARACTER_ENCODING);   
  70.             if (encoding != null) {   
  71.                 // Only apply encoding if content type is specified but does not   
  72.                 // contain charset clause already.   
  73.                 if (contentType != null  
  74.                         && contentType.toLowerCase().indexOf(   
  75.                                 WebUtils.CONTENT_TYPE_CHARSET_PREFIX) == -1) {   
  76.                     contentType = contentType   
  77.                             + WebUtils.CONTENT_TYPE_CHARSET_PREFIX + encoding;   
  78.                 }   
  79.             }   
  80.             response.setContentType(contentType);   
  81.   
  82.             // Render report into HttpServletResponse's Writer.   
  83.             JasperReportsUtils.render(exporter, populatedReport, response   
  84.                     .getWriter());   
  85.         }   
  86.   
  87.         else {   
  88.             // We need to write binary output to the response OutputStream.   
  89.   
  90.             // Apply the content type as specified - we don't need an encoding   
  91.             // here.   
  92.             response.setContentType(getContentType());   
  93.   
  94.             // Render report into local OutputStream.   
  95.             // IE workaround: write into byte array first.   
  96.             ByteArrayOutputStream baos = new ByteArrayOutputStream(   
  97.                     OUTPUT_BYTE_ARRAY_INITIAL_SIZE);   
  98.             JasperReportsUtils.render(exporter, populatedReport, baos);   
  99.   
  100.             // Write content length (determined via byte array).   
  101.             response.setContentLength(baos.size());   
  102.   
  103.             // Flush byte array to servlet output stream.   
  104.             ServletOutputStream out = response.getOutputStream();   
  105.             baos.writeTo(out);   
  106.             out.flush();   
  107.         }   
  108.     }   
  109.   
  110. }  
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 extendsAbstractJasperReportsSingleFormatView {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;}@Overrideprotected 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();}}}

看代码就应该能明白了,哎 为什么我就没想到这么写呢

对了控制器里面也要修改一下:
Java代码 复制代码
  1. package net.aachina.jasperreport;   
  2.   
  3. import java.io.IOException;   
  4. import java.sql.Connection;   
  5. import java.sql.ResultSet;   
  6. import java.sql.SQLException;   
  7. import java.sql.Statement;   
  8. import java.util.HashMap;   
  9. import java.util.Map;   
  10.   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServletRequest;   
  13. import javax.servlet.http.HttpServletResponse;   
  14. import javax.sql.DataSource;   
  15.   
  16. import net.sf.jasperreports.engine.JRResultSetDataSource;   
  17.   
  18. import org.springframework.web.servlet.ModelAndView;   
  19. import org.springframework.web.servlet.mvc.Controller;   
  20.   
  21. public class JasperSpringController implements Controller {   
  22.   
  23.     private DataSource dataSource;   
  24.   
  25.     public ModelAndView handleRequest(HttpServletRequest request,   HttpServletResponse response) throws ServletException,  IOException, ClassNotFoundException, SQLException   
  26.     {   
  27.            
  28.         return new ModelAndView("report", getModel(request));   
  29.     }   
  30.   
  31.     @SuppressWarnings("unchecked")   
  32.     private Map getModel(HttpServletRequest request) throws ClassNotFoundException, SQLException   
  33.     {   
  34.         Connection connection;   
  35.         Statement statement;   
  36.         ResultSet resultSet;   
  37.         HashMap model = new HashMap();   
  38.         String query = "SELECT"+   
  39.                             " Employees.[LastName] AS Employees_LastName,"+   
  40.                             " Employees.[FirstName] AS Employees_FirstName,"+   
  41.                             " Employees.[EmployeeID] AS Employees_EmployeeID,"+   
  42.                             " Orders.[OrderID] AS Orders_OrderID,"+   
  43.                             " Orders.[OrderDate] AS Orders_OrderDate "+   
  44.                        "  FROM "+   
  45.                             " Employees INNER JOIN  Orders ON Employees.[EmployeeID] = Orders.[EmployeeID]";   
  46.         connection = dataSource.getConnection();   
  47.         statement = connection.createStatement();   
  48.         resultSet = statement.executeQuery(query);   
  49.         JRResultSetDataSource resultSetDataSource =new JRResultSetDataSource(resultSet);   
  50.         model.put("datasource", resultSetDataSource);   
  51.         model.put("requestObject",request);   
  52.         System.out.println("well done!");   
  53.         return model;   
  54.         }   
  55.        
  56.     public void setDataSource(DataSource dataSource)    
  57.     {   
  58.         this.dataSource = dataSource;   
  59.     }   
  60. }  
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,代码为:
Java代码 复制代码
  1. package net.aachina.jasperreport;   
  2.   
  3. import java.io.IOException;   
  4. import java.io.InputStream;   
  5. import java.io.PrintWriter;   
  6. import java.sql.Connection;   
  7. import java.sql.DriverManager;   
  8. import java.util.HashMap;   
  9.   
  10. import javax.servlet.ServletContext;   
  11. import javax.servlet.ServletException;   
  12. import javax.servlet.http.HttpServlet;   
  13. import javax.servlet.http.HttpServletRequest;   
  14. import javax.servlet.http.HttpServletResponse;   
  15.   
  16. import net.sf.jasperreports.engine.JRExporterParameter;   
  17. import net.sf.jasperreports.engine.JasperFillManager;   
  18. import net.sf.jasperreports.engine.JasperPrint;   
  19. import net.sf.jasperreports.engine.export.JRHtmlExporter;   
  20. import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;   
  21. import net.sf.jasperreports.j2ee.servlets.ImageServlet;   
  22.   
  23. public class HtmlReportServlet extends HttpServlet {   
  24.     public static final String REPORT_DIRECTORY = "/reports";   
  25.   
  26.     protected void doGet(HttpServletRequest request,   
  27.     HttpServletResponse response) throws ServletException, IOException {   
  28.         Connection connection;   
  29.         ServletContext context = this.getServletConfig().getServletContext();   
  30.         String reportName = "ChartReportDemo";   
  31.         PrintWriter printWriter = response.getWriter();   
  32.         InputStream reportStream = getServletConfig().getServletContext()   
  33.                 .getResourceAsStream(   
  34.                         "/" + REPORT_DIRECTORY + "/" + reportName + ".jasper");   
  35.         JasperPrint jasperPrint;   
  36.         try {   
  37.             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");   
  38.             connection = DriverManager   
  39.                     .getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind","sa","sa");   
  40.                
  41.                
  42.             jasperPrint = JasperFillManager.fillReport(reportStream,   
  43.                     new HashMap(), connection);   
  44.             JRHtmlExporter htmlExporter = new JRHtmlExporter();   
  45.             response.setContentType("text/html");   
  46.             request.getSession().setAttribute(   
  47.                     ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,   
  48.                     jasperPrint);   
  49.                
  50.             htmlExporter.setParameter(JRExporterParameter.JASPER_PRINT,   
  51.                     jasperPrint);   
  52.             htmlExporter.setParameter(JRExporterParameter.OUTPUT_WRITER,   
  53.                     printWriter);   
  54.             htmlExporter.setParameter(JRHtmlExporterParameter.CHARACTER_ENCODING, "gb2312");   
  55.             htmlExporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,   
  56.                     "image?image=");   
  57.             htmlExporter.exportReport();   
  58.             connection.close();   
  59.             System.out.println("done!");   
  60.         } catch (Throwable t) {   
  61.             // display stack trace in the browser   
  62.             t.printStackTrace(printWriter);   
  63.         }   
  64.     }   
  65. }  
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 browsert.printStackTrace(printWriter);}}}


web.xml修改为:
Java代码 复制代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <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">   
  3.     <display-name>   
  4.     ReportWebApp</display-name>   
  5.     <welcome-file-list>   
  6.         <welcome-file>index.jsp</welcome-file>   
  7.     </welcome-file-list>   
  8.     <servlet>   
  9.         <servlet-name>jasperSpring</servlet-name>   
  10.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  11.         <load-on-startup>1</load-on-startup>   
  12.     </servlet>   
  13.     <servlet>   
  14.         <servlet-name>ImageServlet</servlet-name>   
  15.         <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>   
  16.     </servlet>   
  17.     <servlet>   
  18.         <servlet-name>HtmlReportServlet</servlet-name>   
  19.         <servlet-class>   
  20.             net.aachina.jasperreport.HtmlReportServlet   
  21.         </servlet-class>   
  22.     </servlet>   
  23.     <servlet-mapping>   
  24.         <servlet-name>jasperSpring</servlet-name>   
  25.         <url-pattern>/jasperSpring/*</url-pattern>   
  26.     </servlet-mapping>   
  27.     <servlet-mapping>   
  28.         <servlet-name>HtmlReportServlet</servlet-name>   
  29.         <url-pattern>/htmlReport</url-pattern>   
  30.     </servlet-mapping>   
  31.     <servlet-mapping>   
  32.         <servlet-name>ImageServlet</servlet-name>   
  33.         <url-pattern>/image</url-pattern>   
  34.     </servlet-mapping>   
  35. </web-app>  
<?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

输出效果:图片上传不知道怎么编辑^_^