- 浏览: 209973 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+jpa相关配置 -
夜曲6763:
很受用!谢谢LZ
WEB-INF 有关的目录路径问题总结 -
cike8899:
挺好的!
WEB-INF 有关的目录路径问题总结 -
闫立佳:
Could not open JPA EntityManage ...
Spring+jpa相关配置 -
a_bin:
jay61439476 写道"采用页面硬编码的方式使 ...
try catch异常抛出与spring事务回滚策略相关
关键字: jfreechart
自己最近学习了JfreeChart
的使用,觉得这个冬冬的功能非常强大,总结一下。主要介绍JfreeChart
生成图片的几种方式
先从网上找点介绍。
一、简介
WW
的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这
两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用
HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文
的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二
种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式
只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart
用来产生基于WEB的图表。
JFreeChart
项目简介 JFreeChart
是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普 通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。
二、JFreeChart
获取。
JFreeChart
是JFreeChart
公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下:
1.JFreeReport :报表解决工具
2.JFreeChart
:Java 图形解决方案(Application/Applet/Servlet/Jsp)
3.JCommon :JFreeReport和JFreeChart
的公共类库
4.JFreeDesigner :JFreeReport的报表设计工具
我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),
获取地址:http://www.jfree.org/jfreechart
/index.html(同时可以获得简明介绍)
我们以当前最新版本:jfreechart
-1.0.1.zip为例子进行说明。
三、JFreeChart
配置安装
1 、解压jfreechart
-1.0.1.zip.zip到指定位置,其中source是jfreechart
的源码,jfreechart
-1.0.1-demo.jar 是例子程序,可以先运行一下看看各种效果,就知道他的nb之处了。
2 、为了配置成功,我们需要关注的文件有如下三个:
设置classpath。加入下面三个jar包。
jfreechart
-1.0.1.jar 、jcommon-1.0.0.jar、gnujaxp.jar
加上第三个jar包有时web.xml会报错,把它去掉就好了。
至此jfreechart
的配置就完成了,下面就可以进行jfreechart
的开发了。这里值得提出的是jfreechart
的类
结构设计前后兼容性不是很好,不同版本的jfreechart
中类库结构可能不一样,有时候可能需要查源码。如果是中文显示的时候可能依据观感需要改变源码的字体。
四、JFreeChart
功能介绍
JFreeChart
目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面:
pie charts (2D and 3D) :饼图(平面和立体)
bar charts (regular and stacked, with an optional 3D effect) :柱状图
line and area charts :曲线图
scatter plots and bubble charts
time series, high/low/open/close charts and candle stick charts :时序图
combination charts :复合图
Pareto charts
Gantt charts :甘特图
wind plots, meter charts and symbol charts
wafer map charts
( 态图表,饼图(二维和三维) , 柱状图 ( 水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表)
图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联
JFreeChart
核心类库介绍:
研究jfreechart
源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形
本身有关,后者与图形显示的数据有关。具体研究如果大家有兴趣的话可以自己研究 。
核心类主要有:
org.jfree.chart.JFreeChart
:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart
引擎本身提供了一个工厂类用于创建不同类型的图表对象
org.jfree.data.category.XXXDataSet: 数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类
org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持
org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴
org.jfree.chart.render.XXXRender :负责如何显示一个图表对象
org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类
个人感觉JFreeChart
可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码,最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多上社区.
五.开始开发
对JfreeChart
有了初步了解并做好准备工作之后,开始作例子程序试验。在这里我只介绍饼图的做法,而这张图采用不同的方式进行输出,其他类型的图片可以参考jfreechart
提供的例子,做法都差不多。
1) 直接生成图片
- public class PieChartPicture {
- public static void main(String[] args)
- {
- PieDataset dataset = getDataSet();
- JFreeChart chart = ChartFactory.createPieChart3D(
- " 项目进度分布" , // chart title
- dataset,// data
- true , // include legend
- true ,
- false
- );
- PiePlot3D plot=(PiePlot3D)chart.getPlot();
- // 图片中显示百分比:默认方式
- //plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
- // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
- plot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})" , NumberFormat.getNumberInstance(), new DecimalFormat( "0.00%" )));
- // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
- plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})" ));
- // 设置背景色为白色
- chart.setBackgroundPaint(Color.white);
- // 指定图片的透明度(0.0-1.0)
- plot.setForegroundAlpha(1 .0f);
- // 指定显示的饼图上圆形(false)还椭圆形(true)
- plot.setCircular(true );
- // 设置图标题的字体
- Font font = new Font( " 黑体" ,Font.CENTER_BASELINE, 20 );
- TextTitle title = new TextTitle( " 项目状态分布" );
- title.setFont(font);
- chart.setTitle(title);
- FileOutputStream fos_jpg = null ;
- try {
- fos_jpg=new FileOutputStream( "D:\\ 项目状态分布.jpg" );
- ChartUtilities.writeChartAsJPEG(fos_jpg,100 ,chart, 640 , 480 , null );
- fos_jpg.close();
- } catch (Exception e) {
- }
- }
- private static PieDataset getDataSet() {
- DefaultPieDataset dataset = new DefaultPieDataset();
- dataset.setValue(" 市场前期" , new Double( 10 ));
- dataset.setValue(" 立项" , new Double( 15 ));
- dataset.setValue(" 计划" , new Double( 10 ));
- dataset.setValue(" 需求与设计" , new Double( 10 ));
- dataset.setValue(" 执行控制" , new Double( 35 ));
- dataset.setValue(" 收尾" , new Double( 10 ));
- dataset.setValue(" 运维" , new Double( 10 ));
- return dataset;
- }
- }
public class PieChartPicture {
public static void main(String[] args)
{
PieDataset dataset = getDataSet();
JFreeChart
chart = ChartFactory.createPieChart3D(
" 项目进度分布", // chart title
dataset,// data
true,// include legend
true,
false
);
PiePlot3D plot=(PiePlot3D)chart.getPlot();
// 图片中显示百分比:默认方式
//plot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
// 设置背景色为白色
chart.setBackgroundPaint(Color.white);
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(1.0f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular(true);
// 设置图标题的字体
Font font = new Font(" 黑体",Font.CENTER_BASELINE,20);
TextTitle title = new TextTitle(" 项目状态分布");
title.setFont(font);
chart.setTitle(title);
FileOutputStream fos_jpg = null;
try {
fos_jpg=new FileOutputStream("D:\\ 项目状态分布.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);
fos_jpg.close();
} catch (Exception e) {
}
}
private static PieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue(" 市场前期", new Double(10));
dataset.setValue(" 立项", new Double(15));
dataset.setValue(" 计划", new Double(10));
dataset.setValue(" 需求与设计", new Double(10));
dataset.setValue(" 执行控制", new Double(35));
dataset.setValue(" 收尾", new Double(10));
dataset.setValue(" 运维",new Double(10));
return dataset;
}
}
2) 采用servlet和struts的action方式输出
采用这种方式输出,不用生成图片。
A .servlet输出
- public class PieByServlet extends HttpServlet{
- public void service(ServletRequest req, ServletResponse res)
- throws ServletException, IOException
- {
- res.setContentType("image/jpeg" );
- PieDataset dataset = getDataSet();
- JFreeChart chart = ChartFactory.createPieChart3D(
- " 水果饼图" , // chart title
- dataset,// data
- true , // include legend
- true ,
- false );
- //设置图表属性
- // 输出图片
- ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100 ,chart, 800 , 600 , null );
- }
public class PieByServlet extends HttpServlet{
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("image/jpeg");
PieDataset dataset = getDataSet();
JFreeChart
chart = ChartFactory.createPieChart3D(
" 水果饼图", // chart title
dataset,// data
true, // include legend
true,
false );
//设置图表属性
// 输出图片
ChartUtilities.writeChartAsJPEG(res.getOutputStream(),100,chart,800,600,null);
}
B .struts的action方式输出
只将这条语句加上try catch即可,并返回null。
- try {
- ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100 ,chart, 800 , 600 , null );
- } catch (Exception e) {
- }
- return null ;
try{ ChartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null); } catch (Exception e) { } return null;
其实采用这两种方式与生成图片的方式改动并不大
加上语句response.setContentType("image/jpeg");
ChartUtilities.writeChartAsJPEG(new FileOutputStream("D:\\ 项目状态分布.jpg");,100,chart,640,480,null);
文件流改成response的输出流就可以了
hartUtilities.writeChartAsJPEG(response.getOutputStream(),100,chart,800,600,null);
3)jsp+servlet+javabean方式
1. Create ChartViewer servlet
- public class ChartViewer extends HttpServlet {
- public void init() throws ServletException {
- }
- //Process the HTTP Get request
- public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // get the chart from session
- HttpSession session = request.getSession();
- BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage" );
- // set the content type so the browser can see this as a picture
- response.setContentType("image/png" );
- // send the picture
- PngEncoder encoder = new PngEncoder(chartImage, false , 0 , 9 );
- response.getOutputStream().write(encoder.pngEncode());
- }
- //Process the HTTP Post request
- public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- //Process the HTTP Put request
- public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- }
- //Clean up resources
- public void destroy() { }
- }
public class ChartViewer extends HttpServlet { public void init() throws ServletException { } //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // get the chart from session HttpSession session = request.getSession(); BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage"); // set the content type so the browser can see this as a picture response.setContentType("image/png"); // send the picture PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9); response.getOutputStream().write(encoder.pngEncode()); } //Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } //Process the HTTP Put request public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } //Clean up resources public void destroy() { } }
2. Create a servlet map in web.xml
- <?xml version= "1.0" encoding= "UTF-8" ?>
- <web-app>
- <servlet>
- <servlet-name>ChartViewer</servlet-name>
- <servlet-class >myapp.webwork.servlets.ChartViewer</servlet- class >
- </servlet>
- <servlet-mapping>
- <servlet-name>ChartViewer</servlet-name>
- <url-pattern>/servlet/ChartViewer</url-pattern>
- </servlet-mapping>
- </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ChartViewer</servlet-name> <servlet-class>myapp.webwork.servlets.ChartViewer</servlet-class> </servlet> <servlet-mapping> <servlet-name>ChartViewer</servlet-name> <url-pattern>/servlet/ChartViewer</url-pattern> </servlet-mapping> </web-app>
3. Create a chart in a java bean (Pie3DDemo.java)
- public class Pie3DDemo {
- private DefaultPieDataset getDataset() {
- // categories...
- String[] section = new String[] { "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" };
- // data...
- double [] data = new double [section.length];
- for ( int i = 0 ; i < data.length; i++) {
- data[i] = 10 + (Math.random() * 10 );
- }
- // create the dataset...
- DefaultPieDataset dataset = new DefaultPieDataset();
- for ( int i = 0 ; i < data.length; i++) {
- dataset.setValue(section[i], data[i]);
- }
- return dataset;
- }
- public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {
- DefaultPieDataset dataset = getDataset();
- // create the chart...
- JFreeChart chart = ChartFactory.createPie3DChart(
- "Pie3D Chart Demo" , // chart title
- dataset, // data
- true , // include legend
- true ,
- false
- );
- // set the background color for the chart...
- chart.setBackgroundPaint(Color.cyan);
- PiePlot plot = (PiePlot) chart.getPlot();
- plot.setNoDataMessage("No data available" );
- // set drilldown capability...
- plot.setURLGenerator(new StandardPieURLGenerator( "Bar3DDemo.jsp" , "section" ));
- plot.setLabelGenerator(null );
- // OPTIONAL CUSTOMISATION COMPLETED.
- ChartRenderingInfo info = null ;
- HttpSession session = request.getSession();
- try {
- //Create RenderingInfo object
- response.setContentType("text/html" );
- info = new ChartRenderingInfo( new StandardEntityCollection());
- BufferedImage chartImage = chart.createBufferedImage(640 , 400 , info);
- // putting chart as BufferedImage in session,
- // thus making it available for the image reading action Action.
- session.setAttribute("chartImage" , chartImage);
- PrintWriter writer = new PrintWriter(response.getWriter());
- ChartUtilities.writeImageMap(writer, "imageMap" , info);
- writer.flush();
- } catch (Exception e) { }
- String pathInfo = "http://" ;
- pathInfo += request.getServerName();
- int port = request.getServerPort();
- pathInfo += ":" +String.valueOf(port);
- pathInfo += request.getContextPath();
- String chartViewer = pathInfo + "/servlet/ChartViewer" ;
- return chartViewer;
- }
public class Pie3DDemo {
private DefaultPieDataset getDataset() {
// categories...
String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };
// data...
double[] data = new double[section.length];
for (int i = 0; i < data.length; i++) {
data[i] = 10 + (Math.random() * 10);
}
// create the dataset...
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < data.length; i++) {
dataset.setValue(section[i], data[i]);
}
return dataset;
}
public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {
DefaultPieDataset dataset = getDataset();
// create the chart...
JFreeChart
chart = ChartFactory.createPie3DChart(
"Pie3D Chart Demo", // chart title
dataset, // data
true, // include legend
true,
false
);
// set the background color for the chart...
chart.setBackgroundPaint(Color.cyan);
PiePlot plot = (PiePlot) chart.getPlot();
plot.setNoDataMessage("No data available");
// set drilldown capability...
plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));
plot.setLabelGenerator(null);
// OPTIONAL CUSTOMISATION COMPLETED.
ChartRenderingInfo info = null;
HttpSession session = request.getSession();
try {
//Create RenderingInfo object
response.setContentType("text/html");
info = new ChartRenderingInfo(new StandardEntityCollection());
BufferedImage chartImage = chart.createBufferedImage(640, 400, info);
// putting chart as BufferedImage in session,
// thus making it available for the image reading action Action.
session.setAttribute("chartImage", chartImage);
PrintWriter writer = new PrintWriter(response.getWriter());
ChartUtilities.writeImageMap(writer, "imageMap", info);
writer.flush();
} catch (Exception e) { }
String pathInfo = "http://";
pathInfo += request.getServerName();
int port = request.getServerPort();
pathInfo += ":"+String.valueOf(port);
pathInfo += request.getContextPath();
String chartViewer = pathInfo + "/servlet/ChartViewer";
return chartViewer;
}
6. 页面
- <html>
- <head>
- <title>Pie Chart Demo</title>
- </head>
- <jsp:useBeanid="myChart" scope= "session" class = "myapp.webwork.beans.Pie3DDemo" />
- <body>
- <h2>Pie Chart Demo</h2>
- <%String chartViewer = myChart.getChartViewer(request, response);%>
- <img src="<%=chartViewer%>" border= 0 usemap= "#imageMap" >
- </body>
- </html>
<html> <head> <title>Pie Chart Demo</title> </head> <jsp:useBeanid="myChart"scope="session"class="myapp.webwork.beans.Pie3DDemo" /> <body> <h2>Pie Chart Demo</h2> <%String chartViewer = myChart.getChartViewer(request, response);%> <img src="<%=chartViewer%>" border=0 usemap="#imageMap"> </body> </html>
4)采用工具类ChartUtil和DisplayChart(jfreechart
的servlet)输出
我用了上面的几个方法输出图片,发现页面里只能输出一个图片,
不过下面的方法可以输出多个图片,而且是几种方式中最简单的一个,推荐使用。
这种方式和上面的三种比较类似,是将javabean里的生成图片的方法写的一个工具类ChartUtil里面。
1 .添加工具类ChartUtil
public class ChartUtil {
// 产生时间序列图,返回图片名称
- public static String generatePieChart(DefaultPieDataset dataset,String title, int width, int height,HttpSession session, PrintWriter pw) {
- String filename = null ;
- try {
- if (session != null )
- {
- ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter" );
- session.removeAttribute("JFreeChart_Deleter" );
- session.setAttribute("JFreeChart_Deleter" , deleter);
- }
- JFreeChart chart = ChartFactory.createPieChart3D(
- title, // chart title
- dataset, // data
- true , // include legend
- true ,
- false );
- // Write the chart image to the temporary directory
- ChartRenderingInfo info = new ChartRenderingInfo( new StandardEntityCollection());
- //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.
- //If the last parameter is a session object, the chart remains until session time out.
- filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
- // Write the image map to the PrintWriter
- ChartUtilities.writeImageMap(pw, filename, info,true );
- pw.flush();
- } catch (Exception e) {
- System.out.println("Exception - " + e.toString());
- e.printStackTrace(System.out);
- filename = "picture_error.png" ; }
- return filename;
- }
- }
public static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {
String filename = null;
try {
if (session != null)
{
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");
session.removeAttribute("JFreeChart_Deleter");
session.setAttribute("JFreeChart_Deleter", deleter);
}
JFreeChart
chart = ChartFactory.createPieChart3D(
title, // chart title
dataset, // data
true, // include legend
true,
false );
// Write the chart image to the temporary directory
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
//If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.
//If the last parameter is a session object, the chart remains until session time out.
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(pw, filename, info,true);
pw.flush();
} catch (Exception e) {
System.out.println("Exception - " + e.toString());
e.printStackTrace(System.out);
filename = "picture_error.png"; }
return filename;
}
}
2、在action里统计数据,设置好数据集dataset。传到页面
3、 在页面里取出
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");
// 用ChartUtil工具类产生图片
- String p = ChartUtil.generatePieChart(piedataset, " 项目收支线图" , 500 , 300 , null , new PrintWriter(out));
- String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out)); String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;
通过以下方式输出
- <td><img src= "<%= p1 %>" width= 500 height= 300 border= 0 usemap= "#<%= p %>" ></td>
<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>
4、在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>
<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>
5) ApplicationFrame 方式
发表评论
-
高并发高负载的大型网站系统架构
2013-02-21 13:49 5一个小型的网站,比如 ... -
Java类初始化顺序
2012-02-03 16:43 9451、类只有在使用New调用创建的时候才会被JAVA类装载器装入 ... -
为什么匿名内部类和局部内部类只能访问final变量 .
2011-11-04 18:23 1198是变量的作用域的 ... -
Java用户回调方法消除冗余代码
2011-10-13 17:32 951http://hi.baidu.com/luodaijun/b ... -
[Java]Stack栈和Heap堆的区别
2011-07-13 14:45 915首先分清楚Stack,Heap的中文翻译:Stack—栈, ... -
对象序列化
2011-07-12 21:35 1004当两个进程 进行远程通信时,彼此发送各种类型数据,都会以 ... -
Java序列化的机制和原理
2011-07-12 21:08 1187http://developer.51cto.com/art/ ... -
转: 开发实战:舍得网44587行代码开发经验
2011-07-10 02:06 887舍得网(shedewang.com)的 ... -
浅谈Listener、Filter、Servlet初始化顺序
2011-07-07 14:12 1172Listener、Filter、Servlet都有一个初始化的 ... -
java多线程同步
2011-05-08 12:14 991多线程的线程同步机制 ... -
JFreeChart 中文乱码 一站式解决 一个方法搞定
2009-08-20 13:53 9611. /** 2. * 配置字体 ... -
JfreeChart学习总结
2009-06-19 00:14 1044自己最近学习了JfreeChart的使用,觉得这个冬冬的功能非 ...
相关推荐
数据库基础测验20241113.doc
微信小程序下拉选择组件
DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。
<项目介绍> - 基于双流 Faster R-CNN 网络的 图像篡改检测 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
c语言
# 基于Arduino的天文数据库管理系统 ## 项目简介 本项目是一个基于Arduino的天文数据库管理系统,旨在为Arduino设备提供一个完整的天文数据库,包括星星、星系、星团等天体数据。项目支持多种语言的星座名称,并提供了详细的天体信息,如赤道坐标、视星等。 ## 项目的主要特性和功能 星座目录包含88个星座,提供拉丁语、英语和法语的缩写和全名。 恒星目录包含494颗亮度达到4等的恒星。 梅西耶目录包含110个梅西耶天体。 NGC目录包含3993个NGC天体,亮度达到14等。 IC目录包含401个IC天体,亮度达到14等。 天体信息每个天体(不包括星座)提供名称、命名、相关星座、赤道坐标(J2000)和视星等信息。 恒星额外信息对于恒星,还提供每年在赤经和赤纬上的漂移以及视差。 ## 安装使用步骤 1. 安装库使用Arduino IDE的库管理器安装本项目的库。 2. 解压数据库将db.zip解压到SD卡中。
# 基于JSP和SQL Server的维修管理系统 ## 项目简介 本项目是一个基于JSP和SQL Server的维修管理系统,旨在提供一个高效、便捷的维修管理解决方案。系统涵盖了从维修订单的创建、管理到配件的录入、更新等多个功能模块,适用于各类维修服务行业。 ## 项目的主要特性和功能 1. 用户管理 管理员和客户的注册与登录。 管理员信息的管理与更新。 客户信息的创建、查询与更新。 2. 维修订单管理 维修订单的创建、查询与更新。 维修回执单的创建与管理。 3. 配件管理 配件信息的录入与更新。 配件库存的管理与查询。 4. 评价与反馈 客户对维修服务的评价记录。 系统反馈信息的收集与管理。 5. 数据加密与安全 使用MD5加密算法对用户密码进行加密存储。 通过过滤器实现登录验证,确保系统安全。 ## 安装使用步骤
HUAWEI DevEco Studio,以下简称DevEco Studio)是基于IntelliJ IDEA Community开源版本打造,为运行在HarmonyOS和OpenHarmony系统上的应用和服务(以下简称应用/服务)提供一站式的开发平台。 作为一款开发工具,除了具有基本的代码开发、编译构建及调测等功能外,DevEco Studio还具有如下特点: - 高效智能代码编辑:支持ArkTS、JS、C/C++等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、代码查找等功能,提升代码编写效率。更多详细信息,请参考[编辑器使用技巧] - 低代码可视化开发:丰富的UI界面编辑能力,支持自由拖拽组件和可视化数据绑定,可快速预览效果
《计算机视觉技术》实验报告-8.1提取车辆轮廓
随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多生活之中,随之就产生了“小徐影城管理系统”,这样就让小徐影城管理系统更加方便简单。 对于本小徐影城管理系统的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据小徐影城管理系统的现状来进行开发的,具体根据现实的需求来实现小徐影城管理系统网络化的管理,各类信息有序地进行存储,进入小徐影城管理系统页面之后,方可开始操作主控界面,主要功能包括管理员:首页、个人中心、用户管理、电影类型管理、放映厅管理、电影信息管理、购票统计管理、系统管理、订单管理,用户前台;首页、电影信息、电影资讯、个人中心、后台管理、在线客服等功能。 本论文主要讲述了小徐影城管理系统开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的小徐影城管理系统状况,提高管理效率。
<项目介绍> - SIFT特征提取算法C++与Matlab实现 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
数据介绍 数据名称:国家自然、社科基金部分名单 数据年份:1991-2024年 样本数量:10万+ 数据格式:PDF、excel
卓晴
as-bundled-clients
学习时最后的资料包括面试等信息
# 基于Spring Boot和Ant Design的雨选课系统 ## 项目简介 雨选课系统是一个基于Spring Boot和Ant Design框架构建的前后端分离的选课系统。该系统实现了学生选课、成绩查询、教师成绩修改、课程编辑、课程新增等功能。登录信息使用Redis存储,并支持课程图片的上传功能。 ## 项目的主要特性和功能 1. 用户登录与权限管理 学生、教师和管理员分别有不同的登录权限。 登录信息使用Redis进行存储。 2. 课程管理 学生可以查看可选课程列表,并进行选课和退选操作。 教师可以查看自己教授的课程,并修改学生成绩。 管理员可以编辑和新增课程。 3. 成绩管理 学生可以查询自己的成绩。 教师可以修改学生的成绩。 4. 图片上传 支持课程图片的上传和展示。 5. 日志记录 系统记录请求和响应的日志信息,便于问题追踪和性能分析。
数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅点餐系统源码+数据库+文档说明(高分项目)数据库期末作业基于Python+mysql的餐厅
内容概要:本文针对镇江市丹徒区辛丰镇的两座小型桥梁(大叶二组滚水坝桥与东联组桥)进行了详细的技术状况评定和现状调查。主要内容包括:桥梁的基本参数描述、桥梁各部分的具体检查结果以及存在的具体病害及其原因分析,同时依据《公路桥梁技术状况评定标准》对每座桥梁分别给出了综合评分和技术状况等级,并提出了具体的维护与修复建议。大叶二组滚水坝桥技术状况良好(2类),但需要解决桥面铺装裂缝和桥墩的混凝土剥落问题;而东联组桥则需重点关注桥面施工不完整及护栏损坏等问题。 适用人群:桥梁管理人员、维护工作人员及城市基础设施规划相关人员。 使用场景及目标:适用于中小跨度桥梁的常规检查与维修决策制定过程中,旨在帮助专业人士快速掌握桥梁的实际状态,确保桥梁安全可靠运行。 其他说明:文中附有多张实拍图片用于直观展示桥梁现状及存在问题。
c语言
文件名:Enviro 3 - Sky and Weather v3.1.6b.unitypackage Enviro 3 - Sky and Weather 是一款功能强大的 Unity 插件,专门用于模拟逼真的天空、天气和环境效果。它适用于需要动态天气和日夜循环的游戏或应用,如开放世界 RPG、模拟类游戏等。Enviro 3 提供了大量的设置选项和自定义功能,帮助开发者在 Unity 中创建沉浸式的自然环境效果。 以下是 Enviro 3 - Sky and Weather 的一些关键特点和功能介绍: 1. 动态天气系统 天气变化:支持多种天气效果,如晴天、阴天、雨天、雪天、雾天、暴风雨等,所有天气效果可以动态切换,使游戏环境更加生动。 天气事件:允许开发者设置特定的天气事件,如风暴、雷电等,添加到游戏中的特殊场景或事件。 湿度与温度控制:可以根据天气变化动态控制湿度和温度,影响环境效果和玩家体验。 2. 日夜循环系统 动态时间系统:Enviro 3 支持实时的日夜循环,包括昼夜的过渡,太阳和月亮的运动轨迹。 光照调整:随着时间变化,Enviro 3 会自动调整环境光、