﻿<?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-Java WebSide User Group</title><link>http://webside.blogjava.net/</link><description>专注于Java  openSource，
分享JavaEE 技术在企业开发中的经验和教训。</description><language>zh-cn</language><lastBuildDate>Thu, 28 Aug 2008 01:40:19 GMT</lastBuildDate><pubDate>Thu, 28 Aug 2008 01:40:19 GMT</pubDate><ttl>60</ttl><item><title>初探淘宝开放平台(TOP)</title><link>http://www.blogjava.net/steady/archive/2008/08/08/220825.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Fri, 08 Aug 2008 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/08/08/220825.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/steady/archive/2008/08/08/220825.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/220825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-08-08 09:31 <a href="http://www.blogjava.net/steady/archive/2008/08/08/220825.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 的安全防护，用 fail2ban 自动封IP</title><link>http://www.blogjava.net/steady/archive/2008/08/02/219626.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Sat, 02 Aug 2008 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/08/02/219626.html</guid><description><![CDATA[<p><span style="font-size: 10pt"><a title="Permanent Link to Linux 的安全防护，用 fail2ban 自动封IP" href="http://agilejava.org/blog/?p=82" rel="bookmark">Linux 的安全防护，用 fail2ban 自动封IP</a><br />
<br />
　　总以为 Linux 比较安全，被攻击的概率较低，不过我用了非常简单的 root 账户密码 (password)，家里的机子两次刚挂上网没半天就被人给改了密码，很是郁闷，不过两次的原因都很简单，挂上网后就开始遭遇不断的试密码，因为密码过于简单，很快就被攻破了，想想看，这也不是个事，密码就算比较复杂，天天也还是会被人试密码，心里总是不爽，找找看有没有什么输错几次密码就自动禁止 IP 的工具。这不，还真找到了个叫 fail2ban 的小工具，通过分析日志来自动 ban 入侵者的 IP，话不多说，装上去用用。</span></p>
<p><span style="font-size: 10pt">　　下载地址在：</span><a href="http://fail2ban.sourceforge.net/rpms/" mce_href="http://fail2ban.sourceforge.net/rpms/"><span style="font-size: 10pt">http://fail2ban.sourceforge.net/rpms/</span></a></p>
<p><span style="font-size: 10pt">　　找到最新版本的&nbsp; rpm 包来安装，装好后，稍微根据自己的情况改一下配置就可以使用了。</span></p>
<p><strong><span style="font-size: 10pt">vi /etc/fail2ban.conf</span></strong></p>
<p><span style="font-size: 10pt">#以 daemon 方式启动 fail2ban<br />
background = true</span></p>
<p><span style="font-size: 10pt">#允许尝试次数<br />
maxfailures = 3</span></p>
<p><span style="font-size: 10pt">#触发 maxfailures 之後的封锁时间(秒); 设为 -1 表示永远封锁<br />
bantime = 3600</span></p>
<p><span style="font-size: 10pt">#以 findtime (秒) 时间内的错误记录作为 maxfailures 的计数基准<br />
findtime = 600</span></p>
<p><span style="font-size: 10pt">#排除 IP 范围, 以空白隔开<br />
ignoreip = 127.0.0.1 192.168.0.0/24</span></p>
<p><span style="font-size: 10pt">#不启用 mail 通知<br />
[MAIL]</span></p>
<p><span style="font-size: 10pt">enabled = false</span></p>
<p><span style="font-size: 10pt">#修改自 VSFTPD, 未提及的部份保持原设定<br />
[PROFTPD]</span></p>
<p><span style="font-size: 10pt">enabled = true<br />
logfile = /var/log/proftpd/proftpd.log<br />
failregex = no such user|Incorrect password</span></p>
<p><span style="font-size: 10pt">#未提及的部份保持原设定<br />
[SSH]</span></p>
<p><span style="font-size: 10pt">enabled = true<br />
logfile = /var/log/secure</span></p>
<p><strong><span style="font-size: 10pt">service fail2ban start</span></strong></p>
<p><span style="font-size: 10pt">这个服务启动以后，每天都能在 /var/log/fail2ban.log 中看到有攻击的肉鸡被 ban 了。</span></p>
<p><span style="font-size: 10pt">2008-08-01 09:13:33,532 WARNING: SSH: Ban (3600 s) 205.189.197.66<br />
2008-08-01 12:24:41,943 WARNING: SSH: Ban (3600 s) 121.52.209.5</span></p>
<img src ="http://webside.blogjava.net/aggbug/219626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-08-02 22:08 <a href="http://www.blogjava.net/steady/archive/2008/08/02/219626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>淘宝后台改版了</title><link>http://www.blogjava.net/steady/archive/2008/06/11/207239.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Wed, 11 Jun 2008 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/06/11/207239.html</guid><description><![CDATA[　　周末的时候，淘宝对后台又做出了一次较大的升级，主要是在用户体验方面的调整，其实淘宝今年以来，基本上每个月都会有这方面的调整，也说明了淘宝用户体验部门的成果了。 <br />
　　第一次让我觉得有用的改动就是对收藏的调整，不用出现登录页面了，用一个弹出层解决了这些问题。前不久对评价的改动，让用户做出好评不需要点这么多按钮了。 <br />
　　这次改动我感觉是对我买到或者卖出的东西等一系列功能做出调整，比如说可以直接在列表里面关闭项目了，也是一个弹出层解决的问题。同时，也让页面更加简洁清爽，当然同时也会伴随用户的不适应。 <br />
　　其实我们更喜欢简单易用的系统，每次操作要输入很多或点很多都是很折磨人的，毕竟上网应该是简单，轻松的。Web 发展到现在，单纯的页面跳转与刷新越来越不流行了，Ajax 的真正价值开始被越来越多的网站开发团队理解与运用。
<img src ="http://webside.blogjava.net/aggbug/207239.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-06-11 23:09 <a href="http://www.blogjava.net/steady/archive/2008/06/11/207239.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初读《The Art of Project Managerment》</title><link>http://www.blogjava.net/steady/archive/2008/05/26/202909.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Mon, 26 May 2008 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/05/26/202909.html</guid><description><![CDATA[<span style="font-size: 10pt">今天在看荣登 Jolt 大奖的 The Art of Project Management，其中最让我深有感触的是这样一段话：<br />
<strong><wbr>The simpler your view of what you do, the more power and focus you will have in doing it</strong><wbr>. If we can periodically maintain a simple view of our work, we can find useful comparisons to other ways to make things that exist all around us. There will be more examples and lessons from history and modern industries that can be pulled from, compared with, and contrasted against. This is similar to the concept defined by the Japanese word shoshin, which means <font style="line-height: 1.3em" color="#ff0000">beginner's mind, or open mind</font><wbr>, an essential part of many martial arts disciplines. <font style="line-height: 1.3em" color="#ff0000">Staying curious and open is what makes growth possible, and it requires practice to maintain that mindset.</font><wbr> To keep learning, we have to avoid the temptation to slide into narrow, safe views of what we do.<br />
<br />
确实，最近已经很久没有太多兴趣去学习新的东西了，包括曾经非常有兴趣的 ruby，真想回到当年刚毕业的时候，用那样的热情，精神去学习。或许今天算是一个起点吧，毕竟很久很久没有做下来，好好的看一本书，好好的想着作者要告诉你的东西。<br />
<br />
给自己开了个书单，好好努力，用 beginner's mind 去感受世界，感受前人的智慧。<img id="paperPicArea1" style="display: none; position: relative" src="http://imgcache.qq.com/ac/qzone_v4/b.gif"  alt="" /></span>
<img src ="http://webside.blogjava.net/aggbug/202909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-05-26 14:27 <a href="http://www.blogjava.net/steady/archive/2008/05/26/202909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是 Enterprise Service Bus</title><link>http://www.blogjava.net/steady/archive/2008/05/26/202908.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Mon, 26 May 2008 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/05/26/202908.html</guid><description><![CDATA[<span style="font-size: 10pt">什么是 ESB(Enterprise Service Bus)? <br />
对于这个问题，长期没有搞清楚，就连我自己也很难说清楚这到底这是个什么样的概念，我引经据典来大致的描述一下这个概念。 <br />
<br />
第一个定义来自于：O'Reilly 的 《Enterprise Service Bus》 <br />
<br />
The ESB concept is a new approach to integration that can provide the underpinnings for a loosely coupled, highly distributed integration network that can scale beyond the limits of a hub-and-spoke EAI broker. An ESB is a standards-based integration platform that <u><wbr>combines</u><wbr> <strong><wbr>messaging</strong><wbr>, <strong><wbr>web services</strong><wbr>, <strong><wbr>data transformation</strong><wbr>, and <strong><wbr>intelligent routing to reliably connect</strong><wbr> and <strong><wbr>coordinate the interaction of significant numbers of diverse applications across extended enterprises </strong><wbr><strong><wbr>with transactional integrity</strong><wbr>. <br />
<br />
An extended enterprise represents an organization and its business partners, which are separated by both business boundaries and physical boundaries. In an extended enterprise, even the applications that are under the control of a single corporation may be separated by geographic dispersion, corporate firewalls, and interdepartmental security policies. <br />
<br />
另外一个定义来自于：<a onclick="showLinkBubble(this);return false" href="http://en.wikipedia.org/wiki/Enterprise_Service_Bus" target="_blank" link="http://en.wikipedia.org/wiki/Enterprise_Service_Bus">维基百科的ESB定义</a><wbr> <br />
它是面向服务架构的实现。 <br />
它通常是操作系统和编程语言无关的；<br />
它应能在Java和.Net应用程序之间工作。 <br />
它使用XML（可扩展标识语言）作为标准通信语言。 <br />
它支持Web服务标准。 <br />
它支持消息传递（同步、异步、点对点、发布-订阅）。 <br />
它包含基于标准的适配器（如J2C/JCA），用于集成传统系统。 <br />
它包含对服务编制（orchestration）和编排（choreography）的支持。 <br />
它包含智能、基于内容的路由服务（itenerary路由）。 <br />
它包含标准安全模型，用于ESB的认证、授权和审计。 <br />
它包含转换服务（通常是使用XSLT），在发送应用和接收应用之间转换格式，简化数据格式和值的转换。 <br />
它包含基于模式（schema）的验证，用于发送和接收消息。 <br />
它可以统一应用业务规则，充实其它来源的消息，分拆和组合多个消息，以及处理异常。 <br />
它可以条件路由，或基于非集中策略的消息转换，即不需要集中规则引擎。 <br />
它可监视不同SLA（服务级别合约）的消息响应门限，以及在SLA中定义的其它特性。 <br />
它（常常）简化&#8220;服务类别&#8221;，向更高或更低优先级用户做出适当的响应。 <br />
它支持队列，在应用临时不可用时用来保存消息。 <br />
它由（地理）分布式环境中的选择性部署应用适配器组成。 <br />
<br />
总的来说，ESB 提供了跨平台，跨部门，跨应用系统的服务整合的基础平台，就我们目前对项目的理解，我们或许还没有达到这个 level，我们提供的应该是个办公应用平台，除非我们确实会进行跨部门，跨业务的服务整合，那样我们真的是在做 SOA 了，那就有的折腾了。 <br />
<br />
不多说了，进入下一个主题 OSGi。<img id="paperPicArea1" style="display: none; position: relative" src="http://imgcache.qq.com/ac/qzone_v4/b.gif"  alt="" /></span>
<img src ="http://webside.blogjava.net/aggbug/202908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-05-26 14:26 <a href="http://www.blogjava.net/steady/archive/2008/05/26/202908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Flex 3.0 和 Adobe AIR 1.0 released</title><link>http://www.blogjava.net/steady/archive/2008/02/26/182122.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Tue, 26 Feb 2008 00:56:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/02/26/182122.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/steady/archive/2008/02/26/182122.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/182122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-02-26 08:56 <a href="http://www.blogjava.net/steady/archive/2008/02/26/182122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈阿里软件网店版</title><link>http://www.blogjava.net/steady/archive/2008/02/21/181091.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Thu, 21 Feb 2008 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/02/21/181091.html</guid><description><![CDATA[<p><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 10pt">绑定在淘宝上的 SaaS 的阿里软件网店版，应该还是会有一些高级卖家愿意每天花一块钱用的，里面确实提供了一些比较有用的功能，当然不足的地方也是非常的多。</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 10pt">先说好的吧：首先，E客服就是比较有意思的东西，解决了很多客服平台的问题，过去我们为两个项目做的在线客服，跟它比起来，还是有差距的。平常店里可以同时有几个人一起打理，而且不会出现一个旺旺多个人使用的情况，它用的是子帐号的概念，各人独立一块，互不干涉。还是很不错的东西。</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 10pt">打印快递单应该也是个比较有意思的功能，如果货物量大的话，这个功能绝对是不可少的，大大减小了人力成本。不过估计我现在还是用不上的。</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 10pt">商品定时上架是个很好的功能，就是针对淘宝设计的功能，如果熟悉淘宝搜索结果规则的人，会很好的去利用这个规则，让自己的货物在最佳浏览时间出现在搜索靠前的位置。而定时上架就很好的解决了这个问题，如果有效利用的话，绝对会让你的商品卖的更好的。</span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-size: 10pt"><span style="font-size: 10pt">在说一些不好的吧：首页有个统计最热卖的东西，但是没有找到热卖产品的排名，这个东西应该是挺有用的吧，不过似乎没有提供。查看报表里面，经常会刷不出图片，估计是 IE 的 Cache 原因，不再重新加载图片了。进销存这个东西没有和销售报告结合起来，应该算是一个缺憾了，希望下一个版本能有更多的东西。不过，不知道下个版本要到哪年，上个版本似乎已经发布半年了。</span></span></span></p>
<span style="font-size: 10pt"><span style="font-size: 10pt">From:</span><a title="Permanent Link to 谈谈阿里软件网店版" href="http://4think.cn/blog/index.php/archives/43" rel="bookmark"><span style="font-size: 10pt">谈谈阿里软件网店版</span></a></span>
<img src ="http://webside.blogjava.net/aggbug/181091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-02-21 16:46 <a href="http://www.blogjava.net/steady/archive/2008/02/21/181091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery in Action 电子书下载</title><link>http://www.blogjava.net/steady/articles/178620.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Thu, 31 Jan 2008 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/steady/articles/178620.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大家赶快下，被管理员看到了就不再首页了&nbsp;&nbsp;<a href='http://www.blogjava.net/steady/articles/178620.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/178620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-31 09:47 <a href="http://www.blogjava.net/steady/articles/178620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对开发人员不友好的卡巴斯基</title><link>http://www.blogjava.net/steady/archive/2008/01/29/178308.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Tue, 29 Jan 2008 02:18:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/01/29/178308.html</guid><description><![CDATA[<p><span style="font-size: 10pt">卡巴斯基这个俄国人做的杀毒软件呢，一直比较彪悍，经常见到什么东西都一阵嘶吼，然后你正常使用的软件也就挂了，QQ啊，这样的主流应用也是经常在它的误杀范围内。</span></p>
<p><span style="font-size: 10pt">&nbsp;对于开发人员来说，因为卡巴斯基更是会有诸多不爽的问题，下面列举一二，是我的惨痛教训，也和大家分享一下。</span></p>
<ol>
    <li><span style="font-size: 10pt">SVN 问题：如果你使用 SVN 做配置管理的话，有时候 check in 代码会半天没有反应，如果这时候你把卡巴禁用，就一切正常了。</span></li>
    <li><span style="font-size: 10pt">IntelliJ IDEA 端口冲突问题：用 IDEA 启动 Tomcat 时，使用了 8080 或者 80 端口，经常会启动就报端口冲突，而端口绝对是没有被其他应用程序占用的，而在独立的 Tomcat 下运行没有出现这样的问题，把卡巴对这些端口的监控关闭就一切正常。</span></li>
</ol>
<p><span style="font-size: 10pt">这两个问题都是比较郁闷的，卡巴斯基很强悍，却总是让人很无奈。</span></p>
<span style="font-size: 10pt">From:<a title="Permanent Link to 对开发人员不友好的卡巴斯基" href="http://4think.cn/blog/index.php/archives/31" rel="bookmark">对开发人员不友好的卡巴斯基</a></span>
 <img src ="http://webside.blogjava.net/aggbug/178308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-29 10:18 <a href="http://www.blogjava.net/steady/archive/2008/01/29/178308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>聊聊 Jolt Awards 2008</title><link>http://www.blogjava.net/steady/archive/2008/01/12/174905.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Sat, 12 Jan 2008 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/01/12/174905.html</guid><description><![CDATA[<p>Jolt Awards 是软件界的盛宴，被誉为软件界的奥斯卡，每年的 Jolt 中，能够看出软件开发领域的发展和未来的趋势，让我们来关注一下今年的大奖得主吧。&nbsp;</p>
<p>上周 Summer 推荐 Beautiful Code 的时候，也顺便找到了今年的 <a href="http://www.joltawards.com/finalists.html">Jolt Awards Finalists</a>，接着榜单，闲聊一下。</p>
<table cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td bgcolor="#999999" colspan="3"><span class="cathead">General Books</span></td>
        </tr>
        <tr>
            <td valign="top" rowspan="6">&nbsp;</td>
            <td valign="top"><em>Beautiful Code</em> Edited by Andy Oram and Greg Wilson</td>
            <td valign="top">O&#8217;Reilly</td>
        </tr>
        <tr>
            <td valign="top"><em>Geekonomics: The Real Cost of Insecure Software</em> by David Rice</td>
            <td valign="top">Addison-Wesley Professional</td>
        </tr>
        <tr>
            <td valign="top"><em>Manage It!: Your Guide to Modern Pragmatic Project Management</em> by Johanna Rothman</td>
            <td valign="top">Pragmatic Bookshelf</td>
        </tr>
        <tr>
            <td valign="top"><em>Myths of Innovation</em> by Scott Berkun</td>
            <td valign="top">O&#8217;Reilly</td>
        </tr>
        <tr>
            <td valign="top"><em>Outside In Software Development</em> by Carl Kessler and John Sweitzer</td>
            <td valign="top">IBM Press</td>
        </tr>
        <tr>
            <td valign="top"><em>Release It!: Design and Deploy Production-Ready Software</em> by Michael T. Nygard</td>
            <td valign="top">Pragmatic Bookshelf</td>
        </tr>
        <tr>
            <td bgcolor="#999999" colspan="3"><span class="cathead">Technical Books</span></td>
        </tr>
        <tr>
            <td valign="top" rowspan="6">&nbsp;</td>
            <td valign="top"><em>Continuous Integration: Improving Software Quality and Reducing Risk</em> By Paul Duvall, Steve Matyas, Andrew Glover</td>
            <td valign="top">Addison-Wesley Professional</td>
        </tr>
        <tr>
            <td valign="top"><em>Fuzzing: Brute Force Vulnerability Discovery</em> By Michael Sutton, Adam Greene, Pedram Amini</td>
            <td valign="top">Addison-Wesley Professional</td>
        </tr>
        <tr>
            <td valign="top"><em>Head First SQL Your Brain on SQL—A Learner&#8217;s Guide</em> by Lynn Beighley</td>
            <td valign="top">O&#8217;Reilly</td>
        </tr>
        <tr>
            <td valign="top"><em>The Rails Way</em> by Obie Fernandez</td>
            <td valign="top">Addison-Wesley Professional</td>
        </tr>
        <tr>
            <td valign="top"><em>WPF Unleashed</em> by Adam Nathan</td>
            <td valign="top">Sams Publishing</td>
        </tr>
        <tr>
            <td valign="top"><em>xUnit Test Patterns: Refactoring Test Code</em> by Gerard Meszaros</td>
            <td valign="top">Addison-Wesley Professional</td>
        </tr>
    </tbody>
</table>
<p>图书方面，看上去几乎是被 O&#8217;Reilly&nbsp;和 Addison-Wesley 给垄断了，Pragmatic Bookshelf&nbsp; 也在其中占有了一席之地。图书中，最大的赢家应该是，Beautiful Code，我在国内某家被我批评过的IT书店上看到了挂上了期数的预告，名字叫《代码之美》，似乎有抄袭《数学之美》的嫌疑，第一次看到这么多作者一起写出来这么好的书，33 章的书，就包括了 33 个来自于不同领域的作者，共同创造了如此完美的代码，在 O&#8217;Reilly&nbsp;的牵线搭桥下，造就了 Beautiful Code，如果有机会，我希望能由东南大学出版社出版这本书的英文影印版，让我们细细的品味。</p>
<p>Head First 的新书 <em>Head First SQL Your Brain on SQL</em> 也登上了 Jolt 的舞台，之前 Head First Design Pattern 和 Head First OOAD 是如此通俗的把面向对象的两个经典内容：设计模式和面向对象的分析与设计，聊家常一般的摆在我们的面前，精妙的内容组织，浅显易懂的语言，就连我们这些非常怕看英语的人看起来都毫不费力，不愧为大师级的功力。而这本新书料想也会给 SQL 的新手带来一种全新的体验吧。</p>
<p>Pragmatic Bookshelf 这个书系自从《Pragmatic&nbsp; Programmer》 开始，就不断的扩大其影响。从程序员修炼三部曲中，告诉了我们版本控制，单元测试，持续集成这三个开发者的基本工具。随后的 Pragmatic&nbsp; Ajax 把 Ajax 推到了大家的面前。当 Ruby on Rails 开始流行的时候，Programming Ruby 和 Agile Web Development with Rails 都在一版二版的洗礼中不断的升华，已经成为 RoR 开发的经典之作。这次的 XX It 系列又从软件项目管理角度来 Pragmatic 。我似乎看到过 Ship It 还有 Deploy It 这两本，或许也是这个系列里的吧。</p>
<p>The Rails Way 我一开始当成了 The Ruby Way，其实后者的风格我比较喜欢了，于是又套用了它的名号来了个 The Rails Way，虽然现在还没有拿到，我想这本书会给我们一些新意的。</p>
<table cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td bgcolor="#999999" colspan="3"><span class="cathead">Development Environments</span></td>
        </tr>
        <tr>
            <td valign="top" rowspan="6">&nbsp;</td>
            <td valign="top">Alpha Five version 8</td>
            <td valign="top">Alpha Software Inc.</td>
        </tr>
        <tr>
            <td valign="top">CodeRush/Refactor! Pro</td>
            <td valign="top">Developer Express Inc.</td>
        </tr>
        <tr>
            <td valign="top">IntelliJ IDEA</td>
            <td valign="top">JetBrains</td>
        </tr>
        <tr>
            <td valign="top">Komodo IDE 4</td>
            <td valign="top">ActiveState</td>
        </tr>
        <tr>
            <td valign="top">NetBeans IDE 6</td>
            <td valign="top">Sun Microsystems</td>
        </tr>
        <tr>
            <td valign="top">QNX Momentics IDE 4</td>
            <td valign="top">QNX Software Systems</td>
        </tr>
    </tbody>
</table>
<table cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td bgcolor="#999999" colspan="3"><span class="cathead">Web Development Tools</span></td>
        </tr>
        <tr>
            <td valign="top" rowspan="6">&nbsp;</td>
            <td valign="top">3rdRail</td>
            <td valign="top">CodeGear</td>
        </tr>
        <tr>
            <td valign="top">Adobe ColdFusion 8</td>
            <td valign="top">Adobe Systems, Inc.</td>
        </tr>
        <tr>
            <td valign="top">Appcelerator Platform</td>
            <td valign="top">Appcelerator, Inc.</td>
        </tr>
        <tr>
            <td valign="top">IntelliJ IDEA</td>
            <td valign="top">JetBrains</td>
        </tr>
        <tr>
            <td valign="top">NetBeans IDE</td>
            <td valign="top">Sun Microsystems</td>
        </tr>
        <tr>
            <td valign="top">RSSBus</td>
            <td valign="top">/n software</td>
        </tr>
    </tbody>
</table>
<p>开发工具大奖上已经看不到了 Eclipse 的身影，而 IDEA 依然在榜单上活跃，而我也是一如既往的使用它，即便是在 Rails IDE 中，IDEA 凭借其 Rails 插件，加上它的基础，用起来还是相当的顺手，目前除了不能 Debug，我似乎没有其他不满的地方。</p>
<p>Netbeans IDE 在年末闪亮登场后，带来了一个更轻更小，更完整的开发工具包，而 Eclipse WTP 一个包动辄就是 2xxM，虽然功能很齐全，不过体积实在是有些过分了，并且没有一种 IDEA 的那种让人很爽的感觉。我没有用完整的 Netbeans 包，因为 Java Web 开发已经习惯了 IDEA + Eclipse 的组合，我只关注了一下 Ruby IDE，功能上来说，确实有其独到之处，不过在写代码上还不能达到非常流畅的速度。不过 Netbeans 在两年里就来了个咸鱼翻身，我们要说 Sun 很努力了。</p>
<table cellspacing="1" cellpadding="1" border="1">
    <tbody>
        <tr>
            <td bgcolor="#999999" colspan="3"><span class="cathead">Libraries/Frameworks</span></td>
        </tr>
        <tr>
            <td valign="top" rowspan="6">&nbsp;</td>
            <td valign="top">Eclipse Modeling Project</td>
            <td valign="top">Eclipse</td>
        </tr>
        <tr>
            <td valign="top">Guice</td>
            <td valign="top">Google Inc</td>
        </tr>
        <tr>
            <td valign="top">JasperReports</td>
            <td valign="top">JasperSoft</td>
        </tr>
        <tr>
            <td valign="top">Qt Jambi</td>
            <td valign="top">Trolltech</td>
        </tr>
        <tr>
            <td valign="top">Spring Framework</td>
            <td valign="top">SpringSource</td>
        </tr>
        <tr>
            <td valign="top">Zend Framework</td>
            <td valign="top">Zend Technologies</td>
        </tr>
    </tbody>
</table>
<p>在开发框架上最活跃的依然是 Java 平台，这和 Java 平台一直以来保持的很好的开源社区是分不开的。EMF，Guice，JasperReports，Spring Framework 这几个一直都是 Java 领域最热门的开源项目。</p>
<p>Google Guice 在 Google 的天才程序员 Bob Lee 的创意中诞生了，采用了一种全新的依赖注入的方式，将效率提高了传说中的 100 倍，虽然对这个数据我不是太在意，而在 Spring 如此成熟的进入 2.0 后，却有一个后辈小生提出了全新的思路，而 Spring 2.5 也接受了这样的思路，调整了一些依赖注入的策略，在性能上有了不小的提高。</p>
<p>经营着 Spring 的 interface21 为了凸显其 Spring 的品牌，改名为 SpringSource，并且推出了一本《Spring In Production White Paper》，希望能够在企业应用中占有更大的份额。</p>
<p>作为 PHP 的领头羊的 Zend 在 Rails 推出后再也按耐不住了，PHP 一定要有一套官方的 Framework，而且它的特性要很像 Rails，于是 Zend Framework 诞生了，这在几乎没有框架概念的 PHP 中注入了一种新的活力，Rails 不光激起了 Java 世界的广泛关注，在无数个类 Rails 框架后面，Zend 从 PHP 官方的角度接受了 Rails 的思想，改善 PHP 的开发。而 Java 世界里，Grails 也伴随这 Groovy 1.5 的推出，伴随着 Grails 的第三个 RC 版，即将走到 1.0 版本。Rails 带给了 Web 开发无穷的活力。</p>
<br />
<a href="http://4think.cn/blog/index.php/archives/28" rel="bookmark">聊聊 Jolt Awards 2008</a>
 <img src ="http://webside.blogjava.net/aggbug/174905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-12 22:23 <a href="http://www.blogjava.net/steady/archive/2008/01/12/174905.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Head First Design Pattern - 深入浅出设计模式 （中文版） 电子书下载</title><link>http://www.blogjava.net/steady/articles/172791.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Fri, 04 Jan 2008 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/steady/articles/172791.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大名鼎鼎的 Head First Design Pattern 中文版，虽然是扫描的，但是不妨碍大家看，强力推荐。&nbsp;&nbsp;<a href='http://www.blogjava.net/steady/articles/172791.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/172791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-04 17:04 <a href="http://www.blogjava.net/steady/articles/172791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一篇来自 Zoundry 发布工具的文章</title><link>http://www.blogjava.net/steady/archive/2008/01/04/172783.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Fri, 04 Jan 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/01/04/172783.html</guid><description><![CDATA[<p>　　第一次用 Zoundry 客户端工具来发布博客，WordPress 还是不错的博客了，提供了 XML-RPC 方式的远程提交接口，我们可以比较容易的把我们的博客发布到 WordPress 上。</p>
<p>　　老外对这方面的支持工作还是做的不错的，国内的同类系统往往只考虑到功能，好一点的考虑到性能，而在这些新技术带来的扩展性的增强上似乎没有太多的理解，虽然 WordPress 在功能上和国内的很多博客有一定的差距，但是人家支持插件，这样就可以让地球人都上来扩展一把。Eclipse 的插件风风火火的做了几年，现在人似乎没有不用插件开发的了。</p>
<p>　　老外在 Web 2.0 中又很多好的思想，技术，拿到国内来就有点变味了，虽说国人在 Web 2.0 技术上跟进的速度还是相当的快，不过思想还是又相当的差距的。</p>
<p>　　要好好学学人家做东西的思想，而不仅仅是技术。</p>
 <img src ="http://webside.blogjava.net/aggbug/172783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-04 16:42 <a href="http://www.blogjava.net/steady/archive/2008/01/04/172783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>闲扯IM工具</title><link>http://www.blogjava.net/steady/archive/2008/01/02/172117.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Wed, 02 Jan 2008 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2008/01/02/172117.html</guid><description><![CDATA[<p><span style="font-size: 10pt"><span style="font-size: 10pt">该文章被发布在我的新博客中：</span><a href="http://4think.cn/blog/index.php/archives/25">http://4think.cn/blog/index.php/archives/25</a><br />
<br />
　　市面上这么多的IM工具，每次打开的时候就要开上一堆，还不时的有个新的IM工具出来，加上一两个及其有吸引力的功能，然后又不得不装上，搞的每次开机以后总是要开上一大堆的IM，比如QQ啦，MSN啦，还有Yahoo，Google Talk，飞信，Skype，真的挺麻烦的。</span></p>
<p><span style="font-size: 10pt">　　一年前的时候，突然听说 Yahoo 可以和 MSN 互通了，于是从此就没用过 MSN 了，也是对 Microsoft 歧视国内用户的一种不满吧，这么多IM工具，最不稳定的也最为常用的要属 MSN 了，虽然飞信这样&#8220;国&#8221;字号的软件似乎更加的不争气，就原谅他吧，谁叫他是咱最有钱的移动运营商呢。可以说，MSN 的掉线率是相当的高，登录速度也是惊人的，在公司内部传文字的效率呢更加不用说了，反正没有人走的快。不过据我们去过美国的一些同事说，MSN 在美国速度是非常快的，包括其下属的 hotmail，MSN Space，怪不得这么被推崇了，不过没办法，毕竟是在国内，属于不被重视的使用群体，大不了就不用了，于是机子里再也没有出现过 MSN，所有重要的好友都加到 Yahoo 里了。</span></p>
<p><span style="font-size: 10pt">　　其实说来 Yahoo 也是个比较不争气的东西，功能嘛，没啥强的，不过吃内存的能力还挺强，印象中也就 Skype 可以和他有的一拼，不过好歹人家 Yahoo 还是比较重视中文用户的，起码光缆断的时候还是能用的，而且相关的本地化服务也还是有一定的可用性的，Yahoo的邮件提示是最为迅速的，基本上是新邮件来到5秒之内就得让你知道，这个功能还是挺体贴用户的，其实我的一些 IM 的一个重要作用就是 check email，比如说 Google Talk。Yahoo 的客户端程序其实是比较不稳定的，群聊功能是个杀手，一次领导通知事情，让大家开个会，结果一位老兄图方便，Yahoo 把大家全部加进来了，大家的机器全部死翘翘，只好 reset 重启，自此以后，这个功能再也不敢使用了，Yahoo 工具箱里有个看股市行情的插件，不过这个曲线也太不本地化了，中午休息的时间也画在上面，一条长长的直线，怎看都别扭。没办法啊，公司里唯一允许的 IM 工具，不得不装，也就不得不去忍受这些了。</span></p>
<p><span style="font-size: 10pt">　　Google Talk 其实是我用的最多的，极为简洁，拥有我需要的主要功能，email 通知，语音，文本聊天，传文件（大家都喜欢装中文版的，没这个功能，所以也基本找不到人传文件），其实还有一点重要的就是所有聊天记录都会保存在 Gmail 里，在哪都不会丢失，也很连贯，这对于我们经常讨论需求的人就不会有上句没下句的了。也不用担心聊天记录留在本地泄密。另外还有一点，传代码的时候绝对不会变成一堆笑脸什么的。Google Talk 其实功能上是相当有限的，但是我却非常喜欢，简洁就是美了。</span></p>
<p><span style="font-size: 10pt">　　下面隆重出场的是唯利是图、忘恩负义外加极端不安全的 QQ 了，如果不是这么多好友在里面，我是不会开 QQ 的，当然 QQ 作为国内用的最多的 IM 工具（其实叫他聊天工具更确切），QQ 还是有相当多的优势的，首先网络稳定性好，传文件速度快，有远程协助功能，语音质量也不错，可以看 IP（还不都是珊瑚虫的功劳，被忘恩负义的腾讯扼杀了），有群聊功能，也是最适合某些夜晚不甘寂寞的人寻找刺激的工具了，其他的功能我是不大能想到的了，更不用说去用了，所以嘛，QQ 对我来说，太大了，太花哨了，对公司来说也是的，基本上正规的公司，没有哪个不封 QQ 的，所以嘛，QQ 只能被远远的拒之于企业应用的门外，腾讯的 RTX 也就不是那么容易进入企业市场的，谁让你这么花哨，看了就不想好好工作了。</span></p>
<p><span style="font-size: 10pt">　　Skype 这个东西嘛，对我用处不大，自从充值卡被封事件以后就不再常开了，开会的时候才会去用，毕竟多人语音聊天功能还是挺不错的。</span></p>
<p><span style="font-size: 10pt">　　国外的大部分 IM 工具都开放互通了，包括 MSN 和 Yahoo，Google Talk 也在和 MS 谈互通的问题，国内的 IM 互通嘛，似乎完全不可能，国外那几家都不是靠 IM 吃饭的，腾讯就不一样了，如果不保持其 QQ 的占有率，疯狂的扼杀非&#8220;官方&#8221;的客户端，LumaQQ 这么优秀的跨平台解决方案也就被腾讯自己和谐掉了，最近对珊瑚虫下狠手也表示其在此方面的决心，呵呵，我的 QQ 从此不升级了。</span></p><img src ="http://webside.blogjava.net/aggbug/172117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2008-01-02 11:27 <a href="http://www.blogjava.net/steady/archive/2008/01/02/172117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>高性能分页标签extremeTable的Limit设计架构思想剖析</title><link>http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Wed, 26 Dec 2007 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html</guid><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">这是一个目前最好的一个开源分页标签的实现</span>---extremeTable<span style="font-family: 宋体">标签。今天谈谈它的</span>Limit<span style="font-family: 宋体">的设计架构思想。</span></p>
<p><span style="font-family: 宋体">这个设计很通用，经过作者的多次重构，现在extremeTable的架构非常漂亮。这个标签现在缺点是有些参数对mvc控制器屏蔽了，应提供一致的对外接口。不过整体上设计还是很精致的，面向对象来处理 html元素，与spring非常的默契</span><span style="font-family: 宋体">，非常便于开发和测试。</span></p>
<h1><span style="font-family: 宋体">类图关系<br />
<img height="680" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/limit.png" width="776" border="0" /><br />
</span></h1>
<h1 style="margin-left: 18pt; text-indent: -18pt">1，&nbsp;<span style="font-family: 宋体">工厂</span>LimitFactory</h1>
<p>TableLimitFactory<span style="font-family: 宋体">，</span>AbstractLimitFactory<span style="font-family: 宋体">，</span>LimitFactory</p>
<p>TableLimitFactory<span style="font-family: 宋体">是最终实现的工厂，它</span>extends<span style="font-family: 宋体">了</span>AbstractLimitFactory<span style="font-family: 宋体">抽象类，</span>AbstractLimitFactory <span style="font-family: 宋体">类</span>implements<span style="font-family: 宋体">了</span>LimitFactory<span style="font-family: 宋体">接口。</span></p>
<p>TableLimitFactory<span style="font-family: 宋体">主要是用来实例化，通过构造函数传入参数。同时创建</span>Registry<span style="font-family: 宋体">来完成</span>jsp<span style="font-family: 宋体">页面参数传入</span>Registry<span style="font-family: 宋体">。当然还有一个功能就是从</span>web.xml<span style="font-family: 宋体">的配置文件读取一些全局参数。首先读取配置文件参数，然后根据参数创建</span>LimitRegistry<span style="font-family: 宋体">对象。</span></p>
<p>this.registry = new LimitRegistry(context, tableId, prefixWithTableId, state, stateAttr);</p>
<p>AbstractLimitFactory<span style="font-family: 宋体">主要是用来获取</span>jsp<span style="font-family: 宋体">页面上设置的参数，比如分页的信息（第几页，起始行，结束行，每页显示行数，查询条件，排序条件等），当然他是通过工具类</span>Registry<span style="font-family: 宋体">来实现。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">2，&nbsp;Limit</h1>
<p>TableLimit<span style="font-family: 宋体">，</span>Limit<span style="font-family: 宋体">。其主要作用是一个参数参数器，就是把</span>Registry<span style="font-family: 宋体">对象的参数传入</span>TableLimit<span style="font-family: 宋体">，考虑到分层吧，</span>TableLimit<span style="font-family: 宋体">是该标签和</span>action<span style="font-family: 宋体">通信的桥梁。就像我们的</span>j2ee<span style="font-family: 宋体">项目</span>vo<span style="font-family: 宋体">是</span>dao<span style="font-family: 宋体">和</span>struts<span style="font-family: 宋体">等</span>view<span style="font-family: 宋体">等数据传输工具。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">3，&nbsp;Preferences</h1>
<p>TableProperties<span style="font-family: 宋体">，</span>Properties <span style="font-family: 宋体">主要是来实现从</span>web.xml<span style="font-family: 宋体">配置的文件中读取配置的一些全局参数。</span></p>
<p>InputStream input = this.getClass().getResourceAsStream(preferencesLocation);</p>
<p>if (input != null) {</p>
<p style="text-indent: 15.75pt">properties.load(input);</p>
<p>}</p>
<p><span style="font-family: 宋体">其中</span>preferencesLocation<span style="font-family: 宋体">是路径，在</span>TableLimitFactory<span style="font-family: 宋体">初始化时候，</span><span style="font-family: 宋体">通过工具类</span>TableModelUtils.getPreferencesLocation(context)<span style="font-family: 宋体">获取。</span></p>
<p><span style="font-family: 宋体">这个设计也是大多数需要配置文件的系统常用的方法。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">4，&nbsp;Registry</h1>
<p>LimitRegistry<span style="font-family: 宋体">，</span>AbstractRegistry<span style="font-family: 宋体">，</span>Registry</p>
<p><span style="font-family: 宋体">这个体系结构和上面的工厂模式一样，就是</span>LimitRegistry<span style="font-family: 宋体">主要是用来实例化，通过构造函数传入参数。</span>AbstractRegistry<span style="font-family: 宋体">是实际实现类，获取</span>jsp<span style="font-family: 宋体">表单提交的参数，并提供</span>getter<span style="font-family: 宋体">方法供</span>Limit<span style="font-family: 宋体">来使用。</span>Registry<span style="font-family: 宋体">是一个接口。</span></p>
<p><span style="font-family: 宋体">所以这设计模式，我们可以来学习，</span></p>
<p><span style="font-family: 宋体">经典表述：<span style="color: red">类</span></span><span style="color: red">—</span><span style="color: red; font-family: 宋体">抽象类</span><span style="color: red">—</span><span style="color: red; font-family: 宋体">接口</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">类：初始化，定义构造函数，传入参数。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">抽象类：定义业务方法在此。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">接口：定义接口方法，这个不用多说。</span></p>
<p style="margin-left: 18pt; text-indent: -18pt">（作者：asktalk&nbsp;&nbsp; 来自&nbsp;<a href="http://www.blogjava.net/askltak">http://www.blogjava.net/askltak</a> 原创文章，转载请注明出处）</p>
<img src ="http://webside.blogjava.net/aggbug/170625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-26 16:17 <a href="http://www.blogjava.net/asktalk/archive/2007/12/26/170625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Web框架与Struts的区别</title><link>http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Mon, 24 Dec 2007 18:23:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html</guid><description><![CDATA[<p>&nbsp; </p>
<p><span style="font-family: 宋体">下面是从</span>struts<span style="font-family: 宋体">的角度来谈谈</span>spring<span style="font-family: 宋体">自带的</span>web<span style="font-family: 宋体">框架的使用。</span><span style="font-family: 宋体"><br />
当然，我们在配置</span>web<span style="font-family: 宋体">框架前，需要把</span>spring<span style="font-family: 宋体">配置好，这里就不多说了。</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">1.web<span style="font-family: 宋体">框架核心</span>servlet<span style="font-family: 宋体">在</span>web.xml<span style="font-family: 宋体">中的配置。<br />
</span></h1>
<p style="margin-left: 18pt; text-indent: 0cm"><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Dispatcher</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">contextConfigLocation</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">Config.xml</span><span style="color: #000000">&lt;/</span><span style="color: #000000">param</span><span style="color: #000000">-</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">init</span><span style="color: #000000">-</span><span style="color: #000000">param</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">Dispatcher</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;*</span><span style="color: #000000">.</span><span style="color: #0000ff">do</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">servlet</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p style="margin-left: 18pt; text-indent: 0cm">&nbsp;</p>
<p style="margin-left: 18pt; text-indent: 0cm"><span style="font-family: 宋体">如果没有配置</span>config.xml<span style="font-family: 宋体">文件，那么其默认的配置文件为</span>[ servlet-name ]-servlet.xml <span style="font-family: 宋体">。也就是我们这个配置的默认配置文件是</span>Dispatcher-servlet.xml</p>
<h1 style="margin-left: 18pt; text-indent: -18pt">2.web<span style="font-family: 宋体">框架的</span>xml<span style="font-family: 宋体">配置</span></h1>
<p>spring web<span style="font-family: 宋体">框架与</span>struts<span style="font-family: 宋体">最大的不同就是</span>spring web<span style="font-family: 宋体">框架根据分工，把每一种功能都定义为一种组件，所以在开发过程中需要配置的东西就非常多；</span>Spring<span style="font-family: 宋体">中分为几个角色：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">核心控制器，就是</span>web<span style="font-family: 宋体">框架的主</span> servlet<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">业务控制器，也就是</span>struts<span style="font-family: 宋体">中的</span>action<span style="font-family: 宋体">对象；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">映射处理器，定义了访问路径如何与</span>web<span style="font-family: 宋体">的</span>xml<span style="font-family: 宋体">中的</span>bean<span style="font-family: 宋体">相匹配，就是定义了一种策略；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">视图和视图解析器，视图就是</span>jstl,velocity,xslt<span style="font-family: 宋体">等，视图解析器定义了</span>action<span style="font-family: 宋体">最终导航页面的策略；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span><span style="font-family: 宋体">模型，就是</span>struts MVC<span style="font-family: 宋体">结构中的</span>model<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">l&nbsp;</span>Command<span style="font-family: 宋体">对象，类似于</span>struts<span style="font-family: 宋体">中的</span>formBean<span style="font-family: 宋体">；</span></p>
<h2>2.1 Spring web<span style="font-family: 宋体">框架与</span>struts<span style="font-family: 宋体">框架的区别</span></h2>
<p><span style="font-family: 宋体">下面列出了一些。例如，</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>Web<span style="font-family: 宋体">框架要拦截</span>*.do<span style="font-family: 宋体">路径，那么</span>*.do<span style="font-family: 宋体">如何与我们下面的</span>bean<span style="font-family: 宋体">匹配，就需要一个映射控制器。在</span>struts<span style="font-family: 宋体">中就是名字相同的匹配，不需要配置。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span>action<span style="font-family: 宋体">最后要导向到不同的页面，在</span>struts<span style="font-family: 宋体">中我们用的是默认的不需要在</span>xml<span style="font-family: 宋体">文件中配置，在</span>spring<span style="font-family: 宋体">中就需要配置视图解析器。</span></p>
<p style="margin-left: 21pt; text-indent: -21pt"><span style="font-family: Wingdings">n&nbsp;</span><span style="font-family: 宋体">下面代码中，</span>Action<span style="font-family: 宋体">中</span><span style="font-family: 'Courier New'">commandClass</span><span style="font-family: 宋体">配置的就是类似于</span><span style="font-family: 'Courier New'">struts</span><span style="font-family: 宋体">中的</span><span style="font-family: 'Courier New'">formBean</span><span style="font-family: 宋体">对象。<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;?</span><span style="color: #000000">xml&nbsp;version</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1.0</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;encoding</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!</span><span style="color: #000000">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-//SPRING//DTD&nbsp;BEAN//EN</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">Definition&nbsp;of&nbsp;View&nbsp;Resolver&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">viewResolver</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.web.servlet.view.InternalResourceViewResolver</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">viewClass</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">org.springframework.web.servlet.view.JstlView</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">prefix</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;/</span><span style="color: #000000">WEB</span><span style="color: #000000">-</span><span style="color: #000000">INF</span><span style="color: #000000">/</span><span style="color: #000000">view</span><span style="color: #000000">/&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">suffix</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">.jsp</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!</span><span style="color: #000000">—就是我们上面说的映射控制器&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">Request&nbsp;Mapping&nbsp;</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">urlMapping</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">org.springframework.web.servlet.handler.SimpleUrlHandlerMapping</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">mappings</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">prop&nbsp;key</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/login.do</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">LoginAction</span><span style="color: #000000">&lt;/</span><span style="color: #000000">prop</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">props</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;!---</span><span style="color: #000000">类似于struts的action配置</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;!---</span><span style="color: #000000">Action&nbsp;Definition</span><span style="color: #000000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">LoginAction</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.maxway.action.LoginAction</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">commandClass</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">com.maxway.action.LoginInfo</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">fail_view</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">loginfail</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">property&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">success_view</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000">main</span><span style="color: #000000">&lt;/</span><span style="color: #000000">value</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">property</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">bean</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">beans</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p style="margin-left: 21pt; text-indent: -21pt"><br />
</span></p>
<h1 style="margin-left: 18pt; text-indent: -18pt">&nbsp;</h1>
<h1 style="margin-left: 18pt; text-indent: -18pt">3.<span style="font-family: 宋体">代码的编写</span></h1>
<p style="margin-left: 18pt; text-indent: 0cm">Action<span style="font-family: 宋体">不外乎继承一些现成的类，来实现我们</span>view<span style="font-family: 宋体">部分的业务。<br />
<span style="font-family: 宋体">作者：<a href="http://www.blogjava.net/asktalk">http://www.blogjava.net/asktalk</a></span></span></p>
<img src ="http://webside.blogjava.net/aggbug/170198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-25 02:23 <a href="http://www.blogjava.net/asktalk/archive/2007/12/25/asktalk.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse启动机制（1）</title><link>http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Sat, 22 Dec 2007 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html</guid><description><![CDATA[&nbsp;
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">最近我一直在研究</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的架构体系，下面我们就来看看</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动机制吧</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">1</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">源代码</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
eclipse-sourceBuild-srcIncluded-3.3.1.1.zip&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt; font-family: 新宋体">版本：</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">3.3.1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt; font-family: 新宋体">大小：</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">95.058MB<br />
</span><span style="font-size: 10.5pt; font-family: 新宋体">下载地址：</span><a href="http://download.eclipse.org/eclipse/downloads"><span style="font-size: 10.5pt; color: windowtext; font-family: 'Arial','sans-serif'; text-decoration: none; text-underline: none">http://download.eclipse.org/eclipse/downloads</a></span></p>
<p style="background: white">解压后的目录结构如下图，通过执行build.bat可以编译出完整的Eclipse-sdk-3.3.1.1运行包，和我们网上下载的一样。但是这个过程可能需要一个小时左右的时间，要有耐性哦。所有的插件工程目录在plugins中，我们只需要导入现有工程即可把plugins下所有工程导入。<br />
<img height="567" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/eclipse1.jpg" width="446" border="0" /><br />
</p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">下面我们就先来研究一下</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">最核心的部分，就是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">RCP</span><span style="font-size: 10.5pt; font-family: 新宋体">部分必须的插件。下面我列出了</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse RCP</span><span style="font-size: 10.5pt; font-family: 新宋体">需要的插件。<br />
<img height="348" alt="" src="http://www.blogjava.net/images/blogjava_net/asktalk/eclipse.jpg" width="435" border="0" /><br />
</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">将这些代码解压缩到一个空目录里，然后导入到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Source&nbsp;Insight</span><span style="font-size: 10.5pt; font-family: 新宋体">的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Project</span><span style="font-size: 10.5pt; font-family: 新宋体">里。</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">二、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">启动过程</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">首先我们从</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动过程开始分析。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">1</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">exe</span><span style="font-size: 10.5pt; font-family: 新宋体">部分的引导</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse.exe</span><span style="font-size: 10.5pt; font-family: 新宋体">是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">的启动文件，是与平台相关的可执行文件。它的功能比较简单，主要是加载</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">文件，代码在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">源代码的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip</span><span style="font-size: 10.5pt; font-family: 新宋体">，对应多个平台。对于</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">win32</span><span style="font-size: 10.5pt; font-family: 新宋体">平台，你可以直接运行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">win32</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">build.bat</span><span style="font-size: 10.5pt; font-family: 新宋体">文件来编译得到它（需要安装</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">C</span><span style="font-size: 10.5pt; font-family: 新宋体">编译器）。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">2</span><span style="font-size: 10.5pt; font-family: 新宋体">、</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java</span><span style="font-size: 10.5pt; font-family: 新宋体">代码部分的执行入口</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">对于</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse 3.3.1.1</span><span style="font-size: 10.5pt; font-family: 新宋体">版本来说，如果在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下没有找到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">，则直接执行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher.Main.main</span><span style="font-size: 10.5pt; font-family: 新宋体">方法。</span></p>
<p style="background: white"><span style="font-size: 10.5pt; font-family: 新宋体">当然我们可以在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下定制我们自己的启动引导包</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">，现在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse 3.3.1.1</span><span style="font-size: 10.5pt; font-family: 新宋体">好像已经不建议这样做了。如果有这个包，那么这个包将是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java</span><span style="font-size: 10.5pt; font-family: 新宋体">代码的执行入口，你可以在命令行下运行</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">java -jar startup.jar</span><span style="font-size: 10.5pt; font-family: 新宋体">命令来启动</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-size: 10.5pt; font-family: 新宋体">。它的入口是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.core.launcher.Main</span><span style="font-size: 10.5pt; font-family: 新宋体">类，这个类最终执行的还是</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher.Main.main</span><span style="font-size: 10.5pt; font-family: 新宋体">方法。它对应的源代码在</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">org.eclipse.equinox.launcher</span><span style="font-size: 10.5pt; font-family: 新宋体">目录下的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">Main.java</span><span style="font-size: 10.5pt; font-family: 新宋体">。关于此文件的定制详细信息请查看</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse-sourceBuild-srcIncluded-3.3.1.1"plugins"org.eclipse.platform"launchersrc.zip</span><span style="font-size: 10.5pt; font-family: 新宋体">中的</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">eclipse.c</span><span style="font-size: 10.5pt; font-family: 新宋体">的注解部分。<br />
<br />
<span style="font-size: 10.5pt; font-family: 新宋体">我们从</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">main</span><span style="font-size: 10.5pt; font-family: 新宋体">函数往后跟踪，找到</span><span style="font-size: 10.5pt; font-family: 'Arial','sans-serif'">basicRun</span><span style="font-size: 10.5pt; font-family: 新宋体">方法，这个是启动的主要部分。</span><br />
</span></p>
<p style="background: white">
<table cellspacing="0" cellpadding="0" width="100%">
    <tbody>
        <tr>
            <td>
            <div>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">protected</span></strong><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">void</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> basicRun(String[] args) </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">throws</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> Exception {</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.<em>getProperties</em>().put(</span><span style="font-size: 9pt; color: #2a00ff; font-family: 'Arial','sans-serif'">"eclipse.startTime"</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">, Long.<em>toString</em>(System.<em>currentTimeMillis</em>())); </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//$NON-NLS-1$</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">commands</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> = args;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] passThruArgs = processCommandLine(args);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">if</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> (!</span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">debug</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// debug can be specified as system property as well</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">debug</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> = System.<em>getProperty</em>(</span><em><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">PROP_DEBUG</span></em><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">) != </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">null</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setupVMProperties();&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">设置</span><span style="font-family: 'Arial','sans-serif'">VM</span><span style="font-family: 新宋体">属性</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processConfiguration();&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">读取</span><span style="font-family: 'Arial','sans-serif'">configuration/config.ini</span><span style="font-family: 新宋体">配置文件</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// need to ensure that getInstallLocation is called at least once to initialize the value.</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// Do this AFTER processing the configuration to allow the configuration to set</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// the install location.&nbsp;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getInstallLocation();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// locate boot plugin (may return -dev mode variations)</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL[] bootPath = getBootPath(</span><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">bootLocation</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//Set up the JNI bridge.&nbsp;We need to know the install location to find the shared library</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setupJNI(bootPath);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//ensure minimum Java version, do this after JNI is set up so that we can write an error message </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//with exitdata if we fail.</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">if</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'"> (!checkVersion(System.<em>getProperty</em>(</span><span style="font-size: 9pt; color: #2a00ff; font-family: 'Arial','sans-serif'">"java.version"</span><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">), System.<em>getProperty</em>(</span><em><span style="font-size: 9pt; color: #0000c0; font-family: 'Arial','sans-serif'">PROP_REQUIRED_JAVA_VERSION</span></em><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">))) </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">//$NON-NLS-1$</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size: 9pt; color: #7f0055; font-family: 'Arial','sans-serif'">return</span></strong><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">;</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setSecurityPolicy(bootPath);&nbsp;</span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">设置执行权限</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// splash handling is done here, because the default case needs to know</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #3f7f5f; font-family: 'Arial','sans-serif'">// the location of the boot plugin we are going to use</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleSplash(bootPath);</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; beforeFwkInvocation();</span></p>
            <p style="text-align: left" align="left"><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invokeFramework(passThruArgs, bootPath);&nbsp;&nbsp;&nbsp; </span><span style="font-family: 'Arial','sans-serif'">//</span><span style="font-family: 新宋体">启动</span><span style="font-family: 'Arial','sans-serif'">Eclipse</span><span style="font-family: 新宋体">内核</span></p>
            <p><span style="font-size: 9pt; color: black; font-family: 'Arial','sans-serif'">&nbsp;&nbsp;&nbsp; }</span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://webside.blogjava.net/aggbug/169593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-22 16:33 <a href="http://www.blogjava.net/asktalk/archive/2007/12/22/169593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我的开发工具集(1)-CyberArticle </title><link>http://www.blogjava.net/steady/archive/2007/11/29/163940.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Thu, 29 Nov 2007 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/steady/archive/2007/11/29/163940.html</guid><description><![CDATA[<span style="font-size: 10pt">
<div id="articlecontent" _extended="true">
<p mce_serialized="12q4lhc64"><span style="font-size: 10pt">每个人在开发的时候，都会根据自己的喜好选择一些好用的工具，当然，通过一些年头的积累，我自己也有了这么一些顺手的工具，就把这些还不错的东西拿出来和大家分享吧。</span></p>
<p mce_serialized="12q4lhc64"><strong mce_serialized="12q4lhc64"><span style="font-size: 10pt">CyberArticle (网文快捕)</span></strong></p>
<p mce_serialized="12q4lhc64"><span style="font-size: 10pt">　　我们在查看资料，或者遇到问题上网搜索的时候，经常会想把自己看到的一些好东西保存下来，以后需要用的时候可以找到，有人把东西复制下来保存成文本，有人用 Word 文档，也有人直接保存页面，这些方法固然是可以，不过以后找起来可就比较麻烦了。我们需要一个带分类的文档管理工具。</span></p>
<p mce_serialized="12q4lhc64"><span style="font-size: 10pt">　　在对一堆工具的筛选之后，我选中了 CyberArticle，也就是网文快捕，安装以后，在浏览页面时，IE 和 FF 的右键会出现保存全文，保存选中部分这样的选项，我最喜欢的是保存选中部分这个功能，毕竟我们并不需要一个网页中一些不相关的文字和图片。CyberArticle 可以完整的把文章内容或选中部分的内容保存下来，无论是图片或者其他什么的，都能较好的支持。在保存下自己喜欢的内容后，我们可以手工把这些内容分类，以后会比较容易的找到自己需要的东西。</span></p>
<p mce_serialized="12q4lhc64"><span style="font-size: 10pt">　　另外 CyberArticle 中比较有用的功能是生成电子书。我们在网上搜集到一堆某一类别的文章，为了与他人分享或者便于携带，我们可以把这一个独立的类别的内容导出成 CHM&nbsp;或 EXE 版本的电子书。</span></p>
<p mce_serialized="12q4lhc64"><span style="font-size: 10pt">　　CyberArticle 可以到 </span><a href="http://www.wizissoft.com/cn/index.aspx" mce_serialized="12q4lhc64"><span style="font-size: 10pt">http://www.wizissoft.com/cn/index.aspx</span></a><span style="font-size: 10pt">&nbsp;下载，强烈建议使用最新的 5.0 版（只要25块钱），旧的版本会有相当一部分的文章保存不下来。</span></p>
<br />
<a href="http://www.linkedcast.cn/" target="_blank"><img alt="链客中国，写文章也可以赚钱哦" src="http://www.linkedcast.cn/website/article/9d19090d1a0056535e08.gif" border="0" /></a>
<div></div>
</div>
</span>
 <img src ="http://webside.blogjava.net/aggbug/163940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2007-11-29 10:59 <a href="http://www.blogjava.net/steady/archive/2007/11/29/163940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Prototype, Jquery, Spring in action 2nd 的电子书下载</title><link>http://www.blogjava.net/steady/articles/163077.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Mon, 26 Nov 2007 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/steady/articles/163077.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/steady/articles/163077.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/163077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2007-11-26 09:39 <a href="http://www.blogjava.net/steady/articles/163077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IntelliJ IDEA 7.0 破解,注册机下载</title><link>http://www.blogjava.net/steady/articles/154544.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Sat, 20 Oct 2007 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/steady/articles/154544.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 新鲜出炉的 IDEA 7.0 注册机啊，IDEA fans 赶快下载吧。&nbsp;&nbsp;<a href='http://www.blogjava.net/steady/articles/154544.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/154544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2007-10-20 20:44 <a href="http://www.blogjava.net/steady/articles/154544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>互联网广告的新秀——链客中国</title><link>http://www.blogjava.net/steady/articles/154419.html</link><dc:creator>steady</dc:creator><author>steady</author><pubDate>Sat, 20 Oct 2007 00:33:00 GMT</pubDate><guid>http://www.blogjava.net/steady/articles/154419.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/steady/articles/154419.html'>阅读全文</a><img src ="http://webside.blogjava.net/aggbug/154419.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/steady/" target="_blank">steady</a> 2007-10-20 08:33 <a href="http://www.blogjava.net/steady/articles/154419.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>