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">
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>
org.jfree.chart.servlet.DisplayChart
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/DisplayChart</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>JFreeChart</servlet-name>
<servlet-class>test.JFreeChartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JFreeChart</servlet-name>
<url-pattern>/JFreeChart</url-pattern>
</servlet-mapping>
</web-app>
------------------------------------------------
JFreeChartServlet
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("初级程序员", 10000);
dataset.setValue("中级程序员", 23000);
dataset.setValue("高级程序员", 10000);
dataset.setValue("项目经理", 6000);
dataset.setValue("系统分析师", 6000);
dataset.setValue("软件架构师", 3000);
dataset.setValue("其他", 10000);
JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图",dataset, true, false, false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setStartAngle(150D);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5F);
plot.setNoDataMessage("无数据显示");
plot.setCircular(true);
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}={2}"));
//第一种 session方式
//String fileName = ServletUtilities.saveChartAsPNG(chart, 700, 400,
// null, request.getSession());
//String graphURL = request.getContextPath() + "/DisplayChart?filename=" + fileName;
//request.setAttribute("url", graphURL);
//request.getRequestDispatcher("index.jsp").forward(request, response);
//第二种 流输出方式
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);
}
-----------------------------------------------------------
jsp
//第一种 session方式
<%@ page contentType="text/html;"%>
<img src="<%=request.getAttribute("url")%>">
/第二种 流输出方式
<%@ page contentType="image/jpeg;"%>
<img src="<%=request.getContextPath()%>/JFreeChart">
流输出方式怎么不显示?
大家来看看
那就是:
[code="java"]response.setContentType("image/jpeg"); [/code]
[code="java"]
//获得OutputStream对象
OutputStream os = response.getOutputStream();
//以PNG格式向客户端输出
ChartUtilities.writeChartAsPNG(os, chart, width, height);
[/code]
您试试看分开写怎么样。
response.setContentType("image/png");
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);
路径拿出来看看对不对。
明显是 第二种方式的 ContentType设置有误!!
这是错误的!
[quote][b]
<%@ page contentType="image/jpeg;"%>/JFreeChart">
/code]
应该是这样的:
[code="xml"]
<%@ page contentType="text/html;"%>
[color=blue][b]
你总共有2个错误:
1、与流方式对应的servlet采用的是POST的方法[/b][/color]
[code="java"]/JFreeChart">
[/code]
[b]这样就清楚了!![/b]
[color=blue][b]更改建议,和你的错误相应:
1、test.JFreeChartServlet的Servelt方法提供一个GET的入口。[/b][/color]
[code="java"] public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}[/code]
[color=blue][b]
2、更改JSP的MIME设置:[/b][/color]
[code="xml"]<%@ page contentType="text/html;"%>
我在Firefox中测试,你的项目不用修改,即可运行。
但是在IE下有问题。
更新下JfreeChart的jar包,更新到1.0.13,就没有问题了。
PS:你的代码中,明显MIME有误,虽然不影响显示,但是还是用注意。
[code="java"] response.setContentType("image/png");
//第二种 流输出方式
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);[/code]
改为:
[code="java"] response.setContentType("image/jpeg");
//第二种 流输出方式
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);[/code]
[b]
更新jar包后,会产生中文乱码,这个要通过 设置字体 来解决[/b]