补充
以上生成的图片是PNG格式的图片,如果需要自定义图片格式的话(好像只能支持JPG和PNG格式),那么自己写一个ChartResult继承自StrutsResultSupport,见代码:
packagecom.tangjun.struts2.chartresult;importjava.io.OutputStream;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts2.ServletActionContext;importorg.apache.struts2.dispatcher.StrutsResultSupport;importorg.jfree.chart.ChartUtilities;importorg.jfree.chart.JFreeChart;importcom.opensymphony.xwork2.ActionInvocation;publicclassChartResultextendsStrutsResultSupport {/****/privatestaticfinallongserialVersionUID=4199494785336139337L;//图片宽度privateintwidth;//图片高度privateintheight;//图片类型 jpg,pngprivateString p_w_picpathType;
@OverrideprotectedvoiddoExecute(String arg0, ActionInvocation invocation)throwsException {
JFreeChart chart=(JFreeChart) invocation.getStack().findValue("chart");
HttpServletResponse response=ServletActionContext.getResponse();
OutputStream os=response.getOutputStream();if("jpeg".equalsIgnoreCase(p_w_picpathType)||"jpg".equalsIgnoreCase(p_w_picpathType))
ChartUtilities.writeChartAsJPEG(os, chart, width, height);elseif("png".equalsIgnoreCase(p_w_picpathType))
ChartUtilities.writeChartAsPNG(os, chart, width, height);elseChartUtilities.writeChartAsJPEG(os, chart, width, height);
os.flush();
}publicvoidsetHeight(intheight) {this.height=height;
}publicvoidsetWidth(intwidth) {this.width=width;
}publicvoidsetImageType(String p_w_picpathType) {this.p_w_picpathType=p_w_picpathType;
}
}
如此的话还需要小小的修改一下struts-jfreechart.xml:
struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">400300jpg
OK!显示的效果是一样的,只是图片格式不一样,当然这里面你可以做更多操作!
前言 关于Struts2入门以及提高等在这里就不介绍了,但是关于Struts2的学习有以下推荐:
struts2-showcase-2.0.6.war:这个是官方自带的Demo(struts-2.0.6-all.zip\struts-2.0.6\apps目录下),非常全面,直接部署就可以了(很多朋友Struts2能学很好我估计还是直接从这里学来的)。
wiki-WebWork:入了门的朋友应该都知道,strust2由webwork2和struts1.x合并起来的,但主要还是以webwork2为主,所以如果找不到Struts2的资料可以找WebWork资料看看。
Max On Java的博客,他的博客的资料在中文的Struts2算是比较全的了,写得很详细。
关于JFreeChart入门等这里我也不打算介绍了,中文资料很多了。
正题
下面以边帖图片和代码的方式来讲解Struts2与JFreeChart的整合。 搭建环境:首先帖一张工程的目录结构以及所需的jar包。注意:如果你不打算自己写ChartResult的话只需要引入struts2-jfreechart-plugin-2.0.6.jar(这个在struts-2.0.6-all.zip可以找到了):
1.依次帖web.xml、struts.xml、struts.properties和struts-jfreechart.xml几个配置文件的代码:
web.xml新建JFreeChartAction继承ActionSupport,生成JFreeChart对象并保存到chart中,注意这个名称是固定的。
<?xml version="1.0" encoding="UTF-8"?>
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">struts2org.apache.struts2.dispatcher.FilterDispatcherstruts2/*
struts.xml
<?xml version="1.0" encoding="UTF-8"?>struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
struts.properties
struts.ui.theme=simple
struts-jfreechart.xml
struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">400300
说明:这里只需要说明下struts-jfreechart.xml,这里直接调用已经写好的类ChartResult,这个类是继承自com.opensymphony.xwork2.Result,传入生成图片大小的参数width和height就可以了。
2.
packagecom.tangjun.struts2;importcom.opensymphony.xwork2.ActionSupport;importorg.jfree.chart.ChartFactory;importorg.jfree.chart.JFreeChart;importorg.jfree.data.general.DefaultPieDataset;publicclassJFreeChartActionextendsActionSupport {/****/privatestaticfinallongserialVersionUID=5752180822913527064L;//供ChartResult调用->ActionInvocation.getStack().findValue("chart")privateJFreeChart chart;
@OverridepublicString execute()throwsException {//设置数据DefaultPieDataset data=newDefaultPieDataset();
data.setValue("Java",newDouble(43.2));
data.setValue("Visual Basic",newDouble(1.0));
data.setValue("C/C++",newDouble(17.5));
data.setValue("tangjun",newDouble(60.0));//生成JFreeChart对象chart=ChartFactory.createPieChart("Pie Chart", data,true,true,false);returnSUCCESS;
}publicJFreeChart getChart() {returnchart;
}publicvoidsetChart(JFreeChart chart) {this.chart=chart;
}
}
OK!至此代码已经全部贴完。
输入访问 http://localhost:8080/Struts2JFreeChart/jfreechart/JFreeChartAction.action
显示结果如下: