﻿<?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-passyt-随笔分类-技术之路</title><link>http://www.blogjava.net/passyt/category/15698.html</link><description>&lt;/br&gt;&lt;font color="#6faf30" &gt;没有做不到只有想不到&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;a href="javascript:window.external.AddFavorite('http://www.blogjava.net/passyt/','与笑凌的博客')"&gt;&lt;font color="#6faf30"&gt;加入收藏夹&lt;/font&gt;&lt;/a&gt;
&lt;font color="#6faf30" size="1"&gt;在线人数:1
&lt;!--
&lt;script src=http://fastonlineusers.com/online.php?d="passyt"&gt;&lt;/script&gt;
--&gt;
人&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 12 Nov 2007 07:35:32 GMT</lastBuildDate><pubDate>Mon, 12 Nov 2007 07:35:32 GMT</pubDate><ttl>60</ttl><item><title>ant--项目自动发布</title><link>http://www.blogjava.net/passyt/archive/2007/11/12/159979.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Mon, 12 Nov 2007 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2007/11/12/159979.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/159979.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2007/11/12/159979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/159979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/159979.html</trackback:ping><description><![CDATA[        很久没来了，昔日找工作的一幕幕在眼前渐渐淡去。回首这一年多走过的路，没有太多的惊奇，却也积累了不少有趣的事情，这个找个机会可以整理出一篇趣事集锦。<br />         现在被公司外派，期间经常要上传代码集成测试，而上传的速度简直和蜗牛一样快，好的是管理Source的Server和application的Server是一台，于是我凭着昔日对ant的一点模糊映像和google的大力帮助下，整理出了一套自动发布项目的ant脚本。主要有2个文件:build.xml和build.properties,需要的朋友可以参考一下。<br />build.xml:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">project </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="Nitto"</span><span style="COLOR: #ff0000"> default</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="build.properties"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 指定编译所需的lib </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">path </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="all-libs"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${lib.dir}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.jar"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="${tomcat.dir}/**/*.jar"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">exclude </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="poi*2.5.1*.jar"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">path</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 清除临时文件夹 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${temp.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 编译项目 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="clean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 建立临时文件夹 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${temp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> copy文件 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy </span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="${temp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> preservelastmodified</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${basedir}/${cvs.project}/${myProperject.name}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.*"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copy</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 建立编译文件夹 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${class.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 编译JAVA </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">javac </span><span style="COLOR: #ff0000">destdir</span><span style="COLOR: #0000ff">="${class.dir}"</span><span style="COLOR: #ff0000"> source</span><span style="COLOR: #0000ff">="${java.source}"</span><span style="COLOR: #ff0000"> target</span><span style="COLOR: #0000ff">="${java.target}"</span><span style="COLOR: #ff0000"> encoding</span><span style="COLOR: #0000ff">="utf-8"</span><span style="COLOR: #ff0000"> debug</span><span style="COLOR: #0000ff">="${debug}"</span><span style="COLOR: #ff0000"> deprecation</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> fork</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #ff0000"> memoryMaximumSize</span><span style="COLOR: #0000ff">="512m"</span><span style="COLOR: #ff0000"> optimize</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> failonerror</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">src </span><span style="COLOR: #ff0000">path</span><span style="COLOR: #0000ff">="${src.dir}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath </span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="all-libs"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">javac</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 拷贝properties,xml,vm文件 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy </span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="${class.dir}"</span><span style="COLOR: #ff0000"> preservelastmodified</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${src.dir}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.properties"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.xml"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.vm"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copy</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 拷贝项目到tomcat的webapps中 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="copyProjectToTomcat"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="compile,backProject"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">copy </span><span style="COLOR: #ff0000">todir</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> preservelastmodified</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${temp.dir}/${tomcat.project}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="**/*.*"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">copy</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${temp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 备份旧的项目 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="backProject"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tstamp</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}_back_${DSTAMP}.zip"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">zip </span><span style="COLOR: #ff0000">destfile</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}_back_${DSTAMP}.zip"</span><span style="COLOR: #ff0000"> basedir</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">zip</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${tomcat.webapp.dir}/${tomcat.project}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 停止tomcat </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="stopTomcat"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">exec </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${tomcat.dir}/bin"</span><span style="COLOR: #ff0000"> executable</span><span style="COLOR: #0000ff">="cmd.exe"</span><span style="COLOR: #ff0000"> os</span><span style="COLOR: #0000ff">="Windows 2003"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">arg </span><span style="COLOR: #ff0000">line</span><span style="COLOR: #0000ff">="/c shutdown.bat"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">exec</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 启动tomcat </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="startTomcat"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">exec </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${tomcat.dir}/bin"</span><span style="COLOR: #ff0000"> executable</span><span style="COLOR: #0000ff">="cmd.exe"</span><span style="COLOR: #ff0000"> os</span><span style="COLOR: #0000ff">="Windows 2003"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">arg </span><span style="COLOR: #ff0000">line</span><span style="COLOR: #0000ff">="/c startup.bat"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">exec</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="publish"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="checkout,copyProjectToTomcat"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 生成CVS连接的权限信息 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="initcvs"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cvspass </span><span style="COLOR: #ff0000">cvsroot</span><span style="COLOR: #0000ff">="${cvsroot}"</span><span style="COLOR: #ff0000"> password</span><span style="COLOR: #0000ff">="${cvs.password}"</span><span style="COLOR: #ff0000"> passfile</span><span style="COLOR: #0000ff">="${cvs.passfile}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> 从CVS SERVER上取的项目 </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="checkout"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="initcvs"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">cvs </span><span style="COLOR: #ff0000">cvsroot</span><span style="COLOR: #0000ff">="${cvsroot}"</span><span style="COLOR: #ff0000"> command</span><span style="COLOR: #0000ff">="checkout"</span><span style="COLOR: #ff0000"> package</span><span style="COLOR: #0000ff">="Nitto"</span><span style="COLOR: #ff0000"> dest</span><span style="COLOR: #0000ff">="${basedir}"</span><span style="COLOR: #ff0000"> passfile</span><span style="COLOR: #0000ff">="${cvs.passfile}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">project</span><span style="COLOR: #0000ff">&gt;</span></div>build.properties:<br /><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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">basedir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#tomcat properties<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tomcat.project</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Nitto_1<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tomcat.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">C:/tomcat<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#tomcat.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">C:/tomcat<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tomcat.lib.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${tomcat.dir}/common/lib<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />tomcat.webapp.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${tomcat.dir}/webapps<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#CVS properties<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cvs.project</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Nitto<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cvs.passfile</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${basedir}/ant.cvspass<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cvs.password</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">nchhr<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />cvsroot</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">:pserver:administrator:${cvs.password}@</span><span style="COLOR: #000000">169.93.1.16</span><span style="COLOR: #000000">:/SourceCVS<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#project properties<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />myProperject.name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Nittoweb<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#complie properties<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#######################<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />debug</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">on<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />java.source</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1.4</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />java.target</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1.4</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />temp.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${basedir}/temp<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />lib.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${basedir}/${cvs.project}/${myProperject.name}/WEB-INF/lib<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />src.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${basedir}/${cvs.project}/src<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />class.dir</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">${temp.dir}/${tomcat.project}/WEB-INF/classes</span></div><img src ="http://www.blogjava.net/passyt/aggbug/159979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2007-11-12 15:33 <a href="http://www.blogjava.net/passyt/archive/2007/11/12/159979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IT成功学</title><link>http://www.blogjava.net/passyt/archive/2006/10/11/74512.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Wed, 11 Oct 2006 03:47:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/10/11/74512.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/74512.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/10/11/74512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/74512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/74512.html</trackback:ping><description><![CDATA[最近一直在思考一个问题，当我们开发出了一套软件的时候如何定义是否成功：<br />项目经理：<br />    满足了用户的需求，并且还给用户带来了惊喜！<br />架构师：<br />    系统的架构能轻易的应对用户需求的变化－－系统能非常容易的并入新的功能和删除旧的功能！<br />PG:<br />    绝大部分的业务逻辑的代码写的很精炼，而且需求发生变化时修改的代码尽可能的少！<br /><br />欢迎大家批评指正！！<br /><img src ="http://www.blogjava.net/passyt/aggbug/74512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-10-11 11:47 <a href="http://www.blogjava.net/passyt/archive/2006/10/11/74512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>玩玩ruby之路在脚下——新手入门篇</title><link>http://www.blogjava.net/passyt/archive/2006/10/08/73882.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Sun, 08 Oct 2006 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/10/08/73882.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/73882.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/10/08/73882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/73882.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/73882.html</trackback:ping><description><![CDATA[    终于下定决心，学习ruby了，对这种新的语言感到很是兴奋。压抑住内心的喜悦简单介绍一下它的下载安装方式。<br />（1）下载地址：<br />    http://www.rubyonrails.org/down<br />    我使用的系统是windows，自然是选择<a href="http://rubyforge.org/frs/?group_id=167">Windows installer</a><br />    ruby在我看来很多地方都不太成熟，就拿安装方式来说，缺少图形化的指引界面，据说以前的安装方式更加愚蠢，还好有了RubyGems的出现，一切变得有些简单了。<br />（2）安装<br />    1.安装ruby<br />        最直接的安装方式了，一直next到最后结束为止（最新的版本是 1.8.4 (2006-04-14)）。<br />    2.安装RubyGems<br />        在命令行中运行“ruby setup.rb”即可<br />    3.安装rails<br />        有了rubygems的帮助，安装rails就变得简单些了。启动命令行窗口，输入“gem install rails –remote”，剩下的时间就是等待，由于这是采用在线安装，所以安装的速度就取决于你的网速了，呵呵。<br />    学java时就习惯了操作dos窗口，所以对这种往往要操作命令行的方式并没有太大的排斥，倒是那些.net的新手会有些不适应，毕竟一个新的平台还需要很多的人来支持，想当初java的使用往往也是通过操作命令行的。<br /><br />（3）简单的使用一下ruby<br />    装完了之后，你一定和我一样迫不及待的想尝试一下ruby的魅力所在。但是先不要急，首先确认一下ruby是否已经真正的安装成功。启动命令行，输入“ruby -v”，如果得到的信息类似如下：<br />    <font color="#ff1493">ruby 1.8.4 (2006-04-14) [i386-mswin32]<br /></font>说明你的系统中已经可以使用ruby了。<br />    好的，让我们来初步接触一下ruby。这个时候大多数人想到的是写一个hello,world的程序了解一下ruby的基本语法，呵呵，其实不用的，在命令行中输入：<br />    <font color="#ff1493">ruby<br />    print "hello,world!"<br />    ^D</font><br />这个时候就可以见到大家熟悉的"hello,world"了。发现了ruby的神奇了吧，不错，ruby作为一种脚本语言具有很独特的魅力。当然了，你也何以定制自己的ruby程序的，新建一个文件，取名为test.rb,输入以下内容：<br />        <font color="#ff1493">print("测试")</font><br />    好了，将命令行转至test.rb所在的目录，输入test，就可以看到ruby输出中文"测试"了。<br />    结束了无聊的事情之后，让我们开始真正的了解ruby，结合自己的所学，这里重点介绍一下ruby和java在语法上的不同:<br />    &lt;1&gt;字符串：<br />        java中的字符串一律用""来表示，''只是用来描述字符的，在ruby中""和''都是来表示字符串的，所不同的是""所表示的字符串会经过转义处理，比如print "\n测试"，输出的结果是：<br /><font color="#ff1493"><br />    测试</font><br />而print '\n测试',输出的结果是：<br /><font color="#ff1493">    \n测试</font><br />从上面的代码可以简单看出在""中"\n"被用作了换行，而在''中"\n"被作为了一般的字符串处理。<br />    &lt;2&gt;变量作用域的声明:<br />    &lt;3&gt;特殊的数组:<br />    java中的数组元素类型必须是一样的，在ruby中，他们可以是不一样的。比如可以这样定义一个数组：<font color="#ff1493"><br />    a=[2000," Allex", true,"50"] </font><br />    数组元素的引用也很特别，a[0]很显然吧，那么a[0,2]呢，还有a[0..2]呢，呵呵，写一段代码测试一下哈：<br />    <font color="#ff1493">print a[0,2]                <font color="#000000">结果是：        2000allex<br />    <font color="#ff1493">print a[0..2]                </font></font></font><font color="#ff1493"><font color="#000000">结果是：        2000allextrue<br />    a[0,2]相当于substring,但是又和java中的substring不一样，它的使用和oracle中的substr是完全一样的，后面的2指子串的长度；a[0..2]意思是指从0到2的元素，呵呵，有点神奇吧，还有更神奇的事情呢，a[-1]是什么呢？呵呵，测试发现a[-1]打出来的是50,有此可见，ruby中对数组的引用可以采用负数，区别是反向引用，这为我们有时编程带来了极大的便利。那么这种引用方式是否会避免让人深恶痛绝的越位异常呢，写段代码测试先：<br />    <font color="#ff1493">print a[4]</font>             结果是:    nil<br />    <font color="#ff1493">print a[-5]</font>                结果是：   nil <br />    这里打印的nil就是和java中的null是一个意思呀，完全明白了吧，也发生了让人讨厌的越位异常，55～～<br />    &lt;4&gt;</font></font><font color="#ff1493"><font color="#000000">哈希表<br />    哈希表作为一种极为常见的数据形式自然是得到了ruby的支持，写段代码简单说明下：<br />    </font>h = {1 =&gt; 2, "2" =&gt; "4"}<br />    print h[1]<br />    print h["2"]<br />    pring h[2]<br /></font><font color="#ff1493"><font color="#000000">打印出的结果是：24nil，所以千万不要搞混了，[]中的是key,不要和数组混淆了。<br />（4）ruby的神奇之处：<br />    &lt;1&gt;万物皆对象：<br />        和java中的基本类型不一样的是，ruby中的所谓基本类型也是对象（具有属性和行为），举个例子，-1在java中是基本类型，为了获得它的绝对值，需要如下调用Math.abs(-1)，这里的处理完全是一种非对象的方式，在ruby中这些“基本类型”也是对象，它们和其它的对象没有任何区别，因此作为对象的-1完全有理由知道自己的绝对值，哈哈，所以如下调用-1.abs()是完全正确的。<br />    &lt;2&gt;聪明的ruby<br />        在java中如果要把"abs"翻倍成"absabs",需要比较复杂的逻辑，而在ruby中只需"abs"*2即可。<br />    &lt;3&gt;超长的数字支持能力<br />        ruby可以处理的数字长度惊人，写个例子描述一下哈：<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, 0);">def jiecheng(n)<br />    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> n</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(128, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />        </span><span style="color: rgb(128, 0, 0);">1</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"><br />        n</span><span style="color: rgb(0, 0, 0);">*</span><span style="color: rgb(0, 0, 0);">jiecheng(n</span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(128, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)<br />    end<br />end<br /></span><span style="color: rgb(0, 0, 255);">print</span><span style="color: rgb(0, 0, 0);"> jiechen(</span><span style="color: rgb(128, 0, 0);">700</span><span style="color: rgb(0, 0, 0);">)</span></div>这里是计算700的阶乘，显示的结果如下：<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, 0);">24220401247502721798678750938123522185909833857292072994506796649299381602156474</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">20444519051666484819249321456671497049842327525093874817343838393757631459228450</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">82849997227127414016031105783055846363633712407933244782073928110103711266538753</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">71807902575779192731082629169047504052350550600840122194928923756351362966220200</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">23178109619818046179906897450420548912610870589088056503913584562211037693288782</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">96090019507413099979903597071143627933909429203286626049637582546142772755571000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">30077529061414706395743900249885149142644498650064588732269519418995459703339103</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">51588559232940829569276986080222200289966128343931630028789203382654749603473516</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">31476526277225717115468671686281418472874118714793634950165319745745566041313450</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">60491220449470526233846820888647906733095692923842156117880142749549059141483623</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">03226200246816441301934846080254998647325270606104512088058712293349862185399243</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">30905429957638171880624723819523260464261432989407063616375367209123275161237834</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">82738407578735677175328792425183371195406029436094116293490095660437208367374010</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">90882392975031224612531245642687296717053747734506443314924558119560479901478736</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">20955692516151773711039975473055185406632842001472865789628693652378708020647632</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">71571364413187734327510072631080569582516938112809572432024601571117786174726837</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">61623869704457588005158037495665069625778930898095725794710701639238231528115579</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">61912028737868923893433519850866593391725714397527770759059751198934506870173594</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">01696725618647131071150167473689926901160826337621723466889698408625172643840000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">00000000000000000000000000000000000000000000000000000000000000000000000000000000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">00000000000000000000000000000000000000000000000000000000000000000000000000000000</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 0);">0000000000</span></div><br />（5）ruby之根本：<br />    Ruby是一种简便快捷的面向对象编程的脚本语言.Ruby可以(像Perl一样)进行文本处理及系统管理,其功能十分丰富.同时,Ruby简单易懂,便于扩充.<br />    Ruby有下列特点.<br />    &lt;1&gt;解释器 <br />        Ruby是解释型语言,因此执行程序时无需编译.<br />    &lt;2&gt;变量无类型(动态地确定类型) <br />        Ruby的变量可以接收各种类型的数据,因此没有必要担心变量类型的问题.另一方面,这弱化了编译检查的功能.<br />    &lt;3&gt;无需声明变量 <br />        Ruby中无需声明变量即可使用.可以根据变量名分辨变量的种类(局部变量,全局变量,实例变量等).<br />    &lt;4&gt;内存管理无需用户干预 <br />        Ruby自动进行内存管理.解释器内置的垃圾回收器会自动回收不再使用的对象.<br />    &lt;5&gt;一切都是对象 <br />        从一开始Ruby就被设计成为纯粹的面向对象语言.包括整数这种基本的数据类型在内所有数据都被看是对象,进而得到统一的处理.<br />    &lt;6&gt;类，继承，方法 <br />        Ruby当然具有面向对象语言的基本功能,包括类，继承和方法等.<br />    &lt;7&gt;特殊方法 <br />        可向某对象添加方法.例如，可以把GUI按钮被按下时的动作作为方法记述下来，还可以用它来进行原型库（prototypebase）的面向对象编程（只要您想这样的话）.<br />    &lt;8&gt;使用模块进行糅合（Mix-in） <br />        Ruby认为多重继承会导致问题复杂化,因此故意舍弃了多重继承,但可以使用模块超越类的界限来共享数据和方法等.这就是"Mix-in"糅合功能<br />    &lt;9&gt;迭代器 <br />        迭代器功能可以将流程控制结构抽象化.<br />    &lt;10&gt;闭包 <br />        可以将某过程片段对象化,对象化后的该过程片段就称作闭包.<br />    &lt;11&gt;功能强大的字符串操作／正则表达式 <br />        以Perl为样板创造出了功能强大的字符串操作和正则表达式检索功能.<br />    &lt;12&gt;超长整数 <br />        内置了处理超长整数的功能,所以只要内存允许就可以计算非常大的整数.例如计算400的阶乘等也轻而易举.<br />    &lt;13&gt;异常处理功能 <br />        异常处理功能可以使您编写代码处理异常情况.<br />    &lt;14&gt;可以直接访问OS <br />        Ruby可以使用（UNIX的）绝大部分的系统调用.即使单独使用Ruby也可以进行系统编程.<br />    &lt;15&gt;动态加载 <br />        若OS支持的话,可以在运行时读入对象文件.<br /></font></font><font color="#ff1493"><font color="#000000"><br />本篇完，敬请关注下篇：ruby on rails<br /></font></font><img src ="http://www.blogjava.net/passyt/aggbug/73882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-10-08 18:07 <a href="http://www.blogjava.net/passyt/archive/2006/10/08/73882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>冬歇期，写点小文</title><link>http://www.blogjava.net/passyt/archive/2006/09/20/70814.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Wed, 20 Sep 2006 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/09/20/70814.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/70814.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/09/20/70814.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/70814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/70814.html</trackback:ping><description><![CDATA[    很长时间没有更新blog了，不是我懒惰，是因为我要学的东西实在是太多了，而且还要工作，留给自己的空闲时间实在是少之又少。特别是有个星期，感觉每时每刻我都在思考着某个功能如何在尽量少改原有的代码下完成新的功能的并入以及修改，有时真的感到自己处于一种麻木的状态，短暂的休息之后有时会油生出对原来写这代码的人的痛恨，垃圾的代码让我实在是没有战斗的情趣！但，这些都会随着时间慢慢淡忘，于是只是想着自己该如何很快的将问题解决掉，几乎没有考虑过我一直所关心的代码优雅性、可塑性以及简单主义，我是不是在一条不明的道路上逐渐地迷失自我。<br />    从大二开始真正的编程，经历了一段还算艰苦的找工作历程，也经历了两个多月的尘埃落定之后整天沉静于工作的感动，但当我有一天真正的静下心来，突然发现自己的所学是一塌糊涂。<br />    首先是对众多的技术产生了从未有过的迷失。我是一个JAVA爱好者，记得自己还没有毕业时和同学争论JAVA的优势，“JAVA有广大的开源用户支持，JAVA是一种更加OO的语言，学习JAVA你可以真正的体会什么是编程的乐趣，而且还可以学到除编程之外其它的东西，你将从骨子里深刻的体会什么是模式，代码如何更好的组织……”，但是今天，我面对如此之多的技术框架，把自己摔入了一个很大很深的黑洞。从未学过J2EE，却从webwork和hibernate开始开发了我的第一个J2EE应用，学到了很多，也许迷失得更多。当我了解到webwork比struts更先进得地方，当看到robbin大胆的采用webwork架构javaeye，当rod在“without ejb”中表扬webwork批评struts，我暗自窃喜，感觉我的老师指导了一条明朗的路，至少是一种技术上没有落后的路，我曾一度以为我的webwork技术是抓住了先机，将来可以派上很大的用途!但是，我错了。我几乎从没有过这种挫败感，我以为webwork会凭借它强大的优势将取代struts，而从我真正工作的那一刻开始，我就在南辕北辙的道路上迷失了，我为了融入团队努力地学习让我鄙视的struts，而且在空余时间极力吸取着webwork的新的理念，但有一天，当我的队友问我webwork有什么优点时，我尽管历数了好几个众所周知的理由，但就在那一刻我感到了一种被摔倒的感觉。优秀的框架有很多，象springMVC，难道在公司的项目中就要用到吗？我并没有真正的完整的阅读webwork的源码，也就没有从根本上了解它的内部机理，只是从别人的口中转述它的优点，然后照搬照用……而除此之外，还有更多的技术需要我们去掌握去学习，WEB2.0是一个崭新的时代，许多应用将面临新的挑战，现在逐渐流行的ajax技术就是一个例子，随之而出的框架也是层出不穷，也是各有千秋，难道我们需要去一一学习吗？面对开源JAVA的空前繁荣，我感到了真正的迷茫。这样就回到了我常对人说的一句话：“语言并不是最重要的，重要的是明白它的思想”！呵呵，这其实是一个很大的标题，在许多场合都不会错，其实这忽悠了别人也忽悠了自己!如何明白语言的思想才是我们真正要把握的。当然我有时也会说，作为一个软件开发者，“除了将用户的需求转化为软件，还要给用户一些惊喜的地方才是真正意义上的软件成功”，但是作为PG的我，现在可能还没有这种能力去实现这样的思想，于是面对工作上的事情我也只好无可奈何了。<br />    其次，关于“JAVA死了”论。JAVA几乎是我唯一一项觉得可以用来侃侃的编程语言，我热爱它，也希望它能不停的发展壮大，但是面对如今各种攻势，我象一个小学生在大人的环境堆中听着那些大家诉说着自己听不懂的意见。我的项目经验极少，也希望能从项目中学到一些设计技术和技巧，但无可否认的是，我也对JAVA产生了自己的意见。JAVA太抽象了!JAVA将任何东西都封装成了一个类，作为普通PG的我最多的时候就是把别人的类拿来用在自己的开发环境中，这就是经典的“重复轮子”理论。但是，这样最大的结果是造就一大批什么都不懂但是一样可以做软件的人，象我!曾几何时，我以为自己已经掌握了JAVA的精髓可以出道了，于是我每天构思着一些新的点子，思考着如何去实现，但当一天，我想实现一个自己的拨号上网工具时，我遇到了前所未有的困难，我的第一个想法是JAVA中是否封装了一个类似的类等着我去调用，查了很多的工具书，发现我的想法是错误的，然后我自己尝试着去构造这个类，思考良久，除了调用系统命令和使用JNI外，我没有半点办法，对于后者我又碰到了巨大的麻烦，在多次努力之后我对自己说：“没用的，拨号需要写一个类似驱动程序一样的东西，而这些访问硬件的东东是JAVA很难办到的”，于是我放弃了这个IDEA，也很清晰的认识到自己是一个很大的白痴。直到一年之后，我又一次在网上看到了别人询问如何用JAVA做一个拨号软件的问题后，我从骨子里产生了对JAVA的深入思考。JAVA的确是一种很好的编程语言，在很大程度上减少了编程量，但是却让我们这些入门者产生了极大的依赖性，我们可以没有任何的TCP/IP知识却照样能写出不错的J2EE应用，但是却不能满足我们许多奇奇怪怪的想法，因为我们对许多底层的东西不了解。尽管我很早就意识到JAVA所力所不及的事情，但是我一直没办法告诉自己深入的学习功能更强大的C++,至今为止我的那本C++书只翻开了一小半。<br />    再次，对软件的应用领域也产生了一些自己的感受。大学里没有教会我有用的东西，这一直是我对上大学这四年的最大的感受，相反，参加工作之后从事于自己喜爱的职业，这种感觉慢慢淡化，开始觉得自己没有利用空闲的时间专注于我本应该深入关注的领域。作为一个PG，我们大多数只是做一个信息收集系统，很大程度上没有挖掘计算机的功能，象那些人工智能，专家系统，信息编码压缩等高端领域本该是我理应进入的领域，但是我却盲目地选择了现在的这种，而且对那些领域，我只有深深的憧憬，特别是今天看到了一个高手经过面试成功进入微软的经历更增添了我的伤楚。我发誓，不管做什么，我都要找到自己能发挥特长的路!<br /><br /><img src ="http://www.blogjava.net/passyt/aggbug/70814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-09-20 15:30 <a href="http://www.blogjava.net/passyt/archive/2006/09/20/70814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习superwaba</title><link>http://www.blogjava.net/passyt/archive/2006/05/28/48551.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Sat, 27 May 2006 18:18:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/05/28/48551.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/48551.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/05/28/48551.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/48551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/48551.html</trackback:ping><description><![CDATA[         以前看过J2ME的书，没想到在移动平台也有如此多的技术可供选择，superwaba是一个基于java的带有自己特有的虚拟机的平台（伟大的java虚拟机），据说可以不用修改代码可以直接在windows applet、Palm OS和Pocket PC上运行。<br /><br /><strong>说明</strong>（来自superwaba老大guich）：<br />      SuperWaba is a Java-like VM for PDAs. Can run in PalmOS, in Windows CE/PocketPC devices and in Windows 98 and beyond, and is fully emulated under JDK and browser. Have support for Exceptions, Threads, lots of user interface controls, double and long 64 bit types, supports Grayscale in all PalmOS devices starting 2.0, supports Color, has a beautiful set of 3d controls, supports JNI and Java libraries, its fast and small, lets you use all device's memory if needed, supports Symbol scanners, bluetooth, sockets and serial/IR. Also supports html and full UNICODE range (chinese, japanese, korean, etc).<br />      You can make programs using your favorite Java IDE, debug everything in desktop and when finished just deploy it in the device. There are several libraries added by users that enhance the basic set of classes. The programs are totaly portable between the platforms, and even the database is also portable! SuperWaba has more than 10000 members from 150 countries worldwide. Welcome to the world of easy cross-platform!<br /><br /><strong>特点：</strong><br /><em>      1. 跨平台兼容性超高，一个程序基本不用改动，重新编译一下就可以在Palm OS或PPC上跑；<br />      2. 丰富的API，可以使用到Symbol的条形码识别及扩展卡等等；<br />      3．可以方便的从Palm OS style换到非Palm OS style；<br />      4. SW的更新速度惊人的快，平均每个月都有新的版本发布！<br />      5．最重要的一条……它是完全免费的，而且遵守GPL协议，源代码全部公开，并放在sourceforge上。</em><br />官方网站是：<a href="http://www.superwaba.com/">http://www.superwaba.com/</a><br /><br /><strong>开发工具：<br /></strong>      1、Tauschke MobileCreator<br />            下载地址：http://www.tauschke.com/download/index.html <br />      2、Eclipse plugin<br />            下载地址：<a href="http://superwaba-ide.sourceforge.net/">http://superwaba-ide.sourceforge.net/</a><br /><br /><strong>开发说明：</strong><br />      1、Tauschke MobileCreator<br />                   参看下载网站的说明。<br />      2、使用Eclipse开发    
<p>首先建立一个项目, 选择 File -&gt; New -&gt; Project, 然后选择 SuperWaba -&gt; SuperWaba Project. </p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/newproject.gif" /></center><p></p><p>按照一般的步骤下一步到最后一页，这时你须选择一个已安装了的SuperWaba SDK </p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/sdkselection.gif" /></center><p></p><p>对于99.999999%的用户而言默认设置就可以正常工作了。但如果你的SuperWaba SDK安装目录不是“c:/SuperWabaSDK”，或者版本大于或等于5.0，又或者你有几个SuperWaba SDK安装目录（为了测试等目的），你应该在Window -&gt; Preferences -&gt; SuperWaba dialog中配置SuperWaba SDK参数。</p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/preferences.gif" height="534" width="535" /></center><p></p><p>现在来创建一个主窗口（MainWindow），先选择File -&gt; Other然后选择SuperWaba -&gt; MainWindow，填写你的设置参数，点击完成，这时将创建一个带有一些默认方法的MainWindow类的子类。</p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/mainwindow.gif" /></center><p></p><p></p><center><img style="width: 503px; height: 436px;" alt="" src="http://superwaba-ide.sourceforge.net/images/editor.gif" height="562" width="703" /></center><p></p><p>如果要在MainWindow中补充严格的控制代码，这并不是一个该记住的练习。取而代之的是，你将用到某个容器的子类。创建容器的方法和刚才创建MainWindow方式非常相似，先选择File -&gt; Other，然后选择SuperWaba -&gt; Container。<br /><br />本插件允许使用者运用waba applet开发自己的应用程序。通过选择Run -&gt; Run/Debug创建一个SuperWaba Application<br /></p><p align="center"><img style="width: 520px; height: 566px;" alt="" src="http://superwaba-ide.sourceforge.net/images/launch.gif" height="651" width="520" /></p><p></p><p>还可以不通过手动配置开始一个应用（application） 。如果选择Run -&gt; Run/Debug As -&gt; SuperWaba Application，Eclipse自动将寻找所在项目中的 MainWindow 类并使用默认的设置创建一个配置信息（configuration ）。</p><p></p><center><img style="width: 526px; height: 424px;" alt="" src="http://superwaba-ide.sourceforge.net/images/launchshortcut.gif" height="511" width="526" /></center><p></p><p>现在来部署并打包我们的应用，在项目菜单中有一个新选项，选择“Build SuperWaba Application”。<br /></p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/buildmenu.gif" /></center><p></p><p>打开一个构建对话框，填写信息。在单选框中选择你要创建的类型（only Warp, only Exegen, Exegen with Pocket PC .exe or .cab）<br /></p><p></p><center><img alt="" src="http://superwaba-ide.sourceforge.net/images/builddialog.gif" /></center><p></p><p>点击OK之后将创建一个名为“build_superwaba.xml ”的ANT构建文件（这个文件名为了不重写你自己的构建文件没有取名为build.xml ），并调用ANT执行你选择的目标.<br />如果构建成功，更新项目后，将得到2个新目录：build 和dist。构建过程中ANT会产生一些临时文件。Dist文件夹包含构建后所需的文件。</p><p></p><p align="center"><img alt="" src="http://superwaba-ide.sourceforge.net/images/buildresult.gif" /></p><div align="left"><br /><br /><strong>文献资料：<br />      </strong>O'Reilly的OnJava.com的Waba教程：<br />               http://www.onjava.com/pub/a/onjava/2001/04/19/java_palm.html<br />               http://www.onjava.com/pub/a/onjava/2001/06/19/waba.html<br /><br /></div><img src ="http://www.blogjava.net/passyt/aggbug/48551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-05-28 02:18 <a href="http://www.blogjava.net/passyt/archive/2006/05/28/48551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习ajax技术</title><link>http://www.blogjava.net/passyt/archive/2006/05/24/47826.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Wed, 24 May 2006 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/05/24/47826.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/47826.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/05/24/47826.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/47826.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/47826.html</trackback:ping><description><![CDATA[　　很久以前听说过ajax,一直以为它是一种和java并列的技术，因为对java的情有独钟，所以迟迟没有开始对ajax的研究，后来看了好多新闻才发现ajax只是一种用于异步处理的客户端技术，而且已经存在很久，只是最近随着google的推广才红火起来。而与此同时，ruby on rails却真正是一种可以和java抗衡的服务器端技术，但因为刚刚起步，许多地方都不是很完善（如何不完善，我就不得而知了，只是听一些前辈的意见而已），其实我对ruby很早就有耳闻，大约是2004年吧，当时随手下载下来看了看，觉得它似乎是一种比java还要OO的语言（在java中，int绝非对象，而在ruby中，int却具有很多自己的方法，由此可见在ruby中，int被赋予了对象的含义），而且构建系统可以非常快，我曾一度对其着迷，打算深入学习，但后来发现他的发布人是日本人，处于强烈的爱国热情（可能是自己一相情愿＃＃）最后没有如愿以尝，直到最近听说javaeye的创始人robbin打算用ruby改写该网站才意识到自己可能犯了一个错误：技术是没有国界的．<br />　　说了很多废话，言归正转，前几天从图书馆借了一本书«ajax基础教程»，捏着鼻子总算看完了，里面的代码很多，而且很广，但给人一个总的印象是：使用ajax意味着将编写大量的代码，而且测试很麻烦．尽管书里面罗列了很多测试工具，但因为javascript是一种弱类型语言，这就决定了，无论我们做再多了努力也无法改变这种根深蒂固的本质．如，我们可以利用java的强类型机制，使用开发工具在打出小数点后利用开发工具的帮助功能得到所使用的对象的行为（方法），而对于javascrpt，变量通过var定义，而他们的最终类型只有在运行期才能得到，所以它所具有的行为就无法通过开发工具的帮助功能得到，这对于像我们这种只能储存很少信息量的大脑而言是极其痛苦的，我们要么背会所有的api，要么开发时一边写代码，一边查看开发手册．正因为如此，我们也很难开发出针对ajax的代码自动化工具（我是一位狂热的eclipse爱好者，热衷于一切自动化代码工具）．但是，也正因为javascript的弱类型特点，才能走的这么远，html作为web交流的世界语，它是一种在极不规范的情况下仍能很好工作的语言，针对这种特点，也许注定了ajax的弱类型的特点．<br />　　以上仅仅是我对ajax的一个大体的印象，因为自己是一个初学者，所以看问题可能有些肤浅，但到底软件需求才是至上的，最终的用户体验才能赢得软件的最后胜利，而不在乎其开发技术的高低．ajax技术是采用javascript作为客户端实现的语言，xml作为其通讯的机制，因此有人将ajax描述为：ajax=javascript+xml是很有道理的．ajax的最大优点就是异步处理，相对于以往的web技术采用的请求全刷新机制，它更加亲近于C/S结构的软件，给用户的是一种很有快感的东东．其实现的方式是采用一个叫做XMLHttpRequest的对象进行交互的，因为历史的原因，各种浏览器对javascript的处理方式不一致，使得生成XMLHttpRequest对象的方法也有差别，但大体上有两种方式：微软的ActiveX控件和XMLHttpRequest本地对象，代码如下：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);"> 1</span><img id="Codehighlighter1_29_577_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_577_Open_Text.style.display='none'; Codehighlighter1_29_577_Closed_Image.style.display='inline'; Codehighlighter1_29_577_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_29_577_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_29_577_Closed_Text.style.display='none'; Codehighlighter1_29_577_Open_Image.style.display='inline'; Codehighlighter1_29_577_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 0);">function createXMLHttpRequest() </span><span id="Codehighlighter1_29_577_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_29_577_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 2</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  var xmlreq </span><span style="color: rgb(0, 0, 0);">;<br /></span><span style="color: rgb(0, 128, 128);"> 3</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_82_164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_164_Open_Text.style.display='none'; Codehighlighter1_82_164_Closed_Image.style.display='inline'; Codehighlighter1_82_164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_82_164_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_82_164_Closed_Text.style.display='none'; Codehighlighter1_82_164_Open_Image.style.display='inline'; Codehighlighter1_82_164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (window.XMLHttpRequest) </span><span id="Codehighlighter1_82_164_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_82_164_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 4</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 在非Microsoft浏览器中创建XMLHttpRequest本地对象</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    xmlreq </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);"> XMLHttpRequest();<br /></span><span style="color: rgb(0, 128, 128);"> 6</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_197_558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_558_Open_Text.style.display='none'; Codehighlighter1_197_558_Closed_Image.style.display='inline'; Codehighlighter1_197_558_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_197_558_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_197_558_Closed_Text.style.display='none'; Codehighlighter1_197_558_Open_Image.style.display='inline'; Codehighlighter1_197_558_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (window.ActiveXObject) </span><span id="Codehighlighter1_197_558_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_197_558_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 7</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">通过MS ActiveX创建XMLHttpRequest</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 8</span><span style="color: rgb(0, 128, 0);"><img id="Codehighlighter1_242_335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_242_335_Open_Text.style.display='none'; Codehighlighter1_242_335_Closed_Image.style.display='inline'; Codehighlighter1_242_335_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_242_335_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_242_335_Closed_Text.style.display='none'; Codehighlighter1_242_335_Open_Image.style.display='inline'; Codehighlighter1_242_335_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span id="Codehighlighter1_242_335_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_242_335_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 9</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 尝试按新版InternetExplorer方法创建</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">10</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">      xmlreq </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);"> ActiveXObject(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Msxml2.XMLHTTP</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">11</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_348_554_Open_Image" onclick="this.style.display='none'; Codehighlighter1_348_554_Open_Text.style.display='none'; Codehighlighter1_348_554_Closed_Image.style.display='inline'; Codehighlighter1_348_554_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_348_554_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_348_554_Closed_Text.style.display='none'; Codehighlighter1_348_554_Open_Image.style.display='inline'; Codehighlighter1_348_554_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (e1) </span><span id="Codehighlighter1_348_554_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_348_554_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);">12</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 创建请求的ActiveX对象失败</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">13</span><span style="color: rgb(0, 128, 0);"><img id="Codehighlighter1_386_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_386_488_Open_Text.style.display='none'; Codehighlighter1_386_488_Closed_Image.style.display='inline'; Codehighlighter1_386_488_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_386_488_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_386_488_Closed_Text.style.display='none'; Codehighlighter1_386_488_Open_Image.style.display='inline'; Codehighlighter1_386_488_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">      </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> </span><span id="Codehighlighter1_386_488_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_386_488_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);">14</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 尝试按老版InternetExplorer方法创建</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">15</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">        xmlreq </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);"> ActiveXObject(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Microsoft.XMLHTTP</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">16</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_501_548_Open_Image" onclick="this.style.display='none'; Codehighlighter1_501_548_Open_Text.style.display='none'; Codehighlighter1_501_548_Closed_Image.style.display='inline'; Codehighlighter1_501_548_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_501_548_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_501_548_Closed_Text.style.display='none'; Codehighlighter1_501_548_Open_Image.style.display='inline'; Codehighlighter1_501_548_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />      }</span></span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (e2) </span><span id="Codehighlighter1_501_548_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_501_548_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);">17</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 不能通过ActiveX创建XMLHttpRequest</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">18</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">      }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">19</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">20</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">21</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> xmlreq;<br /></span><span style="color: rgb(0, 128, 128);">22</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">23</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>代码中看到排除上述的两种情况，方法createXMLHttpRequest得到的结果将是null，也就是说无法得到XMLHttpRequest的实例，也就无法使用ajax技术。但书中一直没有给出此时将如何处理，难道，世界上的浏览器就他们两种？或者，对于那些第三类的用户，我们要么劝勉其使用Internet Explorer或firefox等，要么对其采取抛弃的态度（这些也许是世界规范化组织该考虑的问题）。创建了XMLHttpRequest实例之后就采用类似于java（awt）中的事件处理机制，如下代码：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);"> 1</span><img id="Codehighlighter1_20_338_Open_Image" onclick="this.style.display='none'; Codehighlighter1_20_338_Open_Text.style.display='none'; Codehighlighter1_20_338_Closed_Image.style.display='inline'; Codehighlighter1_20_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_20_338_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_20_338_Closed_Text.style.display='none'; Codehighlighter1_20_338_Open_Image.style.display='inline'; Codehighlighter1_20_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 0);">function myFunction()</span><span id="Codehighlighter1_20_338_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_20_338_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 2</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 获取一个XMLHttpRequest实例</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    var req </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> createXMLHttpRequest();<br /></span><span style="color: rgb(0, 128, 128);"> 4</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 设置用来从请求对象接收回调通知的句柄函数</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    req.onreadystatechange </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">handlerFunction(req);<br /></span><span style="color: rgb(0, 128, 128);"> 6</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> HTTP POST联接,第三个参数表示请求是异步的</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 7</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    req.open(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">POST</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">handleRequest.action</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);"> 8</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 指示请求体包含form数据</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    req.setRequestHeader(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">Content-Type</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">application/x-www-form-urlencoded</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">10</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    req.send(</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">);<br /></span><span style="color: rgb(0, 128, 128);">11</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>其中req.onreadystatechange引用的类似C++中的函数的指针，即handlerFunction，其代码如下：<br /><div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);"> 1</span><img id="Codehighlighter1_29_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_219_Open_Text.style.display='none'; Codehighlighter1_29_219_Closed_Image.style.display='inline'; Codehighlighter1_29_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_29_219_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_29_219_Closed_Text.style.display='none'; Codehighlighter1_29_219_Open_Image.style.display='inline'; Codehighlighter1_29_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: rgb(0, 0, 0);">function handlerFunction(req)</span><span id="Codehighlighter1_29_219_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_29_219_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 2</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 如果请求的状态是“完成”</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 3</span><span style="color: rgb(0, 128, 0);"><img id="Codehighlighter1_73_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_217_Open_Text.style.display='none'; Codehighlighter1_73_217_Closed_Image.style.display='inline'; Codehighlighter1_73_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_73_217_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_73_217_Closed_Text.style.display='none'; Codehighlighter1_73_217_Open_Image.style.display='inline'; Codehighlighter1_73_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">    </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (req.readyState </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">4</span><span style="color: rgb(0, 0, 0);">)</span><span id="Codehighlighter1_73_217_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_73_217_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 4</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 检查是否成功接收了服务器响应</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 5</span><span style="color: rgb(0, 128, 0);"><img id="Codehighlighter1_119_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_119_149_Open_Text.style.display='none'; Codehighlighter1_119_149_Closed_Image.style.display='inline'; Codehighlighter1_119_149_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_119_149_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_119_149_Closed_Text.style.display='none'; Codehighlighter1_119_149_Open_Image.style.display='inline'; Codehighlighter1_119_149_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (req.status </span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">200</span><span style="color: rgb(0, 0, 0);">)</span><span id="Codehighlighter1_119_149_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_119_149_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);"> 6</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 处理事件,这里省略</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 7</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">            <img src="http://www.blogjava.net/images/dot.gif" /><img src="http://www.blogjava.net/images/dot.gif" /><br /></span><span style="color: rgb(0, 128, 128);"> 8</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);"> 9</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_157_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_157_214_Open_Text.style.display='none'; Codehighlighter1_157_214_Closed_Image.style.display='inline'; Codehighlighter1_157_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_157_214_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_157_214_Closed_Text.style.display='none'; Codehighlighter1_157_214_Open_Image.style.display='inline'; Codehighlighter1_157_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: rgb(0, 0, 255);">else</span><span id="Codehighlighter1_157_214_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_157_214_Open_Text"><span style="color: rgb(0, 0, 0);">{<br /></span><span style="color: rgb(0, 128, 128);">10</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> 有HTTP问题发生</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 128, 128);">11</span><span style="color: rgb(0, 128, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: rgb(0, 0, 0);">            alert(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">HTTP error: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">req.status);<br /></span><span style="color: rgb(0, 128, 128);">12</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">13</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 128, 128);">14</span><span style="color: rgb(0, 0, 0);"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>与页面的交互，可能是这样的一个事实，用户点击某个按钮，激发myFunction方法的执行，此方法将创造一个XMLHttpRequet实例，并将处理事件的机制委托给onreadystatechange所指定的方法（本文中即为：handlerFunction）监听,handlerFunction将判断传进来的XMLHttpRequet实例的运行状态，对应其状态实现相应的业务逻辑。<br />　　上面没有列出ajax的xml通信机制，这里简要的说明一下：<br />　　发信：通过串的连接构造出一个满足xml格式的字符串，如String s="&lt;project&gt;&lt;person&gt;&lt;name&gt;"+"passyt"+"&lt;\/name&gt;&lt;\/person&gt;&lt;\/project&gt;";然后通过XMLHttpRequet实例req的send传送到服务器端，如req.send(s);<br />        收信：通过req.responseXML得到所谓的Dom实例然后按照标准的文档对象模型的方法取值显示到页面。<br />   　说明：在发信中，xml消息的构成通过字符串的连接完成，很容易因为笔误而产生错误，«ajax基础教程»一书给出了另一种基于简单通信的消息格式json，网上有其免费的版本和详细说明，这里不再敷言。<br />　　服务器端获取xml的信息格式后做相关的业务处理，然后生成xml消息返回给客户端，客户端利用javascript中的dom支持访问所在的xhtml，进行页面的局部刷新。这里的服务器端技术可以是java,php或者是.net，总之只要是支持xml通信机制的服务器技术都可以。<br />　　利用ajax技术可以创造出类似桌面软件的web页面，显得与众不同，因而显得特别酷，又加之google的推广以及几个大型网站的宣传，ajax就作为一种“新瓶装老酒”的“新技术”出现在我们的生活中，并激起了所谓的web2.0热潮。但显而易见的是，ajax的编码量很可能大大的超出了其他的页面表现技术，而作为一种弱类型语言无法得到对应的自动代码产生工具，对于我们程序员而言是极其痛苦的，另外它也带来了很大的安全隐患，因为其代码可见性，使得编写页面的javascript脚本将对程序员做出更高的要求。<br />　　但是，好的是，现在已经有越来越多的ajax框架来减少javascript对浏览器的依赖以及提高ajax的开发效率。«ajax基础教程»一书就给出了一个框架，因为我没有接触过所以也就没有很深的认识，等研究之后再做点评吧．<br /><br /><br />　　<font color="#008000" size="2">我自己始终觉得，ajax技术作为一种边缘技术（页面程序员和服务器程序员都将使用的技术），处于一种很尴尬的地位，但愿我们的框架能平衡好这种带来很好视觉感受的新的开发技术！</font><img src ="http://www.blogjava.net/passyt/aggbug/47826.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-05-24 15:01 <a href="http://www.blogjava.net/passyt/archive/2006/05/24/47826.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SpringAOP+SpringIoc+hibernate3+SpringMVC构建步骤</title><link>http://www.blogjava.net/passyt/archive/2006/04/01/38657.html</link><dc:creator>与笑凌</dc:creator><author>与笑凌</author><pubDate>Sat, 01 Apr 2006 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/passyt/archive/2006/04/01/38657.html</guid><wfw:comment>http://www.blogjava.net/passyt/comments/38657.html</wfw:comment><comments>http://www.blogjava.net/passyt/archive/2006/04/01/38657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/passyt/comments/commentRss/38657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/passyt/services/trackbacks/38657.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第一步：配置web.xml:																																				 1								&lt;?				xml version="1.0" encoding="GBK"				?&gt;																		 2																		&lt;!				DOC...&nbsp;&nbsp;<a href='http://www.blogjava.net/passyt/archive/2006/04/01/38657.html'>阅读全文</a><img src ="http://www.blogjava.net/passyt/aggbug/38657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/passyt/" target="_blank">与笑凌</a> 2006-04-01 22:52 <a href="http://www.blogjava.net/passyt/archive/2006/04/01/38657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>