- 浏览: 233954 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (105)
- JFreeChart (3)
- DbUtil (1)
- Struts2 (17)
- Ruby or Rails (4)
- Eclipse插件 (2)
- 英文一角 (2)
- IT生活 (7)
- 社会盘点 (0)
- Maven3 (3)
- Java (17)
- Jquery (12)
- Hibernate (8)
- Ajax (4)
- Oracle (2)
- SSH2 OA项目 (4)
- jsptags分页插件 (1)
- Javascript (4)
- Ubuntu (4)
- java Utils (1)
- JPA (2)
- sitemesh (1)
- Css (1)
- spring (3)
- 杂记 (5)
- Hibernate3连接池的配置 (0)
最新评论
-
天使建站:
http://www.aijquery.cn/Html/bia ...
jQuery获取及设置单选框,多选框,文本框内容 -
zjxkeven:
不错 不知道好不好用
java服务器状态监控实现 -
根号九加一:
能否发一份给我呢 邮箱是 zmh958@qq.com 谢谢! ...
SSH2项目搭建 -
23843492:
能否发一份给我:23843492@qq.com
SSH2项目搭建 -
jiangdaxian2003:
LZ求代码,谢谢,15914380151@139.com
SSH2项目搭建
JFreechart是JAVA平台上的一个开放的图表绘制类库。完全使用JAVA语言编写的。基本上能够很直观的解决目前所有的统计方面的需求。JFreeChart可以生成饼图(pie charts),柱状图(bar charts),散点图(scatter plots),时序图(time series),甘特图(Gantt charts)等多种图表,并且可以产生PNG和JPEG格式的输出。
JFreeChart 与Struts2整合
到JFreeChart的官网http://www.jfree.org/jfreechart/download.html下载相关的资源,找到JFreeChart的资源包jfreechart-1.0.14.zip下载并解压。
lib:文件夹里面放的就是JFreeChart的jar包,和所有的JFreeChart依赖的jar包。
Struts2并没有求全而是设计了一个灵活,可扩展的插件体系,以插件的方式,为struts2添加新的功能。在struts2下载包中的lib目录会发现这里面以struts2作为文件名开头的文件可以被分成两类,一类是struts2的核心包,Eg:struts2-core-2.3.3.jar;而其他的都叫Struts2-xxx-plugin-2.3.3.jar,很显然,后者都是Struts2的插件。
这些插件的存在形式就是普通的jar包。打开看看会发现只要是插件的jar包,其根目录下都有一个叫Struts-plugin.xml的文件,里面有这个插件相应的配置。
以struts2-jfreeChart-plugin-2.3.3.jar中的struts-plugin.xml为例:
其实这个struts-plugin.xml实际上就是个struts.xml,至此,可以看到struts2插件的存在方式:struts2-xxx-plugin-版本号。jar
struts2插件的加载顺序和作用
在启动web容器的时候,Struts2有一个运行时配置,它会按照以下顺序加载配置文件:
struts-default.xml这个文件应该在核心包中,也就是struts2-core-版本号.jar中,通常有一个。
struts-plugin.xml这种文件应该在所有的插件包中,也就是以struts2-xxx-plugin-版本号.jar,通常会有多个。
struts.xml这个文件应该在web应用的classpath根目录下有一个。
通常情况下,插件的配置文件优先于我们的配置文件加载,因此,我们可以像引用struts-default包一样来引用struts-plugin.xml文件中的其他包。
有了上面的那个JFreeChart插件的struts-plugin.xml后,我们的<package>元素只要继承插件中的包,就可以任意使用这个包内的任意资源。如下:(注:以下代码都是工作项目中的真实代码)
注意三点:
struts2的包在继承关系上是递归的,其配置文件可以多继承中间用“,”分割。jfreeChart-default包继承自struts-default包,因此,可以自由使用struts-default的东西。
我们的包继承了jfreeChart-default包,因此,我们可以随意使用jfreeChart-default包中的东西,<result name="success" type="chart">就是使用了jfreechart-defaultbao中定义的<result-type name="char">.
插件就是以这种声明新包,然后再新包中声明新功能的方式,来简洁的加入到应用中,而且在插件中还可以通过声明替换struts-default包中的默认行为。
把struts2-jfreeChart-plugin-2.3.3.jar,jcommon-1.0.17.jar,jfreechart-1.0.14.jar导入到项目中,就可以进行相关的开发。
在公司项目中统计这块的业务代码是我来负责,首先写了一个JfreeChartUtil类
Action方法很简单,主要是获得数据集。
JFreeChart 与Struts2整合
到JFreeChart的官网http://www.jfree.org/jfreechart/download.html下载相关的资源,找到JFreeChart的资源包jfreechart-1.0.14.zip下载并解压。
lib:文件夹里面放的就是JFreeChart的jar包,和所有的JFreeChart依赖的jar包。
Struts2并没有求全而是设计了一个灵活,可扩展的插件体系,以插件的方式,为struts2添加新的功能。在struts2下载包中的lib目录会发现这里面以struts2作为文件名开头的文件可以被分成两类,一类是struts2的核心包,Eg:struts2-core-2.3.3.jar;而其他的都叫Struts2-xxx-plugin-2.3.3.jar,很显然,后者都是Struts2的插件。
这些插件的存在形式就是普通的jar包。打开看看会发现只要是插件的jar包,其根目录下都有一个叫Struts-plugin.xml的文件,里面有这个插件相应的配置。
以struts2-jfreeChart-plugin-2.3.3.jar中的struts-plugin.xml为例:
<?xml version="1.0" encoding="UTF-8" ?> <struts> <package name="jfreechart-default" extends="struts-default"> <result-types> <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult" default="false"> <param name="height">150</param> <param name="width">200</param> </result-type> </result-types> </package> </struts>
其实这个struts-plugin.xml实际上就是个struts.xml,至此,可以看到struts2插件的存在方式:struts2-xxx-plugin-版本号。jar
struts2插件的加载顺序和作用
在启动web容器的时候,Struts2有一个运行时配置,它会按照以下顺序加载配置文件:
struts-default.xml这个文件应该在核心包中,也就是struts2-core-版本号.jar中,通常有一个。
struts-plugin.xml这种文件应该在所有的插件包中,也就是以struts2-xxx-plugin-版本号.jar,通常会有多个。
struts.xml这个文件应该在web应用的classpath根目录下有一个。
通常情况下,插件的配置文件优先于我们的配置文件加载,因此,我们可以像引用struts-default包一样来引用struts-plugin.xml文件中的其他包。
有了上面的那个JFreeChart插件的struts-plugin.xml后,我们的<package>元素只要继承插件中的包,就可以任意使用这个包内的任意资源。如下:(注:以下代码都是工作项目中的真实代码)
<package name="default" extends="json-default,jfreechart-default"> <!-- 统计查询 --> <action name="jFreeChart" class="logAction" method="jFreeChart"> <result name="success" type ="chart" > <param name ="width"> 780 </param> <param name ="height"> 370 </param> </result> </action> </package>
注意三点:
struts2的包在继承关系上是递归的,其配置文件可以多继承中间用“,”分割。jfreeChart-default包继承自struts-default包,因此,可以自由使用struts-default的东西。
我们的包继承了jfreeChart-default包,因此,我们可以随意使用jfreeChart-default包中的东西,<result name="success" type="chart">就是使用了jfreechart-defaultbao中定义的<result-type name="char">.
插件就是以这种声明新包,然后再新包中声明新功能的方式,来简洁的加入到应用中,而且在插件中还可以通过声明替换struts-default包中的默认行为。
把struts2-jfreeChart-plugin-2.3.3.jar,jcommon-1.0.17.jar,jfreechart-1.0.14.jar导入到项目中,就可以进行相关的开发。
在公司项目中统计这块的业务代码是我来负责,首先写了一个JfreeChartUtil类
/** package com.tq.platform.util; /** * @Title: Savepath.java * @Package: com.tq.platform.util * @Description: TODO(JFreeChart uitl) * @author: 何枫 * @date: 2012-5-11 下午08:52:24 * @version: V1.0 */ import java.awt.Color; import java.awt.Font; import java.awt.RenderingHints; import java.io.File; import java.io.FileOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.general.DatasetUtilities; public class CreateLinechart { /** * 图片保存的根目录 * @param filename * @return */ public String Savepath(){ String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath(); String testpath = path.substring(0,path.lastIndexOf("WEB-INF")); String filepath = testpath+"images/"; String JFpath = filepath +"core/"; return JFpath;//Tomcat的中webapps目录下项目的images文件夹 } /** * 柱状图,折线图 数据集 方法 */ public CategoryDataset getBarData( String[] rowKeys, String[] columnKeys,double[][] data) { return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); } public void isChartPathExist(String chartPath) { File file = new File(chartPath); if (!file.exists()) { file.mkdirs(); // log.info("CHART_PATH="+CHART_PATH+"create."); } } /** * * @Title: createBarChart3D * @Description: TODO(柱状图样式) * @param @param charTitle * @param @param x * @param @param y * @param @param Dataset * @param @param charName * @param @return 设定文件 * @return JFreeChart 返回类型 * @throws */ public JFreeChart createBarChart3D(String charTitle, String x, String y, CategoryDataset Dataset, String charName){ JFreeChart chart = ChartFactory.createLineChart(charTitle, x, y, Dataset, PlotOrientation.VERTICAL, true, true, false); chart.setTitle(new TextTitle("用户统计图", new Font("黑体", Font.ITALIC,22))); CategoryPlot categoryPlot = chart.getCategoryPlot(); NumberAxis numberaxis = (NumberAxis) categoryPlot.getRangeAxis(); // 设置纵坐标的标题字体和大小 numberaxis.setLabelFont(new Font("黑体", Font.CENTER_BASELINE, 24)); // 设置丛坐标的坐标值的字体颜色 numberaxis.setLabelPaint(Color.BLACK); // 设置丛坐标的坐标轴标尺颜色 numberaxis.setTickLabelPaint(Color.RED); // 获取横坐标 CategoryAxis domainAxis = categoryPlot.getDomainAxis(); // 设置横坐标的标题字体和大小 domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 13)); // 设置横坐标的坐标值的字体颜色 domainAxis.setTickLabelPaint(Color.BLACK); // 设置横坐标的坐标值的字体 domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 20)); // 这句代码解决了底部汉字乱码的问题 chart.getLegend().setItemFont(new Font("黑体", 0, 16)); //在柱体的上面显示数据 BarRenderer3D custombarrenderer3d = new BarRenderer3D(); //数据字体颜色 custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK); custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); custombarrenderer3d.setBaseItemLabelsVisible(true); categoryPlot.setRenderer(custombarrenderer3d); //图片路径 FileOutputStream fos_jpg = null; try { isChartPathExist(Savepath()); String chartName = Savepath() + charName; fos_jpg = new FileOutputStream(chartName); // 将报表保存为JPG文件 ChartUtilities.writeChartAsJPEG(fos_jpg, chart,780, 370); } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos_jpg.close(); } catch (Exception e) { e.printStackTrace(); } } return chart; } /** * 折线图样式 * @param chartTitle * @param x * @param y * @param xyDataset * @param charName * @return */ public JFreeChart createTimeXYChar(String chartTitle, String x, String y, CategoryDataset xyDataset, String charName) { JFreeChart chart = ChartFactory.createLineChart(chartTitle, x, y, xyDataset, PlotOrientation.VERTICAL, true, true, false); // 设置消除字体的锯齿渲染(解决中文问题) chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); chart.setTextAntiAlias(false); chart.setBackgroundPaint(Color.RED); // 设置图标题的字体重新设置title Font font = new Font("宋体", Font.BOLD, 20); TextTitle title = new TextTitle(chartTitle); title.getBackgroundPaint(); //设置字体颜色 title.setPaint(Color.BLUE); title.setFont(font); chart.setTitle(title); CategoryPlot plot = chart.getCategoryPlot(); CategoryAxis valueAxis = plot.getDomainAxis(); // 设置x轴上面的字体 valueAxis.setTickLabelFont(new Font("宋书", Font.ITALIC, 12)); // 设置X轴的标题文字 valueAxis.setLabelFont(new Font("黑体", Font.CENTER_BASELINE, 13)); //设置主标题 TextTitle subtitle = new TextTitle("日时间段访问量对比",new Font("宋体", Font.BOLD, 12)); chart.addSubtitle(subtitle); NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis(); // 设置y轴上的字体 numberAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13)); // 设置y轴上的标题字体 numberAxis.setLabelFont(new Font("黑体", Font.CENTER_BASELINE, 13)); // 设置底部的字体 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); // 设置面板字体 Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12); chart.setBackgroundPaint(Color.WHITE); CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); // x轴 // 分类轴网格是否可见 categoryplot.setDomainGridlinesVisible(true); // y轴 //数据轴网格是否可见 categoryplot.setRangeGridlinesVisible(true); categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩 categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩 categoryplot.setBackgroundPaint(Color.lightGray); // 设置轴和面板之间的距离 // categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); CategoryAxis domainAxis = categoryplot.getDomainAxis(); domainAxis.setLabelFont(labelFont);// 轴标题 domainAxis.setTickLabelFont(labelFont);// 轴数值 // domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.4)); domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); // 横轴上的 // Lable // 45度倾斜 // 设置距离图片左端距离 domainAxis.setLowerMargin(0.0); // 设置距离图片右端距离 domainAxis.setUpperMargin(0.0); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); numberaxis.setAutoRangeIncludesZero(true); // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!! LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer(); //XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) categoryplot.getRenderer();//改变曲线颜色 lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见 lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见 // 显示折点数据 lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); lineandshaperenderer.setBaseItemLabelsVisible(true); //图片路径 FileOutputStream fos_jpg = null; try { isChartPathExist(Savepath()); String chartName = Savepath() + charName; fos_jpg = new FileOutputStream(chartName); // 将报表保存为JPG文件 ChartUtilities.writeChartAsJPEG(fos_jpg, chart,780, 370); } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos_jpg.close(); } catch (Exception e) { e.printStackTrace(); } } return chart; } }
Action方法很简单,主要是获得数据集。
//用户统计 public String getstutasCountJFreechart(){ // 有序排序 LinkedHashMap<String, Object> parameters = new LinkedHashMap<String, Object>(); if (StringUtils.isNotBlank(stautsMonth)) { parameters.put("stautsMonth", stautsMonth); } int year = Integer.parseInt(stautsMonth.substring(0, 4)); int month =Integer.parseInt(stautsMonth.substring(5, 7)); double[][] data = new double[1][5]; int i = 0; for (Map.Entry<String, Integer> entry : manager.UserCount(parameters).entrySet()) { String value = entry.getValue().toString(); data[0][i++] =Double.parseDouble(value); } /*for (int x = 0; x < data.length; x++) { for (int y = 0; y < data[x].length; y++) { System.out.println(data[x][y]); } }*/ String[] rowKeys = { "注册用户统计图" + " " + year +"年"+ month +"月"}; String[] columnKeys = { "待激活", "激活", "暂停", "黑名单", "作废" }; try { CreateLinechart demo = new CreateLinechart(); getResponse().setContentType("image/jpg"); chart = demo.createBarChart3D("", "","数量", demo.getBarData(rowKeys, columnKeys,data), "chartStatus.jpg"); //chart = demo.createBarChart3D("", "","数量", demo.getBarData(rowKeys, columnKeys,data), PlotOrientation.VERTICAL, true, true, true); ChartUtilities.writeChartAsJPEG(getResponse().getOutputStream(), chart, 780, 370, null); } catch (Exception e) { e.printStackTrace(); } return SUCCESS; }
发表评论
-
JUnit4操作步骤及注意事项
2012-06-29 15:20 11935使用jUnit4的操作步骤及 ... -
下拉列表框的两种方式
2012-06-16 16:19 1512下拉列表框的标签是<select>,struts2 ... -
mysql 中文乱码解决办法总结
2012-04-15 12:13 1349mysql 中文乱码解决办法 ... -
Struts2 API中InputConfig内methodName和resultName的使用方法
2012-04-09 18:59 4140关于Struts2 API中InputConfig内metho ... -
jQuery获取及设置单选框,多选框,文本框内容
2012-04-08 16:56 8761在工作中,text,radio,checkbox,select ... -
java那些事
2012-03-12 19:40 1022JAVA编程中尽量要做到的一些地方 1.尽量使用Stri ... -
字符串截取方法总结
2012-03-11 21:57 1301字符串截取 今在jsp页面中截取一段字符显示.项目用的stru ... -
批量处理
2012-03-06 18:16 1247jquery中出现#('#xxxx') is null 的原因 ... -
struts2整合CKEditor实现上传
2011-11-02 22:52 3584之前折腾了下CKEditor和CKFinder实现上传功能,今 ... -
CKEditor整合CKFinder实现上传
2011-10-31 20:43 6053目前在做的一个项目中要用到文本编辑器,以前用的比较多的是FCk ... -
struts2校验框架使用总结
2011-10-28 18:41 1341这些天一直在赶手上做的那个游戏平台项目.怎么说呢,狭小的空间范 ... -
addActionError,addFieldError,addActionMessage用法
2011-09-18 21:25 1184一、addActionError("错误内容&quo ... -
keySet()与entrySet()遍历的性能比较
2011-09-08 19:56 3571在做项目的时候有邮件发送方面的业务.对邮件的收发的业务不是很清 ... -
JavaMail发送邮件
2011-08-23 20:55 1154/** package cn.tq.javamail; ... -
Vector和ArrayList的区别
2011-08-23 20:46 8671.Vector和ArrayList在使用上非常相似,都可用来 ... -
struts2自带demo
2011-06-12 04:55 1825struts-2.1.6 下载下来解压后APPs目录下有 1 ... -
struts2的select标签
2011-05-27 12:57 838struts2的select标签中,常用的有以下几个属性: ... -
常用标签
2011-05-26 16:20 972struts2标签 一、 写jsp页面的时候,在struts ... -
JAP实现方法
2011-05-10 21:13 1162package cn.itcast.service.base; ... -
SVN 签出源码 Struts Spring Hibernate
2011-05-09 15:59 911很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习 ...
相关推荐
在将Struts2与JFreeChart整合的过程中,主要涉及以下几个关键知识点: 1. **Struts2架构理解**:Struts2框架提供了Action、Interceptor(拦截器)、Result和ValueStack等核心概念,帮助开发者实现业务逻辑和视图的...
至此,你已经成功地在Struts2应用中整合了JFreeChart,实现了动态生成并展示图表的功能。这个实例虽然简单,但对于理解和学习这两个库的结合使用是非常有帮助的。你可以根据实际需求,自定义图表样式,调整数据源,...
**Struts2与JFreeChart整合** 整合Struts2和JFreeChart,主要是为了让Struts2的Action能够生成JFreeChart图表,并将其以图片或其他格式返回给客户端。以下是一般的整合步骤: 1. **引入依赖**: 在项目中添加Struts...
使用JFreeChart,必须调用在web-inf目录下导入jfreechart.jar,和jcommon.jar包 使用jfreechart-1.0.13.jar查看图表时中文乱码,降低jfreechart版本ok 显示图表时都可以在获取JfreeChart对象方法中使用3D方式 ...
总的来说,将Struts2与JFreeChart整合并成功显示图形需要对这两个框架有深入的理解,同时需要注意依赖管理、数据处理、视图渲染和调试技巧。只有当所有这些环节都正确无误,才能确保图形的顺利展示。如果你在实际...
这个插件包含了Struts2与JFreeChart整合所需的功能。同时,还需要`jfreechart-1.0.9.jar`和`jcommon-1.0.12.jar`这两个JFreeChart的基础库,它们是创建图表的核心组件。 2. **配置Struts2**:在Struts2的配置文件`...
在压缩包中的"struts2-jfreechart-plugin-2.1.6.jar" 文件,是实际的插件实现,包含了将Struts2与JFreeChart整合所需的所有类和资源。这个jar文件需要被添加到项目的类路径中,以便于在Struts2应用中使用。 ...
将Struts2与JFreeChart整合,可以让开发者在Web应用中方便地展示数据图表。 在整合过程中,通常会涉及到三个主要的组件: 1. **jcommon**:这是一个基础组件,包含了JFreeChart需要的许多通用工具和类,如颜色管理...
首先,整合Struts2和JFreeChart的首要步骤是确保在项目中引入JFreeChart和相关依赖。你需要在你的Maven或Gradle配置文件中添加JFreeChart的依赖,通常为以下形式: ```xml <groupId>org.jfree <artifactId>...
### Struts2.0与JFreeChart整合:深入解析与实践 #### 一、整合概述 Struts2作为Java Web开发中的MVC框架,提供了强大的控制器功能,而JFreeChart则是一款优秀的开源Java图表库,专门用于在Web应用中生成各种统计...
Struts2和JFreeChart是两个在Java Web开发中广泛使用的开源库。Struts2是一个强大的MVC(Model-View-...记住,实践是最好的老师,尝试运行和修改这些示例,将有助于你更好地掌握Struts2和JFreeChart的整合技巧。
struts2整合JFreechart: jcommon-1.0.16.jar jfreechart-1.0.13.jar struts2-jfreechart-plugin-2.0.11.jar 导成图片操作说明
其中`struts2-jfreechart-plugin-x.x.x.jar`是实现Struts2与JFreeChart整合的关键组件。 ##### 2.2 配置Web环境 在`web.xml`中添加Struts2的过滤器配置,如下所示: ```xml xmlns:xsi=...
5. **整合与部署**:将Struts2和JFreeChart的代码整合到一个Web项目中,包括添加依赖库,配置Web.xml,以及打包和部署到服务器(如Tomcat)的过程。 6. **前端交互**:尽管示例可能不涉及复杂的前端交互,但理解...
总的来说,Struts2与JFreeChart的整合是Java Web开发中常见的需求,它可以帮助我们创建交互式的、数据驱动的图表应用。通过理解JFreeChart的图表生成原理,掌握Struts2的Action和结果类型,以及熟悉Web应用的图像...
Struts+jfreeChart整合注意事项以及代码实现
3. **Struts2-JFreeChart插件包**:`struts2-jfreechart-plugin-2.1.8.1.jar`,该插件提供了Struts2与JFreeChart之间的桥梁,使得图表生成更加便捷。 #### 三、配置步骤 接下来,我们按照以下步骤进行配置: #####...
整合Struts2和JFreeChart,主要是为了在web应用中展示动态生成的数据图表,例如报表。以下是整合的步骤和关键知识点: 1. **下载和引入JFreeChart库**: 首先,你需要从JFreeChart的官方网站...
Struts2 框架与 JFreeChart 的整合允许开发者在 Web 应用程序中创建交互式的图表,如饼图、柱状图等。JFreeChart 是一个强大的 Java 图表库,可以生成高质量的静态图表,而 Struts2 则是用于构建 MVC(模型-视图-...