補充
以上生成的圖片是PNG格式的圖片,若是須要自定義圖片格式的話(好像只能支持JPG和PNG格式),那麼本身寫一個ChartResult繼承自StrutsResultSupport,見代碼: java
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
org.jfree.chart.JFreeChart;
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 p_w_picpathType;
@Override
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(p_w_picpathType)
||
"
jpg
"
.equalsIgnoreCase(p_w_picpathType))
ChartUtilities.writeChartAsJPEG(os, chart, width, height);
else
if
(
"
png
"
.equalsIgnoreCase(p_w_picpathType))
ChartUtilities.writeChartAsPNG(os, chart, width, height);
else
ChartUtilities.writeChartAsJPEG(os, chart, width, height);
os.flush();
}
public
void
setHeight(
int
height) {
this
.height
=
height;
}
public
void
setWidth(
int
width) {
this
.width
=
width;
}
public
void
setImageType(String p_w_picpathType) {
this
.p_w_picpathType
=
p_w_picpathType;
}
}
如此的話還須要小小的修改一下struts-jfreechart.xml:web
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
<
package
name
="jFreeChartDemonstration"
extends
="struts-default"
namespace
="/jfreechart"
>
<!--
自定義返回類型
-->
<
result-types
>
<!--
<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"></result-type>
-->
<
result-type
name
="chart"
class
="com.tangjun.struts2.chartresult.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>
-->
<
result
type
="chart"
>
<
param
name
="width"
>
400
</
param
>
<
param
name
="height"
>
300
</
param
>
<
param
name
="p_w_picpathType"
>
jpg
</
param
>
</
result
>
</
action
>
</
package
>
</
struts
>
OK!顯示的效果是同樣的,只是圖片格式不同,固然這裏面你能夠作更多操做!apache
前言
關於Struts2入門以及提升等在這裏就不介紹了,可是關於Struts2的學習有如下推薦:app
- 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算是比較全的了,寫得很詳細。
- The Code Project、Google - CodeSearch、Koders:這幾個代碼搜索網站在我找不到中文資料甚至英文文章的時候幫了我大忙!
關於JFreeChart入門等這裏我也不打算介紹了,中文資料不少了。
ide
正題
下面以邊帖圖片和代碼的方式來說解Struts2與JFreeChart的整合。
搭建環境:首先帖一張工程的目錄結構以及所需的jar包。注意:若是你不打算本身寫ChartResult的話只須要引入struts2-jfreechart-plugin-2.0.6.jar(這個在struts-2.0.6-all.zip能夠找到了):
![](http://static.javashuo.com/static/loading.gif)
1.依次帖web.xml、struts.xml、struts.properties和struts-jfreechart.xml幾個配置文件的代碼:
web.xml
新建JFreeChartAction繼承ActionSupport,生成JFreeChart對象並保存到chart中,注意這個名稱是固定的。
學習
<?
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
>
<
filter-name
>
struts2
</
filter-name
>
<
url-pattern
>
/*
</
url-pattern
>
</
filter-mapping
>
</
web-app
>
struts.xml
網站
<?
xml version="1.0" encoding="UTF-8"
?>
<!
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
ui
struts.ui.theme
=
simple
struts-jfreechart.xml this
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
<
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
>
說明:這裏只須要說明下struts-jfreechart.xml,這裏直接調用已經寫好的類ChartResult,這個類是繼承自com.opensymphony.xwork2.Result,傳入生成圖片大小的參數width和height就能夠了。
2.google
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 顯示結果以下: