<%@page contentType="text/html;charset=GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.PiePlot"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.labels.StandardPieToolTipGenerator"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%DefaultPieDataset data = new DefaultPieDataset(); 
//数据初始化
data.setValue("高中以下",380); 
data.setValue("高中",1620); 
data.setValue("大专",6100); 
data.setValue("本科",8310); 
data.setValue("硕士",3520); 
data.setValue("博士",1900); //HttpSession session = request.getSession();PiePlot plot = new PiePlot(data);//生成一个3D饼图 
plot.setURLGenerator(new StandardPieURLGenerator("ratings_chart.jsp"));//设定图片链接 
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true); 
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色 
chart.setTitle("程序员学历情况调查表-By Alpha");//可选,设置图片标题 
plot.setToolTipGenerator(new StandardPieToolTipGenerator()); 
StandardEntityCollection sec = new StandardEntityCollection(); 
ChartRenderingInfo info = new ChartRenderingInfo(sec); 
PrintWriter w = new PrintWriter(out);//输出MAP信息 
//500是图片长度,300是图片高度
//String filename = ServletUtilities.saveChartAsPNG(chart,500,300,info,session); 
String filename = ServletUtilities.saveChartAsJPEG(chart,500,300,info,session); 
ChartUtilities.writeImageMap(w,"map0",info,false); 
 String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
 System.out.println("graphURL="+graphURL);
 %>
<LINK href="/css/style.css" type=text/css rel=stylesheet>
<html:form action="/ratings/chart.shtml" onsubmit="return false">
            <td background="/images/H-14.jpg"><table width="508" border="0" align="center" cellpadding="0" cellspacing="0">
                      <tr>
                      <%String name=(String)request.getAttribute("channelName"); %>
                        <td height="22" class="C3"><div align="center" class="A8"><%=name %></div></td>
                      </tr>
                      <tr>
                        <td height="20" class="C3"><div align="center" class="C3"><%=request.getParameter("data") %></div></td>
                      </tr>
                      <tr>
                        <td><img src="/images/H-13.jpg" width="508" height="22"></td>
                      </tr>
                      <tr>
                        <td><table width="480" border="0" align="center" cellpadding="0" cellspacing="0">
                          <tr>
                            <td height="3"></td>
                          </tr>
                          <tr>
                            <td><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0"> 
</td>
                          </tr>
                          <tr>
                            <td height="3"></td>
                          </tr>
                        </table></td>
                      </tr>
                    </table>
                    
                    </td>
</html:form>
这是一个jFreeChart生成的图片,
得到的图片路径为:graphURL=/servlet/DisplayChart?filename=jfreechart-20378.jpeg,请问该怎么样得到正确的路径呢,我用过getRealPath的方法,得到的路径为:graphURL=D:\Workspace\AdvertiseWebApp\WebRoot\/servlet/DisplayChart?filename=jfreechart-20375.jpeg 也是错误的路径,所以向大家请教
 request.getContextPath()得到的路径仿佛为空,

解决方案 »

  1.   

    本人已经在web.xml加入了如下代码:  <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>/servlet/DisplayChart</url-pattern>
        </servlet-mapping>
      

  2.   

    你那肯定显示不出来啊?
    把这个地方:<td><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#map0"> </td>
    改成:<td><img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%=filename %>"> </td>
      

  3.   

    还是一样啊,得到的图片路径还是
    graphURL=/servlet/DisplayChart?filename=jfreechart-20381.jpeg,我觉得是图片路径没获取对
      

  4.   

    把这个:<img src=" <%= graphURL %>" width=500 height=300 border=0 usemap="#map0"> 
    改成:<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%=filename %>">
      

  5.   

    你看下,这是我上个星期为做的公司电线直径曲线图,已经实现了.
    WEB.XML的代码和你的一样:
    <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>/servlet/DisplayChart</url-pattern>
        </servlet-mapping><%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ page import = "java.io.PrintWriter" %>
    <%@ page import =" java.awt.*,
    java.text.SimpleDateFormat,
    java.util.Date,
    java.lang.StringBuffer,
    java.text.SimpleDateFormat,
    javax.swing.JPanel,
    org.jfree.chart.ChartFactory,
    org.jfree.chart.ChartPanel,
    org.jfree.chart.JFreeChart,
    org.jfree.chart.axis.DateAxis,
    org.jfree.chart.plot.XYPlot,
    org.jfree.chart.renderer.xy.XYItemRenderer,
    org.jfree.chart.renderer.xy.XYLineAndShapeRenderer,
    org.jfree.data.time.*,
    org.jfree.data.time.TimeSeries,
    org.jfree.data.time.TimeSeriesCollection,
    org.jfree.data.xy.XYDataset"%>
    <%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
    <%@ page import="java.util.*"%>
    <%@ page import = "org.jfree.ui.RectangleInsets"%>
    <%@ page import = "java.sql.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>芯线线径线上系统曲线图表</title>
    <style type="text/css">
    <!--
    .STYLE1 {font-size: 12px}
    a:link {
    text-decoration: none;
    }
    a:visited {
    text-decoration: none;
    }
    a:hover {
    text-decoration: none;
    }
    a:active {
    text-decoration: none;
    }
    -->
    </style>
    </head><body>
           <p align="center">
    <%
    SimpleDateFormat   format   =   new   SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    Date date = new Date();
    Date date1=new Date(); 
    date1.setHours((int) (date.getHours()-1)); 
    String backtime=date1.toLocaleString(); 
    String currenttime=(date.toLocaleString());
    String starttime=request.getParameter("starttime");
    String endtime=request.getParameter("endtime");
    String machineid=request.getParameter("select");
    //连接数据库
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
    String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dx-exam";
    String usr="sa";
    String pwd="sa";
    Connection conn=DriverManager.getConnection(url,usr,pwd);
    Statement stmt=conn.createStatement();String sql="select * from data where time BETWEEN dateadd(hh,-1,getDate()) and getDate() and MachineId="+machineid;ResultSet rs=stmt.executeQuery(sql);
    //设置曲线
    TimeSeries timeseries = new TimeSeries("曲线动态图",Second.class);//时间的最小单位为秒,线值名是“曲线图”
    //从数据库中取值,数据和时间
    while(rs.next())
    {float y0=rs.getFloat("Data");
    float y1=y0/1000;
    String s=rs.getString("Time");//从yyyyMMddHHmm时间格式的char中取出年月日小时秒设为int值
    int x=Integer.parseInt(s.substring(0,4));
    int y=Integer.parseInt(s.substring(5,7));
    int z=Integer.parseInt(s.substring(8,10));
    int a=Integer.parseInt(s.substring(11,13));
    int b=Integer.parseInt(s.substring(14,16));
    int c=Integer.parseInt(s.substring(17,19));
    timeseries.addOrUpdate(new Second(c,b,a,z,y,x),y1);}
    //连接曲线
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(timeseries);
    dataset.setDomainIsPointsInTime(true);
    //设置曲线图
    XYDataset xydataset = (XYDataset) dataset;
    JFreeChart chart = ChartFactory.createTimeSeriesChart(
    "曲线动态图",
    "时间",
    "电线铜丝数据",
    xydataset,
    true,
    true,
    true
    );
    chart.setBackgroundPaint(Color.white);//设置曲线图背景色
    XYPlot plot = (XYPlot) chart.getPlot();
    XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)plot.getRenderer();
    plot.setBackgroundPaint(Color.white);//设置网格背景颜色
    plot.setDomainGridlinePaint(Color.red);//设置网格竖线颜色
    plot.setRangeGridlinePaint(Color.pink);//设置网格横线颜色
    plot.setAxisOffset(new RectangleInsets(0D, 0D, 0D, 10D));//设置曲线图与xy轴的距离
    xylineandshaperenderer.setBaseShapesVisible(true);//设置曲线是否显示数据点
    String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="+filename;
    %>
      <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%=filename %>"></p>
      <div align="center"><span class="STYLE1">由方式二查询的结果曲线,本次查询的数据来自于机器号为</span>: <%=machineid%>  </div>
      <p align="center">&nbsp;</p>
      <p align="center"><a href="login2_to.jsp" class="STYLE1">返回到设定页面&gt;&gt;</a></p>
      <p align="center">&nbsp;</p>
    <p align="center">&nbsp;</p>
    <p align="center"><a href="index.jsp"></a></p>
    </body> </html>
      

  6.   

    谢谢楼上的兄弟,这句我是按照你的改的
    <img src=" <%= graphURL %>" width=500 height=300 border=0 usemap="# <%=filename %>"> </p> 
    可是graphURL变量得到的值是什么呀
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="+filename; 
    我的这个request.getContextPath()得不到值啊,所以我怀疑是图片路径的问题
      

  7.   

    谢谢了,问题解决了,原来是图片格式的问题
    String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); 
    写成了
    String filename = ServletUtilities.saveChartAsJPEG(chart, 500, 300, null, session);