JavaWeb_ServLet+jasperReport 5.6 实例
1. 介绍
源码文件:本文源代码链接,有需要的可以前往下载
本文采用ireport5.6 进行开发,Web采用Myelicips+ Servlet进行开发。ireport使用以及Servlet的环境可以参考我的另一篇文章,有问题也可以留言交流。
2、新建Webserver project
打开Myelicips 新建Webserver project。
导入相关包,这些包可以在ireport中找到。
3、数据库连接类
项目中新建一个类,用来建立数据库连接,本文采用oracle连接,代码如下:
package com.cn.org.ireport.test;
import java.sql.Connection;
import java.sql.DriverManager;
public class JDBCConnection {
public static Connection getConnection(){
try{
//oracle链接串,读者可以根据需要修改为响应的链接
String url = "jdbc:oracle:thin:@localhost:1521:SMCDB";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"reporting","reporting");
return con;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
4、report中的参数传递类
report中需要定义一些参数需要从程序传递进去,单独建立一个类进行相关参数的传递,代码如下:
package com.cn.org.ireport.test;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;
public class ReportDataSource implements JRDataSource{
private Iterator iter;
//parameters for jasper
//参数直接传递,通过key和value进行传递,注意类型要匹配。
public static Map paremeters(){
Map parameters=new HashMap();
parameters.put("REPORT_NO", 1717);
parameters.put("LANGUAGE_NO", 0);
return parameters;
}
Map map = new HashMap();
public ReportDataSource(){
}
//数据集进行参数的传递。
public ReportDataSource(String sex){
List datas = DateSourceBaseFactory.createBeanCollection(sex);
iter=datas.iterator();
}
public Object getFieldValue(JRField arg0) throws JRException {
return map.get(arg0.getName());
}
public boolean next() throws JRException {
if(iter.hasNext()){
map=(Map)iter.next();
return true;
}
return false;
}
}
5、采用javabean进行数据的传递
- 建立需要传递的数据类,定义数据类:读者可以根据自己的需要修改需要传递的数据定义。
package com.cn.org.ireport.test;
import java.io.Serializable;
public class DataSoruceBean implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String brithday;
private String province;
private String Email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBrithday() {
return brithday;
}
public void setBrithday(String brithday) {
this.brithday = brithday;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getEmail() {
return this.Email;
}
public void setEmail(String email) {
this.Email = email;
}
}
- 数据生成javabean传递给report
package com.cn.org.ireport.test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DateSourceBaseFactory {
//javaBean for jasper
public static List createBeanCollection(String sex) {
int num=0;
\\筛选数据
if(sex.equals("?")){
num=1;
}else{
num=2;
}
ResultSet rs=null;
Statement st=null;
Connection con=null;
List datas=new ArrayList();
try {
con=JDBCConnection.getConnection();
st=con.createStatement();
\\数据库查询运行
rs=st.executeQuery("select name,brithday,province,Email from user where sex="+num);
\\查询结果加入到List中
while(rs.next()){
Map attris=new HashMap();
attris.put("name", rs.getString("name"));
attris.put("brithday", rs.getString("brithday"));
attris.put("province", rs.getString("province"));
attris.put("Email", rs.getString("Email"));
datas.add(attris);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(rs!=null) rs.close();
if(st!=null) st.close();
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return datas;
}
}
6 、report生成主程序
为了在web网页中展示report建立servet类,重写DoPost方法,代码如下:
package com.cn.org.ireport.test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;
public class TestReportHere extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//From JDBCConnectFactory
Connection conn = JDBCConnection.getConnection();
//from DataSourceBaseFactory
Map parameters = ReportDataSource.paremeters();
try {
\\传递jasper文件的位置
File jasperFile = new File("D:/iReport/SMSGroup_Ireport/Main_Report.jasper");//jasper File location
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(jasperFile);
JasperPrint jasperPrint=JasperFillManager.fillReport(jasperReport,parameters,conn);
//build html File stream
JRHtmlExporter html = new JRHtmlExporter();
html.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
html.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER, response.getWriter());
html.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
html.setParameter(JRExporterParameter.CHARACTER_ENCODING, "utf-8");
html.exportReport();
} catch (JRException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
outPut.flush();
outPut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
7、配置servlet
配置方法见servlet配置,
8、启动servlet
加载项目,运行tomcat,打开浏览器访问,即可以看到report展示到浏览器中。