??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美激情精品一区二区,精品久久久久久久久久久久久久久,视频国产在线观看http://www.aygfsteel.com/raomingkun/zh-cnWed, 18 Jun 2025 10:51:28 GMTWed, 18 Jun 2025 10:51:28 GMT60JFreeChartl合应用http://www.aygfsteel.com/raomingkun/archive/2007/10/31/157252.html眼睛大智慧眼睛大智慧Wed, 31 Oct 2007 09:09:00 GMThttp://www.aygfsteel.com/raomingkun/archive/2007/10/31/157252.htmlhttp://www.aygfsteel.com/raomingkun/comments/157252.htmlhttp://www.aygfsteel.com/raomingkun/archive/2007/10/31/157252.html#Feedback0http://www.aygfsteel.com/raomingkun/comments/commentRss/157252.htmlhttp://www.aygfsteel.com/raomingkun/services/trackbacks/157252.html 

JFreeChart是一个开源的JAVA目Q它主要用来开发各U各L图表Q这些图表包括:饼图、柱状图(普通柱状图以及堆栈q?/span>)、线图、区域图、分布图、؜合图、甘特图以及一些A表盘{等。在q些不同式样的图表上可以满目前商业pȝ的要求?/span>JFreeChart是一U基?/span>JAVA语言的图表开发技术?/span>JFreeChart可用?/span>Servlet?/span>JSP?/span>Applet?/span>Java Appication环境中,通过JDBC可动态显CZQ何数据库数据Q结?/span>Itext可以输出?/span>PDF文g?/span>

JFreeChart主要是由三个cL成:

AQ?/span>org.jfree.chart.servlet.ChartDeleterl承?/span>HttpSessionBindingListenerQ用于实现当Session 关闭Ӟ删除临时目中的图象文件?/span>

BQ?/span>org.jfree.chart.servlet.DisplayChartl承?/span>Httpservlet 用于处理昄图象?/span>

CQ?/span>org.jfree.chart.servlet.ServletUtilities有一pdҎQ例如,saveChartAs*;saveChartAs*是把图表按照不同的Ş式存储ؓ图象Q?/span>sendTempFileҎ被重载了很多ơ,用于把文件流发?/span>response?/span>

下面以柱状图和饼图ؓ例,介绍囑Ş创徏Ҏ?/span>

1 q?

org.jfree.chart.ChartFactoryq个工厂cLcreateBarChart?/span>createStackedBarChart?/span>createBarChart3D?/span>createStackedBarChart3DQ这几个工厂Ҏ创徏不同cd的柱状图Q比较重要的?/span> PlotOrientation.VERTICAL 让^行柱垂直昄Q?/span> PlotOrientation.HORIZONTAL 则让q柱水qxC。对q囑֪响较大的几个cd括:org.jfree.chart.axis.CategoryAxis?/span>org.jfree.chart.axis.ValueAxis?/span>org.jfree.chart.renderer.BarRenderer?/span>org.jfree.chart.renderer. BarRenderer3D?/span>

具体实现步骤Q?/span>

1Q创建用于图形生成所要的数据集对象?/span>

CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data)Q?/span>

其中Q?/span>rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充q图所要的实际数据Q来自于数据库)?/span>

2Q创建图形对象?/span>

JFreeChart chart = ChartFactory.createBarChart3D("标题", nullQ?/span>nullQ?/span>datasetQ?/span>PlotOrientation.VERTICAL,Q?/span>trueQ?/span>falseQ?/span>false)Q?/span>

createBarChart3DҎ?/span>ChartFactory工厂c里的一个方法,用于3Dq囄生成Q该cȝ承自JFreeChart。其中的八个参数分别代表Q图形的标题?/span>X轴标题?/span>Y轴标题?/span>datasetCategoryDatasetcȝ实例对象、显C标题、启用热键、启用超键接?/span>

3Q设|图形显C的属性?/span>

a ) ValueAxisc,讄柱到图上下边的距R实现方法是Q?/span>

ValueAxis rangeAxis = plot.getRangeAxis();

讄最高的一个柱与图片顶端的距离Q?/span>

rangeAxis.setUpperMargin(0.15)

讄最低的一个柱与图片底端的距离Q?/span>

rangeAxis.setLowerMargin(0.15)

bQ?/span>org.jfree.chart.renderer.BarRenderer3Dc,讄囑Ş上显C的数倹{实现方法如下:

BarRenderer3D renderer = new BarRenderer3D();

renderer.setBaseOutlinePaint(Color.BLACK);

Wall 的颜Ԍ

renderer.setWallPaint(Color.gray);

讄每个q颜色Q?/span>

renderer.setSeriesPaint(0, new Color(0, 0, 255));

renderer.setSeriesPaint(1, new Color(0, 100, 255));

renderer.setSeriesPaint(2, Color.GREEN);

讄每个q Outline 颜色
renderer.setSeriesOutlinePaint(0, Color.BLACK);

renderer.setSeriesOutlinePaint(1, Color.BLACK);

renderer.setSeriesOutlinePaint(2, Color.BLACK);

讄每个地区所包含的^行柱之间的距?/span>
renderer.setItemMargin(0.1);

昄每个q数|q修改该数值的字体属?/span>

renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());

renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));

renderer.setItemLabelsVisible(true);

为图形加入超q接

renderer.setItemURLGenerator(new StandardCategoryURLGenerator());

renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());

2 饼图

org.jfree.chart.plot包,包含创徏饼Ş囄所有方法和属性?/span>

W者根据业务需求创ZsetURLGenerator(PieURLGenerator generator)ҎQ在囄上徏立连接,是囄不同部分q接不同的资源?/span>

setSectionLabelType(int type)ҎQ?/span>

指定 section 标签的类型,共有 7 U类型。如果不指定Q默认是 NAME_LABELSQ其中类型分别是Q?/span>

PiePlot.NO_LABELS

PiePlot.NAME_LABELS

PiePlot.VALUE_LABELS

PiePlot.PERCENT_LABELS ?/span>PiePlot.NAME_AND_VALUE_LABELS?/span>PiePlot. NAME_AND_PERCENT_LABELS?/span>PiePlot.VALUE_AND_PERCENT_LABELS?/span>

setDefaultOutlinePaint(java.awt.Paint paint)ҎQ指?/span> section 轮廓U的颜色Q如果不指定Q默认gؓNULL?/span>

setDefaultOutlineStroke(java.awt.Stroke stroke)ҎQ指?/span> section 轮廓U的厚度?/span>

setRadius(double percent) ?/span> setExplodePercent(int section, double percent)ҎQ抽?/span> sectionQ就是把某一section从饼形图剥离出来Q需要两个方法一起用?/span>

setStartAngle(double angle)ҎQ设|第一?/span>section开始位|,默认?/span>12炚w方向开始?/span>

setPaint(int section, java.awt.Paint paint)Ҏ指定section的颜艌Ӏ?/span>

setDirection(int direction)Ҏ指定section序Q默认是时针方向。顺旉Q?/span>PiePlot.CLOCKWISEQ逆时针:PiePlot.ANTICLOCKWISE?/span>

具体实现步骤Q?/span>

1Q创建用于图形生成所要的数据集对象?/span>

首先实例化类DefaultPieDataset dataset = new DefaultPieDataset()。然后利?/span>DefaultPieDatasetcL供的setValueQ?/span>value1,value2Q方法,把从数据库里提取的数据存?/span>DefaultPieDataset对象。其?/span>value1是数据名U?/span>value2是数据倹{?/span>

2Q创建图形对象?/span>

首先实例?span style="color: black; font-family: 宋体">JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false)createPieChart3DҎ是用于饼囄成的主要Ҏ。其?span style="color: black; font-family: 宋体">title代表囑Ş的标题?span style="color: black; font-family: 宋体">dataset是DefaultPieDataset对象的实例?/span>

3Q设|图形显C的属性?/span>

String filename = ServletUtilities.saveChartAsPNG(jFreeChart, 700, 450, info, session);

ChartUtilities.writeImageMap(pw, filename, info);

pw.flush()

saveChartAsPNGҎ?/span>ServletUtilities工厂cd义完成。主要用于把囑Ş对象JFreeChart以图片的形式保存。其中的jFreeChartJFreeChart对象的实例。该Ҏq回一个文件名?/span>

writeImageMapQ?/span>pw, filename, infoQ方法用于把保存的图片文件以字节的形式写入用户界面?/span>

其中pw?/span>java.io包的PrintWritercȝ实例对象Q该对象创徏一个图形输出流?/span>Filename是输出图片的文g名。该文g名来?/span>ServletUtilities.saveChartAsPNGҎ创徏?/span>

参数info用于囑Ş信息的显C?/span>

?span style="color: black; font-family: 宋体">ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection())创徏?/span>

最后输出完成图形,调用pw.flush()Ҏ关闭IO?br />
------------------------------------------------------------------------------------------

使用JFreeChart生成各种样式的图?/a>

限于幅的问题我们在q里只实CU常用的图表Q其他类型图表读者可以触cL通。我们先l出q囄实现Q饼囄实现再来跟柱状图q行比较?

1 q?/a>


package lius.chart.demo;

import java.io.*;

import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
/**
* 该类用于演示最单的q囄?br /> * @author Winter Lau
*/
public class BarChartDemo {

public static void main(String[] args) throws IOException{

CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D(
"水果产量?, // 图表标题
"水果", // 目录轴的昄标签
"产量", // 数Du的显C标{?br /> dataset, // 数据?br /> PlotOrientation.VERTICAL, // 图表方向Q水q뀁垂?br /> true, // 是否昄图例(对于单的q囑ֿLfalse)
false, // 是否生成工具
false // 是否生成URL链接
);

FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:""fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
} finally {
try {
fos_jpg.close();
} catch (Exception e) {}
}
}
/**
* 获取一个演C用的简单数据集对象
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, null, "Ҏ");
dataset.addValue(200, null, "梨子");
dataset.addValue(300, null, "葡萄");
dataset.addValue(400, null, "香蕉");
dataset.addValue(500, null, "荔枝");
return dataset;
}
/**
* 获取一个演C用的组合数据集对象
* @return
*/
private static CategoryDataset getDataSet2() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "Ҏ");
dataset.addValue(100, "上v", "Ҏ");
dataset.addValue(100, "q州", "Ҏ");
dataset.addValue(200, "北京", "梨子");
dataset.addValue(200, "上v", "梨子");
dataset.addValue(200, "q州", "梨子");
dataset.addValue(300, "北京", "葡萄");
dataset.addValue(300, "上v", "葡萄");
dataset.addValue(300, "q州", "葡萄");
dataset.addValue(400, "北京", "香蕉");
dataset.addValue(400, "上v", "香蕉");
dataset.addValue(400, "q州", "香蕉");
dataset.addValue(500, "北京", "荔枝");
dataset.addValue(500, "上v", "荔枝");
dataset.addValue(500, "q州", "荔枝");
return dataset;
}
}

E序q行l束后生成的囄文g效果如下图所C:


?

如果是用简单的数据即用getDataSetҎ获取数据集时产生的图片文件如下:


?

2 饼图

对于饼图而言Q数据集的获取用的不是同一个数据集c,另外饼图不支持同一个类别的目中还有子目q样的数据。我们只l出创徏饼图的代码,至于写图表到一个文件则与柱状图一_无需重复?


package lius.chart.demo;

import java.io.*;

import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 用于演示饼图的生?br /> * @author Winter Lau
*/
public class PieChartDemo {

public static void main(String[] args) throws IOException{
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果产量?, // 图表标题
data,
true, // 是否昄图例
false,
false
);
//写图表对象到文gQ参照柱状图生成源码
}
/**
* 获取一个演C用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Ҏ",100);
dataset.setValue("梨子",200);
dataset.setValue("葡萄",300);
dataset.setValue("香蕉",400);
dataset.setValue("荔枝",500);
return dataset;
}
}

生成的饼图文件效果如下:


?





回页?/strong>


生成的图表Ud览器上

Z生成的图表直接传给客户端浏览器Q只需要将前面两个例子中的文g换成是通过HttpServletResponse对象获取到的输出,详细代码清单如下Q?


package lius.chart.demo;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;

import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 演示通过servlet直接输出图表
* @author Winter Lau
*/
public class ChartDemoServlet extends HttpServlet {

public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果产量?,
data,
true,
false,
false
);

ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null);
}
/**
* 获取一个演C用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Ҏ",100);
dataset.setValue("梨子",200);
dataset.setValue("葡萄",300);
dataset.setValue("香蕉",400);
dataset.setValue("荔枝",500);
return dataset;
}
}




高主题

很多情况我们不仅仅要求可以在览器上昄一个图表,我们更需要客户可以直接在图表上做一下交互的操作Q例如获取信息提C,点击图表某个部分q行更详l信 息的展示{等。例如前面生成的单柱状图Q用户需要在看到q囑֐点击某种水果例如是苹果即可看到各个地果量的情况。ؓ此就要求该图形具有交互操?的功能。在HTML中ؓ了让一个图像具有可交互的功能就必须l该囑փ定义一个Map对象。下表节选一D具有该功能的HTML代码


<MAP NAME="chartMap">
<AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100" title="100 = 7,048"
onclick="javascript:clickChart('100');return false;">
<AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200" title="200 = 6,721"
onclick="javascript: clickChart ('200');return false;">
<AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300" title="300 = 5,929"
onclick="javascript: clickChart ('300');return false;">
<AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400" title="400 = 5,005"
onclick="javascript: clickChart ('400');return false;">
<AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet" title="Diet = 7,017" onclick="javascript:
clickChart ('Diet');return false;">
</MAP>

由此׃生了一个问题:如果 Ҏ一个图像来生成对应的MAP对象。我们回头看看刚才的代码Q在创徏一个图表对象时候有两个参数Q我们Dq囄例子来讲q两个参数就?ChartFactory. createBarChart3DҎ中的最后两个参敎ͼq两个参数的cd都是布尔倹{这两个参数意思分别是Q是否创建工hC?tooltip)以及?否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性?

可是我想知道的是怎么来生这个MAP啊!哈哈Q不要着急,JFreeChart已经帮我们做好生成MAP对象的功 能。ؓ了生成MAP对象p引入另外一个对象:ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生?MAP数据Q它需要一个中间对象来q渡Q这个对象就是ChartRenderingInfo。下图是生成MAP数据的流E图Q?


?

?上图所C,ChartUtilitiescL整个程的核心,它周围的对象都是一些例如数据对象或者是文g{。这个流E简单描q如下:首先创徏一?ChartRenderingInfo对象q在调用ChartUtilities的writeChartAsJPEG时作为最后一个参C递进厅R调用该 Ҏl束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象Q有了这个对象我们还是没有办法获取具体的MAP?据,我们q必d助于ChartUtilities的writeImageMapҎ来将ChartRenderingInfo对象d出来Q获取MAP 数据的代码片断如下:


PrintWriter w = null;
FileOutputStream fos_jpg = null;
FileOutputStream fos_cri = null;
try{
//Ҏ不同cd的图表用不同类Q以下是针对饼图的操?br /> PiePlot plot = (PiePlot) chart.getPlot();
plot.setURLGenerator(new StandardPieURLGenerator(url));
//讄工具提示
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
fos_jpg = new FileOutputStream(“d:""fruit.jpg”);
ChartUtilities.writeChartAsJPEG(
fos_jpg,
100,
chart,
400,
300,
info);
fos_cri = new FileOutputStream(__d:""fruit.map__);
w = new PrintWriter(fos_cri);
ChartUtilities.writeImageMap(w, __mapname__, info);
w.flush();
}finally{
try{
w.close();
}catch(Exception e){}
try{
fos_cri.close();
}catch(Exception e){}
try{
fos_jpg.close();
}catch(Exception e){}
}

打开文gD:" fruit.mapQ文件的内容是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文g写到面上即可完成热点图表的功能。至于怎么l合两?之间的关pM如图像的useMap属性值必MMAP对象的名U结合v来,必须Ҏ实际的应用情况进行相应的处理。笔者徏议把二者通过标签库封装v来,?像文件的名称以及MAP对象的名U由标签库统一q行控制Q这样可以保证二者的一致性?



原文出处Qhttp://dev.csdn.net/author/lyj_china/a5cda7cefe074c6b84f0ec944041921f.html

眼睛大智慧 2007-10-31 17:09 发表评论
]]>
JSP的九个隐含对?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/raomingkun/archive/2007/10/31/157251.html</guid><wfw:comment>http://www.aygfsteel.com/raomingkun/comments/157251.html</wfw:comment><comments>http://www.aygfsteel.com/raomingkun/archive/2007/10/31/157251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/raomingkun/comments/commentRss/157251.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/raomingkun/services/trackbacks/157251.html</trackback:ping><description><![CDATA[一、page 对象<br />     page对象代表JSP本nQ更准确地说它代表JSP被{译后的ServletQ它可以调用ServletcL定义的方法?br />         <br /> 二、config 对象<br />     config 对象里存攄一些Servlet 初始的数据结构?br />     config 对象实现于javax.servlet.ServletConfig 接口Q它共有下列四种ҎQ?br />         public String getInitParameter(name)<br />         public java.util.Enumeration getInitParameterNames( )<br />         public ServletContext getServletContext( )<br />         public Sring getServletName( )<br /> <br /> 三、request 对象<br />     request 对象包含所有请求的信息Q如Q请求的来源、标头、cookies和请求相关的参数值等{?br />     request 对象实现javax.servlet.http.HttpServletRequest接口的,所提供的方法可以将它分为四大类Q?br />     1.储存和取得属性方法;<br />         void setAttribute(String name, Object value)       讑֮name属性的gؓvalue<br />         Enumeration getAttributeNamesInScope(int scope)    取得所有scope 范围的属?br />         Object getAttribute(String name)                   取得name 属性的?br />         void removeAttribute(String name)                  U除name 属性的?br />     2.取得h参数的方?br />         String getParameter(String name)                   取得name 的参数?br />         Enumeration getParameterNames( )                   取得所有的参数名称<br />         String [] getParameterValues(String name)          取得所有name 的参数?br />         Map getParameterMap( )                             取得一个要求参数的Map<br />     3.能够取得hHTTP 标头的方?br />         String getHeader(String name)                      取得name 的标?br />         Enumeration getHeaderNames()                       取得所有的标头名称<br />         Enumeration getHeaders(String name)                取得所有name 的标?br />         int getIntHeader(String name)                      取得整数cdname 的标?br />         long getDateHeader(String name)                    取得日期cdname 的标?br />         Cookie [] getCookies( )                            取得与请求有关的cookies<br />     4.其他的方?br />         String getContextPath( )                           取得Context 路径(即站台名U?<br />         String getMethod( )                                取得HTTP 的方?GET、POST)<br />         String getProtocol( )                              取得使用的协?nbsp;(HTTP/1.1、HTTP/1.0 )<br />         String getQueryString( )                           取得h的参数字W串Q不q,HTTP的方法必MؓGET<br />         String getRequestedSessionId( )                    取得用户端的Session ID<br />         String getRequestURI( )                            取得h的URLQ但是不包括h的参数字W串<br />         String getRemoteAddr( )                            取得用户的IP 地址<br />         String getRemoteHost( )                            取得用户的主机名U?br />         int getRemotePort( )                               取得用户的主机端?br />         String getRemoteUser( )                            取得用户的名U?br />         void etCharacterEncoding(String    encoding)       讑֮~码格式Q用来解决窗体传递中文的问题<br /> <br /> 四、response 对象<br />     response 对象主要JSP 处理数据后的l果传回到客L?br />     response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法?br />     1.讑֮表头的方?br />         void addCookie(Cookie cookie)                      新增cookie<br />         void addDateHeader(String name, long date)         新增longcd的值到name标头<br />         void addHeader(String name, String value)          新增Stringcd的值到name标头<br />         void addIntHeader(String name, int value)          新增intcd的值到name标头<br />         void setDateHeader(String name, long date)         指定longcd的值到name标头<br />         void setHeader(String name, String value)          指定Stringcd的值到name标头<br />         void setIntHeader(String name, int value)          指定intcd的值到name标头<br />     2.讑֮响应状态码的方?br />         void sendError(int sc)                             传送状态码(status code)<br />         void sendError(int sc, String msg)                 传送状态码和错误信?br />         void setStatus(int sc)                             讑֮状态码<br />     3.用来URL 重写(rewriting)的方?nbsp;   <br />         String encodeRedirectURL(String    url)            对用sendRedirect( )Ҏ的URL予以~码<br /> <br /> 五、out 对象<br />     out 对象能把l果输出到网上?br />     out主要是用来控制管理输出的~冲?buffer)和输出流(output stream)?br />         void clear( )                                      清除输出~冲区的内容<br />         void clearBuffer( )                                清除输出~冲区的内容<br />         void close( )                                      关闭输出,清除所有的内容<br />         int getBufferSize( )                               取得目前~冲区的大小(KB)<br />         int getRemaining( )                                取得目前使用后还剩下的缓冲区大小(KB)<br />         boolean isAutoFlush( )                             回传true表示~冲区满时会自动清除Qfalse表示不会自动清除q且产生异常处理<br />         <br /> 六、session 对象<br />     session对象表示目前个别用户的会?session)状况?br />     session对象实现javax.servlet.http.HttpSession接口QHttpSession接口所提供的方?br />         long getCreationTime()                             取得session产生的时_单位是毫U?br />         String getId()                                     取得session 的ID<br />         long getLastAccessedTime()                         取得用户最后通过q个session送出h的时?br />         long getMaxInactiveInterval()                      取得最大session不活动的旉Q若过q时_session 会失效<br />         void invalidate()                                  取消session 对象Qƈ对象存攄内容完全抛弃<br />         boolean isNew()                                    判断session 是否???br />         void setMaxInactiveInterval(int    interval)       讑֮最大session不活动的旉Q若过q时_session 会失效<br /> <br /> 七、application对象<br />     application对象最常被使用在存取环境的信息?br />     因ؓ环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息?br />     application 对象实现javax.servlet.ServletContext 接口QServletContext接口容器所提供的方?br />         int getMajorVersion( )                             取得Container主要的Servlet API版本<br />         int getMinorVersion( )                             取得Containerơ要的Servlet API 版本<br />         String getServerInfo( )                            取得Container的名U和版本<br />         String getMimeType(String file)                    取得指定文g的MIME cd<br />         ServletContext getContext(String uripath)          取得指定Local URL的Application context<br />         String getRealPath(String path)                    取得本地端path的绝对\?br />         void log(String message)                           信息写入log文g?br />         void log(String message, Throwable throwable)      stack trace 所产生的异怿息写入log文g?br /> <br /> 八、pageContext对象<br />     pageContext对象能够存取其他隐含对象?br />     1.pageContext对象存取其他隐含对象属性的ҎQ此旉要指定范围的参数?br />         Object getAttribute(String name, int scope)<br />         Enumeration getAttributeNamesInScope(int scope)<br />         void removeAttribute(String name, int scope)<br />         void setAttribute(String name, Object value, int scope)<br />     范围参数有四个,分别代表四种范围QPAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE<br />     2.PageContext对象取得其他隐含对象的方?br />         Exception getException( )                          回传目前|页的异常,不过此网要为error pageQ?br />         JspWriter getOut( )                                回传目前|页的输出流Q例如:out <br />         Object getPage( )                                  回传目前|页的Servlet 实体(instance)Q例如:page<br />         ServletRequest getRequest( )                       回传目前|页的请求,例如Qrequest<br />         ServletResponse getResponse( )                     回传目前|页的响应,例如Qresponse<br />         ServletConfig getServletConfig( )                  回传目前此网늚ServletConfig 对象Q例如:config<br />         ServletContext getServletContext( )                回传目前此网늚执行环境(context)Q例如:application<br />         HttpSession getSession( )                          回传和目前网|联系的会?session)Q例如:session<br />     3.PageContext对象提供取得属性的Ҏ<br />         Object getAttribute(String name, int scope)        回传name 属性,范围为scope的属性对象,回传cd为Object<br />         Enumeration getAttributeNamesInScope(int scope)    回传所有属性范围ؓscope 的属性名Uͼ回传cd为Enumeration<br />         int getAttributesScope(String name)                回传属性名UCؓname 的属性范?br />         void removeAttribute(String name)                  U除属性名UCؓname 的属性对?br />         void removeAttribute(String name, int scope)       U除属性名UCؓnameQ范围ؓscope 的属性对?br />         void setAttribute(String name, Object value, int scope)        指定属性对象的名称为name、gؓvalue、范围ؓscope<br />         Object findAttribute(String name)                  L在所有范围中属性名UCؓname 的属性对?br /> <br /> 九、exception对象<br />     若要使用exception 对象Ӟ必须在page 指o中设定?lt;%@ page isErrorPage="true" %>才能使用?br />     exception提供的三个方法:<br />         getMessage( )<br />         getLocalizedMessage( )?br />         printStackTrace(new java.io.PrintWriter(out))  <br /> <br /> 原文出处Qhttp://www.javaresearch.org/article/68164.htm<br /> <img src ="http://www.aygfsteel.com/raomingkun/aggbug/157251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/raomingkun/" target="_blank">眼睛大智慧</a> 2007-10-31 17:07 <a href="http://www.aygfsteel.com/raomingkun/archive/2007/10/31/157251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVAE序员不可不注意的编码规?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/raomingkun/archive/2007/10/10/151794.html</guid><wfw:comment>http://www.aygfsteel.com/raomingkun/comments/151794.html</wfw:comment><comments>http://www.aygfsteel.com/raomingkun/archive/2007/10/10/151794.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/raomingkun/comments/commentRss/151794.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/raomingkun/services/trackbacks/151794.html</trackback:ping><description><![CDATA[一、规范存在的意义<br /> <br /> 应用~码规范对于软g本n和Y件开发h员而言ؓ重要Q有以下几个原因Q?br /> <br /> 1、好的编码规范可以尽可能的减一个Y件的l护成本 , q且几乎没有M一个YӞ在其整个生命周期中,均由最初的开发h员来l护Q?br /> <br /> 2、好的编码规范可以改善Y件的可读性,可以让开发h员尽快而彻底地理解新的代码Q?br /> <br /> 3、好的编码规范可以最大限度的提高团队开发的合作效率Q?br /> <br /> 4、长期的规范性编码还可以让开发h员养成好的编码习惯,甚至ȝ出更加严谨的思维Q?br /> <br /> 二、命名规?br /> <br /> 1、一般概?br /> <br /> 1、尽量用完整的英文描述W?br /> <br /> 2、采用适用于相关领域的术语<br /> <br /> 3、采用大写混合使名字可?br /> <br /> 4、尽量少用羃写,但如果用了,必须W合整个工程中的l一定义<br /> <br /> 5、避免用长的名字(于 15 个字母ؓ正常选择Q?br /> <br /> 6、避免用类似的名字Q或者仅仅是大小写不同的名字<br /> <br /> 7、避免用下划线Q除静态常量等Q?br /> <br /> 2、标识符cd说明<br /> <br /> 1、包Q?Package Q的命名<br /> <br /> Package 的名字应该采用完整的英文描述W,都是׃个小写单词组成。ƈ且包名的前缀L一个顶U域名,<br /> <br /> 通常?com、edu、gov、mil、net、org {;<br /> 如: com.yjhmily.test<br /> <br /> 2、类Q?Class Q的命名<br /> <br /> cd应该是个一名词Q采用大写混合的方式,每个单词的首字母大写。尽量保证类名简z而富于描q?br /> <br /> 使用完整单词Q避免羃写词 ( 除非工程内有l一~写规范或该~写词被更广泛用,?URL Q?HTML)<br /> <br /> 如: FileDescription<br /> <br /> 3、接口( Interface Q的命名<br /> <br /> 基本?Class 的命名规范类伹{在满 Classd 命名规则的基之上Q保证开头第一个字母ؓ ”I”Q?br /> <br /> 便于与普通的 Class区别开。其实现cdU取接口名的W二个字母到最后,且满类名的命名规范Q?br /> <br /> 如: IMenuEngine<br /> <br /> 4、枚举( Enum Q的命名<br /> <br /> 基本?Class 的命名规范类伹{在满 Classd 命名规则的基之上Q保证开头第一个字母ؓ ”E” Q?br /> <br /> 便于与普通的 Class区别开?br /> 如: EUserRole<br /> <br /> 5、异常( Exception Q的命名<br /> <br /> 异常Q?Exception Q?通常采用字母 e 表示异常Q对于自定义的异常类Q其后缀必须?Exception<br /> <br /> 如: BusinessException<br /> <br /> 6、方法( Method Q的命名<br /> <br /> Ҏ名是一个动词,采用大小写؜合的方式Q第一个单词的首字母小写,其后单词的首字母大写?br /> <br /> Ҏ名尽可能的描q出该方法的动作行ؓ。返回类型ؓ Boolean 值的Ҏ一般由“ is ”?#8220; has ”来开?br /> <br /> 如: getCurrentUser() ?addUser() ?hasAuthority()<br /> <br /> 7、参敎ͼ Param Q的命名<br /> <br /> W一个单词的首字母小写,其后单词的首字母大写。参数量名不允许以下划线或美元符号开_<br /> <br /> 虽然q在语法上是允许的。参数名应简短且富于描述?br /> <br /> 如: public UserContext getLoginUser(String loginName); <br /> <br /> 8、常量字D?Q?Constants Q的命名<br /> <br /> 静态常量字D( static final Q?全部采用大写字母Q单词之间用下划U分隔;<br /> <br /> 如: public static final Long FEEDBACK; <br /> public static Long USER_STATUS; <br /> <br /> 三、注释规?br /> <br /> 一个很好的可遵循的有关注释的经验法则是Q?br /> <br /> 问问你自己,你如果从未见q这D代码,要在合理的时间内有效地明白这D代码,你需要一些什么信息?Q?<br /> <br /> 1、一般概?br /> <br /> 1、注释应该增加代码的清晰?br /> <br /> 2、保持注释的z?br /> <br /> 3、在写代码之前或同时写注?br /> <br /> 4、注释出Z么做了一些事Q而不仅仅是做了什?br /> <br /> 2、注释哪些部?br /> <br /> 1、Java 文gQ必d明版权信息以及该文g的创建时间和作者;<br /> <br /> 2、类Q类的目的、即cL完成的功能,以及该类创徏的时间和作者名Uͼ多h一ơ编辑或修改同一个类Ӟ<br /> <br /> 应在作者名U处出现多h的名Uͼ<br /> <br /> 3、接口: 在满类注释的基之上Q接口注释应该包含设|接口的目的、它应如何被使用以及如何不被使用?br /> <br /> 在接口注释清楚的前提下对应的实现cd以不加注释;<br /> <br /> 4、方法注释: 对于讄 (Set Ҏ ) 与获?(Get Ҏ ) 成员的方法,在成员变量已有说明的情况下,<br /> <br /> 可以不加注释Q普通成员方法要求说明完成什么功能,参数含义是什么且q回g么;另外Ҏ的创?br /> <br /> 旉必须注释清楚Qؓ来的维护和阅读提供宝贵U烦Q?br /> <br /> 5、方法内部注释: 控制l构Q代码做了些什么以及ؓ什么这样做Q处理顺序等Q特别是复杂的逻辑处理部分Q?br /> <br /> 要尽可能的给l的注释Q?br /> <br /> 6、参敎ͼ 参数含义、及其它MU束或前提条Ӟ<br /> <br /> 7、属性: 字段描述Q?br /> <br /> 8、局?( 中间 ) 变量Q?无特别意义的情况下不加注释;<br /> <br /> 3、注释格?br /> <br /> 遵@工程规定的统一注释格式Q一般情况下会以 codetemplates.xml 格式的文件导?IDE(Eclipse) <br /> <br /> 或者用Eclipse默认的;<br /> <br /> 四、代码格式规?br /> <br /> 遵@工程规定的统一代码格式Q一般情况下直接使用 IDE(Eclipse) 自带的默认代码格式对代码q行格式化;<br /> <br /> 五、其他规?br /> <br /> JSP 文g命名<br /> <br /> 采用完整的英文描q说?JSP 所完成的功能,可能包括一个生动的动词Q第一个字母小写,<br /> <br /> 如: viewMessage.jsp 、editUser.jsp {?br /> <br /> 六、工E特有命名规?br /> <br /> 1、持久层<br /> <br /> 1?Hibernate 映射文g及实?br /> <br /> 与数据库表名U完全对应;<br /> 如: Advertisement.hbm.xml ?Advertisement.java<br /> <br /> 2、数据访?DAO<br /> <br /> DAO 接口和实现类名称必须完全W合正常接口和实现类的命名规则,且最后以 ”DAO” l尾<br /> <br /> DAO 内的数据讉KҎ必须_抽象的描q出Ҏ据库的基?CRUD 操作Q?br /> 如: ICrossAdDAO( 接口 ) ?CrossAdDAO( 实现c?)<br /> <br /> 3、各U操作数据库?HQL 配置文g<br /> <br /> HQL 文g的个数原则上与系l的 Services 层的服务个数相等Q且以服务名U命?HQL 文gQ?br /> <br /> 如: resource.hbm.xml<br /> <br /> 2、服务层<br /> <br /> 1、服务接口和实现<br /> <br /> 服务接口和实现类必须完全W合正常接口和实现类的命名规则;以工E定义的服务名ؓMQ?br /> <br /> q统一?”Serv” l尾<br /> 如: IResourceServ( 服务接口 ) ?ResourceServ( 接口实现c?)<br /> <br /> 2、服务接口方?br /> <br /> Ҏ名是一个动词,采用大小写؜合的方式Q第一个单词的首字母小写,其后单词的首字母大写?br /> <br /> Ҏ名尽可能的描q出该方法的动作行ؓ?br /> <br /> q回cd?Boolean |?#8220; is ”?#8220; has ”来开?br /> 得到某数据: get+ 数据描述名词复数 + 数据cdQ?br /> 得到所有数据: get+All+ 数据描述名词复数 + 数据cdQ?br /> 通过 XXX 得到 / 查询某数据: get/query+ 数据描述名词复数 + 数据cd +By+ 条gQ?br /> d某数据: save/add+ 数据描述名词 ()<br /> 更新某数据: save/update+ 数据描述名词Q?br /> 删除某数据: delete/remove+ 数据描述名词Q?br /> <br /> 3、业务对?br /> <br /> 业务名称 +BO<br /> <br /> 4、查询参数对?br /> <br /> 凡是l承 Abst***QuerySpec 的查询参数类全部满以下规则Q?br /> Query+ 所要查询的数据描述名词 +Spec<br /> 作ؓ参数传入Ӟ参数名必MؓQ所要查询的数据描述名词 +Spec<br /> 如: QueryProgramSpec<br /> <br /> 3、MVC ?<br /> <br /> 1、Action 控制?br /> <br /> Action cdQ功能模块名U?+Action Q?br /> Actoin Ҏ名称可能的描述出页面迁Uȝd<br /> 如: LoginAction( d?action) Q?toWelcome( 转向Ƣ迎늚 action Ҏ )<br /> <br /> 2、资源文?br /> <br /> pȝ全局资源文gQ?globalMessages_+ 字符~码cd +.properties<br /> 功能模块内部的资源文Ӟ package.properties<br /> <br /> 4、Spring 配置文g<br /> <br /> 1、Action 相关配置文g<br /> 文g目录Q?WebRoot/WEB-INF/spring/action/ 功能模块名称 +_ApplicationContext.xml<br /> <br /> 2、Services 相关配置文g<br /> <br /> 文g目录Q?WebRoot/WEB-INF/spring/services/Services_ApplicationContext.xml<br /> <br /> 3、全局性配|文?br /> <br /> 文g目录Q?WebRoot/WEB-INF/spring/工程?_ApplicationContext.xml<br /> <br /> 5、JSP 文g<br /> <br /> 采用完整的英文描q说?JSP 所完成的功能,可能包括一个生动的动词Q第一个字母小写,<br /> 如: viewMessage.jsp 、editUser.jsp {?<br /> <br /> 原文出处:http://www.aygfsteel.com/yjhmily/ <img src ="http://www.aygfsteel.com/raomingkun/aggbug/151794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/raomingkun/" target="_blank">眼睛大智慧</a> 2007-10-10 16:35 <a href="http://www.aygfsteel.com/raomingkun/archive/2007/10/10/151794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˾</a>| <a href="http://" target="_blank">۷</a>| <a href="http://" target="_blank">ǭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">°</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank">Ƿ</a>| <a href="http://" target="_blank">ʹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">ٰ</a>| <a href="http://" target="_blank">ͭ</a>| <a href="http://" target="_blank">Ӣɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʢ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϣ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׸</a>| <a href="http://" target="_blank">⿪</a>| <a href="http://" target="_blank">Ǧɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽʡ</a>| <a href="http://" target="_blank">人</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">۩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>