用jfreechart在JSP页面显示点状分布图+分割线(转载:http://blog.csdn.net/ami121/article/details/2450945)

简介: JSP页面 <%@ page language="java"  pageEncoding="gbk"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort

JSP页面

 

<% @ page language = " java "   pageEncoding = " gbk " %>
<%
String path 
=  request.getContextPath();
String basePath 
=  request.getScheme() + " :// " + request.getServerName() + " : " + request.getServerPort() + path + " / " ;
%>

<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.01 Transitional//EN " >
< html >
  
< head >
    
< base href = " <%=basePath%> " >
    
    
< title > My JSP  ' index.jsp '  starting page </ title >
    
 
< jsp:useBean id = " barchart01 "  scope = " session "
 
class = " com.ami.chart.SeriesXY "   />
</ head >
< body >
<%
 String fileName 
=  barchart01.getImg(request.getSession(), out);
 String graphURL 
=  request.getContextPath()
   
+   " /servlet/DisplayChart?filename= "   +  fileName;
%>
< br />
< img src = " <%= graphURL %> "  border = " 0 "  usemap = " #<%=fileName %> "   />
< br  />
</ body >
</ html >

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 >

 

Java实现代码

 

package  com.ami.chart;

import  java.awt.BasicStroke;
import  java.awt.Color;
import  java.awt.Font;
import  java.io.PrintWriter;

import  javax.servlet.http.HttpSession;
import  javax.servlet.jsp.JspWriter;

import  org.jfree.chart.ChartFactory;
import  org.jfree.chart.ChartRenderingInfo;
import  org.jfree.chart.ChartUtilities;
import  org.jfree.chart.JFreeChart;
import  org.jfree.chart.axis.NumberAxis;
import  org.jfree.chart.axis.NumberTickUnit;
import  org.jfree.chart.axis.ValueAxis;
import  org.jfree.chart.entity.StandardEntityCollection;
import  org.jfree.chart.plot.PlotOrientation;
import  org.jfree.chart.plot.ValueMarker;
import  org.jfree.chart.plot.XYPlot;
import  org.jfree.chart.renderer.xy.XYItemRenderer;
import  org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import  org.jfree.chart.servlet.ServletUtilities;
import  org.jfree.data.xy.XYSeries;
import  org.jfree.data.xy.XYSeriesCollection;
import  org.jfree.ui.RectangleAnchor;
import  org.jfree.ui.TextAnchor;

public   class  SeriesXY  {
    
    
public String getImg(HttpSession session ,JspWriter out){
        
        String filename
=null;
        
double []xydata1_0={12.8d,12.3d,12.9d,12.2d,13.3d,12.0d,12.8d,13.3d,12.9d,13.9d,12.3d,12.0d,12.8d,12.3d,11.9d,13.2d,12.3d,14.0d,12.8d,12.3d,12.9d,13.2d,13.3d,14.0d,12.8d,13.3d,11.9d,13.9d,12.3d,12.0d,19.8d,12.3d,14.9d,18.2d,12.3d,14.0d,12.8d,12.3d,12.9d,18.2d,13.3d,14.0d,12.8d,14.3d,12.9d,13.9d,12.3d,12.0d,13.8d,12.3d,11.9d,13.2d,12.3d,14.0d,12.8d,12.3d,12.9d,18.2d,16.3d,18.0d,12.8d,12.3d,19.9d,13.9d,12.3d,12.0d,12.8d,12.3d,12.9d,13.2d,12.3d,14.0d,12.8d,12.3d,12.9d,12.2d,13.3d,12.0d,12.8d,13.3d,12.9d,13.9d};
        
double []xydata1_1={196.0d,223.0d,230.5d,241.0d,195.8d,200.3d,200.0d,230.0d,243.5d,261.0d,259.8d,245.3d,236.0d,260.0d,225.5d,230.0d,190.8d,205.3d,196.0d,223.0d,230.5d,241.0d,195.8d,200.3d,200.0d,230.0d,243.5d,261.0d,259.8d,245.3d,236.0d,260.0d,225.5d,230.0d,190.8d,205.3d,196.0d,223.0d,230.5d,241.0d,195.8d,200.3d,200.0d,230.0d,243.5d,261.0d,259.8d,245.3d,236.0d,260.0d,225.5d,230.0d,190.8d,205.3d,196.0d,223.0d,230.5d,241.0d,195.8d,200.3d,200.0d,230.0d,243.5d,261.0d,259.8d,245.3d,236.0d,260.0d,225.5d,230.0d,190.8d,205.3d,196.0d,223.0d,230.5d,241.0d,195.8d,200.3d,200.0d,230.0d,243.5d,261.0d};
        
        XYSeriesCollection xyCollection
=new XYSeriesCollection();
        XYSeries xyseries1
=new XYSeries("ACompany");
        
for(int i=0;i<82;i++){
            xyseries1.add(xydata1_0[i], xydata1_1[i]);
        }

        XYSeries xyseries2
=new XYSeries("BCompany");
        
        xyCollection.addSeries(xyseries1);
        
        
//分布点状图
        JFreeChart chart=ChartFactory.createScatterPlot("电压电流图""电流","电压", xyCollection, PlotOrientation.VERTICAL, truefalsefalse);
        XYPlot plot
=(XYPlot) chart.getPlot();
        
        ValueMarker vmarker
=new ValueMarker(230d);//设置分割线
        vmarker.setLabel("平均电压230V");
        vmarker.setLabelPaint(Color.black);
        vmarker.setPaint(Color.red);
        vmarker.setLabelFont(
new Font("隶书",Font.PLAIN,10));
        vmarker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
        vmarker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);
        plot.addRangeMarker(vmarker);
        
        ValueMarker xMarker
=new ValueMarker(12.50d);
        xMarker.setLabel(
"平均电流12.50A");
        xMarker.setPaint(Color.orange);
        xMarker.setLabelFont(
new Font("隶书",Font.BOLD,10));
        xMarker.setLabelAnchor(RectangleAnchor.BOTTOM_RIGHT);
        xMarker.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
        plot.addDomainMarker(xMarker);
        plot.setRangeGridlinePaint(Color.black);
//设置X轴的颜色
        
        ValueAxis yAxis
=plot.getRangeAxis();
        yAxis.setAutoRange(
true);
        yAxis.setAutoRangeMinimumSize(
50.0d);
        NumberAxis yNumber
=(NumberAxis) plot.getRangeAxis();
        yNumber.setTickUnit(
new NumberTickUnit(50d));
        yAxis.setLowerBound(
50.0d);
        plot.setRangeAxis(yAxis);
        
        ValueAxis xAxis
=plot.getDomainAxis();
        xAxis.setAutoRange(
false);
        NumberAxis   numberaxis
=(NumberAxis)plot.getDomainAxis();
        numberaxis.setTickUnit(
new NumberTickUnit(0.1D));//设置X轴跨度每次增加1
        xAxis.setUpperBound(14.2d);
        xAxis.setLowerBound(
11.8d);
        
        XYItemRenderer itRender
=plot.getRenderer();
        
                
try {
            PrintWriter  pw
=new PrintWriter(out);
            StandardEntityCollection sec 
= new StandardEntityCollection();
            ChartRenderingInfo info 
= new ChartRenderingInfo(sec);

            filename
=ServletUtilities.saveChartAsJPEG(chart,650400,null, session);
            ChartUtilities.writeImageMap(pw, filename,info, 
true);
        }
 catch (Exception e) {
            e.printStackTrace();
        }

        
return filename;
    }

}

效果图

目录
相关文章
|
2月前
|
Java 应用服务中间件 开发工具
如何使用IDEA创建JSP页面
如何使用IDEA创建JSP页面
188 0
|
4月前
|
Java 数据安全/隐私保护
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
该博客文章通过JavaBean组件和JSP动作元素`<jsp:forward>`与`<jsp:param>`的使用示例,演示了用户登录流程,包括登录信息的提交、验证以及根据验证结果进行的页面跳转。
JavaBean组件<jsp:forward>动作<jsp:param>动作登录页面输入用户名和密码,然后进入检查页面判断是否符合要求,符合要求跳转到成功界面,不符合要求返回登录界面,显示错误信息。
|
4月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
50 5
|
4月前
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
|
2月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
30 0
|
4月前
|
存储 Java
JSP中实现留言页面的编写并将留言信息展示出来
这篇文章介绍了如何在JSP中编写留言页面,并通过JavaBean类存储用户留言信息,同时展示了留言信息的展示方法。
JSP中实现留言页面的编写并将留言信息展示出来
|
4月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
|
4月前
|
Java
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
该博客文章讲解了JSP中`<jsp:getProperty>`和`<jsp:setProperty>`动作的使用方法,包括它们的语法格式和如何在页面中使用这些动作来获取和设置JavaBean对象的属性值,并通过图书信息的填写和展示示例进行了演示。
`<jsp:getProperty>`动作和`<jsp:setProperty>`动作的使用在一个静态页面填写图书的基本信息,页面信息提交给其他页面,并且在其页面显示。要去将表单元素的值赋值给Java
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
|
4月前
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求