﻿<?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-首页技术区</title><link>http://www.blogjava.net/</link><description>专注于Java技术</description><language>zh-cn</language><lastBuildDate>Fri, 09 May 2008 21:17:08 GMT</lastBuildDate><pubDate>Fri, 09 May 2008 21:17:08 GMT</pubDate><ttl>60</ttl><item><title>冒号和他的学生们（连载10）——超级范式</title><link>http://www.blogjava.net/xyz98/archive/2008/05/10/199616.html</link><dc:creator>郑晖</dc:creator><author>郑晖</author><pubDate>Fri, 09 May 2008 16:02:00 GMT</pubDate><guid>http://www.blogjava.net/xyz98/archive/2008/05/10/199616.html</guid><wfw:comment>http://www.blogjava.net/xyz98/comments/199616.html</wfw:comment><comments>http://www.blogjava.net/xyz98/archive/2008/05/10/199616.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xyz98/comments/commentRss/199616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xyz98/services/trackbacks/199616.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <b>元编程简谈</b><br>引号忽然想起一件事，问道：“有一本名为《C++模版元编程》的书，既然提到了模板，想来也属于泛型编程吧？”。。。<br><br>元程序将程序作为数据来对待，能自我发现和自我赋权，有着其他程序所不具备的自觉性、自适应性和智能性，可以说是一种最高级的程序。它要求编程者超越常规的编程思维，在一种崭新的高度上理解编程。想象一下，”冒号激情勃发，“如果有一天机器人能自我学习、自我完善，甚至能生产机器人，实现‘智能繁衍’，是不是很美妙？”。。。&nbsp;&nbsp;<a href='http://www.blogjava.net/xyz98/archive/2008/05/10/199616.html'>阅读全文</a><img src ="http://www.blogjava.net/xyz98/aggbug/199616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xyz98/" target="_blank">郑晖</a> 2008-05-10 00:02 <a href="http://www.blogjava.net/xyz98/archive/2008/05/10/199616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2教程9：实现自已的拦截器</title><link>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199587.html</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Fri, 09 May 2008 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199587.html</guid><wfw:comment>http://www.blogjava.net/nokiaguy/comments/199587.html</wfw:comment><comments>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199587.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nokiaguy/comments/commentRss/199587.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nokiaguy/services/trackbacks/199587.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在上一篇中介绍了Struts2拦截器的原理，在这一篇中我们将学习一下如何编写自己的拦截器。实现一个拦截器非常简单。实际上，一个拦截器就是一个普通的类，只是这个类必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。&nbsp;&nbsp;<a href='http://www.blogjava.net/nokiaguy/archive/2008/05/09/199587.html'>阅读全文</a><img src ="http://www.blogjava.net/nokiaguy/aggbug/199587.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nokiaguy/" target="_blank">银河使者</a> 2008-05-09 20:14 <a href="http://www.blogjava.net/nokiaguy/archive/2008/05/09/199587.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Interceptor 中onFlushDirty()函数执行多次的问题（Hibernate 的一个小Bug）</title><link>http://www.blogjava.net/sealyu/archive/2008/05/09/199527.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 09 May 2008 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2008/05/09/199527.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/199527.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2008/05/09/199527.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/199527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/199527.html</trackback:ping><description><![CDATA[最近在项目中遇到一个奇怪的问题，在使用Hibernate拦截器捕获实体变化并进行处理时，发现其中的onFlushDirty()函数执行了很多次，导致进行处理时产生很多重复数据。具体问题如下：<br />
使用一个类继承Hibernate的EmptyInterceptor类来对程序中的实体变化进行拦截，并在其中的onFlushDirty()函数中对捕获的数据进行处理，产生对应的event数据并保存到数据库中。 例如：<br />
public class EventInterceptor extends EmptyInterceptor {<br />
public boolean onFlushDirty(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object entity,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Serializable id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] currentState,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] previousState,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] propertyNames,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type[] types ) throws CallbackException {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(isAuditable(entity)){//如果该实体需要被记录，生成对应的event。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处生成对应的event。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
在程序执行后，发现对应一条实体的变化生成了多条重复的event记录，非常不解。<br />
后来google发现，有人也碰到过对应的问题，并在Hibernage论坛中提出过这个问题，鉴定为Hibernate的一个小Bug。<br />
（原文地址：http://forum.hibernate.org/viewtopic.php?t=940410&amp;highlight=interceptor+onflushdirty）<br />
解决方法如下：<br />
将FlushMode改为：FlushMode.COMMIT<br />
或者也可以提前进行flush()<br />
都可以解决这个问题。<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/199527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2008-05-09 15:59 <a href="http://www.blogjava.net/sealyu/archive/2008/05/09/199527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谷歌词霸真的那么好？词库大幅缩水！</title><link>http://www.blogjava.net/beansoft/archive/2008/05/09/199518.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 09 May 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/05/09/199518.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/199518.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/05/09/199518.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/199518.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/199518.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2008 Beta 有词库53本，然而谷歌词霸里却只有13本！&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2008/05/09/199518.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/199518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-05-09 15:36 <a href="http://www.blogjava.net/beansoft/archive/2008/05/09/199518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谷歌金山词霸使用感受</title><link>http://www.blogjava.net/babymouse/archive/2008/05/09/199489.html</link><dc:creator>Robert Su</dc:creator><author>Robert Su</author><pubDate>Fri, 09 May 2008 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/babymouse/archive/2008/05/09/199489.html</guid><wfw:comment>http://www.blogjava.net/babymouse/comments/199489.html</wfw:comment><comments>http://www.blogjava.net/babymouse/archive/2008/05/09/199489.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/babymouse/comments/commentRss/199489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/babymouse/services/trackbacks/199489.html</trackback:ping><description><![CDATA[当得知谷歌金山词霸（http://g.iciba.com/）发布的消息之后，我第一时间下载并安装了这款软件。<br />
先谈下大体印象<br />
1、界面清新了很多；<br />
2、启动速度大大提高，本人的笔记本比较老，性能不是很好，在Eclipse运行的状态下，运行金山词霸还是有些负荷高，不过谷歌金山词霸占用内存显然没有原先的版本那么大；<br />
3、主界面简洁明了&#8220;词典、例句、翻译&#8221;——字词、句、全文，so good,so powerful:)<br />
<br />
我之前参与过一些教材的翻译，当时用的辅助工具是&#8220;灵格斯&#8221;，那时感觉这个软件很小巧实用，里面集成了很多家的全文翻译，比如Google翻译、yahoo翻译，不过现在这款软件已经变烂了。<br />
言归正传<br />
深入使用&#8230;&#8230;<br />
我在谷歌词霸中输入&#8220;龙&#8221;首先分别按照词典给出了不同的条目，非常简洁<br />
<img src="http://www.blogjava.net/images/blogjava_net/babymouse/gugeciba1.jpg" alt="" border="0" /><br />
<br />
当我双击某个单词的时候，谷歌词霸会执行查询，这点是值得称赞的改进。<br />
我非常欣赏的是Google词典，当我查龙的时候，我明白了国外人所认为的dragon，并不是我们传统中的龙，而是&#8220;恶龙&#8221;，应该翻译成Loong。<br />
有人提到谷歌金沙词霸对Firefox支持不佳，我的版本是2.0.0.14，不存在这样的问题。<br />
还有谷歌词霸的语音功能，对中文的朗读不支持，不过英文单词的发音还是没有问题。<br />
暂时写到这里&#8230;&#8230;<br />
<br />
<img src ="http://www.blogjava.net/babymouse/aggbug/199489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/babymouse/" target="_blank">Robert Su</a> 2008-05-09 14:27 <a href="http://www.blogjava.net/babymouse/archive/2008/05/09/199489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 与 hibernate 整合(事务)</title><link>http://www.blogjava.net/Good-Game/archive/2008/05/09/199477.html</link><dc:creator>G_G</dc:creator><author>G_G</author><pubDate>Fri, 09 May 2008 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/Good-Game/archive/2008/05/09/199477.html</guid><wfw:comment>http://www.blogjava.net/Good-Game/comments/199477.html</wfw:comment><comments>http://www.blogjava.net/Good-Game/archive/2008/05/09/199477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Good-Game/comments/commentRss/199477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Good-Game/services/trackbacks/199477.html</trackback:ping><description><![CDATA[参考：第 9 章 事务管理 - Spring Framework  reference 2.0.5  参考手册中文版<br /><font color="#0000ff">http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch09.html</font><br /><br />先从配置文件开始：<br />源码：<a href="/Files/Good-Game/springAop.rar">springAop.rar</a><br /><br />需要jar<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpath</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="src"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="java"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="con"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="org.eclipse.jdt.launching.JRE_CONTAINER"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/aspectjrt.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/aspectjweaver.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/spring.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/spring-sources.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/commons-logging-1.0.4.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/cglib-nodep-2.1_3.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/hibernate3.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/log4j-1.2.11.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="con"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/dom4j-1.6.1.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/commons-collections-2.1.1.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/mysql.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/jta.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="lib"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="lib/antlr-2.7.6.jar"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">classpathentry </span><span style="color: rgb(255, 0, 0);">kind</span><span style="color: rgb(0, 0, 255);">="output"</span><span style="color: rgb(255, 0, 0);"> path</span><span style="color: rgb(0, 0, 255);">="bin"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">classpath</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span></div><br /><br /><font color="#a52a2a">spring 配置<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">beans </span><span style="color: rgb(255, 0, 0);">xmlns</span><span style="color: rgb(0, 0, 255);">="http://www.springframework.org/schema/beans"</span><span style="color: rgb(255, 0, 0);"><br />       xmlns:xsi</span><span style="color: rgb(0, 0, 255);">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: rgb(255, 0, 0);"><br />       xmlns:aop</span><span style="color: rgb(0, 0, 255);">="http://www.springframework.org/schema/aop"</span><span style="color: rgb(255, 0, 0);"><br />       xmlns:tx</span><span style="color: rgb(0, 0, 255);">="http://www.springframework.org/schema/tx"</span><span style="color: rgb(255, 0, 0);"><br />       xsi:schemaLocation</span><span style="color: rgb(0, 0, 255);">="<br />       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br />       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd<br />       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />       <br />  <br />  </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> daoCalss : extends HibernateDaoSupport implements BeanDao </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="beanDao"</span><span style="color: rgb(255, 0, 0);"> class</span><span style="color: rgb(0, 0, 255);">="dao.imp.BeanDaoImp"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="sessionFactory"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />          </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">ref </span><span style="color: rgb(255, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">="sessionFactory"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">ref</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />  </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />  <br />   <br />   </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> hibernate3 sessionFactory </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />   </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="sessionFactory"</span><span style="color: rgb(255, 0, 0);">     <br />        class</span><span style="color: rgb(0, 0, 255);">="org.springframework.orm.hibernate3.LocalSessionFactoryBean"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">   <br />        </span><font><font color="#a52a2a"><span style="color: rgb(0, 0, 0);"></span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> spring 与 hibernate 联系 </span><span style="color: rgb(0, 128, 0);">--&gt;</span></font></font><span style="color: rgb(0, 0, 0);">   <br />       </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="configLocation"</span><span style="color: rgb(255, 0, 0);"> value</span><span style="color: rgb(0, 0, 255);">="classpath:hibernate.cfg.xml"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);">  <br />   </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">  <br />   <br />   </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> aop 与事务联系 aopBean&lt;-&gt;txAdvice  </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />   </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">aop:config</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />           </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> 逻辑拦截 </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />         </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">aop:pointcut </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="aopBean"</span><span style="color: rgb(255, 0, 0);"> expression</span><span style="color: rgb(0, 0, 255);">="execution(* *.*.*(..))"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />           </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">aop:advisor </span><span style="color: rgb(255, 0, 0);">advice-ref</span><span style="color: rgb(0, 0, 255);">="txAdvice"</span><span style="color: rgb(255, 0, 0);"> pointcut-ref</span><span style="color: rgb(0, 0, 255);">="aopBean"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">aop:config</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br />    </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> 事务适配器 </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />       </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">bean </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="txManager"</span><span style="color: rgb(255, 0, 0);"> class</span><span style="color: rgb(0, 0, 255);">="org.springframework.orm.hibernate3.HibernateTransactionManager"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="sessionFactory"</span><span style="color: rgb(255, 0, 0);"> ref</span><span style="color: rgb(0, 0, 255);">="sessionFactory"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">bean</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br />    </span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);"> 事务原子 具体方法进行什么事务 </span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">tx:advice </span><span style="color: rgb(255, 0, 0);">id</span><span style="color: rgb(0, 0, 255);">="txAdvice"</span><span style="color: rgb(255, 0, 0);"> transaction-manager</span><span style="color: rgb(0, 0, 255);">="txManager"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />           </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">tx:attributes</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />             </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">tx:method </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="get*"</span><span style="color: rgb(255, 0, 0);"> read-only</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />          </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">tx:method </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="*"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">tx:attributes</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />      </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">tx:advice</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">beans</span><span style="color: rgb(0, 0, 255);">&gt;</span></div><br /></font><br /><font color="#a52a2a"><b>hibernate 配置</b></font><br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml version="1.0" encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;!</span><span style="color: rgb(255, 0, 255);">DOCTYPE hibernate-configuration PUBLIC<br />        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"<br />        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">hibernate-configuration</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">session-factory </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="asdf"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="hibernate.dialect"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">mysql</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="myeclipse.connection.profile"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        com.mysql.jdbc.Driver<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="connection.url"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        jdbc:mysql://localhost/aop<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="show_sql"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">true</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    <br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="connection.username"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">root</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="connection.password"</span><span style="color: rgb(0, 0, 255);">&gt;&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="connection.driver_class"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        com.mysql.jdbc.Driver<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">property </span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="dialect"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />        org.hibernate.dialect.MySQLDialect<br />    </span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">property</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />    <br />    </span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">mapping </span><span style="color: rgb(255, 0, 0);">resource</span><span style="color: rgb(0, 0, 255);">="bean/UnitBean.hbm.xml"</span><span style="color: rgb(255, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />    <br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">session-factory</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">hibernate-configuration</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br /></span></div><br /><br />dao 类（接口）<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> dao.imp;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> java.util.List;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> bean.UnitBean;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> dao.BeanDao;<br /><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> BeanDaoImp </span><span style="color: rgb(0, 0, 255);">extends</span><span style="color: rgb(0, 0, 0);"> HibernateDaoSupport </span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);"> BeanDao{<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> addBean(UnitBean unitBean) {<br />        </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.getHibernateTemplate().save(unitBean);<br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">UnitBean</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"> getBeanByAll() {<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.getHibernateTemplate().find(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> from </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">UnitBean.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getName());<br />    }<br /><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> removeBean(</span><span style="color: rgb(0, 0, 255);">long</span><span style="color: rgb(0, 0, 0);"> beanId) {<br />        </span><span style="color: rgb(0, 0, 255);">this</span><span style="color: rgb(0, 0, 0);">.getHibernateTemplate().delete(<br />                getHibernateTemplate().get(UnitBean.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">, beanId)<br />            );<br />    }<br />    <br />}<br /></span></div><br />Main 类<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: rgb(0, 0, 255);">package</span><span style="color: rgb(0, 0, 0);"> unit;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.springframework.context.ApplicationContext;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /><br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> dao.BeanDao;<br /></span><span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);"> bean.UnitBean;<br /><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> Main {<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) {<br />           ApplicationContext ctx </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> ClassPathXmlApplicationContext(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">beans.xml</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />           BeanDao dao </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> (BeanDao) ctx.getBean(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">beanDao</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />           UnitBean bean </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> UnitBean();<br />           bean.setName(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">xx</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />           bean.setPass(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">11</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />           dao.addBean(bean);<br />           <br />           </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(UnitBean unitBean : dao.getBeanByAll() ){<br />               System.out.println( unitBean.getId() );<br />           }<br />           <br />           dao.removeBean(bean.getId());<br />           <br />    }<br />}<br /></span></div>结果：<br /><font color="#006400">Hibernate: insert into bean (name, pass) values (?, ?)<br />Hibernate: select unitbean0_.id as id0_, unitbean0_.name as name0_, unitbean0_.pass as pass0_ from bean unitbean0_<br />1<br />Hibernate: select unitbean0_.id as id0_0_, unitbean0_.name as name0_0_, unitbean0_.pass as pass0_0_ from bean unitbean0_ where unitbean0_.id=?<br />Hibernate: delete from bean where id=?<br /></font><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/Good-Game/aggbug/199477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Good-Game/" target="_blank">G_G</a> 2008-05-09 13:47 <a href="http://www.blogjava.net/Good-Game/archive/2008/05/09/199477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE5.0中最有趣的新特性：注释(annotation)</title><link>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199456.html</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Fri, 09 May 2008 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199456.html</guid><wfw:comment>http://www.blogjava.net/nokiaguy/comments/199456.html</wfw:comment><comments>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199456.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/nokiaguy/comments/commentRss/199456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nokiaguy/services/trackbacks/199456.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文将向你介绍J2SE5.0中的新特性之一：注释。本文将从什么是注释；J2SE5.0中预定义的注释；如何自定义注释；如何对注释进行注释以及如何在程序中读取注释5个方面进行讨论。&nbsp;&nbsp;<a href='http://www.blogjava.net/nokiaguy/archive/2008/05/09/199456.html'>阅读全文</a><img src ="http://www.blogjava.net/nokiaguy/aggbug/199456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nokiaguy/" target="_blank">银河使者</a> 2008-05-09 12:46 <a href="http://www.blogjava.net/nokiaguy/archive/2008/05/09/199456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个很难想到的用"Oracle客户端+PL/SQL连接Oracle"引起ORA-12154的原因</title><link>http://www.blogjava.net/xinwuhen/archive/2008/05/09/199453.html</link><dc:creator>心无痕</dc:creator><author>心无痕</author><pubDate>Fri, 09 May 2008 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/xinwuhen/archive/2008/05/09/199453.html</guid><wfw:comment>http://www.blogjava.net/xinwuhen/comments/199453.html</wfw:comment><comments>http://www.blogjava.net/xinwuhen/archive/2008/05/09/199453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xinwuhen/comments/commentRss/199453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xinwuhen/services/trackbacks/199453.html</trackback:ping><description><![CDATA[使用<font style="background-color: #c7edcc">Oracle客户端+PL/SQL连接Oracle</font>时(我连的是Oracle 9i，其他版本未知)，如果出现<font style="background-color: #c7edcc">ORA-12154</font>错误。可能的错误原因如下：<br />
1：你的执行目录太长。<br />
2：执行目录有括号。<br />
3：$ORACLE_CLIENT_HOME/<font style="background-color: #c7edcc">network/admin/<font style="background-color: #c7edcc">tnsnames.ora</font>中数据库名前有空格。如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;<font style="background-color: #c7edcc">CCID_QUALITY =</font></span><font style="background-color: #c7edcc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 注：此行<font style="background-color: #c7edcc"><span style="color: red"><font style="background-color: #c7edcc">CCID_QUALITY<span style="color: #000000"><font style="background-color: #c7edcc"><font style="background-color: #c7edcc">前面有空格，这是错误的原因。</font></font></span></font></span></font>&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(DESCRIPTION =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 10.8.101.100)(PORT = 1521)<br />
&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;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SERVICE_NAME = CCID)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
4：注册表问题，检查注册表，HKey_Local_Machine\Software\Oracle下面的Oracle_Home，若不对，修改成正确的。<br />
</font><br />
<br />
<br />
</font>等，那么即使你的服务名是对的，也会引起ORA-12154问题&#8220;TNS: 无法处理服务名&#8221;，当出现这个问题时，请考虑这几个原因。 
<img src ="http://www.blogjava.net/xinwuhen/aggbug/199453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xinwuhen/" target="_blank">心无痕</a> 2008-05-09 12:13 <a href="http://www.blogjava.net/xinwuhen/archive/2008/05/09/199453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下安装使用Subversion</title><link>http://www.blogjava.net/chybox/archive/2008/05/09/199448.html</link><dc:creator>囝泺</dc:creator><author>囝泺</author><pubDate>Fri, 09 May 2008 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/chybox/archive/2008/05/09/199448.html</guid><wfw:comment>http://www.blogjava.net/chybox/comments/199448.html</wfw:comment><comments>http://www.blogjava.net/chybox/archive/2008/05/09/199448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chybox/comments/commentRss/199448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chybox/services/trackbacks/199448.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 这几天把工作环境从windows下面转到linux了，因为用的java语言开发，项目移植还是蛮容易的，但不准备再用CVS来做版本控制系统了，决定换功能较强大的SVN，于是了解了下linux下安装Subversion的方法，现总结如下<br />
<p align="center">文/囝泺 <a href="http://www.bluenuo.cn/">www.bluenuo.cn</a>&nbsp;</p>
<hr size="2" width="100%" />
<span style="color: rgb(32, 0, 255);"><span style="color: rgb(2, 2, 2);"><strong>编译安装相关软件</strong>（我们采用源码编译安装）</span></span><br />
<span style="color: rgb(32, 0, 255);"><span style="color: rgb(2, 2, 2);">a.httpd<br />
下载地址：http://httpd.apache.org<br />
下载</span></span><a href="http://apache.mirror.phpchina.com/httpd/httpd-2.2.8.tar.gz">httpd-*.tar.gz</a> (*为版本号，这里使用的是2.8.8）<br />
安装<br />
<span>
#tar -zxvf httpd-2.8.8.tar.gz<br />
#cd httpd-2.8.8<br />
#./configure --enable-dav --enable-so --enable-maintainer-mode<br />
#make<br />
#make install<br />
b.</span><span>Berkeley DB<br />
下载地址：<br />
下载<br />
</span><span style="color: rgb(32, 0, 255);"><span style="color: rgb(2, 2, 2);">安装<br />
</span></span><span>
#tar -zxvf db-4.4.20.NC.tar.gz<br />
#cd db-4.4.20.NC/build_unix/<br />
#../dist/configure --prefix=/usr/local/bdb<br />
#make<br />
#make install</span><br />
<span>c.Subversion<br />
下载地址：http://subversion.tigris.org<br />
下载</span><a href="http://subversion.tigris.org/downloads/subversion-1.4.6.tar.gz">subversion-*.tar.gz</a>和<a href="http://subversion.tigris.org/downloads/subversion-deps-1.4.6.tar.gz">
subversion-deps-*.tar.gz</a>包下下来，后一个包里是一些依赖程序，把2个包放在同一个目录下，解压缩，解压的文件会自动放到同一个文件夹下。<br />
安装<br />
<span>
#tar -zxvf subversion-1.2.3.tar.gz<br />
#cd subversion-1.2.3<br />
#./configure --with-berkeley-db=/usr/local/bdb --with-apxs=/usr/local/apache2/bin/apxs<br />
#make<br />
#make install</span><br />
安装成功后你可以使用<span>
#svnadmin --version检查是否安装成功<br />
安装成功会出现<br />
</span>svnadmin，版本 1.4.6 (r28521)<br />
&nbsp;&nbsp; 编译于 May&nbsp; 6 2008，19:55:08<br />
&#8230;&#8230;&#8230;&#8230;<br />
<strong>配置 <br />
</strong>配置Subversion<br />
# mkdir /home/*/svn(*代表用户目录）<br />
# cd /usr/local/subversion/bin<br />
# ./svnadmin create /home/*/svn/test<br />
这样我们就在svn下面建立了一个test仓库<br />
修改httpd配置文件<br />
# vi /usr/local/apache2/conf/httpd.conf <font color="#008000"><br />
在最下面添加如下内容</font><br />
LoadModule dav_svn_module modules/mod_dav_svn.so <br />
LoadModule authz_svn_module modules/mod_authz_svn.so <br />
&lt;Location /svn&gt; <br />
DAV svn <br />
SVNParentPath /home/*/svn/ <font color="#008000">//svn父目录 </font><br />
AuthzSVNAccessFile /home/*/svn/authz.conf <font color="#008000">//权限配置文件 </font><br />
AuthType Basic <font color="#008000">//连接类型设置 </font><br />
AuthName "Subversion.zoneyump" <font color="#008000">//连接框提示 </font><br />
AuthUserFile /home/*/svn/authfile <font color="#008000">//用户配置文件 </font><br />
Require valid-user <font color="#008000">//采用何种认证 </font><br />
&lt;/Location&gt;<br />
<font color="#008000">//其中authfile是通过"htpasswd [&#8211;c] /home/*/svn/authfile username password"来创建的 <br />
//"Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它，<br />
//则只能第一个用户可以访问新建库<br />
</font>修改好后保存，重启apache<br />
# ./usr/local/apache2/bin/apachectl restart <br />
<p> </p>
权限管理<br />
<p>
1)增加用户<br />
# ./usr/local/apache2/bin/htpasswd [-c] /home/*/svn/authfile wooin<br />
<font color="#008000">//第一次设置用户时使用-c表示新建一个用户文件。回车后输入用户密码，完成对用户的增加</font><br />
# ./usr/local/apache2/bin/htpasswd authfile 用户名(加入新的用户)<br />
2)权限分配</p>
<p># vi /home/svnroot/repository/authz.conf <br />
&nbsp;&nbsp;  [test:/] <font color="#008000">//这表示，仓库test的根目录下的访问权限 </font><br />
&nbsp;&nbsp;  wooin = rw <font color="#008000">//test仓库wooin用户具有读和写权限 </font><br />
&nbsp;&nbsp;  bao = r <font color="#008000">//test仓库bao用户具有读权限 </font><br />
&nbsp;&nbsp;  [test2:/] <font color="#008000">//test2仓库根目录下的访问权限 </font><br />
&nbsp;&nbsp;  wooin = r <font color="#008000">//wooin用户在test2仓库根目录下只有读权限 </font><br />
&nbsp;&nbsp;  bao = <font color="#008000">//bao用户在 test2仓库根目录下无任何权限 </font><br />
&nbsp;&nbsp;  [/] <font color="#008000">//这个表示在所有仓库的根目录下 </font><br />
&nbsp;&nbsp;  * = r <font color="#008000">//这个表示对所有的用户都具有读权限 </font><br />
&nbsp;&nbsp;  #[groups] <font color="#008000">//这个表示群组设置 </font><br />
&nbsp;&nbsp;  #svn1-developers = wooin, bao <font color="#008000">//这个表示某群组里的成员 </font><br />
&nbsp;&nbsp;  #svn2-developers = wooin <br />
&nbsp;&nbsp;  #[svn1:/] <br />
&nbsp;&nbsp;  #@svn1-developers = rw <font color="#008000">//如果在前面加上@符号，则表示这是个群组权限设置</font></p>
<p> </p>
<p>将这个设置完成后。重启Apache，就可以通过 <br />
http://localhost/svn/test <br />
这个URL来访问仓库了</p>
<p>至于在eclipse使用svn就需要自己安装svn插件了</p>
<p>这里介紹Eclipse的SVN Plugin，叫做Subclipse,官方网站的下载地址在<a href="http://subclipse.tigris.org/"><font color="#007799">http://subclipse.tigris.org/</font></a>，也提供了update site <a href="http://subclipse.tigris.org/update"><font color="#007799">http://subclipse.tigris.org/update</font></a>。<br />
Eclipse
的使用者可以通过Eclipse的插件自动下载和更新功能来安装这个插件，在Eclipse的菜单中选择Help-&gt;Software
Updates-&gt;Find and Install-&gt; Search for new features to install
-&gt;New Remote Site。URL中就输入<a href="http://subclipse.tigris.org/update"><font color="#007799">http://subclipse.tigris.org/update</font></a>，Eclipse就会自已安装上了.
</p>
<p>安装完成后，在Eclipse的plugins中就会多了5个包，命名为org.tigris.subversion.*的都应该是了。打开
Eclipse,window-&gt;show
view窗口中多了一个SVN文件夹，到此就证明svn插件成功的安装上了。具体的使用方法，在Eclipse的Help中有详细的帮助
Subclipse - Subversion Eclipse
Plugin，教你一步一步的使用SVN的客户端了。如果你对subversion想进行深入的了解，那么看看help中的Version
Control with
Subversion一定有所收获，通过本人的观察，这份文档和sbuversion安装文件中提供的官方文档一样，这里看起来就更舒服些了。</p>
<p>注：本文是总结前辈资料的成果</p>
<hr size="2" width="100%" />
<p><font size="3">囝泺</font>，武汉科技学院<br />
您可以通过其博客了解更多信息和文章：<a href="http://www.bluenuo.cn" target="_blank">http://www.bluenuo.cn</a> </p>
<p><font color="#008000"></font></p>
<p> </p>
<span style="color: rgb(32, 0, 255);">
</span>
<img src ="http://www.blogjava.net/chybox/aggbug/199448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chybox/" target="_blank">囝泺</a> 2008-05-09 11:41 <a href="http://www.blogjava.net/chybox/archive/2008/05/09/199448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TextArea显示彩色文字</title><link>http://www.blogjava.net/beansoft/archive/2008/05/09/199433.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 09 May 2008 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/05/09/199433.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/199433.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/05/09/199433.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/199433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/199433.html</trackback:ping><description><![CDATA[<p></p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/TextArea_959F/image_2.png"><img border="0" alt="image" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/TextArea_959F/image_thumb.png" width="177" height="41"></a>  <script><![CDATA[
var div = document.createElement("div");
div.innerHTML="<b>Bold</b>font color=blue>blue</font>i><font color=red>red</font>/i>";
tx.appendChild(div);
]]&gt;</script>  </p> <p>只有IE浏览器才支持。</p> <p>这段显示效果的HTML代码是：</p> <p>&lt;textarea id="tx"&gt;&lt;/textarea&gt;<br>&lt;script&gt;<br>var div = document.createElement("div");<br>div.innerHTML="&lt;b&gt;Bold&lt;/b&gt;&lt;font color=blue&gt;blue&lt;/font&gt;&lt;i&gt;&lt;font color=red&gt;red&lt;/font&gt;&lt;/i&gt;";<br>tx.appendChild(div);<br>&lt;/script&gt;</p> <p>&nbsp;</p> <p>BlogJava 对脚本嵌入支持不好，先前发的没看到效果，只好贴图看效果了。</p><img src ="http://www.blogjava.net/beansoft/aggbug/199433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-05-09 10:38 <a href="http://www.blogjava.net/beansoft/archive/2008/05/09/199433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在SQL Server2005中进行错误捕捉</title><link>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199421.html</link><dc:creator>银河使者</dc:creator><author>银河使者</author><pubDate>Fri, 09 May 2008 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199421.html</guid><wfw:comment>http://www.blogjava.net/nokiaguy/comments/199421.html</wfw:comment><comments>http://www.blogjava.net/nokiaguy/archive/2008/05/09/199421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nokiaguy/comments/commentRss/199421.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nokiaguy/services/trackbacks/199421.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 任何程序都可能出现错误，在SQL Server中执行Transact-SQL也不例外。如果在Transact-SQL中发生了错误，一般有两种捕捉错误的方法，一种是在客户端代码（如 c#、delphi等)中使用类似try...catch的语句进行捕捉；另外一种就是在Transact-SQL中利用Transact-SQL本身提供的错误捕捉机制进行捕捉。如果是因为Transact-SQL语句的执行而产生的错误，如键值冲突，使用第一种和第二种方法都可以捕捉，但是如果是逻辑错误，使用客户端代码进行捕捉就不太方便。因此，本文就如何使用Transact-SQL进行错误捕捉进行了讨论。&nbsp;&nbsp;<a href='http://www.blogjava.net/nokiaguy/archive/2008/05/09/199421.html'>阅读全文</a><img src ="http://www.blogjava.net/nokiaguy/aggbug/199421.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nokiaguy/" target="_blank">银河使者</a> 2008-05-09 09:57 <a href="http://www.blogjava.net/nokiaguy/archive/2008/05/09/199421.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MapEasy 作者更新的 webgis完整功能例子.rar，鹰眼，测距，拖拉缩放</title><link>http://www.blogjava.net/beansoft/archive/2008/05/09/199420.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 09 May 2008 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/05/09/199420.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/199420.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/05/09/199420.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/199420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/199420.html</trackback:ping><description><![CDATA[<p>Tim Wu分享的新版本代码，深圳市新例子，包括了大部分现代的Web GIS系统功能。下载地址：</p> <p><a title="http://groups.google.com/group/mapeasy" href="http://groups.google.com/group/mapeasy">http://groups.google.com/group/mapeasy</a> 然后 Files 文件列表下</p> <p>或者论坛 <a title="http://www.netbeans.org.cn/bbs/viewthread.php?tid=163&amp;extra=page%3D1" href="http://www.netbeans.org.cn/bbs/viewthread.php?tid=163&amp;extra=page%3D1">http://www.netbeans.org.cn/bbs/viewthread.php?tid=163&amp;extra=page%3D1</a></p> <p>或者ftp <a title="ftp://beansoftdown:1234@219.141.70.147" href="ftp://beansoftdown:1234@219.141.70.147">ftp://beansoftdown:1234@219.141.70.147</a> 下的 MapEasy 目录下</p> <p>注：本人不会GIS，此处转载只为提供更多信息的目的。</p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MapEasywebgis.rar_8B35/webgis%E5%AE%8C%E6%95%B4%E5%8A%9F%E8%83%BD%E4%BE%8B%E5%AD%90%EF%BC%8C%E9%B9%B0%E7%9C%BC%EF%BC%8C%E6%B5%8B%E8%B7%9D%EF%BC%8C%E6%8B%96%E6%8B%89%E7%BC%A9%E6%94%BE_2.png"><img border="0" alt="webgis完整功能例子，鹰眼，测距，拖拉缩放" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/MapEasywebgis.rar_8B35/webgis%E5%AE%8C%E6%95%B4%E5%8A%9F%E8%83%BD%E4%BE%8B%E5%AD%90%EF%BC%8C%E9%B9%B0%E7%9C%BC%EF%BC%8C%E6%B5%8B%E8%B7%9D%EF%BC%8C%E6%8B%96%E6%8B%89%E7%BC%A9%E6%94%BE_thumb.png" width="640" height="368"></a></p><img src ="http://www.blogjava.net/beansoft/aggbug/199420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-05-09 09:54 <a href="http://www.blogjava.net/beansoft/archive/2008/05/09/199420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSR 203项目终于启动</title><link>http://www.blogjava.net/jobs/archive/2008/05/09/199391.html</link><dc:creator>温少的日志</dc:creator><author>温少的日志</author><pubDate>Thu, 08 May 2008 18:54:00 GMT</pubDate><guid>http://www.blogjava.net/jobs/archive/2008/05/09/199391.html</guid><wfw:comment>http://www.blogjava.net/jobs/comments/199391.html</wfw:comment><comments>http://www.blogjava.net/jobs/archive/2008/05/09/199391.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jobs/comments/commentRss/199391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jobs/services/trackbacks/199391.html</trackback:ping><description><![CDATA[<br />
http://openjdk.java.net/上的Announcements:<br />
<br />
2008/04/28
<a href="http://mail.openjdk.java.net/pipermail/announce/2008-April/000046.html">
New Project approved: More New I/O APIs for the Java
Platform</a><br />
<br />
包括内容：<br />
<ul>
    <li><a href="http://bugs.sun.com/view_bug.do?bug_id=4313887">4313887</a> New
    I/O: Improved filesystem interface</li>
    <li><a href="http://bugs.sun.com/view_bug.do?bug_id=4640544">4640544</a> New
    I/O: Complete socket-channel functionality</li>
    <li><a href="http://bugs.sun.com/view_bug.do?bug_id=4607272">4607272</a> New
    I/O: Support asynchronous I/O</li>
</ul>
<br />
让人期待太久太久了，终于来了，Java在大规模并发、高性能方面又进一步，JSR 203应该会在JDK 7中实现，届时随着JDK 7的发布，将会有更多的基础软件使用Java实现，而且有极好的性能。<br />
<br />
在磁盘I/O和网络大规模并发I/O方面都会得到更好的性能。<br />
<br />
可以预见受益的程序：<br />
1、WEB服务器 Tomcat、Jetty等，在Windows下，Java将可以使用IOCP，而不是现在nio所用的select，网络并发性能将会得到大幅度提升。在Linux下则应该改变不多，毕竟linux现在并发最好性能的网络I/O EPOLL，JDK 6.0 nio的缺省实现就是epoll。<br />
2、数据库应用程序。如Derby、Berkeley DB Java Edition等使用Java实现的数据库，性能将会得到更好的提升，有望能够诞生和Oracle、SQL Server一样强大的100% Pure Java的数据库系统。<br />
3、其他网络应用程序。例如DNS、LDAP等，随着MINA之类的框架更强大和JDK的原生支持，将会越来越多的服务器程序使用Java实现。<br />
<br />
<img src ="http://www.blogjava.net/jobs/aggbug/199391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jobs/" target="_blank">温少的日志</a> 2008-05-09 02:54 <a href="http://www.blogjava.net/jobs/archive/2008/05/09/199391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>冒号和他的学生们（连载9）——泛型范式</title><link>http://www.blogjava.net/xyz98/archive/2008/05/09/199384.html</link><dc:creator>郑晖</dc:creator><author>郑晖</author><pubDate>Thu, 08 May 2008 16:09:00 GMT</pubDate><guid>http://www.blogjava.net/xyz98/archive/2008/05/09/199384.html</guid><wfw:comment>http://www.blogjava.net/xyz98/comments/199384.html</wfw:comment><comments>http://www.blogjava.net/xyz98/archive/2008/05/09/199384.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xyz98/comments/commentRss/199384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xyz98/services/trackbacks/199384.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: <b>泛型式编程简谈</b><br>冒号重新开讲：“你们会不会经常遇到这种情景：一遍又一遍地写着相似的代码，有心将其归并，却因种种原因无法践行。”<br>逗号心有戚戚焉道：“是啊，有时明明两个函数的实现几乎一模一样的，就因为某些参数不匹配，无法合而为一。”<br>“有一种编程范式可以解决这个问题，它打破了不同数据结构之间的壁垒，让你的代码不再臃肿，这——就是泛型编程。”冒号的语调和说辞不免令人联想到电视上的减肥广告。。。<br><br>算法串联数据，如脊贯肉；数据实化算法，如肉附脊。。。<br><br>泛型编程是算法导向（Algorithm-Oriented）的，即以算法为起点和中心点，逐渐将其所涉及的数据结构内涵模糊化、外延扩大化，从而扩展算法的适用范围。。。<br><br>在数学家眼里，思想是鸡，结论是蛋。。。&nbsp;&nbsp;<a href='http://www.blogjava.net/xyz98/archive/2008/05/09/199384.html'>阅读全文</a><img src ="http://www.blogjava.net/xyz98/aggbug/199384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xyz98/" target="_blank">郑晖</a> 2008-05-09 00:09 <a href="http://www.blogjava.net/xyz98/archive/2008/05/09/199384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Prototype学习志 之 bind方法的“谜”迷人色彩！</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html</link><dc:creator>无羽苍鹰</dc:creator><author>无羽苍鹰</author><pubDate>Thu, 08 May 2008 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/199080.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/199080.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/199080.html</trackback:ping><description><![CDATA[<p><span style="color: red">&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;Prototype的bind方法常常把许多学习它的人弄得糊糊涂涂，google和baidu一番后还是一塌胡涂！本人也如此；本人觉得它是个从&#8220;谜人&#8221;到&#8220;迷人&#8221;的方法。此文将发表个人对此方法的理解，希望能帮助大家成功渡&#8220;谜&#8221;，到达&#8220;迷人&#8221;的彼岸！<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&lt;script src="prototype.js"&gt;&lt;/script&gt; //@7<br />
&nbsp;&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp; /**********************************<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; *&nbsp; 实现渲染一个带有"上一页"和"下一页"的组件,点击"上一页",当前页减1,点击"下一页"当前页加1<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; function PagesSystem(container){<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 10; //当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv = document.getElementById(container); //容器<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.init = function() { //将组件画出来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.changePage = function(evtObj) { //根据点击后传过来的参数决定是加1或是减1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(evtObj == "next") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页加1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(evtObj == "pre"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处不作if(this.currentPage ==1) return;限制为了体现当传入的参数为"pre"时，下面的alert()一定会执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage -= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页减1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage = function() {//创建上一页组件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.changePage; //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "上一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage = function() {//创建下一页组件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.changePage; //@2 当点击此（"下一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "下一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.init(); //执行初始化<br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; function testUse(msg){//@3在提出问题环节用到<br />
&nbsp;&nbsp;&nbsp;&nbsp; alert(msg);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; window.onload = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; var ps = new PagesSystem("pageDiv");<br />
&nbsp;&nbsp; }<br />
&nbsp;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp; &lt;div id="pageDiv"&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>二、分析代码，提出问题，解决问题<br />
1、无法传递参数问题。<br />
&nbsp;&nbsp; 你细看@1和@2处,当前的代码实现是无法把"pre"和"next"参数传递过去，于是，当你运行例子，点击上一页或下一页，都是没信息alert出来的！<br />
&nbsp;&nbsp; 这种情况，是很常见的。那么，如何实现将参数传过去。<br />
&nbsp;&nbsp; 将@1处代码修改如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; 这样创建一个匿名函数赋予_a.onclick,也就是当_a对象的onclick事件触发后将执行此匿名函数，而匿名函数将帮忙调用testUse("pre")和this.changePage("pre")两个方法，<br />
&nbsp;&nbsp; 从而达成传递参数。<br />
&nbsp;&nbsp; 修改代码，运行例子后点击上一页后会显示如下两个信息，一个是testUse中输出的信息，证明了实现参数传递，另一个却是运行错误提示。<br />
&nbsp;&nbsp;&nbsp;<img height="390" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/2008_05/bind.jpg" width="514" border="0" /><br />
<br />
&nbsp;&nbsp; 这是执行this.changePage("pre")方法抛出来的。它并没像我们预期想的运行。<br />
&nbsp;&nbsp; 从提示获到的信息是，对象不支持此属性或方法（如果浏览器报的是中文提示就可以看到&#8220;对象不支持此方法或属性&#8221;的提示）<br />
&nbsp;&nbsp; 回头看this.changePage("pre")方法，很明显this是错误提示中所指的对象，在本应用中指PagesSystem对象指针的引用，在应用中确实是声明了this.changePage("pre")方法，但为什么说没此方法呢？？？？<br />
2、在问题1中，我们已成功解决传递参数，但PagesSystem对象的changePage方法被谁偷了？？？<br />
&nbsp;&nbsp; 再将刚才的代码修改如:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; 再运行例子，你会发现输出this.tagName的值为 A, 它就是_a对象。噢，我的天啊。怎么会这样？？？<br />
&nbsp;&nbsp; 哈哈..._a对象就是&lt;a href=""/&gt;&lt;/a&gt;这个html 元素对象，这里是&#8220;上一页&#8221;铵钮对象，原型中哪来changePage方法啊，所以报错！！！<br />
&nbsp;&nbsp; 你可以这样理解，看如下代码:<br />
&nbsp;&nbsp;&nbsp;&nbsp; function PagesSystem(container){//此应用中的PagesSystem对象，changePage方法的上下文对象,也可以称为归属者。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...省略其它代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage = function(evtObj) { //根据点击后传过来的参数决定是加1或是减1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(evtObj == "next") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页加1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(evtObj == "pre"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处不作if(this.currentPage ==1) return;限制为了体现当传入的参数为"pre"时，下面的alert()一定会执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage -= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页减1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...省略其它代码<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 这样的代码，你很容易看出this是指PagesSystem, 那么我们继续往下看<br />
&nbsp;&nbsp;&nbsp;&nbsp; 假设 A对象的原型如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp; function A() {//@4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.doClick = function() { //点击<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick();//执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 当你在PagesSystem方法中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; 写上这样的代码后,你可以离谱认为@4的代码的模样是如下：<br />
&nbsp;&nbsp;&nbsp; function A() {//@4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName); //@5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre"); //@6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.doClick = function() { //点击<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick();//执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; 呵呵。。如果这样看的话，@5,@6中的this当然是指a对象，没异义。那当然是没changePage方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
3、那么如何解决这问题呢？？<br />
&nbsp;&nbsp; 很幸运，prototype.js中的bind方法就可以解决这样的问题，它还解决我们上面提的传参数问题。<br />
&nbsp;&nbsp; 看bind大侠帅样:<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; bind: function() {<br />
&nbsp;&nbsp;&nbsp; if (arguments.length &lt; 2 &amp;&amp; Object.isUndefined(arguments[0])) return this;<br />
&nbsp;&nbsp;&nbsp; var __method = this, args = $A(arguments), object = args.shift();<br />
&nbsp;&nbsp;&nbsp; return function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return __method.apply(object, args.concat($A(arguments)));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; bind方法中的this就是bind方法的所属者（上下文）如: f.bind(),f是一个声明了的方法,那么bind 方法里的this就是f<br />
&nbsp; 再细看，bind方法其实做的工作是返回一个匿名函数,此匿名函数帮忙执行this所指的方法（bind方法的所属者），如果你有如下代码<br />
&nbsp; function f(msg) {<br />
&nbsp;&nbsp;&nbsp; this.functionName = "f method";<br />
&nbsp;&nbsp;&nbsp; alert(msg);<br />
&nbsp;&nbsp;&nbsp; alert(this.functionName);<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; button.onclick = f.bind(this, msg); //这里的this指f, 在bind方法中用object = args.shift()获得，这样的话，当点击button后执行f方法, f方法中的this就不会无故被 button代替。^_^不然，会报错的啊，button哪来functionName，呵呵...<br />
&nbsp; 它既解决将msg参数传过去，同时将f绑定到button环境下，bind方法得名可能就是这意义吧。至于如何实现将f绑定，靠的就是apply方法。<br />
&nbsp; apply谜人色彩就由你们自行去揭开啦！<br />
&nbsp; 介绍了bind大侠给大家，我的例子就麻烦你们自己调通它啦。谢了。。<br />
&nbsp;&nbsp;<br />
&nbsp; 欢迎交流指正。<br />
<br />
&nbsp;<span style="color: red">备注：&nbsp;如需转载本文，请注明出处</span><br />
&nbsp;&nbsp;&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/sonnylys/aggbug/199080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">无羽苍鹰</a> 2008-05-08 22:37 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ruby中实现stream</title><link>http://www.blogjava.net/killme2008/archive/2008/05/08/199367.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Thu, 08 May 2008 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/killme2008/archive/2008/05/08/199367.html</guid><wfw:comment>http://www.blogjava.net/killme2008/comments/199367.html</wfw:comment><comments>http://www.blogjava.net/killme2008/archive/2008/05/08/199367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/killme2008/comments/commentRss/199367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/killme2008/services/trackbacks/199367.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 流是通过延时求值实现的，Ruby中实现stream也是可以做到，可惜就是没有尾递归优化。按照sicp，首要的是两个函数：delay和force：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;mem_proc(exp)<br />
&nbsp;&nbsp;alread_run</span><span style="color: #000000;">=</span><span style="color: #000000;">false<br />
&nbsp;&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #000000;">false<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;!alread_run<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result</span><span style="color: #000000;">=</span><span style="color: #000000;">exp.call<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alread_run</span><span style="color: #000000;">=</span><span style="color: #000000;">true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;}<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;force(delayed_object)<br />
&nbsp;&nbsp;delayed_object.call<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;delay(exp)<br />
&nbsp;&nbsp;mem_proc(</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">{exp})<br />
end</span></div>
&nbsp;&nbsp;&nbsp; delay函数返回延时对象，就是对于未来某个时间求值表达式的承诺；force函数以延时对象为参数，进行相应的求值工作，这里的mem_proc用于记忆已经求值过的表达式。定义stream的constructor和selector函数：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;cons_stream(a,b)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;a,delay(b)<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_car(s)<br />
&nbsp;&nbsp;s[0]<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_cdr(s)<br />
&nbsp;&nbsp;force(s[</span><span style="color: #000000;">1</span><span style="color: #000000;">])<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_null?(s)<br />
&nbsp;&nbsp;s.nil?&nbsp;</span><span style="color: #0000ff;">or</span><span style="color: #000000;">&nbsp;s</span><span style="color: #000000;">==</span><span style="color: #000000;">[]<br />
end</span></div>
&nbsp;&nbsp;&nbsp; 用Ruby中的数组充当&#8220;粘合剂&#8221;，stream_car直接返回第一个元素，而stream_cdr需要用force求值表达式，履行承诺。另外，将空数组[]作为the-empty-stream。再定义几个高阶函数，map和foreach，其他如filter与此类似：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_enumerate_interval(low,high)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;low</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">high<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;[]<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;cons_stream(low,stream_enumerate_interval(low.succ,high))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_ref(s,n)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;n</span><span style="color: #000000;">==</span><span style="color: #000000;">0<br />
&nbsp;&nbsp;&nbsp;&nbsp;stream_car(s)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;stream_ref(stream_cdr(s),(n</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_map(proc,s)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;stream_null?(s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;[]<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;cons_stream(proc.call(stream_car(s)),stream_map(proc,(stream_cdr(s))))&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_for_each(proc,s)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;stream_null?(s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;:done<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;proc.call(stream_car(s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;stream_for_each(proc,stream_cdr(s))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;display_stream(s)<br />
&nbsp;&nbsp;stream_for_each(</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">{</span><span style="color: #000000;">|</span><span style="color: #000000;">item</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;puts&nbsp;item},s)<br />
end<br />
</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;stream_filter(pred,s)<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;stream_null?(s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;[]<br />
&nbsp;&nbsp;elsif&nbsp;pred.call(stream_car(s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;cons_stream(stream_car(s),stream_filter(pred,stream_cdr(s)))<br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;stream_filter(pred,stream_cdr(s))&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;end<br />
end</span></div>
<br />
&nbsp;&nbsp;&nbsp; 最后，看下例子：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">puts&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">s:</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
s</span><span style="color: #000000;">=</span><span style="color: #000000;">stream_enumerate_interval(</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">)<br />
display_stream(s)<br />
puts&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">odd_s:</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
odd_s</span><span style="color: #000000;">=</span><span style="color: #000000;">stream_filter(</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">{</span><span style="color: #000000;">|</span><span style="color: #000000;">x</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;x</span><span style="color: #000000;">%</span><span style="color: #000000;">2</span><span style="color: #000000;">==</span><span style="color: #000000;">1</span><span style="color: #000000;">},s)<br />
display_stream(odd_s)<br />
puts&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">ss:</span><span style="color: #800000;">"</span><span style="color: #000000;"><br />
ss</span><span style="color: #000000;">=</span><span style="color: #000000;">stream_map(</span><span style="color: #0000ff;">lambda</span><span style="color: #000000;">{</span><span style="color: #000000;">|</span><span style="color: #000000;">x</span><span style="color: #000000;">|</span><span style="color: #000000;">x</span><span style="color: #000000;">*</span><span style="color: #000000;">x},s)<br />
display_stream(ss)</span></div>
<br />
<br />
<br /><img src ="http://www.blogjava.net/killme2008/aggbug/199367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/killme2008/" target="_blank">dennis</a> 2008-05-08 22:32 <a href="http://www.blogjava.net/killme2008/archive/2008/05/08/199367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaOne第二天重大新闻：Java 7 will support OSGi</title><link>http://www.blogjava.net/BlueDavy/archive/2008/05/08/199298.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 08 May 2008 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/BlueDavy/archive/2008/05/08/199298.html</guid><wfw:comment>http://www.blogjava.net/BlueDavy/comments/199298.html</wfw:comment><comments>http://www.blogjava.net/BlueDavy/archive/2008/05/08/199298.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/BlueDavy/comments/commentRss/199298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/BlueDavy/services/trackbacks/199298.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JavaOne的第二天Sun正式官方宣布在Java 7中将支持OSGi：This will allow developers who create applications that use OSGi bundles will be able to run them unmodified in JDK 7.这消息对于知悉OSGi Vs JSR 277的一系列历史战争的人而言绝对是非常的振奋人心，尽管不是说Java 7直接纳用OSGi来实现模块化这一块（这个呢，其实如果JDK做的话，确实可以做的更好，至少可以更高效什么的），但就支持这一点也可看出Sun已经看到了OSGi是事实性的模块化标准，这对于OSGi来说也是里程碑的一天。&nbsp;&nbsp;<a href='http://www.blogjava.net/BlueDavy/archive/2008/05/08/199298.html'>阅读全文</a><img src ="http://www.blogjava.net/BlueDavy/aggbug/199298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/BlueDavy/" target="_blank">BlueDavy</a> 2008-05-08 22:10 <a href="http://www.blogjava.net/BlueDavy/archive/2008/05/08/199298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 入门指南</title><link>http://www.blogjava.net/dawson/archive/2008/05/08/199055.html</link><dc:creator>dawson</dc:creator><author>dawson</author><pubDate>Thu, 08 May 2008 13:24:00 GMT</pubDate><guid>http://www.blogjava.net/dawson/archive/2008/05/08/199055.html</guid><wfw:comment>http://www.blogjava.net/dawson/comments/199055.html</wfw:comment><comments>http://www.blogjava.net/dawson/archive/2008/05/08/199055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dawson/comments/commentRss/199055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dawson/services/trackbacks/199055.html</trackback:ping><description><![CDATA[<p>XML <br />
<font style="background-color: #c7edcc"><span style="background-color: #ffffff">(一).XML 的几种解析技术.<br />
(二).XPath,XQuery,XSLT,DTD,XML Schema<br />
(三)XML 四种实现了XQuery 1.0的数据数据库MarkLogic,Exists,Berkeley DB XML,Sedna <br />
<br />
<br />
XML 是用来<br />
<br />
1.下载MarkLogic 下载地址<br />
http://www.marklogic.com/product/download-software.html<br />
<br />
2.在开始菜单-&gt;所有程序-&gt;MarkLogic Servicer -&gt;Start MarkLogic Servers 启动服务 然后进去--&gt;Admin MarkLogic&nbsp;Servers&nbsp;输入 License Key Entry.<br />
<br />
3.输入Security Setup 输入用户名和密码<br />
<br />
4.键入<font style="background-color: #c7edcc"><a href="http://127.0.0.1:8000">http://127.0.0.1:8000</a>&nbsp;进入&nbsp;&nbsp;</td>
<td align="left"><span class="banner"><em>XQuery Use Cases Demo</em>&nbsp;</span></td>
&nbsp;端.可以看到演示里面的XML 数据<br />
里面有两个XML 文件作为演示，分别是<br />
<font style="background-color: #c7edcc">&nbsp; doc("http://www.bn.com/bib.xml")/*,<br />
&nbsp; doc("http://www.amazon.com/reviews.xml")/*</font><br />
<br />
5.查看XML 文件内容<br />
<font style="background-color: #c7edcc">&nbsp;doc("http://www.bn.com/bib.xml")<br />
</font><br />
</font><br />
&nbsp;</span><br />
</font></p>
<img src ="http://www.blogjava.net/dawson/aggbug/199055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dawson/" target="_blank">dawson</a> 2008-05-08 21:24 <a href="http://www.blogjava.net/dawson/archive/2008/05/08/199055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流需求分析</title><link>http://www.blogjava.net/RongHao/archive/2008/05/08/199297.html</link><dc:creator>ronghao</dc:creator><author>ronghao</author><pubDate>Thu, 08 May 2008 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/RongHao/archive/2008/05/08/199297.html</guid><wfw:comment>http://www.blogjava.net/RongHao/comments/199297.html</wfw:comment><comments>http://www.blogjava.net/RongHao/archive/2008/05/08/199297.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/RongHao/comments/commentRss/199297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RongHao/services/trackbacks/199297.html</trackback:ping><description><![CDATA[用户的需求大概分为两部分：一部分是整个项目完全基于工作流来搭建开发，这也是很多工作流厂商患有&#8220;平台压迫症&#8221;的原因；另一部分是将工作流作为业务组件加入已有的项目中，推动业务的&#8220;审批&#8221;流转。<br />
<br />
前者的要求显然更高，但也意味着有更多的利润。其实这一部分的用户又可以进一步的细分：一是技术能力比较差的公司，他们通过层层外包接到项目，而又没有实力自己开发，于是想通过采购工作流加上几个刚入门的程序员来完成整个项目的开发（这类用户往往也是业务平台最大的客户群），他们想着是一整套的开发解决方案，甚至包括业务分析；二是对业务编程的需求，他们需要流程引擎能够侵入业务编程的内部，对业务的状态和生命周期进行灵活的管理，从而最大程度的简化开发或者说满足一些复杂业务编程的需要。<br />
<br />
后者的需求则比较简单，多是某一行业的项目公司，突然碰到有审批的需求了，采用工作流多是满足人工&#8220;审批&#8221;的需要，以及部分的统计分析。<br />
<br />
需要承认，工作流其实与最终用户还差得很远，也就是说在众多厂商的网页上，那副著名的业务流程生命周期其实是一句空话。一句话说，就是那个什么流程设计器是给程序员用的，至于用户，哪凉快哪去。也就是说现在的工作流还不能给最终用户提供价值。OK，既然工作流的价值是提供给集成商的，集成商就会考虑成本，于是工作流能否提供一个完整的开发解决方案就成了最重要的考量。<br />
<br />
最后说说市场。工作流其实有着很大的市场，只不过这个市场被开源工作流和平台瓜分掉了。因为目前的工作流不能给最终用户提供价值，所以集成商在遇到审批的需求时，首先想到的会是开源的工作流引擎，从jbpm、osworkflow的流行也可以看出这一点，并且知识的积累确实比购买工作流来的划算，同时很多公司通过积累也会有自己的流程组件，这并没有太大的难度。难度留给技术能力一般的公司，他们首先想到的会是一整套解决方案而不仅仅止于流程服务，于是平台出现了，平台说：&#8220;灰壳显灵，银弹来了。&#8221;<br />
<br />
关于平台，有一个很时髦的流行词汇，叫&#8220;业务应用基础平台&#8221;，稍候待续。
<img src ="http://www.blogjava.net/RongHao/aggbug/199297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RongHao/" target="_blank">ronghao</a> 2008-05-08 17:49 <a href="http://www.blogjava.net/RongHao/archive/2008/05/08/199297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中乱码解决方案</title><link>http://www.blogjava.net/ytl-zlq/archive/2008/05/08/199280.html</link><dc:creator>ytl</dc:creator><author>ytl</author><pubDate>Thu, 08 May 2008 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/ytl-zlq/archive/2008/05/08/199280.html</guid><wfw:comment>http://www.blogjava.net/ytl-zlq/comments/199280.html</wfw:comment><comments>http://www.blogjava.net/ytl-zlq/archive/2008/05/08/199280.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ytl-zlq/comments/commentRss/199280.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ytl-zlq/services/trackbacks/199280.html</trackback:ping><description><![CDATA[<p align="left"><strong>个人在项目开发中总结的。供大家参考<br />
</strong><br />
1.页面显示中文时出现的乱码，通常使用<br />
</p>
<div style="border-right: #0000ff 1px solid; padding-right: 5px; border-top: #0000ff 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #0000ff 1px solid; width: 37.65%; word-break: break-all; padding-top: 4px; border-bottom: #0000ff 1px solid; height: 25px; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">&lt;%</span><span style="color: #000000">@&nbsp;page&nbsp;contentType</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/html;charset=gb2312</span><span style="color: #000000">"</span><span style="color: #000000">%&gt;</span></div>
<p align="left">&nbsp;</p>
<p align="left">可以达到处理乱码的效果<br />
<br />
2.从请求中获得数据是出现的中文乱码处理方法有<br />
(1) get请求有两种处理方法<br />
方法1：<br />
在tomcat的配置文件(conf)中的server.xml的 </p>
<div align="left">
<div style="border-right: #0000ff 1px solid; padding-right: 5px; border-top: #0000ff 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #0000ff 1px solid; width: 37.28%; color: #0000ff; word-break: break-all; padding-top: 4px; border-bottom: #0000ff 1px solid; height: 70px; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">Connector&nbsp;port</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">8080</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;protocol</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">HTTP/1.1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connectionTimeout</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">20000</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirectPort</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">8443</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIEncoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">gb2312</span><span style="color: #000000">"</span><span style="color: #000000">/&gt;</span></div>
</div>
<p align="left"><br />
加入上面第4行代码即可。<br />
方法2：也就是通常说的再编码的说法，<br />
</p>
<div align="left">
<div style="border-right: #0000ff 1px solid; padding-right: 5px; border-top: #0000ff 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #0000ff 1px solid; width: 37.33%; word-break: break-all; padding-top: 4px; border-bottom: #0000ff 1px solid; height: 138px; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;%</span><span style="color: #000000"><br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;String&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">&nbsp;[]b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name.getBytes(</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;name</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(b);<br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">%&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />也可简化为：<br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;%=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String(request.getParameter().getBytes(</span><span style="color: #000000">"</span><span style="color: #000000">GB2312</span><span style="color: #000000">"</span><span style="color: #000000">))<br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">%&gt;</span></div>
</div>
<p align="left"><br />
(2)post请求<br />
在jsp页面中加入也下代码<br />
</p>
<div align="left">
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;%</span><span style="color: #000000">request.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">gb2312</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #000000">%&gt;</span></div>
</div>
<p align="left">需要注意的是这部分代码要放写在获得请求内容以前。<br />
<br />
3.以上就是JSP页面中出现乱码的方法，最后我想说的就是如何确定发送的<br />
&nbsp; 请求是GET 还是POST。<br />
(1)一般表单(Form)提交中有method方法确定。<br />
(2)通过URL链接传递为GET方法提交<br />
(3)通过地址重写的为GET方法提交<br />
<br />
谢谢阅读 </p>
  <img src ="http://www.blogjava.net/ytl-zlq/aggbug/199280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ytl-zlq/" target="_blank">ytl</a> 2008-05-08 16:54 <a href="http://www.blogjava.net/ytl-zlq/archive/2008/05/08/199280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习的30个目标</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Thu, 08 May 2008 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199249.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199249.html</trackback:ping><description><![CDATA[17.你需要学习企业级JavaBeans(EJB)以及它们的不同组件模式：Stateless/StatefulSessionBeans，EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL)，或者 Message-DrivenBeans(MDB)。
<p>　　18.你需要学习如何管理与配置一个J2EE应用程序服务器，如WebLogic，JBoss等，并且利用它的附加服务，例如簇类，连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。</p>
<p>　　19.你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP)，以及他们的主流JAVA规格和执行。例如AspectJ和AspectWerkz。</p>
<p>　　20.你需要熟悉对不同有用的API和framework等来为你服务。例如Log4J(logging/tracing)，Quartz (scheduling)，JGroups(networkgroupcommunication)，JCache(distributedcaching)， Lucene(full-textsearch)，JakartaCommons等等。</p>
<p>21.如果你将要对接或者正和旧的系统或者本地平台，你需要学习JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。</p>
<p>　　22.你需要熟悉JINI技术以及与它相关的分布式系统，比如掌握CROBA。</p>
<p>　　23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs)，例如Portlets(168)，JOLAP(69)，DataMiningAPI(73)，等等。</p>
<p>　　24.你应该熟练掌握一种JAVAIDE例如sunOne，netBeans，IntelliJIDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了：)</p>
<p>　　25.JAVA(精确的说是有些配置)是冗长的，它需要很多的人工代码(例如EJB)，所以你需要熟悉代码生成工具，例如XDoclet。</p>
<p>　　26.你需要熟悉一种单元测试体系(JNunit)，并且学习不同的生成、部署工具(Ant，Maven)。</p>
<p>　　27.你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。</p>
<p>　　28.你需要能够深入了解加熟练操作和配置不同的<a class="channel_keylink" href="http://edu.itbulo.com/sys/" target="_blank">操作系统</a>，比如GNU/linux，sunsolaris，macOS等，做为跨平台软件的开发者。</p>
<p>　　29.你还需要紧跟java发展的步伐，比如现在可以深入的学习javaME，以及各种java新规范，技术的运用，如新起的web富客户端技术。</p>
<p>　　30.你必需要对opensource有所了解，因为至少java的很多技术直接是靠开源来驱动发展的，如java3D技术。</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-08 15:08 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习的30个目标</title><link>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html</link><dc:creator>矿矿</dc:creator><author>矿矿</author><pubDate>Thu, 08 May 2008 07:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html</guid><wfw:comment>http://www.blogjava.net/zhukuanglong/comments/199250.html</wfw:comment><comments>http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhukuanglong/comments/commentRss/199250.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhukuanglong/services/trackbacks/199250.html</trackback:ping><description><![CDATA[17.你需要学习企业级JavaBeans(EJB)以及它们的不同组件模式：Stateless/StatefulSessionBeans，EntityBeans(包含Bean- ManagedPersistence[BMP]或者Container-ManagedPersistence[CMP]和它的EJB-QL)，或者 Message-DrivenBeans(MDB)。
<p>　　18.你需要学习如何管理与配置一个J2EE应用程序服务器，如WebLogic，JBoss等，并且利用它的附加服务，例如簇类，连接池以及分布式处理支援。你还需要了解如何在它上面封装和配置应用程序并且能够监控、调整它的性能。</p>
<p>　　19.你需要熟悉面向方面的程序设计以及面向属性的程序设计(这两个都被很容易混淆的缩写为AOP)，以及他们的主流JAVA规格和执行。例如AspectJ和AspectWerkz。</p>
<p>　　20.你需要熟悉对不同有用的API和framework等来为你服务。例如Log4J(logging/tracing)，Quartz (scheduling)，JGroups(networkgroupcommunication)，JCache(distributedcaching)， Lucene(full-textsearch)，JakartaCommons等等。</p>
<p>21.如果你将要对接或者正和旧的系统或者本地平台，你需要学习JNI (JavaNativeInterface) and JCA (JavaConnectorArchitecture)。</p>
<p>　　22.你需要熟悉JINI技术以及与它相关的分布式系统，比如掌握CROBA。</p>
<p>　　23.你需要JavaCommunityProcess(JCP)以及他的不同JavaSpecificationRequests(JSRs)，例如Portlets(168)，JOLAP(69)，DataMiningAPI(73)，等等。</p>
<p>　　24.你应该熟练掌握一种JAVAIDE例如sunOne，netBeans，IntelliJIDEA或者Eclipse。(有些人更喜欢VI或EMACS来编写文件。随便你用什么了：)</p>
<p>　　25.JAVA(精确的说是有些配置)是冗长的，它需要很多的人工代码(例如EJB)，所以你需要熟悉代码生成工具，例如XDoclet。</p>
<p>　　26.你需要熟悉一种单元测试体系(JNunit)，并且学习不同的生成、部署工具(Ant，Maven)。</p>
<p>　　27.你需要熟悉一些在JAVA开发中经常用到的软件工程过程。例如RUP(RationalUnifiedProcess)andAgilemethodologies。</p>
<p>　　28.你需要能够深入了解加熟练操作和配置不同的<a class="channel_keylink" href="http://edu.itbulo.com/sys/" target="_blank">操作系统</a>，比如GNU/linux，sunsolaris，macOS等，做为跨平台软件的开发者。</p>
<p>　　29.你还需要紧跟java发展的步伐，比如现在可以深入的学习javaME，以及各种java新规范，技术的运用，如新起的web富客户端技术。</p>
<p>　　30.你必需要对opensource有所了解，因为至少java的很多技术直接是靠开源来驱动发展的，如java3D技术。</p>
<img src ="http://www.blogjava.net/zhukuanglong/aggbug/199250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhukuanglong/" target="_blank">矿矿</a> 2008-05-08 15:08 <a href="http://www.blogjava.net/zhukuanglong/archive/2008/05/08/199250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java MD5加密生成摘要</title><link>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 08 May 2008 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/199246.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/05/08/199246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/199246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/199246.html</trackback:ping><description><![CDATA[<p dir="ltr">&nbsp;&nbsp;&nbsp;&nbsp;刚好最近项目中需要用到一点加密的东西，java安全类库提供了一个<strong>java.security.MessageDigest类，</strong>此 MessageDigest 类为应用程序提供信息摘要算法的功能，如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数，它接收任意大小的数据，并输出固定长度的哈希值。有现成的当然是最好的，省事省力。<br />
&nbsp;&nbsp;&nbsp;&nbsp;MD5的非常有实际应用性。有网友给出这样的描述，可以参照一下：<a href="http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx">http://blog.csdn.net/Daping_Zhang/archive/2005/05/28/382688.aspx</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该类的<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#getInstance(java.lang.String)">getInstance</a></strong>(<a title="java.lang 中的类" href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/lang/String.html">String</a>&nbsp;algorithm)</code>&nbsp;方法返回一个MessageDigest的实体，加密的一系统的<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#digest()">digest</a></strong>()</code>方法和<code><strong><a href="mk:@MSITStore:D:\jdk6.ZH_cn.chm::/j2se6/api/java/security/MessageDigest.html#update(byte)">update</a></strong>(byte&nbsp;input)方法。加密后返回一个byte[]，16位，我们经常见到很多开源网站的下载地址会有一个[md5]的链接，打开其实就是一小段文本内容。例如：<br />
</code>&nbsp;&nbsp;&nbsp;&nbsp;MD5 (commons-logging-1.1.1-bin.zip) = f88520ed791673aed6cc4591bc058b55<br />
&nbsp;&nbsp;&nbsp;&nbsp;这是Jakarta的logging组件下载时提供的MD5摘要信息，是对这个zip包进行全文加密生成的摘要，摘要码就是后面的f88520ed791673aed6cc4591bc058b55，如果你下载以后，按照MD5的算法生成自己的摘要，如果这二个摘要一样，就证明这个文件是没有被人篡改过的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;遇到的问题是Java的MessageDigest类执行后返回的byte[16]得转换成十六进制的字符串，如果直接用new String(byte[])，得到的结果将是不正确的。算法有很多网友提供了，照搬了。比较有趣的是，commons-logging提供的那个MD5居然和我自己生成的不一样(难道文件被修改过？)，后来尝试了其它地方提供的MD5码，都没有问题。<br />
&nbsp;&nbsp;&nbsp;&nbsp;有很多相关的现成代码，搜集了一下整理如下（经过验证）：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_24_2213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_2213_Open_Text.style.display='none'; Codehighlighter1_24_2213_Closed_Image.style.display='inline'; Codehighlighter1_24_2213_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_24_2213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_2213_Closed_Text.style.display='none'; Codehighlighter1_24_2213_Open_Image.style.display='inline'; Codehighlighter1_24_2213_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MD5Builder&nbsp;</span><span id="Codehighlighter1_24_2213_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_24_2213_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Logger.getLogger(MD5Builder.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;用来将字节转换成&nbsp;16&nbsp;进制表示的字符</span><span style="color: #008000"><br />
<img id="Codehighlighter1_139_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_223_Open_Text.style.display='none'; Codehighlighter1_139_223_Closed_Image.style.display='inline'; Codehighlighter1_139_223_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_139_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_223_Closed_Text.style.display='none'; Codehighlighter1_139_223_Open_Image.style.display='inline'; Codehighlighter1_139_223_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;hexDigits[]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_139_223_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_139_223_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">0</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">1</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">2</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">3</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">4</span><span style="color: #000000">'</span><span style="color: #000000">,&nbsp;</span><span style="