基于JavaReport的Web报表开发
- 格式:doc
- 大小:320.50 KB
- 文档页数:25
Java开源报表Jasper⼊门(2)--使⽤JasperSoftStudio创建⼀个简单报表在接下来的教程中,我们将实现⼀个简单的JasperReports⽰例,展现其基本的开发、使⽤流程。
⽂章很长,不过是以图⽚居多,⽂字并不多。
Jasper Studio是基于Eclipse的报表设计⼯具(不熟悉Eclipse的看官先去熟悉⼀下基本知识吧),默认⼯作区设置为当前⽤户主⽬录下的JaspersoftWorkspace⽂件夹,并且不可更改。
⾸先,我们创建⼀个报表⼯程,本例中命名为DemoProject,然后创建⼀张新的报表(File --> New–->Jasper Report),就会出现类似下图所⽰的窗⼝让我们选择⼀个模板。
此例我们选Coffee模板,然后点Next。
在接下来的页⾯⾥,我们给报表模板起个名字(Demo1.jrxml)并放在DemoProject的根⽬录下,然后点Next,于是进⼊了数据源选择界⾯:数据源是填充报表的关键,我们必须制定⼀个数据适配器(Data Adapter),此时我们有三种选择:1. 选择“OneEmpty Record - Empty rows”,这样我们就可以专注于报表的设计,⽽暂时不指定数据源,创建完报表之后,我们随时可以制定别的数据源。
2. 选择“SampleDB - Database JBDC Connection”,这是Jaspersoft Studio安装时提供的⼀个⽰例数据库。
3. 点击“New”按钮创建⼀个新的数据源。
这正是本例要采⽤的⽅式,我们将创建⼀个连接到本机MySql数据库的world的数据源。
⾸先点击“New”,在弹出的向导页中选择“Database JDBC Connection”,然后点“Next”弹出下图所⽰的页⾯:配置好基本的数据库连接信息,点击“Test”测试通过之后,⼀个数据源就配置好了,我们点击“Finish”结束配置。
好用的11款开源报表工具推荐开源报表工具,即开放源代码的报表软件,开源就是要用户利用源代码在其基础上修改和学习的。
它的好处多多:成本低,满足基本报表需求,有专门的讨论区可以解决用户问题……同时,缺点也很明显:无法满足复杂的报表需求,bug 不能及时解决,更新速度慢。
无论是选择开源报表工具还是购买商业报表,都要按需选择。
本文就来推荐一些好用的开源报表工具和免费报表工具。
1.JasperReportsJasperReports是一个基于Java的开源报表工具,是当今Java开发人员最常用的报表工具。
其报表分析功能可以嵌入web和移动应用程序,支持PDF、HTML、XLS、CSV和XML文件输出格式。
其开源软件还可以管理其付费的商业智能报表分析平台。
2.BIRT(百灵报表)BIRT是为web应用程序开发的基于eclipse的开源报表系统。
它自带报表设计器,可视化操作;报表引擎基于OSGI框架,易于扩展和集成,并且可以轻松地与主流web应用服务器(如Tomcat、Websphere、Weblogic、JBoss)集成。
提供开放的API和辅助开发功能;支持多维数据表。
3.Pentaho ReportingPentaho Reporting软件平台集成了许多开源报表工具,允许用户创建PDF、Excel、HTML等多种形式的数据报表,支持多数据源。
它注重数据处理层,有各种数据显示方法,甚至RSS输出。
它的架构非常类似于spagoBI,但pentaho喜欢将自己的东西称为一个解决方案。
4.ExcelReportExcelReport是一款基于NPOI开发的报表引擎组件。
NPOI是一个开源的C#,让你不需要在服务器上安装微软的Office,就可以读写Excel、WORD等微软OLE2组件文档的项目。
ExcelReport结合NPOI进行数据处理的优点,进一步简化了生成Excel报表的过程。
5.SupersetSuperset 是Airbnb的开源数据可视化工具,主要面向数据分析师,用于数据可视化。
第1章安装与使用iReport0.4.1§1.1 不需安装,直接拷贝就可以使用运行iReport.bat 启动iReport。
§1.2 新建报表新建报表pdfUnitList.xml§1.3 配置数据库1、在datasource中的菜单。
§1.4 报表字体设置选择view菜单的Report font选项,点击new后,如下图进行调整:添加完new 字体后,选择报表元素(箭头1)按右键在窗口中选择FONT->Report font 选中新添加的字体。
在Report SQL query 中写入报表查询条件,注意参数一定要写入默认值。
按OK键结束。
§1.7 编译并测试报表编译成功后执行execute report(using active conn)项如果出现以下结果,表示报表正常。
第2章iReport报表在web项目的应用§2.1 iReport制作的报表在web项目的安装1、将iReport制作的报表编译后的jpdfUnitList.xml与jpdfUnitList.asper文件,拷贝到WEB-INF新建的文件夹/report/pdf/unit 下。
2、拷贝iReport的lib下的所有文件拷贝的WEB-INF/lib 下。
§2.2 新增报表模块1、建立包路径(com.qhtf.apps.basicinfo.rp)2、在路径下建如下文件(1) IJReport.javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.Map;public interface IJReport {public Map getParamMap();public String getSourceFile();public String getDestFile();public Connection getConnection();}(2)AbstractJReportPrinter.javapackage com.qhtf.apps.basicinfo.rp;public abstract class AbstractJReportPrinter {public abstract void print()throws Exception;}(3) JReportPrinterFactory .javapackage com.qhtf.apps.basicinfo.rp;public class JReportPrinterFactory {private AbstractJReportPrinter abstractJReportPrinter;private static JReportPrinterFactory jReportPrinterFactory;private JReportPrinterFactory(AbstractJReportPrinter abstractJReportPrinter) {this.abstractJReportPrinter = abstractJReportPrinter;}public static JReportPrinterFactory getInstance(AbstractJReportPrinter abstractJReportPrinter) { return jReportPrinterFactory = new JReportPrinterFactory(abstractJReportPrinter);}public void print()throws Exception{abstractJReportPrinter.print();}}(4) JreportUtil.javapackage com.qhtf.apps.basicinfo.rp;public class JReportUtil {public static void printToPdf(IJReport report)throws Exception{JReportPdfPrinter jReportPdfPrinter= new JReportPdfPrinter(report);JReportPrinterFactory.getInstance(jReportPdfPrinter).print();}public static void printToHtml(IJReport report)throws Exception{JReportHtmlPrinter jReportHtmlPrinter= new JReportHtmlPrinter(report);JReportPrinterFactory.getInstance(jReportHtmlPrinter).print();}public static void printToExcel(IJReport report)throws Exception{JReportExcelPrinter jReportExcelPrinter= new JReportExcelPrinter(report);JReportPrinterFactory.getInstance(jReportExcelPrinter).print();}}§2.3 PDF打印§2.3.1 修改jsp文件打开/lemis/basicinfo/enterpriseList.jsp,在文件最后加入<%--==Begin 打印单位基本信息列表,action为打印类==--%><form name="printPdfForm" action="printPdfAction.do" method="post"target="_blank"><%--==使用IReport制作报表时设置的条件参数==--%><input type="hidden" name="unitID" value=""><input type="hidden" name="unitName" value=""><%--==sourceFile 为报表原文件前缀名,此名必须与IReport编译后的文件同名==--%><input type="hidden" name=sourceFile value="pdfUnitList"><%--==destFile 为道出的报表文件前缀名,此名不须与IReport编译后的文件同名但建议为同名==--%> <input type="hidden" name="destFile" value="pdfUnitInfoList"><%--==报表打印action的方法名==--%><input type="hidden" name="method" value="printPdf"></form><script language="javascript">function printPdf() {document.all. printPdfForm.unitID.value =document.all.queryEmployerForm.aab003.value;document.all. printPdfForm.unitName.value =document.all.queryEmployerForm.aab004.value;document. printPdfForm.submit();}</script><%--==End 打印单位基本信息列表==--%>§2.3.2 修改struts配置文件打开/WEB-INF/struts-basicinfo.xml,在文件中加入<!--==Begin==--><!--==path为报表输出路径==--><!--==contextRelative为相对上下文标识,不添加此属性默认值为'false'==--><action scope="request"parameter="method"path="/printPdfAction"type="com.qhtf.apps.basicinfo.rp.PrintPdfAction"><forward name="unitInfoList"</action><!--==End==-->§2.3.3 PDF打印实现(5) JreportPdfImpl.javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.Map;public class JReportPdfImpl implements IJReport {private Map paramMap;private String sourceFile;private String destFile;private Connection connection;public JReportPdfImpl(Map paramMap,String sourceFile,String destFile,Connection connection) { this.paramMap=paramMap;this.sourceFile=sourceFile;this.destFile=destFile;this.connection=connection;}public Map getParamMap() {return paramMap;}public String getSourceFile() {return sourceFile;}public String getDestFile() {return destFile;}public Connection getConnection() {return connection;}}(6) JreportPdfPrinter.javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.Map;import mons.op.HibernateSession;import net.sf.jasperreports.engine.JasperExportManager;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;public class JReportPdfPrinter extends AbstractJReportPrinter {private IJReport report;public JReportPdfPrinter(IJReport report){this.report=report;}public void print()throws Exception {Connection conn=null;try {conn=report.getConnection();//设定传给jasper文件的参数Map parameters = report.getParamMap();//填充报表内容JasperPrint jasperPrint = JasperFillManager.fillReport(report.getSourceFile(), parameters, conn);//生成PDF文件JasperExportManager.exportReportToPdfFile(jasperPrint, report.getDestFile());} catch (Exception ex) {ex.printStackTrace();throw new Exception("打印报表时出错!");} finally {//关闭连接if (null != conn) {HibernateSession.closeSession();}}}}§2.3.4 新增PDF打印action(7) PrintAction.javapackage com.qhtf.apps.basicinfo.rp;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import DispatchAction;import mons.log.LogHelper;public abstract class PrintAction extends BizDispatchAction {// 定义logprivate LogHelper log = new LogHelper(this.getClass());public abstract ActionForward print(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response)throws Exception;}(8) PrintPdfAction.javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import com.lbs.apps.recommendation.consigninvite.rp.PrintAction;import mons.op.HibernateSession;public class PrintPdfAction extends PrintAction {public ActionForward print(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response)throws Exception {Map parameters=new HashMap();String unitID = (String) request.getParameter("unitID");String unitName = (String) request.getParameter("unitName");parameters.put("p_unitID", unitID);parameters.put("p_unitName", unitName);String sourceFilePrefix=request.getParameter("sourceFile");String sourceFile=getSourceFile(sourceFilePrefix);String destFilePrefix=request.getParameter("destFile");String destFile=getDestFile(destFilePrefix);Connection conn=HibernateSession.currentSession().connection();IJReport jReport=new JReportPdfImpl(parameters,sourceFile,destFile,conn);JReportUtil.printToPdf(jReport);return mapping.findForward("unitInfoList");}private String getSourceFile(String sourceFilePrefix){//上下文路径String contextPath = this.getServlet().getServletContext().getRealPath("/");String sourceFile=contextPath+"/WEB-INF/report/pdf/unit/"+sourceFilePrefix+".jasper";return sourceFile;}private String getDestFile(String destFilePrefix){//上下文路径String contextPath = this.getServlet().getServletContext().getRealPath("/");String destFile=contextPath+"/reports/unit/pdf/"+destFilePrefix+".pdf";return destFile;}}§2.4 导出EXCEL报表§2.4.1 修改jsp文件打开/lemis/basicinfo/enterpriseList.jsp,在文件最后加入<%--==Begin 导出单位基本信息列表,action为导出EXCEL类==--%><form name="printExcelForm" action="printExcelAction.do" method="post"target="_blank"><%--==使用IReport制作报表时设置的条件参数==--%><input type="hidden" name="unitID" value=""><input type="hidden" name="unitName" value=""><%--==sourceFile 为报表原文件前缀名,此名必须与IReport编译后的文件同名==--%><input type="hidden" name=sourceFile value="pdfUnitList"><%--==destFile 为道出的报表文件前缀名,此名不须与IReport编译后的文件同名但建议为同名==--%> <input type="hidden" name="destFile" value="pdfUnitInfoList"><%--==报表打印action的方法名==--%><input type="hidden" name="method" value="printExcel"></form><script language="javascript">function printExcel() {document.all. printExcelForm.unitID.value =document.all.queryEmployerForm.aab003.value;document.all. printExcelForm.unitName.value =document.all.queryEmployerForm.aab004.value;document. printExcelForm.submit();}</script><%--==End 导出单位基本信息列表==--%>§2.4.2 修改struts配置文件打开/WEB-INF/struts-basicinfo.xml,在文件中加入<!--==Begin==--><!--==path为报表输出路径==--><!--==contextRelative为相对上下文标识,不添加此属性默认值为'false'==--><action scope="request"parameter="method"path="/printExcelAction"type="com.qhtf.apps.basicinfo.rp.PrintExcelAction"><forward name="unitInfoList"path="/reports/unit/pdf/pdfUnitInfoList.xls"contextRelative="true"/> </action><!--==End==-->§2.4.3 导出EXCEL报表实现(9)JreportExcelImpl.Javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.Map;public class JReportExcelImpl implements IJReport {private Map paramMap;private String sourceFile;private String destFile;private Connection connection;public JReportExcelImpl(Map paramMap,String sourceFile,String destFile,Connection connection) { this.paramMap=paramMap;this.sourceFile=sourceFile;this.destFile=destFile;this.connection=connection;}public Map getParamMap() {return paramMap;}public String getSourceFile() {// TODO Auto-generated method stubreturn sourceFile;}public String getDestFile() {// TODO Auto-generated method stubreturn destFile;}public Connection getConnection() {// TODO Auto-generated method stubreturn connection;}}(10) JreportExcelPrinter.javapackage com.qhtf.apps.basicinfo.rp;import java.io.File;import java.sql.Connection;import java.util.Map;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.export.JRXlsExporter;import net.sf.jasperreports.engine.export.JRXlsExporterParameter;import mons.op.HibernateSession;public class JReportExcelPrinter extends AbstractJReportPrinter {private IJReport report;public JReportExcelPrinter(IJReport report){this.report=report;}public void print()throws Exception {Connection conn=null;try {conn=report.getConnection();//设定传给jasper文件的参数Map parameters = report.getParamMap();//填充报表内容JasperPrint jasperPrint = JasperFillManager.fillReport(report.getSourceFile(), parameters, conn);//生成Excel文件File destFile = new File(report.getDestFile());JRXlsExporter exporter = new JRXlsExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString());exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);exporter.exportReport();} catch (Exception ex) {ex.printStackTrace();throw new Exception("打印报表时出错!");} finally {//关闭连接if (null != conn) {HibernateSession.closeSession();}}}}§2.4.4 导出EXCEL报表action(11) PrintExcelAction.javapackage com.qhtf.apps.basicinfo.rp;import java.sql.Connection;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import com.lbs.apps.recommendation.consigninvite.rp.PrintAction;import mons.op.HibernateSession;public class PrintExcelAction extends PrintAction {public ActionForward print(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response)throws Exception {response.setContentType("application/vnd.ms-excel;charset=GBK");Map parameters=new HashMap();String unitID = (String) request.getParameter("unitID");String unitName = (String) request.getParameter("unitName");parameters.put("p_unitID", unitID);parameters.put("p_unitName", unitName);String sourceFilePrefix=request.getParameter("sourceFile");String sourceFile=getSourceFile(sourceFilePrefix);String destFilePrefix=request.getParameter("destFile");String destFile=getDestFile(destFilePrefix);Connection conn=HibernateSession.currentSession().connection();IJReport jReport=new JReportExcelImpl(parameters,sourceFile,destFile,conn);JReportUtil.printToExcel(jReport);return mapping.findForward("unitInfoList");}private String getSourceFile(String sourceFilePrefix){//上下文路径String contextPath = this.getServlet().getServletContext().getRealPath("/");String sourceFile=contextPath+"/WEB-INF/report/pdf/unit/"+sourceFilePrefix+".jasper";return sourceFile;}private String getDestFile(String destFilePrefix){//上下文路径String contextPath = this.getServlet().getServletContext().getRealPath("/");String destFile=contextPath+"/reports/unit/pdf/"+destFilePrefix+".xls";return destFile;}}§2.5 Rose图。
一.实验目的实现学生信息管理系统,学生登录身份验证,信息的录入和信息的查询。
并在实验的过程中熟练掌握网页设计的各种工具,如Dreamwawer,tomcat等,提高网页设计的能力。
二.实验过程1.实现基本页面的设计,使用的工具:Dreamwawer。
2.实现服务器端程序设计,对页面数据进行处理。
3.与数据库进行连接,实现对学生数据的操作,如查询,存储,修改等。
4.进一步完善系统,如页面的美化等等。
本系统有三个模块组成,学生登录模块,学生信息数据库模块,出错处理模块,学生登录以后输入相应的学号,密码,登陆学生信息界面,队学生的成绩等基本信息进行查询,若学号或密码出错,或者不符合,弹出相应的出错界面。
本系统采用Jsp+JavaBean+SQL2000设计方式,其中JavaBean担当数据库连接以及逻辑控制,这样在Jsp就省去了繁琐的数据库连接,以及复杂的逻辑控制,使Jsp成为表示逻辑。
三.运用软件Windows环境下的Tomcat7.0,SQL2000。
四.过程截图:1.学生登录界面的设计:2.与数据库系统的连接:3.实现对学生数据的操作:4.对学生数据的保护的完善。
1,验证学生身份:Student:import java.sql.*;public class student {private String name;private String password;private String id;private String jiguan;private String sex;private String dep;public void setDep(String s){dep=s;}public String getDep(){return dep;}public void setSex(String s){sex=s;}public String getSex(){return sex;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getPassword() {return password;}public void setPassword(String password) { this.password = password;}public String getJiguan() {return jiguan;}public void setJiguan(String jiguan) {this.jiguan = jiguan;}public boolean hasLogin(){ //检查该学生是否已经注册boolean f=true;String sql="select id from student where id ='"+id+"'";sqlBean db =new sqlBean();try{ResultSet rs=db.executeQuery(sql);if(rs.next()){ f=false;}else{ f=true;}}catch(Exception e){ e.getMessage();}return f;}public ResultSet getStudent(){String sql="select * from student ";sqlBean db= new sqlBean();ResultSet rs = db.executeQuery(sql);return rs;}public void updateStudent(){String sql="update student "+" set name='"+name+"',sex='"+sex+"',department='"+dep+"', "+"password='"+password+"',jiguan='"+jiguan+"' "+" where id='"+id+"' ";sqlBean db= new sqlBean();db.executeInsert(sql);}public void deleteStudent(){String sql="delete from student where id ='"+id+"' ";sqlBean db= new sqlBean();db.executeDelete(sql);}public void addStudent() {String sql="insert into student(name,password,id,sex,department,jiguan) "+"VALUES('"+name+"','"+password+"','"+id+"','"+sex+"','" +dep+"','"+jiguan+"')";sqlBean db =new sqlBean();db.executeInsert(sql);}}2.登陆界面:public class login {private String id;private String password;private String kind;private int flag=0;public int getFlag(){if(kind.equals("student")) flag=1;if(kind.equals("teacher")) flag=2;if(kind.equals("admin")) flag=3;return flag;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getKind() {return kind;}public void setKind(String kind) {this.kind = kind;}}3.出错处理:import java.sql.*;import java.io.*;public class marking {String tea_id;String coursename;String score;String stu_id;public void setStu_id(String id){this.stu_id=id;}public String getStu_id(){return stu_id;}public void setScore(String sc){this.score=sc;}public String getScore(){return score;}public void setTea_id(String id){this.tea_id=id;}public String getTea_id(){return tea_id;}public void setCoursename(String c){this.coursename=c;}public String getCoursename(){return coursename;}public ResultSet getStudents(){String sql=" select stu_id "+"from enrol "+"where accept=1 "+"and class_id IN( "+"select classes.id "+"from classes ,course "+"where course.id=classes.cour_id "+"and ='"+coursename+"' "+"and classes.tea_id='"+tea_id+"') ";sqlBean db = new sqlBean();ResultSet rs=db.executeQuery(sql);return rs;}public void addmark(){int mark=0;int mark1=0;String sql="select mark from student where id='"+stu_id+"' ";sqlBean db = new sqlBean();try{ResultSet rs = db.executeQuery(sql);if(rs.next()) { mark = rs.getInt("mark");}}catch(SQLException ex){System.err.println("学生成绩查询有错误:"+ex.getMessage() );System.out.print("学生成绩查询有错误:"+ex.getMessage());//输出到客户端}sql="select mark from course where name='"+coursename+"' ";try{ResultSet rs=db.executeQuery(sql);if(rs.next()){ mark1=rs.getInt("mark"); }}catch(SQLException ex){System.err.println("成绩查询有错误:"+ex.getMessage() );System.out.print("成绩查询有错误:"+ex.getMessage());//输出到客户端}mark = mark+mark1;sql="update student set mark='"+mark+"' where id='"+stu_id+"' ";db.executeInsert(sql);}public void updatemark(){int temp=0;try{temp = Integer.parseInt(score) ;}catch(NumberFormatException e){System.err.println("成绩输入有错误:"+e.getMessage() );System.out.print("成绩输入有错误:"+e.getMessage());//输出到客户端}if(temp>60){addmark();}String sql="update enrol set score='"+temp+"' "+ "where stu_id='"+stu_id+"' "+"and class_id IN( "+"select classes.id "+"from classes,teacher,course "+"where classes.tea_id='"+tea_id+"' "+"and course.id=classes.cour_id "+"and ='"+coursename+"' ) ";sqlBean db = new sqlBean();db.executeInsert(sql);}4,连接到sql数据库:import java.sql.*;public class determin{String sql="";String stu_id="";String tea_id="";String coursename="";public String accept(){sql="update enrol set accept=1 "+"where stu_id='"+stu_id+"' "+"and class_id IN ( "+"select classes.id "+"from classes,course "+"where ='"+coursename+"' "+ "and classes.tea_id='"+tea_id+"' and course.id=classes.cour_id) ";sqlBean sqlbean= new sqlBean() ;sqlbean.executeInsert(sql);return stu_id;}public void setTea_id(String id){this.tea_id=id; }public String getTea_id(){return tea_id;}public void setStu_id(String ss) {this.stu_id=ss;}public String getStu_ids(){return stu_id;}public void setCoursename(String ss){this.coursename = ss;}public String getCoursename(){return coursename;}public ResultSet getStudent(String id){sql="select * from student where id='"+id+"'";sqlBean sqlbean = new sqlBean();ResultSet rs = sqlbean.executeQuery(sql);return rs; }public ResultSet getStu_id(){sql="select enrol.stu_id "+" from enrol ,classes,course "+"where classes.cour_id=course.id "+"and enrol.class_id=classes.id "+"and( enrol.accept='0' or enrol.accept=null )"+" and ='"+coursename+"' "; sqlBean sqlbean = new sqlBean();ResultSet rs = sqlbean.executeQuery(sql);return rs;}}六.心得体会:通过这次实验,让我深刻体会到java所具有的强大的功能,以及java开发web的技术servlet和jsp技术有着和其他在这方面的技术的先进之处。
怎么用JFreeReport做报表实践怎么用JFreeReport做报表实践准备工作:下载jfreeReport0.8.7 地址:/jfreereport/index.phpJava认证:用JFreeReport做报表实践,使用JFreeReport生成报表通常需要以下三个基本步骤:A.生成可通过TableModel接口访问的数据,如本例中的createData方法完成的功能。
B.生成一个JFreeReport实例,他定义了我们如何格式化显示数据,如本例中的'createReportDefinition方法完成的功能。
C.将数据和JFreeReport实例连接起来,并且将该JFreeReport 实例传给PreviewDialog的一个实例显示给用户。
下面开始:1.新建一个WEB工程,在WebRoot\lib中import 如下jar文件:jcommon-1.0.1.jar jfreereport-0.8.7.jar jfreereport-demo-0.8.7.jar jfreereport-servlet-demo-0.8.7.jar(可在jfreereport包中解压得到)2.写一个Demo.java 加入到工程的src包中。
内容如下:import java.awt.Color;import java.awt.geom.Point2D;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableModel;import org.jfree.report.ElementAlignment;import org.jfree.report.JFreeReport;import org.jfree.report.JFreeReportBoot;import org.jfree.report.ReportProcessingException;import org.jfree.report.demo.helper.DefaultCloseHandler;import org.jfree.report.demo.helper.DemoHandler;import org.jfree.report.demo.helper.PreviewHandler;importorg.jfree.report.elementfactory.TextFieldElementFactory;import org.jfree.report.modules.gui.base.PreviewDialog;import org.jfree.ui.FloatDimension;import org.jfree.util.Log;public class Demo implements DemoHandler{private class HelloWorldPreviewHandler implements PreviewHandler{public HelloWorldPreviewHandler(){}public void attemptPreview(){executeReport();}}public Demo (){}protected void executeReport (){final TableModel data = createData();final JFreeReport report = createReportDefinition();report.setData(data);try{final PreviewDialog preview = new PreviewDialog(report);preview.addWindowListener(new DefaultCloseHandler());preview.pack();preview.setVisible(true);}catch (ReportProcessingException e){Log.error(“Failed to generate report ”, e);}}private TableModel createData (){final Object[] columnNames = new String[]{“Column1”,“Column2”};final DefaultT ableModel result = new DefaultTableModel(columnNames, 101);for (int i=1;i《101;i++){result.setValueAt(“用繁體字寫幾個看看\n”, i, 0);result.setValueAt(“简体中文输出第”+i+“次”, i, 1);}return result;}private JFreeReport createReportDefinition (){final JFreeReport report = new JFreeReport();report.setName(getDescription());TextFieldElementFactory factory = new TextFieldElementFactory();factory.setName(“T1”);factory.setAbsolutePosition(new Point2D.Float(0, 0));factory.setMinimumSize(new FloatDimension(150, 12));factory.setColor(Color.black);factory.setHorizontalAlignment(ElementAlignment.RIGHT); factory.setVerticalAlignment(ElementAlignment.MIDDLE); factory.setNullString(“-”);factory.setFieldname(“Column1”);report.getItemBand()。
基于Java的报表分析系统设计基于Java的报表分析系统设计是指使用Java编程语言来开发一个能够处理和分析报表数据的软件系统。
下面我将按照段落来解答你的问题。
1. 系统架构设计:在设计基于Java的报表分析系统时,需要考虑系统的架构。
常见的架构模式包括MVC(Model-View-Controller)和三层架构。
我们可以选择其中一种或根据具体需求进行定制化的架构设计。
2. 数据存储与管理:报表分析系统需要能够存储和管理大量的报表数据。
我们可以使用关系型数据库(如MySQL)或者NoSQL数据库(如MongoDB)来存储数据。
同时,我们需要设计合理的数据库表结构,以支持报表数据的快速查询和分析。
3. 数据提取和清洗:在报表分析系统中,数据的提取和清洗是非常重要的环节。
我们可以使用ETL (Extract-Transform-Load)工具来从不同数据源中提取数据,并进行必要的数据清洗和转换操作,以确保数据的质量和一致性。
4. 报表生成和展示:报表生成和展示是报表分析系统的核心功能之一。
我们可以使用Java开发库(如JasperReports、POI)来生成各种类型的报表,包括表格、图表、图形等。
同时,我们需要设计用户友好的报表展示界面,以便用户能够直观地查看和分析报表数据。
5. 数据分析和计算:报表分析系统需要能够对报表数据进行各种分析和计算操作。
我们可以使用Java编程语言来实现不同的数据分析算法和计算模型,以支持用户对报表数据的深入分析和挖掘。
同时,我们需要设计相应的数据处理和计算逻辑,以确保分析结果的准确性和可靠性。
6. 用户权限和安全性:报表分析系统通常需要实现用户权限管理和数据安全保护功能。
我们可以使用Java的安全框架(如Spring Security)来实现用户认证和授权,以确保只有经过授权的用户才能访问和操作报表数据。
同时,我们需要设计合理的数据加密和访问控制策略,以保护报表数据的安全性。
INFORMATION TECHNOLOGY 信息化建设摘要:报表是信息浏览、分析、打印的有力工具,是SCADA 系统的一个重要组成部分。
基于Web开发的报表具有高性能、开放性和扩展性等优点,在各行各业得到了广泛的应用。
论文研究了Web 报表的系统结构、生成机制及设计与实现,介绍了JAVA开源报表引擎JasperReport 与IReport的相关技术。
基于Web 报表的设计实现了动态数据报表与图形报表的生成、查询与在线打印,在SCADA 系统中得到了良好的应用。
关键词:JasperReport;iReport;SCADA系统;开源;Web报表人类社会已进入信息化时代,数字信息资源在国民经济社会发展中扮演着举足轻重的角色,各行业希望可以快捷地将数据库中所关心的数据以其它相关的信息直观展现,以便于决策分析,而报表的开发就可以实现这一需求。
由于众多分布式B/S架构系统的应用,用户需要远程对大量的分布式数据进行综合统计分析,所以基于Web架构方式设计开发的报表系统是最为简洁和高效。
考虑到SCADA系统报表业务量巨大,报表的设计如果按照传统的设计方式,不仅开发成本和运行成本高,而且开发周期长。
而iReport的出现,将报表从设计到发布的过程变得更为简单[1]。
本系统所采用的是基于浏览器方式的Web报表系统,它可以满足SCADA系统操作人员方便的查看各个场站的信息。
一、JasperReport与 iReport技术对比分析JasperReports是一个功能强大的报表生成开发工具,它可以将丰富的内容输出到展示端或生成PDF、HTML、 XLS、CSV和XML文件,并提供在线报表打印。
JasperReports基于Java编写,并可在各种Java应用中用来生成内容丰富的动态数据。
它是以一种灵活而简便的方式为用户提供创建导向式的Web页面[2-5]。
JasperReports通过XML文件,来描述定义报表设计,以JDBC连接的方式来获取关系数据库数据内容。
Java 报表开发Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具。
支持Java的报表工具:我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲一大类是采用独立报表服务器的,如Bo/Crystal Report,Brio,Cognos,和勤等;另一大类是在前端有控件的,如数巨报表等。
纯Java报表工具纯Java的报表工具,就是用java语言编写的报表工具,包括报表引擎、内核、设计器界面、操作等。
主要的有:Style Report,Jasper Report,birt报表,FineReport,ireport,杰表等JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE 报表工具一样来制作报表。
JasperReports 支持PDF、HTML、XLS、CSV和XML文件输出格式。
JasperReports是当前Java开发者最常用的报表工具。
iReport+jasperReports制作WEB报表2007-06-11 17:11:36| 分类:J2EE技术| 标签:java 技术|字号大中小订阅[声明]内容部分摘自网上,感谢网友共享第一部分:环境配置一、JDK、WEB服务器及数据库的安装与配置(此处略,本文测试环境JDK1.5、Resin2.1.7、SQLServer2K)二、IReport的安装下载地址目前最新版本1.3.3包中已经包含iText-1.3.1.jar和jasperreports-1.3.3.jar下载报表中文支持包iTextAsian.jar下载地址(注:需注册)将下载的IReport解压至任意目录,如D:\iReport-1.3.3将iTextAsian.jar添加至lib 目录下执行iReport.bat或者iReport.exe均可启动iReport第二部分:IReport使用简介JasperReports可以理解为一个编译器或者解析器。
JA V A报表分析1报表工具列表2Web报表工具的采购成本一般地,Web报表在一个软件开发项目中占的比例大概是 10% 左右,这两年有上升的趋势,据我现在项目中报表的开发量大的能占到20%。
下面的计算还是以10%为标准,每人月的成本按2.5万计算。
以一个100万的软件开发项目为例,Web报表的工作量占 10% ,即开发成本为 10 万元。
以 2.5 万 / 人月来计算,这个项目需要用 4 个人月来完成报表工作。
在实际的项目中,这 10 万元有几种方式分摊:(1)集成商以前的代码积累+程序员按项目定制。
说白了,就是纯手工编写代码。
这里又分两种情况: A 、是在集成商以前的代码积累基础之上直接按项目定制; B 、找开源的报表软件,在此之上做修改。
这样做能在一定程度上减少程序员的工作量和后期的维护成本,但是开发上要受限于开源软件。
且不论产品资料、函数接口什么的是否齐全,单是开源软件的 bug 问题就够让人挠头的了。
这两种方式不涉及到采用报表软件的成本问题,好处就是开发人员对程序能完全控制,开发成本直观。
坏处就是如果项目报表的要求比较高的话,程序员的工作量会相当大,报表开发效率低,报表的后期维护成本也比较高,只要客户要修改报表,就必须找到开发商,除非事先商量好,否则就会出现钱方面的扯皮。
实际应用中, A、B两种方式主要集中在中小型的项目。
(2)Web报表软件+程序员开发。
用报表软件的好处有很多,象提高开发效率、节省时间、缩短工期、方便后期维护等到,就不多说了。
但是市场上报表软件非常多,如何能选择出既符合项目需要、又能合理控制成本的工具呢?采购报表软件的成本遵循下面这个原则就行:选择的Web报表软件至少能减少 50% 的报表开发工作量,报表的总开发成本降低 1/3 左右。
拿在上面的例子来说:以前做报表需要4个人月,在使用Web报表工具后,应该2个人月就能完成;加上报表软件的采购成本,原来需要10万元才能做完的事情,应该要6、7万元就能做完。
-简介BIRT是一个Eclipse-based开放源代码报表系统。
它主要是用在基于Java与J2EE的Web 应用程序上。
BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。
BIRT同时也提供一个图形报表制作引擎。
URL: /birt/前言这个指南将引导你设计一个简单的报表,令你对BIRT报表系统有个感性的认识,如果想进一步了解BIRT的使用可以参考 BIRT在Eclipse中自带的帮助,Select Help→Help Contents from the Eclipse menu and then click on the BIRT Developer Guide.如图个人体验操作界面友好大方,小图标都很漂亮:);功能并不逊色与商业报表工具;∙CSS提供了强大灵活的样式定义,对于属性CSS的设计人员来说,应该可以设计出相当出色的报表样式;∙集成在Eclipse中,不用再开启别报表开发工具窗口;∙BIRE的本地化做的很好,安装以后操作界面就是中文的;∙开源的报表产品,降低开发成本,一些报表开发工具除了价格昂贵以外,还有用户限制;BIRT 安装指南安装方式一下载一个BIRT All-in-one版本的 Eclipse,包含了运行BIRT系统所需的组件,最方便了(如果是将报表工具培训一下让非开发人员参与定制话可以这样做:))URL:birt-report-designer-all-in-one-2_1_1.zip安装方式二假设你已经知道如何安装Eclispe插件(建议采用Link的方式安装插件,不至于全部一股脑的将各种插件都解压到Eclipse的目录中去)运行BIRT报表系统需要以下软件或插件∙Java 1.4.2/1.5 JDK/JRE∙Eclipse-SDK-3.1.2-win32及以上版本∙Graphics Editor Framework (GEF) runtime∙Eclipse Modeling Framework (EMF) runtime∙BIRT∙iText 1.3 - 复制 itext-1.3.jar 文件到plugins/org.eclipse.birt.report.engine.emitter.pdf_version/lib 目录.∙prototype.js v1.4.0 - 复制prototype.js 文件到plugins/org.eclipse.birt.report.viewer_version/birt/ajax/lib 目录其他∙BIRT提供的一个Flash格式的安装演示,也可以照着这个演示来安装:)∙BIRT 网站提供的安装指南∙运行报表(tomcat/weblogic/jboss)使用入门1.环境●报表设计器:可以到/birt/downloads/下载最新版本,当前的最新版是birt-rcp-report-designer-2_1_1。
润乾报表(新版)在WEB中的使用说明1WEB服务器配置使用本报表系统需要在WEB服务器中配置WEB应用和应用中用到的数据库连接池。
下面以TOMCA T为例进行说明:1、修改[tomcat]/conf/server.xml文件,在</Host>行之前插入如下的一段标签:/report" docBase="<value></parameter><parameter><name>password</name><value></parameter><parameter><name>driverClassName</name><value></parameter><parameter><name>url</name><value></parameter></ResourceParams></Context>以上用粗体表示的部分为应进行修改的内容。
如果在应用中要用到多个数据库,则应重复<Resource …… </ResourceParams>之间的内容。
2、要将相应的数据库JDBC驱动程序包放入[tomcat]/common/lib目录中2WEB应用配置2.1文件部署JA V A类的部署:如果报表系统提供的是jar文件,则将之放在WEB应用的WEB-INF/lib 目录中,如果提供的是呈目录结构的class文件,则将com目录和color.properties文件放到WEB应用的WEB-INF/classes目录中。
将runqianReport.tld文件放到WEB应用的WEB-INF目录中。
将xrq_license.dat文件放到WEB应用的WEB-INF目录中。
基于JFreeReport报表设计器的实现技术[摘要]报表始终是所有信息系统中不可或缺的内容,尤其是在国内的应用系统中,报表更是占据着相当重要的地位。
本文提出了一个基于JFreeReport报表设计器的设计方案,并给出了基于Swing的实现过程。
在设计过程中主要使用了Swing、XML持久化保存、MVC 设计模式、软件工程等技术。
[关键词]JFreeReport;报表生成;设计模式;XML持久化保存1 基于JFreeReport报表背景与简介企业信息化过程中需要处理大量的有关多维数据集的信息,而表现数据信息处理结果的一种理想的方式就是数据报表。
报表定义文件是生成复杂报表的重要文件,主要描述如何使用指定的格式生成复杂的报表,对于JFreeReport定义数据报表格式所需的XML文件通常是由人工输入编写的,对于格式较为简单的报表还可以接受,但是对于大型数据库报表,数据报表关系格式复杂而且字段数量较多,人工输入易出错又繁琐,本文研究的报表设计器就是针对JFreeReport报表生成内核进行开发的。
2系统整体设计2.1系统整体框架与MVC模式基于Java的Swing技术,设计器内核使用JFreeReport,用于绘制和输出各种复杂的统计报表。
设计器的主要工作是将用户对报表的设计意图通过报表生成内核的API传递至报表生成内核,再将报表生成的结果实时反馈给用户。
报表生成后,应该能够持久化保存。
此外,根据当前流行的数据库报表的功能,系统也要具备将报表转换成诸如PDF、HTML等其他文件格式的功能。
让用户对于事实数据具有全面的分析和了解,增加数据流通为企业带来的效益。
为了能够方便地重用组件并且体现模块的独立性,把整个系统组件分解组织成11个类包,只要得到这个包文件,其他类也可以引用该包中的所有类并使用里面的某些组件。
该类包分别为:datasource(数据源包),dbutilities(数据库工具包),io(磁盘操作包),jfdmainfrm (系统主窗体包),reportgenerate(报表生成包),tools(系统所需的其他工具类),wmvc(MVC包,包含有MVC模式所需的基础支持类,它是系统的底层基类)。
我已经很久没有亲自使用IReport开发报表了,记得当时用时还是零点几版本,转眼这么久过去了(估计2年了吧),今天公司要开发报表,而新同事们都不会,只好亲自上手做一个,也算是Demo吧。
再次到的官网下了一个IReport3.7.2的最新版,惊奇发现现在这东西好用多了,完全是Netbeans 框架实现的(本人可以Netbeans的忠实粉丝,一直用Netbeans开发)操作方便、人性化。
好了下面我就逐步来介绍IReport的使用,以后还打算写一个在项目中使用报表的例子。
1、下载IReport(既是废话,又套路,呵呵,就从这里开始吧)官网下载地址是:/plugins/project/project_home.php?projectname=ireport2、安装IReportIReport安装十分简单,这里就略了,否则真要被人拍砖了。
3、运行IReport直接在桌面上双击IReport图标就可以了,IReport3.7.2的闪屏还是蛮好看的,大家看看吧,如下图:进入IReport主界面后,大家会发现其和Netbeans真的是很像,毕竟一个遗传基因的,呵呵。
还是中文版的哦。
4、使用报表向导我将以一个简单报表的制作来讲解IReport制作报表时的一些常用项。
选择菜单中”文件“——>”New“(如图所示):进入报表设计的向导程序(如下图所示),在向导程序中可以选择报表模板,其它的(如风格、图表等)目前都不能用,我就选择”Blank A4“:选择”Launch Report Wizard“,系统引导你下一步(如下图所示)。
在这一步中在”Report Name“中输入报表的文件名,”Location“中指定报表文件存储目录。
选择”下一步“按钮,系统引导你配置数据源模式(如下图所示),在这里系统默认提供两种数据源模式”Empty DataSource“和”Sample Database(HSQLDB test)“,我在这里新建一个自己的数据源模式——”Javabean DataSource“。
洛阳理工学院课程设计报告课程名称Java web程序开发入门专业计算机应用技术_班级_学号_姓名完成日期_目录第一总体设计 (4)1.1、设计目的: (4)1.2设计题目: (4)1.3。
设计要求: (4)第二设计内容: (5)2.1 题目一 (5)2.1.1Tomcat服务器启动 (5)2。
1。
2下载安装JDK (6)2.1.3下载Eclipse安装包 (7)2。
2题目二 (8)2.2。
1分析 (8)2。
2。
2用户注册设计思想 (9)2.2。
3用户注册功能实现 (9)2。
3题目三 (15)2。
3。
1聊天室设计思想 (15)2。
3.2聊天室模块划分 (15)2。
3。
3系统功能结构图 (16)2。
3。
4 chatroom的模块设计分析 (16)2.3。
5ChatRoom 的关键技术 (16)2.3。
6 代码设计 (17)2.3。
7 聊天室功能实现 (20)2。
4题目四 (21)2。
4。
1开发环境: (21)2.4。
2 系统分析: (21)2。
4。
3功能实现: (23)第三实训心得 (24)第一总体设计1.1、设计目的:1、培养学生运用所学课程《Web程序设计(Java)》的理论知识和技能解决实际问题的能力,使学生在系统开发中得到Java Web编程方法及技能的综合训练。
2、培养学生调查研究、查阅技术文献以及编写技术报告的能力。
1.2设计题目:1.下载并安装JDK、Tomcat、MySQL和Eclipse,完成Java Web应用程序开发环境的搭建。
2.使用JSP Model2模型,开发一个用户注册模块,要求:使用Servlet、JSP和Java Bean技术;界面友好;具有用户输入校验功能,并且在用户输入错误时给出出错信息。
3.使用JSP和JavaScript技术实现一个网络聊天室,功能要求具备一个使用用户昵称登录的页面,在聊天主窗口左侧有当时在线成员列表(建议采用AJAX技术),通过鼠标可以选择说话的对象(不允许自己对自己说话),在聊天时可以设置说话时表情,输入说话的内容,单击发送按钮完成会话的发送,会话内容实时显示在聊天主窗口内,包括发言人姓名、聊天对象姓名、聊天内容和会话发起的时间,选作的功能是将会话内容保存在数据库中。
特别声明:本文版权为原文作者李克喜所有。
1使用iReport制作报表的详细过程(Windows环境下)1.1前言在网络上可以搜索到很多使用iReport和Jasperreport配合实现各种报表任务的文章,但是我觉得很少有一篇(几乎没有)做一个比较详细的介绍如何使用iReport制作报表的全过程,我所看过的文章的基本思想是覆盖面广,很多内容都是提及即过,并不是开发人员都有时间为每个实践花费时间自己实现,如果能有更详细的资料,那岂不是一件乐事。
出于这个念头促使我写这篇文章,希望能对那些使用iReport和Jasperreport朋友有所帮助,特别是需要亲身去实现报表的朋友,希望能给你们带来一点帮助。
本文不是对iReport的每个细节进行介绍,关于iReport的每个细节可以参考iReport网站的资料,但是可能得花费一些费用。
一般用户没有必要付出这些费用,因为我们关心的是如何制作我们需要的报表,而不是去扩展iReport,比如制作iReport的插件。
1.2准备1.2.1下载JDK1.2.2下载iReport1.2.3准备数据库1.2.4启动MySql服务确定Mysql使用的的字符集是重要的问题,特别是对需要中文报表的朋友,应该特别注意这个问题。
1.2.5确定商务逻辑也就是希望完成什么样的报表任务。
需要实现的报表的详细描述,这是实现报表的业务条件,否则所有的任务绝大部分没有意义。
本文使用一个Bug记录表为例,本文的例子是制作一个根据项目和项目中的模块分组的Bug量统计。
1.3开始配置基本信息1.3.1配置界面使用的语言和报表输出路径第一次进入系统是英文环境,可以通过【Tools】-【Options】开启配置iReport 系统的基本信息对话框。
在“Language”选项里面选择你需要的界面语言,比如“中文-中国”。
点击【Apply】按钮,系统既把整个界面中文化。
在配置iReport系统的基本信息对话框中选择【编译】Label,之后决定你的报表输出路径,可以把“编译在报表数据文件夹”选择打勾,这样报表的jrxml 文件和jasper文件就放置同一文件夹。
报表引擎API开发入门—创建程序报表一、程序网络报表概念FineReport设计器基本可以零编码地设计出绝大多数报表,然而需求是千变万化的,也许某些个性化的功能通过设计器无法实现,此时就如上一节中介绍的,可以将模板读入程序中,进行修改后再导出,再在浏览器中访问报表。
显然这样做比较繁琐,对于这种情况,您可以直接将读取的模板保存为程序网络报表,直接在Web端访问定义的程序网络报表。
下面我们做个简单的程序调用报表,实现读取Parameter.cpt,然后在浏览器中直接访问该网络报表。
二、实现步骤2.1定义程序网络报表程序网络报表所在类需要继承com.fr.web.reportlet这个抽象类,并且需要实现createReport(ReportletRequest arg0)这个方法,并返回报表对象。
具体代码如下://程序网络报表package com.fr.demo;import java.util.Map;import com.fr.base.Env;import com.fr.base.FRContext; import com.fr.main.TemplateWorkBook;import com.fr.web.core.Reportlet;import com.fr.web.request.ReportletRequest;import com.fr.io.TemplateWorkBookIO;public class SimpleReportletDemo extends Reportlet{public TemplateWorkBook createReport(ReportletRequest reportletrequest){ //新建一个WorkBook对象,用于保存最终返回的报表Env oldEnv=FRContext.getCurrentEnv();TemplateWorkBook WorkBook=null;try{//读取模板,将模板保存为workbook对象并返回WorkBook=TemplateWorkBookIO.readTemplateWorkBook(oldEnv, "\\doc\\Primary\\Parameter\\Parameter.cpt");}catch(Exception e){e.getStackTrace();}return WorkBook;}@Overridepublic void setParameterMap(Map arg0){//TODO Auto-generated method stub}@Overridepublic void setTplPath(String arg0){//TODO Auto-generated method stub}}2.2编译生成类文件在java开发平台中会自动编译,在此不再详述。
毕业设计开题报告1.本课题的研究意义,国内外研究现状、水平和发展趋势1.1研究意义市场经济时代,“理财”观念深入人心。
学会理财,使个人与家庭的财务处于良好的运行状态,从而提高生活的质量跟品味!随着计算机技术、网络技术、信息技术的发展及应用,这种网络技术逐渐渗透进我们生活中的点点滴滴,改善着人们的工作、生活。
人们就利用所设计的个人管理系统来管理个人财务更迅速的发展为一个日常生活规划的解决方案。
应用这种解决机制,来进行管理个人收支,解决日常财务以及物品管理的问题,就好像拥有一个个人的“银行系统”。
伴随着网络的崛起,越来越多的用户更加希望凭借着网络这个大平台,更多的展现出自己的理财理念和管理个性,更方便的进行与他人的互动交流,使自己不仅拥有一个独立的理财空间,还有更大的交友,互相交流理财理念的博客平台。
在这个信息时代,采用这种网络管理方式将会是以后管理发展的趋势。
应用这种在云端个人财务系统,使得人们在有网的情况下随时随地记录收支,管理物品,根据填入数据,进而得出分析,还能使之以日志的形式发表出来,供自己参考跟记录理财心得。
这种交流理财观念的方式既使得财物管理便利又使人身心愉悦。
本课题利用Java Web技术开发一个在云端的个人财务管理系统,在完成基本功能基础上,利用日志这种交互手段,使在个人理财方面有所创新,为用户与用户间的理财理念的交流提供了良好体验。
1.2国内外研究现状、水平和发展趋势早在西方15、16世纪地中海一带的城市商业日益发展,便出现了财务管理的萌芽。
之后财务管理也经历了它的革命,由简单的组织发展为记账簿式的比较笨拙受限的传统理财,到现在网络直至个人一体化的软件管理体系。
个人理财根据财务状况,建立合理的财务规划,并且参与投资活动之中。
所涉及的活动往往是股票,基金,国债和储蓄等内容。
而现今是一个理财的社会,合理的安排资金内容,也成为现在一种时尚的生活状态,受忙碌的工作、生活所累,无暇于多的精力去分配传统的记账本式的理财上去,所以,现在的研究多为开发电脑软件和手机等移动设备上的理财APP软件,因此,选择一款适合自己的理财软件,也是势在必行的一件事,这也是现金社会对个人理财所关注的重心点。
在前一节中,使用word工具来辅助制作和打印报表,可发现代码冗长,不方便程序员阅读,而且修改比较麻烦,需要在word中重新制作再生成报表模板,jsp中的程序代码又必须重新找到合适的位置以放入其中。
为简化这个开发过程,并拓展功能,出现了一些第三方的专门用于Web报表开发组件,如jasperreport,它把报表的模板生成作为一个XML文件保存,根据这个模板再用少量的Java代码即可生成复杂的报表,并可导出成PDF、HTML等格式,然而它是国外的第三方组件,对中文支持不够,且其开发手册需要付费。
为此,本书介绍一款国产的第三方组件——JavaReport,它由伟才工作室开发,这个组件简单易用,只须编写少量的代码即可开发出复杂的报表和图形,中文支持较好,较为实用。
JavaReport可从网上免费下载得到,网址如下:/download.htm一、JavaReport介绍JavaReport主要有如下优点。
(1)支持实时的、动态的Web统计报表JavaReport所展示的报表是动态的报表。
所有的数据都是实时的数据;所有的统计图也是动态生成的。
报表里面的数据源可从数据库中即时查询产生,适合于对实时统计要求高的应用系统。
(2)接口丰富,对图表提供良好的支持JavaReport提供了丰富的应用程序接口、减少代码复用、灵活的图表形式、即时图表生成、更短的生成时间等。
Java报表对图表有良好的支持,可以生成柱图、饼图和折线图等十几种图表。
(3)报表可导出成各种格式的文档JavaReport在报表展现方面表现优异,能实现Word,Excel,PDF,CSV等格式精确导出等功能,并提供了全部的页面与打印控制。
(4)开发简便,程序员只须编写少量程序代码有许多的问题在JavaReport组件内已经解决,如报表的导出功能、打印功能和数据的分页处理等。
在很多B/S结构体系的系统开发时,分页是开发过程中要重点考虑的问题。
但在JavaReport中,就不需要考虑上下翻页,跨页分页,因为这些问题报表引擎已经实现了。
在设计报表的过程中,把Report类当作容器类,统计图类,表格类,标签类,图片类等,把它们当作组件类。
至于跨页分页,上下翻页由报表引擎自动完成。
JavaReport系统中有自动跨页分页的功能,当表格超过当前页的大小时,系统会自动把接着部分放到下一页。
报表设计在开发过程中是感觉不到要跨页的存在,只有一个全部数据完整的表格对象。
如果把引入图片文件加入到报表中,可使用报表系统的Report类,通过这个类的addImage()方法把Image对象加进来,如果需要自定义图像,可通过第三方画图程序(例如是JFreeChart程序)生产需要的统计图/图片,然后再把图像加到报表中去。
本书中使用的JavaReport版本是V3.0,JavaReport根据客户的应用需要,按照功能和性能的等级,分成三个版本:专业版,服务器版,企业版。
本书使用企业版。
JavaReport三个版本产品都是免费使用的。
也就是说这三个版本都不需要购买License许可,可以自由使用JavaReport的所有功能。
免费提供报表在Web展示功能,表和图怎样混合功能,跨页分页功能,导出电子文档Word,PDF,Excel,CSV,HTML等诸多功能。
专业版客户(Client)的IP最大连接数限制为10个,也就是JavaReport同时并行处理线程的最大数受限制。
限制是为了避免系统资源占用过大,使系统反应迟钝。
该版本适合中小型的应用系统,保障应用系统正常运行。
服务器版在最大连接数没有受限,它能充分发挥服务器的个部分硬件设备的作用;相对要求服务器的设备配置高,保障最优性能效率。
该版本适合大中型的应用系统使用。
企业版提供垃圾回收机制管理,自动处理在内存中无用对象的引用;支持多服务器处理模式,提供在多个服务器的集群功能和服务器之间负载均衡功能。
提高服务器群的负载能力和和快速响应能力。
该版本适合负载繁重的应用系统使用。
二、安装JavaReport找到JavaReport-V3-Enterprise-Released.jar这个Jar文件,把这个文件的路径加入到classpath系统变量中,或拷贝到当前Web应用的WEB-INF\lib目录下,或拷贝到Tomcat5的安装目录的common\lib目录中;第一种方法和第三种方法对所有Web应用有效,而第二种方法仅对当前Web应用有效。
好了,至此,JavaReport就算安装完毕了。
接下来,继续介绍JavaReport。
三、相关类介绍下面给出Web报表显示时的情况,如图17-11所示。
在这个图中,对报表的显示情况一目了然,再介绍常用的类理解起来就会比较清晰了。
基于JavaReport的Web报表开发2【转】2010-06-12 16:34Java Report的组件包中有许多的类,体系庞大而复杂,在这里无法一一介绍,仅列出一些常用的类来作出说明,有兴趣的可参考详细的API手册。
(1)Web ReportEngine类即com.javareport.http.WebReportEngine,这个类是整个JavaReport中的Web引擎的开发接口。
所有的JSP或Servlet从这个类继承下来,覆盖createReport()函数就实现基本的报表开发工作。
WebReportEngine是JavaReport的Servlet或JSP的开发接口,是JSP或Servlet的父类,报表系统在应用中的程序从此处继承下来,可以根据需要调整接口内容。
部分函数可以适当删除。
在开发中一般是实现createReport()函数就可以,形成实时动态报表就是在这个函数里实现的。
剩下的工作(怎样在Web上显示,怎样形成Work,PDF文件,等)交给报表引擎自动实现。
如果是在JSP中,在页头部分应加入如下语句:<%@ page extends="com.javareport.http.WebReportEngine"%>如果是Servlet,相应的Servlet类声明时语句如下:public class Servlet类名称extends WebReportEngine{……}? createReport()方法原型如下:public Report createReport(javax.servlet.http.HttpServletRequest request)throws ng.Exception此方法用于建立报表,并返回报表的实例。
这个报表实例可以在Web上显示,同时也可以导出Word, Excel, PDF, CSV, HTML等格式的文档以供使用。
参数request可用于获取所有的动态请求的数据。
? validate()此方法用于对上一个页面Form提交的参数进行检查,由于实时报表需要动态的参数,在这里进行数据校验。
方法原型如下:public ng.String validate(javax.servlet.http.HttpServletRequest request)其中,参数request可用于获取所有的动态请求的数据;方法的返回值为null时代表通过,其他内容则为参数错误的提示信息。
? getStartScript()方法用于构造报表内容在Web页面上显示之前执行的JavaScript或VBScript脚本,如果要定制则要重载这个方法。
方法原型如下:public ng.String getStartScript(javax.servlet.http.HttpServletRequest request)其中,参数request可用于获取所有的动态请求的数据;方法返回值为null时代表没有脚本内容。
? getEndScript()方法用于构造报表内容在Web页面上显示之后执行的JavaScript或VBScript脚本,如果要定制则要重载这个方法。
方法原型如下:public ng.String getEndScript(javax.servlet.http.HttpServletRequest request)其中,参数request可用于获取所有的动态请求的数据;方法返回值为null时代表没有脚本内容。
? getToolbarScript()方法用于定制Web报表在页面首部显示的工具栏为标准的样式(上下翻页,导出文件),可以在此扩展工具栏的内容,如:添加公司主页的链接,返回上一层链接的“返回”按钮,如果要定制则要重载这个方法。
方法原型如下:public ng.String getToolbarScript(javax.servlet.http.HttpServletRequest request) 其中,参数request可用于获取所有的动态请求的数据;方法返回值为null时代表不添加内容。
? isShowToolbar()如果不想在页面上显示报表工具栏,可重载这个方法,并设定返回值为false。
需要注意的是,如果是多页报表,上下翻页按钮就无法使用。
方法原型如下:public boolean isShowToolbar()方法的返回值是是否显示工具栏的布尔值标志。
? getAllEchoButton()方法用于自定义显示在Web页面中的报表导出文件的按钮,比如应用中只导出PDF文件,其他的不需要,就可以这里设定。
按钮值从Word按钮开始是(1,2,4,8,...),需要显示的按钮则将它们的值相加就可以了。
默认情况下工具栏上的按钮如图17-12所示:图17-12 默认情况下工具栏上的按钮方法原型如下:public int getAllEchoButton()方法的返回值是显示按钮对应的和值。
要作自定义,需要重载这个方法,并将返回值设为要显示的按钮对应的和值。
基于JavaReport的Web报表开发3【转】2010-06-12 16:35(2)Report类即com.javareport.beans.Report,报表类。
这个类的对象用于代表一张报表,是所有报表元素的容器,这是整个系统的核心,也是在浏览器上显示和生成电子文档(Word,Excel,PDF,Html等)的基础。
? addHeaderSeparator()方法用于在报表的页眉添加一条横直线。
方法原型如下:public ng.String addHeaderSeparator(int num)其中,参数num表示横直线的粗细程度,以自然数表示,数字越大表示线越粗。
? addHeaderSpace()此方法用于在页眉中添加若干个空格。
方法原型如下:public ng.String addHeaderSpace(int num)其中,参数num是要添加的空格的个数。