标签:
前言
关于Struts2入门以及提高等在这里就不介绍了,但是关于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> <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
struts.ui.theme=simple
struts-jfreechart.xml
<!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. 新建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 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 imageType; @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(imageType) || "jpg".equalsIgnoreCase(imageType)) ChartUtilities.writeChartAsJPEG(os, chart, width, height); else if("png".equalsIgnoreCase(imageType)) 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 imageType) { this.imageType = imageType; } }
如此的话还需要小小的修改一下struts-jfreechart.xml:
<!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="imageType">jpg</param> </result> </action> </package> </struts>
OK!显示的效果是一样的,只是图片格式不一样,当然这里面你可以做更多操作!
标签:
原文地址:http://www.cnblogs.com/zhujiabin/p/4521571.html