前言
关于struts2入门以及提高等在这里就不介绍了,但是关于struts2的学习有以下推荐:
struts2-showcase-2.0.6.war:这个是官方自带的demo(struts-2.0.6-all.zip\struts-2.0.6\apps目录下),非常全面,直接部署就可以了(很多朋友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
<?xml version="1.0" encoding="utf-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filterdispatcher
</filter-class>
</filter>
<filter-mapping>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts.xml
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-jfreechart.xml" />
</struts>
struts.properties
struts.ui.theme=simple
struts-jfreechart.xml
<!doctype struts public
"-//apache software foundation//dtd struts configuration 2.0//en"
<package name="jfreechartdemonstration" extends="struts-default"
namespace="/jfreechart">
<result-types>
<result-type name="chart" class="org.apache.struts2.dispatcher.chartresult"></result-type>
</result-types>
<action name="jfreechartaction" class="com.tangjun.struts2.jfreechartaction">
<result type="chart">
<param name="width">400</param>
<param name="height">300</param>
</result>
</action>
</package>
说明:这里只需要说明下struts-jfreechart.xml,这里直接调用已经写好的类chartresult,这个类是继承自com.opensymphony.xwork2.result,传入生成图片大小的参数width和height就可以了。
2. 新建jfreechartaction继承actionsupport,生成jfreechart对象并保存到chart中,注意这个名称是固定的。
package com.tangjun.struts2;
import com.opensymphony.xwork2.actionsupport;
import org.jfree.chart.chartfactory;
import org.jfree.chart.jfreechart;
import org.jfree.data.general.defaultpiedataset;
public class jfreechartaction extends actionsupport {
/**
*
*/
private static final long serialversionuid = 5752180822913527064l;
//供chartresult调用->actioninvocation.getstack().findvalue("chart")
private jfreechart chart;
@override
public string execute() throws exception {
//设置数据
defaultpiedataset data = new defaultpiedataset();
data.setvalue("java", new double(43.2));
data.setvalue("visual basic", new double(1.0));
data.setvalue("c/c++", new double(17.5));
data.setvalue("tangjun", new double(60.0));
//生成jfreechart对象
chart = chartfactory.createpiechart("pie chart", data, true,true, false);
return success;
}
public jfreechart getchart() {
return chart;
public void setchart(jfreechart chart) {
this.chart = chart;
}
ok!至此代码已经全部贴完。
输入访问 http://localhost:8080/struts2jfreechart/jfreechart/jfreechartaction.action
显示结果如下:
补充
以上生成的图片是png格式的图片,如果需要自定义图片格式的话(好像只能支持jpg和png格式),那么自己写一个chartresult继承自strutsresultsupport,见代码:
package com.tangjun.struts2.chartresult;
import java.io.outputstream;
import javax.servlet.http.httpservletresponse;
import org.apache.struts2.servletactioncontext;
import org.apache.struts2.dispatcher.strutsresultsupport;
import org.jfree.chart.chartutilities;
import com.opensymphony.xwork2.actioninvocation;
public class chartresult extends strutsresultsupport {
private static final long serialversionuid = 4199494785336139337l;
//图片宽度
private int width;
//图片高度
private int height;
//图片类型 jpg,png
private string imagetype;
protected void doexecute(string arg0, actioninvocation invocation) throws exception {
jfreechart chart =(jfreechart) invocation.getstack().findvalue("chart");
httpservletresponse response = servletactioncontext.getresponse();
outputstream os = response.getoutputstream();
if("jpeg".equalsignorecase(imagetype) || "jpg".equalsignorecase(imagetype))
chartutilities.writechartasjpeg(os, chart, width, height);
else if("png".equalsignorecase(imagetype))
chartutilities.writechartaspng(os, chart, width, height);
else
os.flush();
public void setheight(int height) {
this.height = height;
public void setwidth(int width) {
this.width = width;
public void setimagetype(string imagetype) {
this.imagetype = imagetype;
如此的话还需要小小的修改一下struts-jfreechart.xml:
<!-- 自定义返回类型 -->
<!--
-->
<result-type name="chart" class="com.tangjun.struts2.chartresult.chartresult"></result-type>
<!--
-->
<param name="imagetype">jpg</param>
ok!显示的效果是一样的,只是图片格式不一样,当然这里面你可以做更多操作!
转载:http://www.cnblogs.com/over140/archive/2007/11/25/971663.html