jfreechart在jsp中画图方式

这个问题一直困扰我好久,今天算是稍微找到一点解决思路了,在网上搜了好多列子,大部分的都是用servlet来实现画图,偶然找到一个列子用的是org.jfree.chart.servlet.ServletUtilities,来解决图片从后台传到前台的方法,下面是源码。

1.在MyEclipse中创建一个名为jfreechart的Web工程。将下载的JFreeChart1.0.6下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。另外还需要在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>/DisplayChart</url-pattern>
    </servlet-mapping>

2.在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。首先在该目录下建立一个sample1.jsp文件,让我们来看一个简单的柱状图的例子,修改后的sample1.jsp的内容如下所示:

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.chart.ChartFactory,
        org.jfree.chart.JFreeChart,
        org.jfree.chart.plot.PlotOrientation,
        org.jfree.chart.servlet.ServletUtilities,
        org.jfree.data.category.DefaultCategoryDataset,
        java.awt.Font,
        org.jfree.chart.ChartFrame,
        org.jfree.chart.StandardChartTheme,
        org.jfree.chart.axis.CategoryAxis,
        org.jfree.chart.labels.StandardCategoryItemLabelGenerator,
        org.jfree.chart.plot.CategoryPlot,
        org.jfree.chart.renderer.category.BarRenderer,
        org.jfree.data.category.CategoryDataset,
        java.io.FileOutputStream,
        java.io.IOException,
        java.io.PrintWriter,
        org.jfree.chart.ChartUtilities,
        org.jfree.chart.axis.ValueAxis,
        org.jfree.chart.title.LegendTitle,
        org.jfree.chart.title.TextTitle"
%>
<%
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(610, "广州", "猪肉");
    dataset.addValue(220, "广州", "牛肉");
    dataset.addValue(530, "广州", "鸡肉");
    dataset.addValue(340, "广州", "鱼肉");

    JFreeChart mBarChart = ChartFactory.createBarChart3D("肉类销量统计图",
    "肉类",
    "销量",
    dataset,
    PlotOrientation.VERTICAL,
    false,
    false,
    false);    

                //图表标题设置
            TextTitle mTextTitle = mBarChart.getTitle();
            mTextTitle.setFont(new Font("黑体", Font.BOLD, 20));
            //mBarChart.setTitle(new TextTitle("学校人员分布图",new Font("黑体", Font.BOLD, 20)));
            //图表图例设置
            LegendTitle mLegend = mBarChart.getLegend();
            if(mLegend != null)
                mLegend.setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15));
            //mBarChart.getLegend().setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15));
            //设置柱状图轴
            CategoryPlot mPlot = (CategoryPlot)mBarChart.getPlot();  

            //x轴
            CategoryAxis mDomainAxis = mPlot.getDomainAxis();
            //设置x轴标题的字体
            mDomainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
            //设置x轴坐标字体
            mDomainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
            //y轴
            ValueAxis mValueAxis = mPlot.getRangeAxis();
            //设置y轴标题字体
            mValueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
            //设置y轴坐标字体
            mValueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
            //柱体显示数值
            BarRenderer mRenderer= new BarRenderer();
            mRenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
            mRenderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 10));
            mRenderer.setItemLabelsVisible(true);
            mPlot.setRenderer(mRenderer);  

            String filename = ServletUtilities.saveChartAsPNG(mBarChart, 800, 400, null, session);
            String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;
%>
<img src="<%= graphURL %>" width=800 height=400 border=0 usemap="#<%= filename %>">

浏览器端输入http://127.0.0.1:8080/jfreechart/sample1.jsp即可看到输出的图片。

时间: 2024-12-11 14:59:51

jfreechart在jsp中画图方式的相关文章

jsp中Get方式请求参数乱码的两种解决方式

第一种方式: <% //获取请求包含的下旬字符串 String rawQueryStr=request.getQueryString(); //使用URLDecoder解码祖父穿 String queryStr=URLDecoder.decode(rawQueryStr, "UTF-8"); //以&符号分解查询字符串 String paramPairs[]=queryStr.split("&"); for(String paramPair:p

jsp中include的两种方式

一.前言 身为一名coder有太多太多的知识点要去学,太多太多的东西要去记.往往一些小细节也就难免疏忽,但悲催的是多数困恼你的bug就是因为这些微不足道的知识点.我们又不是机器人,怎么可能什么都记得了呢.更多的是遇到问题->解决问题->成为经验,这种提升模式.其实多去交流,多去分享,在你还未遇到问题之前就能预先知晓解决方法,或许提升的更快. 二.JSP中include的两种方法 1.include指令: <%@include file="文件的绝对路径或者相对路径"%

jsp中的两种跳转方式分别是?有什么区别?

在JSP中跳转有两种方式 forward跳转:<jsp:forward page ="跳转页面地址"> response跳转:response.sendRedirect("跳转页面地址"); 两种跳转的区别如下 forward跳转: 服务器端跳转,地址栏不改变. 执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源). request设置的属性在跳转后的页面仍然可以使用. response跳转: 客户端跳转,地址栏改变. 所有代码

jsp中几种跳转方式和参数共享

整理了一下jsp入门中的跳转和数据共享问题,写成这篇博文希望对大家有帮助,参考文章列在后面: 常用的跳转方式有以下几种: (1)href超链接标记,属于客户端跳转 (2)使用javascript完成,属于客户端跳转 (3)提交表单完成跳转,属于客户端跳转 (4)使用response对象,属于客户端跳转 (5)使用requestDispatcher类,属于服务器跳转 下面一一来看 (1)href超链接标记 这个比较简单,通常写到a标签里即可,来完成指定位置的动态跳转比较方便 代码:<a href=

关于JSP中form的get和post提交方式

1. get是从服务器上获取数据,post是向服务器传送数据. 2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. 3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据. 4

JSP中嵌入java代码方式以及指令

JSP中嵌入java代码的三种方式: (1)声明变量或方法 :  <%! 声明; %> :慎重使用,因为此方法定义的是全局变量 (2)java片段(scriptlet):  <% java代码; %> (3)表达式:用于输出表达式的值到浏览器,<%=表达式  %>  在表达式中不能加分号(;) JSP页面的指令 <%@ page %> //这个一般是写在最顶上的比如导入等 <%@ page language="java" impor

JSP中设置Session有效时间的三种方式

JSP中设置Session有效时间的三种方式 2010-08-03 10:02:49|  分类: Java Web|举报|字号 订阅 (1)在主页面或者公共页面中加入: HttpSession session=request.getSession(true); session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效.这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端.所以如果是在调试程序,应该

jsp中头的导入两种方式区别

1.<jsp:include page="top.jsp">先将top.jsp中的java脚本和jsp指令执行完毕以后再讲top.jsp页面加入面中 2.<%@ include file="top.jsp"%>静态读取:则是将top.jsp的整个页面不加解析(无论是脚本还是指令)统统读入到引用页面中,然后引用页面一起进行解析(即开始执行脚本和指令) 3.区别:其实上边的两条就是区别,但是需要注意的是用<%@ include file=&

jsp中向浏览器页面输出的方式总结

jsp中百分号内输出 不需要有JavaScript标签 1.因为jsp就是包含在html 里面,所以什么都不干时,就是在body里面输出html内容 2.百分号 内是JavaScript代码?java代码的封装,所以不输出在浏览器页面 所以此时要把java获得的一些值输出到浏览器页面时,有两种方法 第一:用<%=表达式,取值方法%> get一些值表达式输出 第二:在百分号里面,用jsp内置对象out的方法 out.println(“”)输出. 注意System.out.println(&quo