- 浏览: 829725 次
- 性别:
- 来自: 北京、四川
文章分类
最新评论
-
sunbeamzheng:
总结的很好,好好看看。 拷贝问题确实很需要注意,特别是影不影响 ...
java深拷贝与浅拷贝 -
xmh8023:
...
获取POST数据的值 -
xmh8023:
我访问别的服务器怎么办?急求
获取POST数据的值 -
xmh8023:
String urlString="http://l ...
获取POST数据的值 -
lv12312:
Tomcat 7的老版本么?有bug的,https://iss ...
JMX问题
cewolf的应用
Cewolf可以在一个基于Servlet/JSP的Web应用程序内部使用,基于JFreechart的,利用JFreechart的绘制引擎的开源项目。以在Web页中嵌入各种复杂的图形图表(如,直方图、饼图、棒图等等)。它提供了一个功能完备的标签库来定义图表的所有属性(颜色、笔画、图例等),这样嵌入了图表的JSP就不用使用任何Java代码。
遇到的问题:最初遇到的问题是一个关于作用域的问题,在网上找了一些资料,发现cewolf的比较少,慢慢摸索了一下,弄明白与作用域有关。
环境:myeclipse+tomcat6+jdk5
前提:由于公司里面很多统计数据,和日期有关,因此横坐标都是使用的日期,纵坐标是数据。
结果:这里把cewolf的东西进行了封装,在使用时只需提供按要求所提供的数据以及重新写servlet类即可,当然还可以继续进行封装,只是这可能就可能会与其余的东西相依赖了。
最新的思路:
还可以进行更深的抽象,即servlet只需一些很基本的操作,这里需要使用接口,然后只需把实现几口的类的.class传进去坐参数。
前台的参数也不用去获取,只需存到一个数组中,这可以在util里面写,然后再数据库查询的时候可以做成一个通用的东西,比如用jdbc连数据库,自己写数据库的一些东西等等。
1.首先是从http://cewolf.sourceforge.net/new/index.html下载最新的包,把相应的包(不仅是cewolf,JFreechart,还有好几个所依赖的包)都复制到项目工程里去。
2.配置web.xml文件,把下面的xml代码复制到web.xml中,然后把img和etc文件夹复制到工程目录里面去,这里有绘图需要的东东,配置文件里写有
3.cewolf的核心处理类,这里参考了cewolf的例子
cewolf所需数据的结构如下:
4.数据处理的核心类,主要是对查询数据库所得到的数据进行处理成cewolf所需要的类型
5.数据准备,数据格式必须如下所示那样(这样只是迎合hibernate所生成的数据):
6.servlet类,主要是供前台调用
7.jsp页面,核心代码
附件为myeclipse工程
图片为最终运行之后的效果图
Cewolf可以在一个基于Servlet/JSP的Web应用程序内部使用,基于JFreechart的,利用JFreechart的绘制引擎的开源项目。以在Web页中嵌入各种复杂的图形图表(如,直方图、饼图、棒图等等)。它提供了一个功能完备的标签库来定义图表的所有属性(颜色、笔画、图例等),这样嵌入了图表的JSP就不用使用任何Java代码。
遇到的问题:最初遇到的问题是一个关于作用域的问题,在网上找了一些资料,发现cewolf的比较少,慢慢摸索了一下,弄明白与作用域有关。
环境:myeclipse+tomcat6+jdk5
前提:由于公司里面很多统计数据,和日期有关,因此横坐标都是使用的日期,纵坐标是数据。
结果:这里把cewolf的东西进行了封装,在使用时只需提供按要求所提供的数据以及重新写servlet类即可,当然还可以继续进行封装,只是这可能就可能会与其余的东西相依赖了。
最新的思路:
还可以进行更深的抽象,即servlet只需一些很基本的操作,这里需要使用接口,然后只需把实现几口的类的.class传进去坐参数。
前台的参数也不用去获取,只需存到一个数组中,这可以在util里面写,然后再数据库查询的时候可以做成一个通用的东西,比如用jdbc连数据库,自己写数据库的一些东西等等。
1.首先是从http://cewolf.sourceforge.net/new/index.html下载最新的包,把相应的包(不仅是cewolf,JFreechart,还有好几个所依赖的包)都复制到项目工程里去。
2.配置web.xml文件,把下面的xml代码复制到web.xml中,然后把img和etc文件夹复制到工程目录里面去,这里有绘图需要的东东,配置文件里写有
<!-- cewolf的配置 --> <servlet> <servlet-name>CewolfServlet</servlet-name> <servlet-class>de.laures.cewolf.CewolfRenderer</servlet-class> <!-- sets storage implementation --> <init-param> <param-name>storage</param-name> <param-value>de.laures.cewolf.storage.TransientSessionStorage</param-value> </init-param> <!-- sets overlib.js location relative to webapp --> <init-param> <param-name>overliburl</param-name> <param-value>/etc/overlib.js</param-value> </init-param> <!-- turn on or off debugging logging --> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CewolfServlet</servlet-name> <url-pattern>/cewolf/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>1</session-timeout> </session-config> <mime-mapping> <extension>css</extension> <mime-type>text/css</mime-type> </mime-mapping>
3.cewolf的核心处理类,这里参考了cewolf的例子
public class PageViewData implements DatasetProducer, CategoryToolTipGenerator,CategoryItemLinkGenerator, Serializable{ private static final long serialVersionUID = 1829275651312989845L; private List list=new ArrayList(); public List getList() { return list; } public void setList(List list) { this.list.addAll(list); } /** * 产生一个唯一的标识符,这里还需要进行修改 */ public String getProducerId() { return "PageViewData "; } /** * 5m时间作为图片的过期时间,即在5m内刷新图片,图片不会发生变化。 */ public boolean hasExpired(Map arg0, Date arg1) { return (System.currentTimeMillis() - arg1.getTime()) > 5000; } /** * 主要的方法,报表的图片的数据显示在这里进行设置 */ public Object produceDataset(Map arg0) throws DatasetProduceException { //这个对象的建立参考网上的例子 DefaultCategoryDataset dataset = new DefaultCategoryDataset(){ /* * @see java.lang.Object#finalize() *当垃圾回收器确定不存在对该对象的更多引用时, *由对象的垃圾回收器调用此方法 */ protected void finalize() throws Throwable { super.finalize(); } }; ReportImgBean rb; String seriesName; List imgDataList; ImgData imgData; if(list!=null&&list.size()>0){ //外层循环是几条折线,内层循环是一条折线 for(int i=0;i<list.size();i++){ rb=(ReportImgBean)list.get(i); seriesName=rb.getSeriesName(); // System.out.println("seriesName:"+seriesName); imgDataList=rb.getImgDataList(); // System.out.println("seriesName:"+seriesName+":"+imgDataList.size()); if(imgDataList!=null&&imgDataList.size()>0){//必须要有数据,否则无意义 for(int j=0;j<imgDataList.size();j++){ imgData=(ImgData)imgDataList.get(j); dataset.addValue(imgData.getData(),seriesName, imgData.getXcoordinate()); } } } } return dataset; } public String generateToolTip(CategoryDataset arg0, int arg1, int arg2) { // 返回描述,相当于提示作用吧 return this.getDescription(arg1); } public String generateLink(Object arg0, int arg1, Object arg2) { //返回描述,在底部的说明 return this.getDescription(arg1); } protected void finalize() throws Throwable { super.finalize(); } /** * 返回描述的内容 * @param i * @return */ public String getDescription(int i){ String result=""; if(list!=null&&list.size()>0){ ReportImgBean rb=(ReportImgBean)list.get(i); result=rb.getSeriesName(); } return result; } }
cewolf所需数据的结构如下:
public class ImgData { private String xcoordinate;//日期,横坐标 private double data;//数据,纵坐标的数据 public String getXcoordinate() { return xcoordinate; } public void setXcoordinate(String xcoordinate) { this.xcoordinate = xcoordinate; } public double getData() { return data; } public void setData(double data) { this.data = data; } }
public class ReportImgBean { private String seriesName;//描述数据是哪种数据 private List imgDataList; public List getImgDataList() { return imgDataList; } public void setImgDataList(List imgDataList) { this.imgDataList = imgDataList; } public String getSeriesName() { return seriesName; } public void setSeriesName(String seriesName) { this.seriesName = seriesName; } }
4.数据处理的核心类,主要是对查询数据库所得到的数据进行处理成cewolf所需要的类型
public class BaseImgPhaseData { /** * * @param dataList 这里面的数据都必须是必要的,若添加了不必要的则会出错,里面的元素的第一个为横坐标,之后的为具体的数据 * @param seriiseNames 折线的显示项。如:pv,click,ctr * @return */ public PageViewData phaseData(List dataList,String[] seriiseNames) throws Exception{ PageViewData pvd=null; List<ReportImgBean> result=new ArrayList<ReportImgBean>(); List<ArrayList<ImgData>> tempList=new ArrayList<ArrayList<ImgData>>(); //判断是否有数据 if(dataList==null||dataList.size()==0||seriiseNames==null||seriiseNames.length==1){ return pvd; } for(int i=0;i<seriiseNames.length;i++){ tempList.add(new ArrayList()); } String seriesName=""; //相当于数据解析成需要的数据 for(int i=0;i<dataList.size();i++){ Object[] obj=(Object[])dataList.get(i); for(int j=0;j<tempList.size();j++){ List<ImgData> list=(List<ImgData>)tempList.get(j); ImgData temp=new ImgData(); temp.setXcoordinate(obj[0].toString()); //数据从1开始 temp.setData(Double.parseDouble(obj[1+j].toString())); list.add(temp); } } //把数据加入到最终的结构中 for(int i=0;i<seriiseNames.length;i++){ ReportImgBean tempBean=new ReportImgBean(); List<?> imgDataList=tempList.get(i); seriesName=seriiseNames[i]; tempBean.setSeriesName(seriesName); tempBean.setImgDataList(imgDataList); result.add(tempBean); } pvd=new PageViewData(); pvd.setList(result); return pvd; } }
5.数据准备,数据格式必须如下所示那样(这样只是迎合hibernate所生成的数据):
public class TestImpl2 extends BaseImgPhaseData { public PageViewData getData(String beginDate,String endDate){ PageViewData result=null; List list=new ArrayList(); Object[] obj1={"20090613","200","150"}; Object[] obj2={"20090614","200","250"}; Object[] obj3={"20090615","100","350"}; Object[] obj4={"20090616","250","150"}; Object[] obj5={"20090617","300","400"}; String[] seriiseNames={"测试pv","测试click"}; list.add(obj1); list.add(obj2); list.add(obj3); list.add(obj4); list.add(obj5); try { result=super.phaseData(list, seriiseNames); } catch (Exception e) { e.printStackTrace(); } return result; } }
6.servlet类,主要是供前台调用
public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse res) throws ServletException, IOException{ request.setCharacterEncoding("utf-8"); String beginDate="2009-06-01"; String endDate="2009-06-06"; TestImpl2 ti=new TestImpl2(); PageViewData pvd=ti.getData(beginDate, endDate); //常用参数的设置 Util util=new Util(); util.setCommonParam(request,pvd); request.setAttribute("beginDate", beginDate); request.setAttribute("endDate", endDate); // res.sendRedirect("report/test.jsp");//这种方式不行 request.getRequestDispatcher("report/test.jsp").forward(request, res); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ this.doGet(req, res); } }
7.jsp页面,核心代码
<form name="theFrom" action="${actionName}" method="post"> 宽度:<input type="text" name="widths" value="${widths}" /> 高度:<input type="text" name="hights" value="${hights}" /><br /> <input type="hidden" name="xname" value="${xname}" /> <input type="hidden" name="yname" value="${yname}" /> <input type="hidden" name="type" value="${type}" /> <input type="hidden" name="title" value="${title}" /> <input type="hidden" name="beginDate" value="${beginDate}" /> <input type="hidden" name="endDate" value="${endDate}" /> <input type="submit" value="提交" /> </form> <br /> <p> <cewolf:chart id="line" title="${title}" type="line" xaxislabel="${xname}" yaxislabel="${yname}"> <cewolf:data> <cewolf:producer id="${pageViews}"/> </cewolf:data> </cewolf:chart> <p> <cewolf:img chartid="line" renderer="/cewolf" width="${widths}" height="${hights}"> <cewolf:map linkgeneratorid="${pageViews}" tooltipgeneratorid="${pageViews}"/> </cewolf:img>
附件为myeclipse工程
图片为最终运行之后的效果图
发表评论
-
Java并发编程:volatile关键字解析
2015-07-30 11:30 636转:http://www.cnblogs.com/dolp ... -
Java内存模型
2015-07-29 13:55 9141. 概述 多任务和 ... -
自定义classloader
2015-07-29 13:54 689转:http://tiantian911.iteye.com ... -
自定义ClassLoader实现java应用核心逻辑模块热部署
2015-07-29 13:51 1022转:http://blog.csdn.net/zhangda ... -
java classloader原理初探
2015-07-29 10:14 668转:http://www.cnblogs.com/ ... -
Java 内存分配全面浅析
2015-07-29 08:52 608转:http://blog.csdn.net/shimi ... -
http stream
2014-07-29 16:38 1142StringBuilder sb = new String ... -
Tomcat远程调试
2011-04-09 12:33 1060需要在Tomcat中的catalina.bat中添加如下的一行 ... -
用jmx监控多台服务器(tomcat)
2010-09-08 18:25 4576因为需要写一个后台监控服务器的程序,涉及到jmx,也涉 ... -
call cmd /c start 一点疑问
2010-09-01 10:16 2249call "cmd /c start aaa.bat ... -
Windows计划任务之schtasks
2010-08-30 13:21 3595创建:SCHTASKS /Create /RU SYSTEM ... -
ajax返回值中有中文存在的乱码现象
2010-08-27 16:28 1446ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即 ... -
MIME TYPE
2010-08-26 16:23 7258最近要做需要在页面上放音频的东西,因此需要用到mime typ ... -
JMX问题
2010-08-20 17:20 5505这个问题貌似是启动tomcat之后就获取不到jmx的链接了,不 ... -
Eclipse控制台乱码
2010-08-05 15:18 4893安装了Eclipse,在运行tomcat时,控制台的中文显示乱 ... -
JMX服务端和客户端的代码
2010-07-27 15:37 3573服务端代码如下 package com.rmi; i ... -
JMX连接Tomcat的JMX测试类
2010-07-27 15:33 3297首先是为了使tomcat支持JMX,必须在tomcat的启动项 ... -
JMX的一个链接类
2010-07-27 09:37 1462package com.pachira.oamp.jmxS ... -
java中文转unicode码
2010-07-22 11:04 43406转载地址:http://www.iteye.com/topic ... -
获取POST数据的值
2010-07-21 14:17 9923当method为POST,Content-Type为 ...
相关推荐
**Cewolf** 是一个开源项目,主要专注于提供图形用户界面(GUI)和应用程序开发框架。它允许开发者快速创建和设计具有现代界面的应用程序,而无需深入学习复杂的图形设计技术。Cewolf 的核心特性包括: 1. **易用性...
5. **Web集成**:CEWolf易于与Web应用程序集成,可以生成动态图表以供Web页面显示,增强用户体验。 **使用CEWolf的步骤** 1. **引入依赖**:将CEWolf库添加到项目的类路径中,通常通过Maven或Gradle管理依赖。 2. ...
2. **配置Cewolf**:在Web应用的部署描述符(如web.xml)中添加Cewolf Servlet的配置信息。 3. **发送请求**:当用户请求图表时,向Cewolf Servlet发送包含图表数据的HTTP请求。 4. **Servlet处理请求**:Cewolf接收...
本实例将深入探讨Cewolf在Web报表开发中的应用,帮助开发者了解如何利用Cewolf创建动态、可视化的数据展示。 1. **Cewolf概述** - **功能特性**:Cewolf支持静态和动态图表,能够处理XML、JSON等多种数据格式,且...
这些jar(Java Archive)文件包含了各种类和方法,为开发者提供了丰富的功能和接口,使得开发者能够快速构建和运行cewolf相关的应用程序。 【描述】中提到的步骤,即“解压文件、然后放入WEB-INF的lib下”,这是在...
cewolf则是在JFreeChart的基础上,提供了一种Web服务的方式来显示这些图表,特别适用于Web应用中的动态数据可视化。 **cewolf的特性:** 1. **Web服务接口**:cewolf的核心在于其提供了通过HTTP服务接口来生成图表...
Cewolf可以在一个基于Servlet/JSP的Web应用程序内部使用,基于JFreechart的,利用JFreechart的绘制引擎的开源项目。以在Web页中嵌入各种复杂的图形图表(如,直方图、饼图、棒图等等)。它提供了一个功能完备的标签库来...
本实例将深入探讨如何在Web应用程序中集成和使用Cewolf技术。 1. **Cewolf简介** Cewolf,全称为“Charts on the Web in Every Language”,是一个开源项目,主要目的是简化在Web应用中生成动态图表的过程。它支持...
2. **Cewolf配置**:集成Cewolf通常涉及在Web应用的`web.xml`中配置CewolfServlet,并设置相应的MIME类型映射。 3. **十分钟上手**:使用Cewolf,你需要创建一个Java类来绘制图表,然后通过Servlet请求该类并渲染到...
重点内容有操作XML文件、发送与接收邮件、数据库操作技术、SQL语句应用技术、复杂查询技术、数据库高级应用、JFreeChart绘图基础、基础图表技术、扩展图表技术、基于Cewolf组件的图表编程、Prototype框架、jQuery...
重点内容有操作XML文件、发送与接收邮件、数据库操作技术、SQL语句应用技术、复杂查询技术、数据库高级应用、JFreeChart绘图基础、基础图表技术、扩展图表技术、基于Cewolf组件的图表编程、Prototype框架、jQuery...
Cewolf是用于各种图表的标记库。 它使每个JSP都可以轻松地嵌入图表图像。 Servlet容器中运行的任何Web应用程序都可以使用它。 无需Java scriplet代码即可定义图表。
它支持静态和动态图表,广泛应用于Web应用、桌面应用和服务器端报告。通过JFreeChart,开发者可以方便地生成高质量的图表,并且能够自定义颜色、字体、图例、数据标签等元素,满足不同场景的数据展示需求。 Cewolf...
JFreeChart和Cewolf是两个关键的开放源代码Web图表生成引擎,广泛应用于Java Web开发中。JFreeChart作为一个强大的图表库,支持多种类型的图表,如饼图、柱状图、线图等,可用于数据分析和可视化展示。Cewolf则在其...
接着,Cewolf是一个JSP图表组件库,它是基于JFreeChart的,可以方便地在Web应用中集成动态图表。例如,`CewolfHBar.jsp`和`CewolfVBar.jsp`分别展示了水平条形图和垂直条形图的创建,而`CewolfHBar3D.jsp`和`...
《精通Java+Web动态图表编程》是一本全面且深入的教程,它不仅涵盖了Java图形处理的基础知识,还提供了大量的实战案例,特别是对JFreeChart和Cewolf动态图表生成引擎的应用,以及如何将复杂的图表生成过程封装成可...
6. **Cewolf**:Cewolf是一个用于在Web应用中嵌入复杂图形图表的Servlet/JSP组件。它提供了一个标签库,使得在JSP页面中添加图表无需编写Java代码。 7. **JOpenChart**:JOpenChart库提供了创建不同类型的图表(如...
向读者展示如何使用Java Applet、Java Servlet、Java Server Pages(JSP)、JavaBean以及开放源代码的Web图表生成引擎——JFreeChart和Cewolf来开发奇妙的Web动态图表应用程序——以一种跨平台、小巧、结构清晰的...