﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-raomingkun</title><link>http://www.blogjava.net/raomingkun/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:00:55 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:00:55 GMT</pubDate><ttl>60</ttl><item><title>JFreeChart综合应用</title><link>http://www.blogjava.net/raomingkun/archive/2007/10/31/157252.html</link><dc:creator>小眼睛大智慧</dc:creator><author>小眼睛大智慧</author><pubDate>Wed, 31 Oct 2007 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/raomingkun/archive/2007/10/31/157252.html</guid><wfw:comment>http://www.blogjava.net/raomingkun/comments/157252.html</wfw:comment><comments>http://www.blogjava.net/raomingkun/archive/2007/10/31/157252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/raomingkun/comments/commentRss/157252.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/raomingkun/services/trackbacks/157252.html</trackback:ping><description><![CDATA[<p align="center">&nbsp;</p>
<div>
<p><span style="color: black">JFreeChart</span><span style="color: black; font-family: 宋体">是一个开源的</span><span style="color: black">JAVA</span><span style="color: black; font-family: 宋体">项目，它主要用来开发各种各样的图表，这些图表包括：饼图、柱状图</span><span style="color: black">(</span><span style="color: black; font-family: 宋体">普通柱状图以及堆栈柱状图</span><span style="color: black">)</span><span style="color: black; font-family: 宋体">、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。</span><span style="color: black">JFreeChart</span><span style="color: black; font-family: 宋体">是一种基于</span><span style="color: black">JAVA</span><span style="color: black; font-family: 宋体">语言的图表开发技术。</span><span style="color: black">JFreeChart</span><span style="color: black; font-family: 宋体">可用于</span><span style="color: black">Servlet</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">JSP</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">Applet</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">Java Appication</span><span style="color: black; font-family: 宋体">环境中，通过</span><span style="color: black">JDBC</span><span style="color: black; font-family: 宋体">可动态显示任何数据库数据，结合</span><span style="color: black">Itext</span><span style="color: black; font-family: 宋体">可以输出至</span><span style="color: black">PDF</span><span style="color: black; font-family: 宋体">文件。</span>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">JFreeChart</span><span style="color: black; font-family: 宋体">主要是由三个类构成：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">A</span><span style="color: black; font-family: 宋体">）</span><span style="color: black">org.jfree.chart.servlet.ChartDeleter</span><span style="color: black; font-family: 宋体">继承自</span><span style="color: black">HttpSessionBindingListener</span><span style="color: black; font-family: 宋体">，用于实现当</span><span style="color: black">Session </span><span style="color: black; font-family: 宋体">关闭时，删除临时目中的图象文件。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">B</span><span style="color: black; font-family: 宋体">）</span><span style="color: black">org.jfree.chart.servlet.DisplayChart</span><span style="color: black; font-family: 宋体">继承自</span><span style="color: black">Httpservlet </span><span style="color: black; font-family: 宋体">用于处理显示图象。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">C</span><span style="color: black; font-family: 宋体">）</span><span style="color: black">org.jfree.chart.servlet.ServletUtilities</span><span style="color: black; font-family: 宋体">有一系列方法，例如，</span><span style="color: black">saveChartAs*;saveChartAs*</span><span style="color: black; font-family: 宋体">是把图表按照不同的形式存储为图象；</span><span style="color: black">sendTempFile</span><span style="color: black; font-family: 宋体">方法被重载了很多次，用于把文件流发送</span><span style="color: black">response</span><span style="color: black; font-family: 宋体">。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">下面以柱状图和饼图为例，介绍图形创建方法。</span></p>
<p style="margin: 5pt 0cm 3pt; text-indent: 24pt; line-height: 180%" align="justify"><font face="黑体" size="4">1 柱状图 </font></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">org.jfree.chart.ChartFactory</span><span style="color: black; font-family: 宋体">这个工厂类有</span><span style="color: black">createBarChart</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">createStackedBarChart</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">createBarChart3D</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">createStackedBarChart3D</span><span style="color: black; font-family: 宋体">，这几个工厂方法创建不同类型的柱状图，比较重要的是</span><span style="color: black"> PlotOrientation.VERTICAL </span><span style="color: black; font-family: 宋体">让平行柱垂直显示，而</span><span style="color: black"> PlotOrientation.HORIZONTAL </span><span style="color: black; font-family: 宋体">则让平行柱水平显示。对柱状图影响较大的几个类包括：</span><span style="color: black">org.jfree.chart.axis.CategoryAxis</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">org.jfree.chart.axis.ValueAxis</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">org.jfree.chart.renderer.BarRenderer</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">org.jfree.chart.renderer. BarRenderer3D</span><span style="color: black; font-family: 宋体">。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">具体实现步骤：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">1</span><span style="color: black; font-family: 宋体">）创建用于图形生成所要的数据集对象。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data)</span><span style="color: black; font-family: 宋体">；</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">其中：</span><span style="color: black">rowKeys</span><span style="color: black; font-family: 宋体">表示</span><span style="color: black">X</span><span style="color: black; font-family: 宋体">轴数据，</span><span style="color: black">columnKeys</span><span style="color: black; font-family: 宋体">表示</span><span style="color: black">Y</span><span style="color: black; font-family: 宋体">轴数据，</span><span style="color: black">data</span><span style="color: black; font-family: 宋体">表示填充柱状图所要的实际数据（来自于数据库）。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">2</span><span style="color: black; font-family: 宋体">）创建图形对象。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">JFreeChart chart = ChartFactory.createBarChart3D("</span><span style="color: black; font-family: 宋体">标题</span><span style="color: black">",&nbsp;null</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">null</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">dataset</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">PlotOrientation.VERTICAL,</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">true</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">false</span><span style="color: black; font-family: 宋体">，</span><span style="color: black">false)</span><span style="color: black; font-family: 宋体">；</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">createBarChart3D</span><span style="color: black; font-family: 宋体">方法是</span><span style="color: black">ChartFactory</span><span style="color: black; font-family: 宋体">工厂类里的一个方法，用于</span><span style="color: black">3D</span><span style="color: black; font-family: 宋体">柱状图的生成，该类继承自</span><span style="color: black">JFreeChart</span><span style="color: black; font-family: 宋体">。其中的八个参数分别代表：图形的标题、</span><span style="color: black">X</span><span style="color: black; font-family: 宋体">轴标题、</span><span style="color: black">Y</span><span style="color: black; font-family: 宋体">轴标题、</span><span style="color: black">dataset</span><span style="color: black; font-family: 宋体">就是</span><span style="color: black">CategoryDataset</span><span style="color: black; font-family: 宋体">类的实例对象、显示标题、启用热键、启用超键接。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">3</span><span style="color: black; font-family: 宋体">）设置图形显示的属性。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">a ) ValueAxis</span><span style="color: black; font-family: 宋体">类，设置柱到图上下边的距离。实现方法是：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">ValueAxis rangeAxis = plot.getRangeAxis(); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置最高的一个柱与图片顶端的距离：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">rangeAxis.setUpperMargin(0.15) </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置最低的一个柱与图片底端的距离：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">rangeAxis.setLowerMargin(0.15) </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">b</span><span style="color: black; font-family: 宋体">）</span><span style="color: black">org.jfree.chart.renderer.BarRenderer3D</span><span style="color: black; font-family: 宋体">类，设置图形上显示的数值。实现方法如下：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">BarRenderer3D renderer = new BarRenderer3D(); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setBaseOutlinePaint(Color.BLACK); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置</span><span style="color: black"> Wall </span><span style="color: black; font-family: 宋体">的颜色：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setWallPaint(Color.gray); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置每个柱的颜色：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setSeriesPaint(0, new Color(0, 0, 255)); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setSeriesPaint(1, new Color(0, 100, 255)); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setSeriesPaint(2, Color.GREEN); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置每个柱的</span><span style="color: black"> Outline </span><span style="color: black; font-family: 宋体">颜色</span><span style="color: black"><br />
renderer.setSeriesOutlinePaint(0, Color.BLACK); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setSeriesOutlinePaint(1, Color.BLACK); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setSeriesOutlinePaint(2, Color.BLACK); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">设置每个地区所包含的平行柱之间的距离</span><span style="color: black"><br />
renderer.setItemMargin(0.1); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">显示每个柱的数值，并修改该数值的字体属性</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setItemLabelFont(new Font("</span><span style="color: black; font-family: 宋体">黑体</span><span style="color: black">",Font.PLAIN,12)); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setItemLabelsVisible(true); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">为图形加入超连接</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setItemURLGenerator(new StandardCategoryURLGenerator()); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator()); </span></p>
<p style="margin: 5pt 0cm 3pt; text-indent: 24pt; line-height: 180%" align="justify"><font face="黑体" size="4">2 饼图 </font></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">org.jfree.chart.plot</span><span style="color: black; font-family: 宋体">包，包含创建饼形图的所有方法和属性。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black; font-family: 宋体">笔者根据业务需求创建了</span><span style="color: black">setURLGenerator(PieURLGenerator generator)</span><span style="color: black; font-family: 宋体">方法，在图片上建立连接，就是图片不同部分连接不同的资源。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">setSectionLabelType(int type)</span><span style="color: black; font-family: 宋体">方法：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black; font-family: 宋体">指定</span><span style="color: black"> section </span><span style="color: black; font-family: 宋体">标签的类型，共有</span><span style="color: black"> 7 </span><span style="color: black; font-family: 宋体">种类型。如果不指定，默认是</span><span style="color: black"> NAME_LABELS</span><span style="color: black; font-family: 宋体">，其中类型分别是：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">PiePlot.NO_LABELS </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">PiePlot.NAME_LABELS </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">PiePlot.VALUE_LABELS </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black">PiePlot.PERCENT_LABELS </span><span style="color: black; font-family: 宋体">、</span><span style="color: black">PiePlot.NAME_AND_VALUE_LABELS</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">PiePlot. NAME_AND_PERCENT_LABELS</span><span style="color: black; font-family: 宋体">、</span><span style="color: black">PiePlot.VALUE_AND_PERCENT_LABELS</span><span style="color: black; font-family: 宋体">。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setDefaultOutlinePaint(java.awt.Paint paint)</span><span style="color: black; font-family: 宋体">方法，指定</span><span style="color: black"> section </span><span style="color: black; font-family: 宋体">轮廓线的颜色，如果不指定，默认值为</span><span style="color: black">NULL</span><span style="color: black; font-family: 宋体">。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setDefaultOutlineStroke(java.awt.Stroke stroke)</span><span style="color: black; font-family: 宋体">方法，指定</span><span style="color: black"> section </span><span style="color: black; font-family: 宋体">轮廓线的厚度。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setRadius(double percent) </span><span style="color: black; font-family: 宋体">和</span><span style="color: black"> setExplodePercent(int section, double percent)</span><span style="color: black; font-family: 宋体">方法，抽离</span><span style="color: black"> section</span><span style="color: black; font-family: 宋体">，就是把某一</span><span style="color: black">section</span><span style="color: black; font-family: 宋体">从饼形图剥离出来，需要两个方法一起使用。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setStartAngle(double angle)</span><span style="color: black; font-family: 宋体">方法，设置第一个</span><span style="color: black">section</span><span style="color: black; font-family: 宋体">开始位置，默认从</span><span style="color: black">12</span><span style="color: black; font-family: 宋体">点钟方向开始。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setPaint(int section, java.awt.Paint paint)</span><span style="color: black; font-family: 宋体">方法指定</span><span style="color: black">section</span><span style="color: black; font-family: 宋体">的颜色。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">setDirection(int direction)</span><span style="color: black; font-family: 宋体">方法指定</span><span style="color: black">section</span><span style="color: black; font-family: 宋体">顺序，默认是顺时针方向。顺时针：</span><span style="color: black">PiePlot.CLOCKWISE</span><span style="color: black; font-family: 宋体">；逆时针：</span><span style="color: black">PiePlot.ANTICLOCKWISE</span><span style="color: black; font-family: 宋体">。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">具体实现步骤：</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">1</span><span style="color: black; font-family: 宋体">）创建用于图形生成所要的数据集对象。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">首先实例化类</span><span style="color: black">DefaultPieDataset dataset = new DefaultPieDataset()</span><span style="color: black; font-family: 宋体">。然后利用</span><span style="color: black">DefaultPieDataset</span><span style="color: black; font-family: 宋体">类提供的</span><span style="color: black">setValue</span><span style="color: black; font-family: 宋体">（</span><span style="color: black">value1,value2</span><span style="color: black; font-family: 宋体">）方法，把从数据库里提取的数据存入</span><span style="color: black">DefaultPieDataset</span><span style="color: black; font-family: 宋体">对象。其中</span><span style="color: black">value1</span><span style="color: black; font-family: 宋体">是数据名称、</span><span style="color: black">value2</span><span style="color: black; font-family: 宋体">是数据值。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black">2</span><span style="color: black; font-family: 宋体">）创建图形对象。</span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black; font-family: 宋体">首先实例化<span style="color: black; font-family: 宋体">JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false)createPieChart3D</span>方法是用于饼图生成的主要方法。其中<span style="color: black; font-family: 宋体">title</span>代表图形的标题、<span style="color: black; font-family: 宋体">dataset</span>就是<span style="color: black; font-family: 宋体">DefaultPieDataset</span>对象的实例。</span> </p>
<center>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体"><span style="color: black; font-family: 宋体">3</span><span style="color: black; font-family: 宋体">）设置图形显示的属性。</span> </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">String filename = ServletUtilities.saveChartAsPNG(jFreeChart, 700, 450, info, session); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">ChartUtilities.writeImageMap(pw, filename, info); </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">pw.flush() </span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体"><span style="color: black; font-family: 宋体">saveChartAsPNG</span><span style="color: black; font-family: 宋体">方法在</span><span style="color: black; font-family: 宋体">ServletUtilities</span><span style="color: black; font-family: 宋体">工厂类定义完成。主要用于把图形对象</span><span style="color: black; font-family: 宋体">JFreeChart</span><span style="color: black; font-family: 宋体">以图片的形式保存。其中的</span><span style="color: black; font-family: 宋体">jFreeChart</span><span style="color: black; font-family: 宋体">就是</span><span style="color: black; font-family: 宋体">JFreeChart</span><span style="color: black; font-family: 宋体">对象的实例。该方法返回一个文件名。</span></span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体"><span style="color: black; font-family: 宋体">writeImageMap</span><span style="color: black; font-family: 宋体">（</span><span style="color: black; font-family: 宋体">pw, filename, info</span><span style="color: black; font-family: 宋体">）方法用于把保存的图片文件以字节流的形式写入用户界面。</span></span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">其中<span style="color: black; font-family: 宋体">pw</span><span style="color: black; font-family: 宋体">是</span><span style="color: black; font-family: 宋体">java.io</span><span style="color: black; font-family: 宋体">包的</span><span style="color: black; font-family: 宋体">PrintWriter</span><span style="color: black; font-family: 宋体">类的实例对象，该对象创建一个图形输出流。</span><span style="color: black; font-family: 宋体">Filename</span><span style="color: black; font-family: 宋体">是输出图片的文件名。该文件名来自</span><span style="color: black; font-family: 宋体">ServletUtilities.saveChartAsPNG</span><span style="color: black; font-family: 宋体">方法创建。</span></span></p>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="justify"><span style="color: black; font-family: 宋体">参数<span style="color: black; font-family: 宋体">info</span><span style="color: black; font-family: 宋体">用于图形信息的显示。</span></span></p>
</center>
<p style="margin-top: 1pt; margin-bottom: 1pt; text-indent: 24pt; line-height: 180%" align="left"><span style="color: black; font-family: 宋体">用<span style="color: black; font-family: 宋体">ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection())</span><span style="color: black; font-family: 宋体">创建。</span></span></p>
<span style="color: black; font-family: 宋体">最后输出完成图形，调用<span style="color: black; font-family: 宋体">pw.flush()</span><span style="color: black; font-family: 宋体">方法关闭</span><span style="color: black; font-family: 宋体">IO</span><span style="color: black; font-family: 宋体">流。<br />
<br />
------------------------------------------------------------------------------------------<br />
</span></span>
<p><a name="3">使用JFreeChart生成各种样式的图表</a></p>
<p>限于篇幅的问题我们在这里只实现两种常用的图表，其他类型图表读者可以触类旁通。我们先给出柱状图的实现，饼图的实现再来跟柱状图进行比较。 </p>
<p><a name="N100F9">1 柱状图</a></p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code><br />
            package lius.chart.demo;<br />
            <br />
            import java.io.*;<br />
            <br />
            import org.jfree.data.*;<br />
            import org.jfree.chart.*;<br />
            import org.jfree.chart.plot.*;<br />
            /**<br />
            * 该类用于演示最简单的柱状图生成<br />
            * @author Winter Lau<br />
            */<br />
            public class BarChartDemo {<br />
            <br />
            public static void main(String[] args) throws IOException{<br />
            <br />
            CategoryDataset dataset = getDataSet2();<br />
            JFreeChart chart = ChartFactory.createBarChart3D(<br />
            "水果产量图", // 图表标题<br />
            "水果", // 目录轴的显示标签<br />
            "产量", // 数值轴的显示标签<br />
            dataset, // 数据集<br />
            PlotOrientation.VERTICAL, // 图表方向：水平、垂直<br />
            true,  // 是否显示图例(对于简单的柱状图必须是false)<br />
            false,  // 是否生成工具<br />
            false  // 是否生成URL链接<br />
            );<br />
            <br />
            FileOutputStream fos_jpg = null;<br />
            try {<br />
            fos_jpg = new FileOutputStream("D:""fruit.jpg");<br />
            ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);<br />
            } finally {<br />
            try {<br />
            fos_jpg.close();<br />
            } catch (Exception e) {}<br />
            }<br />
            }<br />
            /**<br />
            * 获取一个演示用的简单数据集对象<br />
            * @return<br />
            */<br />
            private static CategoryDataset getDataSet() {<br />
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();<br />
            dataset.addValue(100, null, "苹果");<br />
            dataset.addValue(200, null, "梨子");<br />
            dataset.addValue(300, null, "葡萄");<br />
            dataset.addValue(400, null, "香蕉");<br />
            dataset.addValue(500, null, "荔枝");<br />
            return dataset;<br />
            }<br />
            /**<br />
            * 获取一个演示用的组合数据集对象<br />
            * @return<br />
            */<br />
            private static CategoryDataset getDataSet2() {<br />
            DefaultCategoryDataset dataset = new DefaultCategoryDataset();<br />
            dataset.addValue(100, "北京", "苹果");<br />
            dataset.addValue(100, "上海", "苹果");<br />
            dataset.addValue(100, "广州", "苹果");<br />
            dataset.addValue(200, "北京", "梨子");<br />
            dataset.addValue(200, "上海", "梨子");<br />
            dataset.addValue(200, "广州", "梨子");<br />
            dataset.addValue(300, "北京", "葡萄");<br />
            dataset.addValue(300, "上海", "葡萄");<br />
            dataset.addValue(300, "广州", "葡萄");<br />
            dataset.addValue(400, "北京", "香蕉");<br />
            dataset.addValue(400, "上海", "香蕉");<br />
            dataset.addValue(400, "广州", "香蕉");<br />
            dataset.addValue(500, "北京", "荔枝");<br />
            dataset.addValue(500, "上海", "荔枝");<br />
            dataset.addValue(500, "广州", "荔枝");<br />
            return dataset;<br />
            }<br />
            }<br />
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>程序运行结束后生成的图片文件效果如下图所示：</p>
<br />
<a name="N1010A"><strong>图4</strong></a><br />
<img alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/image004.gif" /> <br />
<p>如果是使用简单的数据即使用getDataSet方法获取数据集时产生的图片文件如下：</p>
<br />
<a name="N1011A"><strong>图5</strong></a><br />
<img alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/image005.gif" /> <br />
<p><a name="N10125">2 饼图</a></p>
<p>对于饼图而言，数据集的获取用的不是同一个数据集类，另外饼图不支持同一个类别的项目中还有子项目这样的数据。我们只给出创建饼图的代码，至于写图表到一个文件则与柱状图一致，无需重复。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code><br />
            package lius.chart.demo;<br />
            <br />
            import java.io.*;<br />
            <br />
            import org.jfree.data.*;<br />
            import org.jfree.chart.*;<br />
            /**<br />
            * 用于演示饼图的生成<br />
            * @author Winter Lau<br />
            */<br />
            public class PieChartDemo {<br />
            <br />
            public static void main(String[] args) throws IOException{<br />
            DefaultPieDataset data = getDataSet();<br />
            JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",  // 图表标题<br />
            data, <br />
            true, // 是否显示图例<br />
            false,<br />
            false<br />
            );<br />
            //写图表对象到文件，参照柱状图生成源码<br />
            }<br />
            /**<br />
            * 获取一个演示用的简单数据集对象<br />
            * @return<br />
            */<br />
            private static DefaultPieDataset getDataSet() {<br />
            DefaultPieDataset dataset = new DefaultPieDataset();<br />
            dataset.setValue("苹果",100);<br />
            dataset.setValue("梨子",200);<br />
            dataset.setValue("葡萄",300);<br />
            dataset.setValue("香蕉",400);<br />
            dataset.setValue("荔枝",500);<br />
            return dataset;<br />
            }<br />
            }<br />
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>生成的饼图文件效果如下： </p>
<br />
<a name="N10139"><strong>图6</strong></a><br />
<img alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/image006.gif" /> <br />
<br />
<table cellspacing="0" cellpadding="0" width="100%" border="0">
    <tbody>
        <tr>
            <td><img height="1" alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/blue_rule.gif" width="100%" /><br />
            <img height="6" alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/c.gif" width="8" border="0" /></td>
        </tr>
    </tbody>
</table>
<table cellspacing="0" cellpadding="0" align="right">
    <tbody>
        <tr align="right">
            <td><img height="4" alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/c.gif" width="100%" /><br />
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td valign="middle"><img height="16" alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/u_bold.gif" width="16" border="0" /><br />
                        </td>
                        <td valign="top" align="right"><a href="http://www-128.ibm.com/developerworks/cn/java/l-jfreechart/#main"><strong>回页首</strong></a></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<p><a name="4">将生成的图表移到浏览器上</a></p>
<p>为了将生成的图表直接传给客户端浏览器，只需要将前面两个例子中的文件流换成是通过HttpServletResponse对象获取到的输出流，详细代码清单如下： </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code><br />
            package lius.chart.demo;<br />
            <br />
            import java.io.IOException;<br />
            import javax.servlet.*;<br />
            import javax.servlet.http.HttpServlet;<br />
            <br />
            import org.jfree.data.*;<br />
            import org.jfree.chart.*;<br />
            /**<br />
            * 演示通过servlet直接输出图表<br />
            * @author Winter Lau<br />
            */<br />
            public class ChartDemoServlet extends HttpServlet {<br />
            <br />
            public void service(ServletRequest req, ServletResponse res)<br />
            throws ServletException, IOException <br />
            {<br />
            res.setContentType("image/jpeg");<br />
            DefaultPieDataset data = getDataSet();<br />
            JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",<br />
            data,<br />
            true,<br />
            false,<br />
            false<br />
            );<br />
            <br />
            ChartUtilities.writeChartAsJPEG(res.getOutputStream(),<br />
            100,chart,400,300,null);<br />
            }<br />
            /**<br />
            * 获取一个演示用的简单数据集对象<br />
            * @return<br />
            */<br />
            private static DefaultPieDataset getDataSet() {<br />
            DefaultPieDataset dataset = new DefaultPieDataset();<br />
            dataset.setValue("苹果",100);<br />
            dataset.setValue("梨子",200);<br />
            dataset.setValue("葡萄",300);<br />
            dataset.setValue("香蕉",400);<br />
            dataset.setValue("荔枝",500);<br />
            return dataset;<br />
            }<br />
            }<br />
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<br />
<br />
<p><a name="5">高级主题</a></p>
<p>很多情况我们不仅仅要求可以在浏览器上显示一个图表，我们更需要客户可以直接在图表上做一下交互的操作，例如获取信息提示，点击图表某个部分进行更详细信 息的展示等等。例如前面生成的简单柱状图，用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作 的功能。在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。下表节选一段具有该功能的HTML代码 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code><br />
            &lt;MAP NAME="chartMap"&gt;<br />
            &lt;AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&amp;category=100" title="100 = 7,048" <br />
            onclick="javascript:clickChart('100');return false;"&gt;<br />
            &lt;AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&amp;category=200" title="200 = 6,721" <br />
            onclick="javascript: clickChart ('200');return false;"&gt;<br />
            &lt;AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&amp;category=300" title="300 = 5,929" <br />
            onclick="javascript: clickChart ('300');return false;"&gt;<br />
            &lt;AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&amp;category=400" title="400 = 5,005" <br />
            onclick="javascript: clickChart ('400');return false;"&gt;<br />
            &lt;AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&amp;category=Diet" title="Diet = 7,017" onclick="javascript: <br />
            clickChart ('Diet');return false;"&gt;<br />
            &lt;/MAP&gt;<br />
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>由此就产生了一个问题：如果 根据一个图像来生成对应的MAP对象。我们回头看看刚才的代码，在创建一个图表对象时候有两个参数，我们举柱状图的例子来讲这两个参数就是 ChartFactory. createBarChart3D方法中的最后两个参数，这两个参数的类型都是布尔值。这两个参数意思分别是：是否创建工具提示(tooltip)以及是 否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性。 </p>
<p>可是我想知道的是怎么来产生这个MAP啊！哈哈，不要着急，JFreeChart已经帮我们做好生成MAP对象的功 能。为了生成MAP对象就要引入另外一个对象：ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生成 MAP数据，它需要一个中间对象来过渡，这个对象就是ChartRenderingInfo。下图是生成MAP数据的流程图： </p>
<br />
<a name="N10166"><strong>图7</strong></a><br />
<img alt="" src="file:///G:/文档/JFreeChart综合应用%20-%20java%20-%20CSDN技术中心.files/image007.gif" /> <br />
<p>如 上图所示，ChartUtilities类是整个流程的核心，它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下：首先创建一个 ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。调用该 方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象，有了这个对象我们还是没有办法获取具体的MAP数 据，我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来，获取MAP 数据的代码片断如下： </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code><br />
            PrintWriter w = null;<br />
            FileOutputStream fos_jpg = null;<br />
            FileOutputStream fos_cri = null;<br />
            try{<br />
            //根据不同类型的图表使用不同类，以下是针对饼图的操作<br />
            PiePlot plot = (PiePlot) chart.getPlot();<br />
            plot.setURLGenerator(new StandardPieURLGenerator(url));<br />
            //设置工具提示<br />
            plot.setToolTipGenerator(new StandardPieToolTipGenerator());<br />
            fos_jpg = new FileOutputStream(&#8220;d:""fruit.jpg&#8221;); <br />
            ChartUtilities.writeChartAsJPEG(<br />
            fos_jpg,<br />
            100,<br />
            chart,<br />
            400,<br />
            300,<br />
            info);<br />
            fos_cri = new FileOutputStream(__d:""fruit.map__);<br />
            w = new PrintWriter(fos_cri);<br />
            ChartUtilities.writeImageMap(w, __mapname__, info);<br />
            w.flush();<br />
            }finally{<br />
            try{<br />
            w.close();<br />
            }catch(Exception e){} <br />
            try{<br />
            fos_cri.close();<br />
            }catch(Exception e){} <br />
            try{<br />
            fos_jpg.close();<br />
            }catch(Exception e){}<br />
            }<br />
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>打开文件D:" fruit.map，文件的内容就是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文件写到页面上即可完成热点图表的功能。至于怎么结合两者 之间的关系例如图像的useMap属性值必须与MAP对象的名称结合起来，必须根据实际的应用情况进行相应的处理。笔者建议把二者通过标签库封装起来，图 像文件的名称以及MAP对象的名称由标签库统一进行控制，这样可以保证二者的一致性。 <br />
<br />
<br />
<br />
</p>
</div>
原文出处：http://dev.csdn.net/author/lyj_china/a5cda7cefe074c6b84f0ec944041921f.html 
<img src ="http://www.blogjava.net/raomingkun/aggbug/157252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/raomingkun/" target="_blank">小眼睛大智慧</a> 2007-10-31 17:09 <a href="http://www.blogjava.net/raomingkun/archive/2007/10/31/157252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP的九个隐含对象</title><link>http://www.blogjava.net/raomingkun/archive/2007/10/31/157251.html</link><dc:creator>小眼睛大智慧</dc:creator><author>小眼睛大智慧</author><pubDate>Wed, 31 Oct 2007 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/raomingkun/archive/2007/10/31/157251.html</guid><wfw:comment>http://www.blogjava.net/raomingkun/comments/157251.html</wfw:comment><comments>http://www.blogjava.net/raomingkun/archive/2007/10/31/157251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/raomingkun/comments/commentRss/157251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/raomingkun/services/trackbacks/157251.html</trackback:ping><description><![CDATA[一、page&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;page对象代表JSP本身，更准确地说它代表JSP被转译后的Servlet，它可以调用Servlet类所定义的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
二、config&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;对象里存放着一些Servlet&nbsp;初始的数据结构。<br />
&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;对象实现于javax.servlet.ServletConfig&nbsp;接口，它共有下列四种方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;getInitParameter(name)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;java.util.Enumeration&nbsp;getInitParameterNames(&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ServletContext&nbsp;getServletContext(&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Sring&nbsp;getServletName(&nbsp;)<br />
<br />
三、request&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;对象包含所有请求的信息，如：请求的来源、标头、cookies和请求相关的参数值等等。<br />
&nbsp;&nbsp;&nbsp;&nbsp;request&nbsp;对象实现javax.servlet.http.HttpServletRequest接口的，所提供的方法可以将它分为四大类：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.储存和取得属性方法；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setAttribute(String&nbsp;name,&nbsp;Object&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定name属性的值为value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getAttributeNamesInScope(int&nbsp;scope)&nbsp;&nbsp;&nbsp;&nbsp;取得所有scope&nbsp;范围的属性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;getAttribute(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得name&nbsp;属性的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;removeAttribute(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 移除name&nbsp;属性的值<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.取得请求参数的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getParameter(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得name&nbsp;的参数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getParameterNames(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得所有的参数名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;[]&nbsp;getParameterValues(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 取得所有name&nbsp;的参数值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;getParameterMap(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得一个要求参数的Map<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.能够取得请求HTTP&nbsp;标头的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getHeader(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得name&nbsp;的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getHeaderNames()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得所有的标头名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getHeaders(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得所有name&nbsp;的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getIntHeader(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得整数类型name&nbsp;的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;getDateHeader(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 取得日期类型name&nbsp;的标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie&nbsp;[]&nbsp;getCookies(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 取得与请求有关的cookies<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.其他的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getContextPath(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得Context&nbsp;路径(即站台名称)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getMethod(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得HTTP&nbsp;的方法(GET、POST)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getProtocol(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 取得使用的协议&nbsp;(HTTP/1.1、HTTP/1.0&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getQueryString(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 取得请求的参数字符串，不过，HTTP的方法必须为GET<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRequestedSessionId(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 取得用户端的Session&nbsp;ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRequestURI(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得请求的URL，但是不包括请求的参数字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRemoteAddr(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得用户的IP&nbsp;地址<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRemoteHost(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得用户的主机名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getRemotePort(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得用户的主机端口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRemoteUser(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 取得用户的名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;etCharacterEncoding(String&nbsp;&nbsp;&nbsp;&nbsp;encoding)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定编码格式，用来解决窗体传递中文的问题<br />
<br />
四、response&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;对象主要将JSP&nbsp;处理数据后的结果传回到客户端。<br />
&nbsp;&nbsp;&nbsp;&nbsp;response&nbsp;对象是实现javax.servlet.http.HttpServletResponse&nbsp;接口。response对象所提供的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.设定表头的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;addCookie(Cookie&nbsp;cookie)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 新增cookie<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;addDateHeader(String&nbsp;name,&nbsp;long&nbsp;date)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新增long类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;addHeader(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新增String类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;addIntHeader(String&nbsp;name,&nbsp;int&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 新增int类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setDateHeader(String&nbsp;name,&nbsp;long&nbsp;date)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 指定long类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setHeader(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 指定String类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setIntHeader(String&nbsp;name,&nbsp;int&nbsp;value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定int类型的值到name标头<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.设定响应状态码的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;sendError(int&nbsp;sc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传送状态码(status&nbsp;code)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;sendError(int&nbsp;sc,&nbsp;String&nbsp;msg)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 传送状态码和错误信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setStatus(int&nbsp;sc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设定状态码<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.用来URL&nbsp;重写(rewriting)的方法&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encodeRedirectURL(String&nbsp;&nbsp;&nbsp;&nbsp;url)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对使用sendRedirect(&nbsp;)方法的URL予以编码<br />
<br />
五、out&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;对象能把结果输出到网页上。<br />
&nbsp;&nbsp;&nbsp;&nbsp;out主要是用来控制管理输出的缓冲区(buffer)和输出流(output&nbsp;stream)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;clear(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 清除输出缓冲区的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;clearBuffer(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 清除输出缓冲区的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;close(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 关闭输出流，清除所有的内容<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getBufferSize(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得目前缓冲区的大小(KB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getRemaining(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得目前使用后还剩下的缓冲区大小(KB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isAutoFlush(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 回传true表示缓冲区满时会自动清除；false表示不会自动清除并且产生异常处理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
六、session&nbsp;对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;session对象表示目前个别用户的会话(session)状况。<br />
&nbsp;&nbsp;&nbsp;&nbsp;session对象实现javax.servlet.http.HttpSession接口，HttpSession接口所提供的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;getCreationTime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 取得session产生的时间，单位是毫秒<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getId()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得session&nbsp;的ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;getLastAccessedTime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 取得用户最后通过这个session送出请求的时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;getMaxInactiveInterval()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 取得最大session不活动的时间，若超过这时间，session&nbsp;将会失效<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;invalidate()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 取消session&nbsp;对象，并将对象存放的内容完全抛弃<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean&nbsp;isNew()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;判断session&nbsp;是否为"新"的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setMaxInactiveInterval(int&nbsp;&nbsp;&nbsp;&nbsp;interval)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设定最大session不活动的时间，若超过这时间，session&nbsp;将会失效<br />
<br />
七、application对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;application对象最常被使用在存取环境的信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;因为环境的信息通常都储存在ServletContext中，所以常利用application对象来存取ServletContext中的信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;application&nbsp;对象实现javax.servlet.ServletContext&nbsp;接口，ServletContext接口容器所提供的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getMajorVersion(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得Container主要的Servlet&nbsp;API版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getMinorVersion(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;取得Container次要的Servlet&nbsp;API&nbsp;版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getServerInfo(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得Container的名称和版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getMimeType(String&nbsp;file)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; 取得指定文件的MIME&nbsp;类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;getContext(String&nbsp;uripath)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得指定Local&nbsp;URL的Application&nbsp;context<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;getRealPath(String&nbsp;path)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 取得本地端path的绝对路径<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;log(String&nbsp;message)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 将信息写入log文件中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;log(String&nbsp;message,&nbsp;Throwable&nbsp;throwable)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将stack&nbsp;trace&nbsp;所产生的异常信息写入log文件中<br />
<br />
八、pageContext对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;pageContext对象能够存取其他隐含对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.pageContext对象存取其他隐含对象属性的方法，此时需要指定范围的参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;getAttribute(String&nbsp;name,&nbsp;int&nbsp;scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getAttributeNamesInScope(int&nbsp;scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;removeAttribute(String&nbsp;name,&nbsp;int&nbsp;scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setAttribute(String&nbsp;name,&nbsp;Object&nbsp;value,&nbsp;int&nbsp;scope)<br />
&nbsp;&nbsp;&nbsp;&nbsp;范围参数有四个，分别代表四种范围：PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.PageContext对象取得其他隐含对象的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exception&nbsp;getException(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 回传目前网页的异常，不过此网页要为error&nbsp;page，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JspWriter&nbsp;getOut(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 回传目前网页的输出流，例如：out&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;getPage(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 回传目前网页的Servlet&nbsp;实体(instance)，例如：page<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletRequest&nbsp;getRequest(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 回传目前网页的请求，例如：request<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletResponse&nbsp;getResponse(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 回传目前网页的响应，例如：response<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletConfig&nbsp;getServletConfig(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 回传目前此网页的ServletConfig&nbsp;对象，例如：config<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;getServletContext(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回传目前此网页的执行环境(context)，例如：application<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;getSession(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传和目前网页有联系的会话(session)，例如：session<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.PageContext对象提供取得属性的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;getAttribute(String&nbsp;name,&nbsp;int&nbsp;scope)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回传name&nbsp;属性，范围为scope的属性对象，回传类型为Object<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;getAttributeNamesInScope(int&nbsp;scope)&nbsp;&nbsp;&nbsp;&nbsp;回传所有属性范围为scope&nbsp;的属性名称，回传类型为Enumeration<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;getAttributesScope(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回传属性名称为name&nbsp;的属性范围<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;removeAttribute(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 移除属性名称为name&nbsp;的属性对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;removeAttribute(String&nbsp;name,&nbsp;int&nbsp;scope)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 移除属性名称为name，范围为scope&nbsp;的属性对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;setAttribute(String&nbsp;name,&nbsp;Object&nbsp;value,&nbsp;int&nbsp;scope)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指定属性对象的名称为name、值为value、范围为scope<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;findAttribute(String&nbsp;name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 寻找在所有范围中属性名称为name&nbsp;的属性对象<br />
<br />
九、exception对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;若要使用exception&nbsp;对象时，必须在page&nbsp;指令中设定。&lt;%@&nbsp;page&nbsp;isErrorPage="true"&nbsp;%&gt;才能使用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;exception提供的三个方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getMessage(&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getLocalizedMessage(&nbsp;)、<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printStackTrace(new&nbsp;java.io.PrintWriter(out))&nbsp; <br />
<br />
原文出处：http://www.javaresearch.org/article/68164.htm<br />
<img src ="http://www.blogjava.net/raomingkun/aggbug/157251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/raomingkun/" target="_blank">小眼睛大智慧</a> 2007-10-31 17:07 <a href="http://www.blogjava.net/raomingkun/archive/2007/10/31/157251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA程序员不可不注意的编码规范</title><link>http://www.blogjava.net/raomingkun/archive/2007/10/10/151794.html</link><dc:creator>小眼睛大智慧</dc:creator><author>小眼睛大智慧</author><pubDate>Wed, 10 Oct 2007 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/raomingkun/archive/2007/10/10/151794.html</guid><wfw:comment>http://www.blogjava.net/raomingkun/comments/151794.html</wfw:comment><comments>http://www.blogjava.net/raomingkun/archive/2007/10/10/151794.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/raomingkun/comments/commentRss/151794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/raomingkun/services/trackbacks/151794.html</trackback:ping><description><![CDATA[一、规范存在的意义<br />
<br />
应用编码规范对于软件本身和软件开发人员而言尤为重要，有以下几个原因：<br />
<br />
1、好的编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件，在其整个生命周期中，均由最初的开发人员来维护；<br />
<br />
2、好的编码规范可以改善软件的可读性，可以让开发人员尽快而彻底地理解新的代码；<br />
<br />
3、好的编码规范可以最大限度的提高团队开发的合作效率；<br />
<br />
4、长期的规范性编码还可以让开发人员养成好的编码习惯，甚至锻炼出更加严谨的思维；<br />
<br />
二、命名规范<br />
<br />
1、一般概念<br />
<br />
1、尽量使用完整的英文描述符<br />
<br />
2、采用适用于相关领域的术语<br />
<br />
3、采用大小写混合使名字可读<br />
<br />
4、尽量少用缩写，但如果用了，必须符合整个工程中的统一定义<br />
<br />
5、避免使用长的名字（小于 15 个字母为正常选择）<br />
<br />
6、避免使用类似的名字，或者仅仅是大小写不同的名字<br />
<br />
7、避免使用下划线（除静态常量等）<br />
<br />
2、标识符类型说明<br />
<br />
1、包（ Package ）的命名<br />
<br />
Package 的名字应该采用完整的英文描述符，都是由一个小写单词组成。并且包名的前缀总是一个顶级域名，<br />
<br />
通常是 com、edu、gov、mil、net、org 等；<br />
如： com.yjhmily.test<br />
<br />
2、类（ Class ）的命名<br />
<br />
类名应该是个一名词，采用大小写混合的方式，每个单词的首字母大写。尽量保证类名简洁而富于描述。<br />
<br />
使用完整单词，避免缩写词 ( 除非工程内有统一缩写规范或该缩写词被更广泛使用，像 URL ， HTML)<br />
<br />
如： FileDescription<br />
<br />
3、接口（ Interface ）的命名<br />
<br />
基本与 Class 的命名规范类似。在满足 Classd 命名规则的基础之上，保证开头第一个字母为 &#8221;I&#8221;，<br />
<br />
便于与普通的 Class区别开。其实现类名称取接口名的第二个字母到最后，且满足类名的命名规范；<br />
<br />
如： IMenuEngine<br />
<br />
4、枚举（ Enum ）的命名<br />
<br />
基本与 Class 的命名规范类似。在满足 Classd 命名规则的基础之上，保证开头第一个字母为 &#8221;E&#8221; ，<br />
<br />
便于与普通的 Class区别开。<br />
如： EUserRole<br />
<br />
5、异常（ Exception ）的命名<br />
<br />
异常（ Exception ） 通常采用字母 e 表示异常，对于自定义的异常类，其后缀必须为 Exception<br />
<br />
如： BusinessException<br />
<br />
6、方法（ Method ）的命名<br />
<br />
方法名是一个动词，采用大小写混合的方式，第一个单词的首字母小写，其后单词的首字母大写。<br />
<br />
方法名尽可能的描述出该方法的动作行为。返回类型为 Boolean 值的方法一般由&#8220; is &#8221;或&#8220; has &#8221;来开头<br />
<br />
如： getCurrentUser() 、 addUser() 、 hasAuthority()<br />
<br />
7、参数（ Param ）的命名<br />
<br />
第一个单词的首字母小写，其后单词的首字母大写。参数量名不允许以下划线或美元符号开头，<br />
<br />
虽然这在语法上是允许的。参数名应简短且富于描述。<br />
<br />
如： public UserContext getLoginUser(String loginName); <br />
<br />
8、常量字段 （ Constants ）的命名<br />
<br />
静态常量字段（ static final ） 全部采用大写字母，单词之间用下划线分隔；<br />
<br />
如： public static final Long FEEDBACK; <br />
public static Long USER_STATUS; <br />
<br />
三、注释规范<br />
<br />
一个很好的可遵循的有关注释的经验法则是：<br />
<br />
问问你自己，你如果从未见过这段代码，要在合理的时间内有效地明白这段代码，你需要一些什么信息？？？<br />
<br />
1、一般概念<br />
<br />
1、注释应该增加代码的清晰度<br />
<br />
2、保持注释的简洁<br />
<br />
3、在写代码之前或同时写注释<br />
<br />
4、注释出为什么做了一些事，而不仅仅是做了什么<br />
<br />
2、注释哪些部分<br />
<br />
1、Java 文件：必须写明版权信息以及该文件的创建时间和作者；<br />
<br />
2、类：类的目的、即类所完成的功能，以及该类创建的时间和作者名称；多人一次编辑或修改同一个类时，<br />
<br />
应在作者名称处出现多人的名称；<br />
<br />
3、接口： 在满足类注释的基础之上，接口注释应该包含设置接口的目的、它应如何被使用以及如何不被使用。<br />
<br />
在接口注释清楚的前提下对应的实现类可以不加注释；<br />
<br />
4、方法注释： 对于设置 (Set 方法 ) 与获取 (Get 方法 ) 成员的方法，在成员变量已有说明的情况下，<br />
<br />
可以不加注释；普通成员方法要求说明完成什么功能，参数含义是什么且返回值什么；另外方法的创建<br />
<br />
时间必须注释清楚，为将来的维护和阅读提供宝贵线索；<br />
<br />
5、方法内部注释： 控制结构，代码做了些什么以及为什么这样做，处理顺序等，特别是复杂的逻辑处理部分，<br />
<br />
要尽可能的给出详细的注释；<br />
<br />
6、参数： 参数含义、及其它任何约束或前提条件；<br />
<br />
7、属性： 字段描述；<br />
<br />
8、局部 ( 中间 ) 变量： 无特别意义的情况下不加注释；<br />
<br />
3、注释格式<br />
<br />
遵循工程规定的统一注释格式，一般情况下会以 codetemplates.xml 格式的文件导入 IDE(Eclipse) <br />
<br />
或者用Eclipse默认的；<br />
<br />
四、代码格式规范<br />
<br />
遵循工程规定的统一代码格式，一般情况下直接使用 IDE(Eclipse) 自带的默认代码格式对代码进行格式化；<br />
<br />
五、其他规范<br />
<br />
JSP 文件命名<br />
<br />
采用完整的英文描述说明 JSP 所完成的功能，尽可能包括一个生动的动词，第一个字母小写，<br />
<br />
如： viewMessage.jsp 、editUser.jsp 等。<br />
<br />
六、工程特有命名规范<br />
<br />
1、持久层<br />
<br />
1、 Hibernate 映射文件及实体<br />
<br />
与数据库表名称完全对应；<br />
如： Advertisement.hbm.xml 、 Advertisement.java<br />
<br />
2、数据访问 DAO<br />
<br />
DAO 接口和实现类名称必须完全符合正常接口和实现类的命名规则，且最后以 &#8221;DAO&#8221; 结尾<br />
<br />
DAO 内的数据访问方法必须足够抽象的描述出对数据库的基本 CRUD 操作；<br />
如： ICrossAdDAO( 接口 ) 、 CrossAdDAO( 实现类 )<br />
<br />
3、各种操作数据库的 HQL 配置文件<br />
<br />
HQL 文件的个数原则上与系统的 Services 层的服务个数相等，且以服务名称命名 HQL 文件；<br />
<br />
如： resource.hbm.xml<br />
<br />
2、服务层<br />
<br />
1、服务接口和实现<br />
<br />
服务接口和实现类必须完全符合正常接口和实现类的命名规则；以工程定义的服务名为主体，<br />
<br />
并统一以 &#8221;Serv&#8221; 结尾<br />
如： IResourceServ( 服务接口 ) 、 ResourceServ( 接口实现类 )<br />
<br />
2、服务接口方法<br />
<br />
方法名是一个动词，采用大小写混合的方式，第一个单词的首字母小写，其后单词的首字母大写。<br />
<br />
方法名尽可能的描述出该方法的动作行为。<br />
<br />
返回类型为 Boolean 值：用&#8220; is &#8221;或&#8220; has &#8221;来开头<br />
得到某数据： get+ 数据描述名词复数 + 数据类型；<br />
得到所有数据： get+All+ 数据描述名词复数 + 数据类型；<br />
通过 XXX 得到 / 查询某数据： get/query+ 数据描述名词复数 + 数据类型 +By+ 条件；<br />
添加某数据： save/add+ 数据描述名词 ()<br />
更新某数据： save/update+ 数据描述名词；<br />
删除某数据： delete/remove+ 数据描述名词；<br />
<br />
3、业务对象<br />
<br />
业务名称 +BO<br />
<br />
4、查询参数对象<br />
<br />
凡是继承 Abst***QuerySpec 的查询参数类全部满足以下规则：<br />
Query+ 所要查询的数据描述名词 +Spec<br />
作为参数传入时，参数名必须为：所要查询的数据描述名词 +Spec<br />
如： QueryProgramSpec<br />
<br />
3、MVC 层 <br />
<br />
1、Action 控制层<br />
<br />
Action 类名：功能模块名称 +Action ；<br />
Actoin 方法名称尽可能的描述出页面迁移的去向<br />
如： LoginAction( 登录用 action) ， toWelcome( 转向欢迎页的 action 方法 )<br />
<br />
2、资源文件<br />
<br />
系统全局资源文件： globalMessages_+ 字符编码类型 +.properties<br />
功能模块内部的资源文件： package.properties<br />
<br />
4、Spring 配置文件<br />
<br />
1、Action 相关配置文件<br />
文件目录： WebRoot/WEB-INF/spring/action/ 功能模块名称 +_ApplicationContext.xml<br />
<br />
2、Services 相关配置文件<br />
<br />
文件目录： WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml<br />
<br />
3、全局性配置文件<br />
<br />
文件目录： WebRoot/WEB-INF/spring/工程名+_ApplicationContext.xml<br />
<br />
5、JSP 文件<br />
<br />
采用完整的英文描述说明 JSP 所完成的功能，尽可能包括一个生动的动词，第一个字母小写，<br />
如： viewMessage.jsp 、editUser.jsp 等。 <br />
<br />
原文出处:http://www.blogjava.net/yjhmily/
<img src ="http://www.blogjava.net/raomingkun/aggbug/151794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/raomingkun/" target="_blank">小眼睛大智慧</a> 2007-10-10 16:35 <a href="http://www.blogjava.net/raomingkun/archive/2007/10/10/151794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>