﻿<?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-上善若水-文章分类-Other</title><link>http://www.blogjava.net/bourn/category/25424.html</link><description> 反者道之动，弱者道之用。
 天下万物生于有，有生于无。</description><language>zh-cn</language><lastBuildDate>Thu, 08 Nov 2007 06:03:09 GMT</lastBuildDate><pubDate>Thu, 08 Nov 2007 06:03:09 GMT</pubDate><ttl>60</ttl><item><title>类似Google构架的开源项目Hadoop</title><link>http://www.blogjava.net/bourn/articles/153544.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Wed, 17 Oct 2007 05:22:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/153544.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/153544.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/153544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/153544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/153544.html</trackback:ping><description><![CDATA[<p>
作者
<strong>Scott Delap</strong>译者
<strong>张海龙</strong>
发布于
2007年8月17日 上午5时55分
</p>
<dl><dt>社区</dt><dd><a href="http://www.infoq.com/cn/java" name="java" id="739" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Java</a></dd><dt>主题</dt><dd><a href="http://www.infoq.com/cn/grid_computing" name="grid_computing" id="838" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">网格计算</a>,</dd><dd><a href="http://www.infoq.com/cn/clustering" name="clustering" id="815" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">集群与缓存</a></dd></dl>
<p>类似Google构架的开源项目<a id="lv:t" title="Hadoop" href="http://www.infoq.com/hadoop">Hadoop</a> 已经存在一年多了，现在正受到来自开发社区的广泛关注。下面是来自Hadoop<a id="cygf" title="官网" href="http://lucene.apache.org/hadoop/">官网</a> 的消息： </p>
<blockquote>Hadoop是一个软件平台，可以让你很容易地开发和运行处理海量数据的应用&#8230;&#8230;Hadoop是<a id="txjs" title="MapReduce" href="http://wiki.apache.org/lucene-hadoop/HadoopMapReduce">MapReduce</a> 的实现，它使用了Hadoop分布式文件系统（HDFS）。MapReduce将应用切分为许多小任务块去执行。出于保证可靠性的考虑，HDFS会为数据块创建多个副本，并放置在群的计算节点中，MapReduce就在数据副本存放的地方进行处理&#8230;&#8230;<br />
</blockquote>
<p>Hadoop是由Java编写的，该项目已到得Yahoo的全面支持，项目的领袖Doug Cutting从2006年一月开始已经被Yahoo全职雇用于此项目中。华盛顿大学也从那时开始了一个以Hadoop为基础的分布式计算的课程，课程相关的材料也<a id="ev3h" title="已发布" href="http://code.google.com/edu/content/parallel.html">已发布</a> 在Google Code了，以满足那些对这项技术感兴趣的开发者们。<br />
最近，Yahoo的Jeremy Zawodny<a id="jakw" title="提供了" href="http://developer.yahoo.net/blog/archives/2007/07/yahoo-hadoop.html">提供了</a> 一个Hadoop的状态更新：<br />
</p>
<blockquote>在过去的几年里，每家参与建立大规模Web系统的公司都面临着一些相同的基础性挑战&#8230;&#8230;底层架构从来都是一个挑战。你不得不去购
买、并大量安装和管理众多的服务器，即使你使用的是其他人提供的商业硬件平台，你也不得不开发软件对这些任务进行分治处理，并让其保持运行&#8230;&#8230;要建立一个
必要的软件基础结构，我们可以放弃开发自己的技术，这可以认为是一项竞争优势，先赚到钱再说。但我们已经选择了一条稍有不同的路，当认识到有越来越多的公
司和组织的需求都很相似的时候，我们发现了Doug
Cutting（开源项目Nutch和Lucene的开创者）的工作，于是我们邀请他加入Yahoo，在新的开源项目Hadoop上继续工作。<br />
</blockquote>
<p>Zawodny去年一直工作于提供数据排序的基准评测，在测试中，每一个节点都对相同总和的输入数量进行排序。
假如有20个节点，每个节点有100条记录，那么就有2000个记录需要排序；当有100个节点时，每个节点有100条记录，那就总共有10000条记
录。下面是最近的评测结果：</p>
<p>
<table style="height: 392px; width: 300px;" cellpadding="" cellspacing="" width="248">
    <tbody>
        <tr>
            <td align="center"><strong>日期</strong> </td>
            <td><br />
            </td>
            <td align="center"><strong>节点数</strong><br />
            </td>
            <td align="center"><strong>耗时（小时）</strong><br />
            </td>
        </tr>
        <tr>
            <td align="center">四月 </td>
            <td align="center">2006 </td>
            <td align="center">188 </td>
            <td align="center">47.9 </td>
        </tr>
        <tr>
            <td align="center">五月 </td>
            <td align="center">2006 </td>
            <td align="center">500 </td>
            <td align="center">42.0 </td>
        </tr>
        <tr>
            <td align="center">十一月 </td>
            <td align="center">2006 </td>
            <td align="center">20 </td>
            <td align="center">1.8 </td>
        </tr>
        <tr>
            <td align="center">十一月 </td>
            <td align="center">2006 </td>
            <td align="center">100 </td>
            <td align="center">3.3 </td>
        </tr>
        <tr>
            <td align="center">十一月 </td>
            <td align="center">2006 </td>
            <td align="center">500 </td>
            <td align="center">5.2 </td>
        </tr>
        <tr>
            <td align="center">十一月 </td>
            <td align="center">2006 </td>
            <td align="center">900 </td>
            <td align="center">7.8 </td>
        </tr>
        <tr>
            <td align="center">七月<br />
            </td>
            <td align="center">2007 </td>
            <td align="center">20 </td>
            <td align="center">1.2 </td>
        </tr>
        <tr>
            <td align="center">七月 </td>
            <td align="center">2007 </td>
            <td align="center">100 </td>
            <td align="center">1.3 </td>
        </tr>
        <tr>
            <td align="center">七月 </td>
            <td align="center">2007 </td>
            <td align="center">500 </td>
            <td align="center">2.0 </td>
        </tr>
        <tr>
            <td align="center">七月 </td>
            <td align="center">2007 </td>
            <td align="center">900 </td>
            <td align="center">2.5 </td>
        </tr>
    </tbody>
</table>
</p>
<p>Tim O'Reilly<a id="cs.t" title="找出了" href="http://radar.oreilly.com/archives/2007/08/yahoos_bet_on_h.html">找出了</a> Zawodny所发的帖子，并从中发现了来自于Yahoo的高层支持：<br />
</p>
<blockquote>&#8230;&#8230;Yahoo! 已经在一月聘用了Hadoop的创始人Doug Cutting，但<a id="v.n7" title="Doug在开源大会上的谈论" href="http://radar.oreilly.com/archives/2007/08/yahoos_bet_on_h.html">Doug在开源大会上的谈论</a> ，更像是Hadoop的发布会，Yahoo! 也想以此表明Hadoop项目对他们来讲有多么重要。实际上，我还接到David Filo打来的电话，他想确认我是否知道这种支持来自于高层&#8230;&#8230;<br />
&#8230;&#8230;
为什么Yahoo! 的参与这么重要？首先，这预示一个搜索界第二大的公司认识到开源是在Web
2.0上与一个占统治地位的对手进行竞争的强大武器&#8230;&#8230;支持Hadoop和其它Apache项目不仅仅只是让Yahoo深入到他们可以使用的开源软件项目
中，更会帮助他们恢复在极客（geek）心中的形象&#8230;&#8230;其次，或是同样重要的是，Yahoo! 给了Hadoop一个机会进行规模方面的测试&#8230;&#8230;<br />
</blockquote>
<p>John Munsh用一句话<a id="ugbo" title="总结了" href="http://www.johnmunsch.com/2007/08/hadoop_and_the_opposite_of_the.html">总结了</a>
Yahoo的参与：&#8220;Hadoop和&#8216;非我发明症（Not-Invented-Here Syndrome）&#8217;之反例&#8221;。（译者注：John
Munsh在这里用&#8220;非我发明症&#8221;来指Microsoft那种不愿意接受任何协议，标准，或是其他公司开发的软件的态度。它认为不是自己创造的东西就是不
值得信任的。而Yahoo! 却基于竞争对手Google的MapReduce来构造自己的应用，所以这里说是&#8220;非我发明症&#8221;之反例。）<br />
</p>
<p>微软的Sriram Krishnan则从<a id="ljsk" title="那些" href="http://www.sriramkrishnan.com/blog/2007/08/open-source-and-scratching-itches-in.html">那些</a> 转到类似<a href="http://www.infoq.com/news/2006/11/hadoop-ec2">Hadoop和Amazon EC2</a>这种针对大规模应用并在不断发展的解决方案的创业者和开发人员所面对的问题的角度，对Hadoop提出了反对意见： <br />
</p>
<blockquote>Web
2.0的主要价值来自于由众多用户生成的数据，如del.ico.us、Digg、Facebook&#8230;&#8230;它已经超越了任何个人运行大规模的服务器软件的商
业意义，如Gmail、Google Search、Live、Y!
Search&#8230;&#8230;放荡不羁的极客们根本就不会去碰那些大规模blob存储（S3，Google文件系统），大规模结构化存储(Google的
Bigtable），还有在这种微架构之上运行代码的工具（MapReduct，Dryad）等等&#8230;&#8230;我也不知道Doug
Cutting的这种类似的开源产物在这条路上已经走了多远——也许这就是答案吧&#8230;&#8230;<br />
</blockquote><span style="font-weight: bold;">查看英文原文</span>：<a title="Open Source Google-Like Infrastructure Project Hadoop Gains Momentum" href="http://www.infoq.com/news/2007/08/hadoop-momentum">Open Source Google-Like Infrastructure Project Hadoop Gains Momentum</a>
<img src ="http://www.blogjava.net/bourn/aggbug/153544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-10-17 13:22 <a href="http://www.blogjava.net/bourn/articles/153544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>你真的明白什么是可伸缩性吗？</title><link>http://www.blogjava.net/bourn/articles/153532.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Wed, 17 Oct 2007 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/153532.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/153532.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/153532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/153532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/153532.html</trackback:ping><description><![CDATA[<p>
作者
<strong>Gavin Terrill</strong>译者
<strong>郭晓刚</strong>
发布于
2007年10月7日 下午4时2分
</p>
<dl><dt>社区</dt><dd><a href="http://www.infoq.com/cn/architecture" name="architecture" id="1,390" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Architecture</a></dd><dt>主题</dt><dd><a href="http://www.infoq.com/cn/performance-scalability" name="performance-scalability" id="754" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">性能和扩展性</a></dd></dl>
<p>&#8220;可伸缩性（Scalability）&#8221;是软件厂商常常在新闻稿中用到的一个词（也是人们站在饮水机旁谈论的一个词），但这个词在很多情况下都被误解了。例如，很多人说起可伸缩性的时候其实指的是性能和高可用性。Royans K Tharakan试图回答&#8220;<a href="http://www.royans.net/arch/2007/09/22/what-is-scalability/">什么是可伸缩性</a>&#8221;这个问题，他说： </p>
<blockquote>可伸缩性，简单来说，是以更大的规模来做你现在所做的事。伸展一个Web应用的规模在于让更多的人使用你的程序。如果你没法找出
方法在伸展规模的同时提高性能，没关系。而且只要你可以伸展规模来处理更大数量的用户，那么有几个单点故障（single point of
failure）也没关系。<br />
</blockquote>
<p>Royans解释说如今我们在面对规模伸展的时候有两个选择： </p>
<blockquote>
<ul>
    <li><strong>纵向的可伸缩性</strong>——在同一个逻辑单元内增加资源来提高处理能力。这样的例子包括在现有服务器上增加CPU，或者在现有的RAID/SAN存储中增加硬盘来提高存储量。 </li>
    <li><strong>横向的可伸缩性</strong>——增加更多逻辑单元的资源，并令它们像是一个单元一样工作。大多数集群方案、分布式文件系统、负载平衡都是在帮助你提高横向的可伸缩性。 </li>
</ul>
</blockquote>
<p>架构师们都在为达到线性的可伸缩性而挣扎，目的是让系统产出的增长与系统中投入资源的增长保持稳定的比率。然而，增加资源会导致一般耗费
（overhead）的额外增长，因此难以达到线性的可伸缩性。Royans将之称为&#8220;伸缩性因子&#8221;，并用它来区分各种类型的伸缩能力： </p>
<blockquote>
<ul>
    <li>如果在你扩大规模的时候伸缩性因子保持为常数，这种叫做<strong>线性伸缩性</strong>。 </li>
    <li>但很可能有些组件并不像其他组件那么适应规模的增长。小于1.0的伸缩性因子叫做<strong>次线性伸缩性</strong>。 </li>
    <li>话说回来，也可能因为增加更多组件而获得更佳的性能（在RAID系统中跨多个磁盘的I/O，当磁盘越多，性能越好）。这种叫做<strong>超线性伸缩性</strong> 。 </li>
    <li>如果应用程序没有专门为可伸缩性而设计，有可能当规模扩大的时候情况会变糟。这种称为<strong>负伸缩性</strong>。 </li>
</ul>
</blockquote>
<p>跟软件开发中的许多事物一样，这里也没有<a href="http://en.wikipedia.org/wiki/Silver_bullet">适合一切情形的银弹</a>可以解决你的伸缩性问题。Royans建议说，&#8220;<strong>如果你急切需要可伸缩性，向纵向发展可能是最容易的</strong>&#8221;，但注意&#8220;<strong>不幸的是纵向伸展会随着你的规模增长而越来越昂贵</strong>&#8221;，而且&#8220;<strong>无穷的横向线性伸缩性只是难以达到，而无穷的纵向伸缩性绝不可能</strong>&#8221;。他继续说： </p>
<blockquote>从另一方面来说，横向可伸缩性并不要求你购买越来越昂贵的服务器。它的本意是用普通的存储和服务器方案来实现规模伸展。不过横向可伸缩性也不便宜。应用必须从建造的最底层就加以考虑才能在多台服务器上运行得像一台服务器一样。 </blockquote>
<p>Royans最后建议应该考虑所有的层次才能解决可伸缩性问题： </p>
<blockquote>对于一个成功的Web应用，所有的层次都要同样能够应付规模的增长。包括存储层（集群文件系统、S3等）、数据库层（分区、联
合）、应用层（memcached、scaleout、terracota、tomcat
clustering等等）、Web层、负载平衡、防火墙等等。比如，如果你没办法实现多个负载平衡控制器来处理未来的网络流量，不管你在Web层的横向
伸缩性上扔下多少钱，都不会有什么效果。你的流量始终被限制在一个负载平衡控制器能够承受的程度。 </blockquote>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2007/10/whatisscalability">Think you know what scalability is?</a> </p>
<img src ="http://www.blogjava.net/bourn/aggbug/153532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-10-17 12:49 <a href="http://www.blogjava.net/bourn/articles/153532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>交互设计精髓</title><link>http://www.blogjava.net/bourn/articles/146350.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Wed, 19 Sep 2007 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/146350.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/146350.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/146350.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/146350.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/146350.html</trackback:ping><description><![CDATA[转自http://www.ui123.com/blog/?p=4<br />
<br />
<p>12月 22nd, 2006 by  奇遇 </p>
<div>
<p><span style="color: Maroon;">书名原文： About Face 2.0: The Essentials of Interaction Design<br />
作者：     [ 美 ]Alan Cooper ， Robert M. Reimann 译者：詹剑锋、张知非<br />
</span></p>
<p><strong>推荐语</strong><br />
本书是一本由一位在交互设计前沿有着10年设计咨询经验及25年计算机工业界经验的卓越权威撰写的设计数字化产品行为的启蒙书。它探索了一个独特的设计领
域，即复杂系统行为的设计——特别是软件激活技术。本书论述一种具有革命意义的设计观念——人类驱动设计过程。
本书是一本难得的大师经典之作，应该是一本产品规划师、界面设计师以及可用性工程职业人员或者程序员都想得到的书。</p>
<p><strong>封面</strong></p>
<p><a href="http://www.ui123.com/blog/uploads/200612/22_135419_aboutface2.jpg" target="_blank"><img src="http://www.ui123.com/blog/uploads/200612/22_135419_aboutface2.jpg" alt="uploads/200612/22_135419_aboutface2.jpg" onload="javascript:DrawImage(this,520);" class="img_normal" /></a><br />
<br />
序<br />
本书旨在为您提供一些有效而实用的工具来设计用户界面（ user interface ）。这些工具很明显分为截然不同的两类：战术性工具
(tactical) 和策略性 (strategic) 工具。战术性工具是使用和创建用户界面的习惯用法 (user interface
idioms) ——如对话框 (dialog box) 和下压按钮 (push button) ——的提示（ hint ）和技巧 (tip)
。而策略性工具是思考用户界面习惯用法的方式，换言之，即用户与用户界面习惯用法的交互方式。<br />
虽然已经有了一些介绍策略性或者战术性准则的书，我们的目标在于写一本能将两者融为一体的书。在帮助您设计更有吸引力、更有效的对话框的同时，本书还将帮助您理解用户如何了解您的软件，以及与之交互的方式。<br />
设计有效的用户交互和界面之关键在于将策略性和战术性的方法合二为一。例如，客观上不存在好的对话框——对话框的品质取决于具体的应用情形：用户是
谁，他们的背景和目标是什么。仅仅应用一系列的战术性说明（ tactical dictum
），会使创建用户界面变得更容易，但这并不能使最终结果更好。同样，对于用户应该如何与您的系统交互的深层次思考也不能改善软件本身。真正奏效的是：在策
略上对用户与特定软件的交互方式保持敏感的同时，拥有一个可以在任意情况下应用的在你掌握之中的战术工具盒 （ tactical toolbox ）
。本书既会加深您对用户的理解，又将教您如何把这些理解转变为设计理念。<br />
谁应该读这本书<br />
在 1995 年 8 月，软件观念革命（ About Face ）这本书第一次出版时， 界面设计 (interface design)
还是个未开垦的新领域。少数人在软件工程的影子下，勇敢地以用户界面设计师的头衔工作，正如机敏的小哺乳动物在粗暴的巨龙阴影下爬行。正如在软件观念革命
第一版中所指出的，软件设计被人们错误地理解和评价。过去是怎么做的，程序员就就是怎么做的。很多处境不佳的文档工程师 (documenters)
、培训者、技术支持人员，以及处于增长趋势的 可用性工程职业人员（ usability practitioners ）
都意识到：某些事情应该改变。<br />
Web 令人吃惊的、似乎是一夜之间的发展和流行，驱动了这种改变。突然间，易用性（ ease Of use) 成了挂在每个人嘴边的术语。在
20 世纪 90 年代初期，即多媒体短暂流行的期间，涉足数字产品设计的传统设计师纷纷转向 Web
。表面上，新的设计师头衔像杂草一样涌现：信息设计师 (information designer) 、信息架构师 (information
architect) 、用户体验策略师 (user experience strategist) ，以及交互设计师 (interaction
designer) 。 C 级公司的首席职务（首席用户体验官， user experience officer
）一开始就存在，他的工作核心是创建以用户为中心的产品。很多重点大学都争先恐后地开展这些理论的培训。与此同时，可用性工程和人性因素（ human
factor ）职业人员的地位也在提升，现在被承认是推动更好产品设计的领导者。<br />
虽然 Web 使得界面技术倒退了不止十年，但它无可争议地将用户需求永久地置于公司的雷达之上。作者坚信： .COM
的衰败只能使得用户及其需求的可见性，以及对它们的关注在将来变得更加明显。人们一般对新技术感到厌倦。消费者传达了明确的信息，他们所需要的好技术是容
易使用的，并且能满足他们需求的技术。<br />
因此，作者很高兴地说，新版本的读者群会大大地增大：任何对用户与数字产品的交互感兴趣的人都会在读这本书的过程中获得独特的能力洞察力。程序员、与
数字产品相关的设计者、可用性工程职业人员、项目经理都会从此书中受益匪浅。读过《软件观念革命》（ About Face ）
第一版或《软件创新之路》（ The Inmates are running the Asylum ）
第一版的读者会在此发现更新颖且更详细的有关设计方法和原理的详细信息。<br />
为什么要做交互设计<br />
《软件观念革命》的第一版描述了一门被称为软件设计的学科，同时也可称为用户界面设计。在这两个术语中，用户界面设计有更强的生命力。在本书里，我们仍会使用它，而且大多数是合适的。<br />
然而，笔者很清楚，本书所讨论的内容要远比用户界面设计的范围广。界面这个词意指表面，本书所阐述的大多数设计问题要远远比 CRT 屏幕的表面问题深奥，它直接触及了&#8220;数字产品是什么&#8221;，以及&#8220;数字产品要做什么&#8221;等核心问题。<br />
近些年来，对于这类设计，人们已经提出了许许多多的术语。在 2000 年左右，公司对 Web 的兴趣达到顶点时，被称为信息架构（
information architecture ， IA ）的学科似乎最终包含了此处这里讨论的这类设计。但是正如 Web
在经济方面的前景已经暗淡一样， IA 基本上也保留了它以 Web 为中心的狭隘视图：如何组织和浏览页面上的内容。随着新经济的明显下滑， IA
产业的好运也逐渐消失。<br />
另一个近年来流行的术语是 体验设计（ experience design ） 。美国图形艺术研究所 (American Institute
of Graphic Artists ， AIGA)
特别提倡使用这个术语来概括用于开发数字产品和系统的不同设计与可用性工程学科。这个想法很有吸引力，但它仍然回避了一个问题——什么样的设计才是交互式
系统设计的真正核心，交互式系统设计是一种明显不同于已有设计的崭新设计。<br />
体验设计这种想法也有一定的问题。在笔者看来，体验是人与人工制品（或者其他生物）交互的结果。体验出现在一定的上下文场景 (context) 中，进一步由内部、心理的个人环境所调节，这种个人环境由动机、过去经验、气质和多种认知因素形成。<br />
作为设计者，我们不能声称能够设计一种人工制品或者系统的用户体验，但我们能够设计与人工制品交互的机制，以改善用户体验。因为，我们相信体验发生在
人和人工制品交互的过程中，我们已经选择了&#8220;交互设计&#8221;这个术语来表示本书描述的这类设计，该术语由 Bill Moggridge 和 Bill
Verplank 在 20 世纪 80 年代首创。你不能设计体验本身，但你能设计调节和引导体验的交互行为。<br />
交互设计的定义<br />
简单地说，交互设计是 人工制品 (artifact) 、环境和系统的行为，以及传达这种行为的 外形元素 (formal element)
的设计与定义。不像传统的设计学科主要关注 形式 (form) ，最近则是关注 内容和内涵 (content and meaning)
，而交互设计首先旨在规划和描述事物的行为方式，然后描述传达这种行为的最有效形式（参见图 1 ）。<br />
交互设计借鉴了传统设计、可用性工程及工程学科的理论和技术，它是一个具有独特方法和实践的综合体，而不只是部分的叠加。它也是一门工程学科，具有不同于其他科学和工程学科的方法。<br />
交互设计是一门特别关注以下内容的学科：<br />
? 定义与产品的行为和使用密切相关的产品形式<br />
? 预测产品的使用如何影响产品与用户的关系，以及用户对产品的理解。<br />
? 探索产品、人和 上下文 (context) （物质、文化和历史）之间的对话 (Riemann 和 Forlizzi,2001)<br />
? 交互设计从目标导向 (goal-directed) 的角度解决产品设计：<br />
? 要形成对人们希望的产品使用方式，以及人们为什么想用这种产品等问题的见解。<br />
? 尊重用户及其期望目标。<br />
? 对于产品特征与使用属性，要有一个完全的形态，而不能太简单。<br />
? 要看到产品最终成品的样子，它们目前的样子并不重要。<br />
设计的三维<br />
交互设计着重于传统设计较少探索的领域：行为设计。<br />
所有的设计影响人类行为：结构关于人们使用空间的方式，与形式和光线有关。如果没人对张贴画所表达的信息有所反应，那张贴画又有什么意义呢？<br />
引入交互技术——计算机的礼节——来设计人工制品的行为，以及这种行为如何影响和支持人的目标和期望？已经成为一门值得关注的学科。<br />
理解交互设计和传统设计关注点的不同方法之一是借助历史透镜。在 20
世纪的上半叶，设计者主要关注形式。后来设计者逐渐关注内涵，例如，产品设计师和结构师在 20 世纪 70
年代引入了本土和怀旧形式。直到今天，这种趋势仍在继续，诸如 PT Cruiser
的怀旧风格的汽车。今天，信息设计师继续关注内涵，包括可用内容的设计。<br />
在最近 15 年以来，越来越多的设计师开始谈论行为：软件激活技术 (software-enabled) 的产品（或复杂的机械）直接与用户交互的动态方式。<br />
这些关注（形式、内涵及行为）并不是相互排斥的。交互产品必须多少包含各部分；软件应用关注更多的是行为和形式，而对内容的需求较少； Web 站点和公用信息亭关注更多的是内容和形式，而较少关注复杂的行为。<br />
因为，复杂系统的行为通常不是一个审美学 (aesthetics) 的问题，而是认知因素 (cognitive factor) 和逻辑过程 (logical processes) 的结合，交互设计应该采用系统化方法，且能从这种方法中受益匪浅。<br />
交互设计师应该，也是首先要做的，理解使用他们设计的人们的目标、动机和期望（心智模型 ， mental model ）。这些最好能被理解为&#8220;叙述&#8221; (narrative) ——时间轴上的逻辑（或者情感）进展。<br />
与这些&#8220;叙述&#8221;相适应，所设计的人工制品必须具有它们自己的行为叙述，且这些行为必须成功地与用户的期望吻合。不像大多数机械制品，只有简单的行为，
观察之下一切都一目了然，软件和其他数字产品因为其行为潜在的复杂性，所以它们需要交互设计。软件对于观察者是不透明的，然而它所表现出来的可能行为几乎
是无限的。<br />
一些设计者，以设计的传统形式，如视觉 (visual) 、声音（ audible ）、触觉 (tactile themes) ，模式
(patterns) 、风格 (style) ，以及习惯用法 (idioms) 为论据，认为交互元素应被视为随着时间变化的感觉数据（
sense data ）流，类似于动画 (motion picture)
，因此完全可以通过传统设计方法来描述。然而，这种论点有严重的缺陷：尽管交互设计面向形式的方面非常重要，但是，除非它们是通过有效和合适的行为组织
的，否则几乎没用。如果没有一个逻辑结构或流来帮助解决用户的实际问题，那么面向形式的交互设计（ form-oriented
interactive design ）本身只是隔靴搔痒，价值值得怀疑。<br />
换句话说，如果没有条理化的&#8220;叙述&#8221;，感觉数据本身毫无意义。电影不能光有特效，叙述也很必不可少。这一点，对与数字产品的交互而言，更有效，因为对
话不在第三方可观察到的虚幻境界中发生。相反，它是在人和设计的人工制品之间的交流， Bill Buxton （ 1990
）称之为&#8220;非文字的自然语言&#8221;。这种对话（也就是行为）的期望和设计是交互设计的实质。<br />
本书的内涵和外延<br />
本书是一本有关交互设计（交互系统复杂且以用户为中心的行为设计）的原理和方法的参考书。本书的第一篇强调 设计过程 (design process) ，以及对用户的系统理解；第 2 篇提供了策略原理和工具；第 3 篇更深地钻研战术性的问题。<br />
本书不打算以 指南 （ guide ）的姿态出现，或者提供一些界面标准。实际上，你会在第 19
章了解到为什么那些工具的使用是有限制的，而仅仅与特定环境相关。也就是说，在本书中描述的过程和原理是与你选择的风格指南相兼容的，它也是解决任意这类
问题的一本极好的配套书。 指南 擅长于回答做什么，但无法回答为什么这样做。本书打算解决交互系统设计中未解决的问题。<br />
设计交互系统有 4 个步骤：研究问题域（ researching the domain ），理解用户 (understanding
with user) 及其需求；定义解决问题的框架 (defining the framework of a solution)
；完善设计细节 (filling in the design details) 。<br />
很多业内人士会加上第 5 个步骤：确认（ validation ）——让用户测试方案的有效性。他们这么做，不会错。最后一步是众所周知称为可用性学科的一部分。<br />
可用性工程方面的重要文献在持续增长，但有关交互设计的资料却相对很少。本书专门关注交互设计的过程和原理，设计方案的测试方法则留给出版的相关学术著作。本书可以与可用性工程方法和实践的文献配套使用。通过和谐地结合这两个学科，你会获得最好的设计成果。<br />
译者注 作者定义的术语，见第 2 章。<br />
译者注 作者定义的术语，见第 6 章。</p>
<p>名家推荐<br />
ALAN COOPER 作者推荐<br />
当我们被联系为 该 写中文版的序言时，我们非常兴奋，因为我们有机会接触一批新的而为数众多的读者，包括学生，设计人员，开发人员，以及人性因素专家等。<br />
在最近几年，中国不仅成为基于软件的数字产品 —— 从计算机、蜂窝电话到家庭和个人娱乐系统 ——
的主要制造者，也成为这些产品的日益重要的消费者。这就意味着在中国数以百万的新用户正在使用软件和数字产品，其中不乏初学者。由此可见，对于用户界面口
和交互设计师来说，这是一个独一无二的机会，他们的工作可以极大地改进这些数字产品的质量和合意性，并最终影响数以百万计的人们的生活。<br />
和西方一样，中国的开发者和制造商经过了一段时间才理解，用户界面和用户交互对于使得数字产品更有用和更成方面所具有的极端重要性。除了改善用户的生
活质量以外，容易使用和理解，并且能够更好地满足用户需求的产品有额外的潜力，为生产商增加利润和市场份额。我们希望本书将会为市场引领一条通向更好的数
字产品的道路，也可以为本书的读者，不论学生，设计人员，开发人员还是制造商，带来更多的机遇。<br />
交互设计是设计中的一个新领域，在这里是行为，而非形式成为最为关键的因素。形式必须支持行为，但是当用户和一个复杂的数字产品交互时，用户所能感受
到的产品质量和从中获得的亲身体验均来自于产品的行为。不是基于软件的产品不会有复杂的行为：锤子只有单一而简单的行为，除了样式以外不需要别的设计。然
而，蜂窝电话、掌上电脑或者数码相机有很多复杂的行为，而这些行为需要仔细而专门的设计方法。
本书试图描述行为和交互式设计这一崭新而又令人兴奋的领域的基本原则，我们预测这一领域将会成为 21 世纪设计学中的一个主要领域。<br />
本书的大部分例子来源于桌面计算机应用和 WWW 。尽管如此，书中几乎所有的内容也适用于别的数字设备。<br />
本书并不致力于阐述所有可能的设计方法，它也不包括用户界面标准的风格指南。事实上，本书提供了一个独特的过程和框架，借助它可以设计产品和产品的行为，而这些行为真正地解决了用户最核心的需求和意愿。<br />
书的第一篇描述了这一系统的过程 —— 我们称之为目标导向设计 —— 这一部分有一个前提，就是：如果你对产品的用户有深入了解，也了解他们使用该产品的动机（他们的目的），那么你可以为最重要的用户需求开发界面。<br />
本书第二篇和第三篇提供了高层次和细节的设计原则，主要涉及如何选择产品行为，既可以满足用户需求，又可以为用户消障碍，这无疑会提高用户的满意度和
生产率。在过去的 13 年里，我们在全世界使用了上面所说的方法为小到刚起步，大到有上百亿美金的公司的数百种数字设备，软件产品以及基于 Web
的服务做了设计。<br />
自从该书 2003 年在美国出版以来， 在美国和欧洲本书已被许多大学的计算机科学和设计专业选为教材 。尤其是人物角色的使用（在第一篇所描述的刻画用户的一个强有力的工具），几乎已经成为普遍采纳的设计和人性因素的最优方法。<br />
无论在中国还是西方，交互式设计的未来都是光明的。我们希望本书能激发出中国新一代数字产品和服务中的杰出设计！</p>
<p>Robert Reimann<br />
Brookline , Massachusetts , USA<br />
Alan Cooper<br />
Menlo Park, California, USA<br />
2005 。 1</p>
<p>叶展 人机交互分析师</p>
<p>　　读经典著作如同饮醇酒，回味隽永。而给经典著作写序，则如推销醇酒与人，在别人的沉醉中分享快乐。<br />
摆在我面前的就是一本经典著作，一本计算机领域的经典著作。众所周知，计算机领域多的是应景之作，比如某某软件版本 X.0
的使用指南之类，而少能经得起时间考验的经典著作。其原因一方面是计算机领域发展迅猛，知识更新代谢极快；另一方面，则是计算机领域应用重于理论，所以有
思想深度的著作比较少。<br />
一本书要成为经典，起码要两个条件。其一是著者是拥有深邃的思想，且文笔流畅。大师级人物，往往单从文字上的修养就看得出。比如经济界的
George Stigler （诺贝尔奖获得者，被誉为经济学界一支笔）和软件工程方面的 Frederick Brooks
（《神秘的人月》著者），他们的著作拿起来阅读几段，你马上就可以在行文中感到那种大家的雍容风度。而更重要的是，大师们在书中所讲述的往往不是细枝末节
的技巧和技术，而是一种深邃的思想方法，可以给人以深层次的启发。那种风度和深度，是难于模仿的。<br />
要成为经典的第二个条件是作者的思想要经得起时间的考验。对计算机书籍来说，起码要能经过 10 年的考验。这个标准比之其他领域已经是很宽松的了，但在这个标准下大部分计算机书籍会落马。<br />
以笔者来看，本书基本上符合前面的两个条件，是一本计算机领域的经典之作。<br />
本书的作者 Alan Cooper ，是计算机业界一位成名高手。除了早期在 Visual Basic 方面的工作外（他被誉为 Visual
Basic 之父），更重要的是他曾站到了一个新领域的前沿，参与并影响了软件开发领域一次深刻的变革。而这个新领域，就是人机交互（
Human-Computer Interaction ）。这个变革，是软件开发领域的第三次革命。<br />
在软件开发领域出现过三次革命—— 50
年代高级语言的出现，使得软件开发从机器硬件（机器语言）的束缚中解脱出来，程序员能够从（抽象＋结构）层次来进行思考。此为第一次革命。 70
年代软件工程兴起，使得软件开发的注意力由语言和编译器技术拓展到软件开发的过程（ software process
）。人们意识到：要提高一个软件产品最终的静态质量，必须提高这个产品产生过程的动态质量。此为第二次革命。而 90
年代以来，随着计算机软件和商业行为的联系越来越紧密，特别是互联网的兴起，人们进一步认识到：软件不是孤立的，软件的质量并不是仅由其本身就能决定的，
而是由（软件＋用户）这个大系统来决定的。软件的成功，在于是否它能够成功嵌入到用户的商业活动中。对人的因素的重视，使得一门新的领域崛起。这就是人机
交互。经过十几年发展，人机交互理论已经全面改观了一般商用软件设计开发的流程和方式，成为业界的标准。是为第三次革命。<br />
每次革命或变革，都会有豪杰之士涌现，为改变旧的思想和宣传一种新的思想而摇旗呐喊，成为领导变革的预言家和代言人。在 90
年代，一批人物涌现，一批著作发表，为人机交互理论在业界的应用打开了局面。 Donald Norman 在 1990 年出版了《 The
Design of Everyday Things 》， Jakob Nielsen 在 1994 年出版了《 Usability
Engineering 》，本书作者在 1995 年出版了本书的第一版。这些人的著作，都是经受了 10
年考验的，现在都成了经典。他们当时的思想，现在已经成为业界的主流。他们也自然而然地成为了人机交互领域举足轻重的领导者。<br />
阅读本书，最重要的是了解作者所阐述的关于软件设计开发的高层次理念和指导思想。因为作者是最新一次软件开发思想变革的积极参与者，他亲自现身说法写
的书当是记录这个思想变革的宝贵的第一手资料。正因为如此，笔者窃以为本书的第一部分最是重要，乃为全书的灵魂。这部分从了解用户，了解用户需求讲起，到
构建用户模型，到设计 scenario
来描述软件系统现在和未来的行为模式，到如何把对用户的理解和行为模式转换为设计方案。作者不仅把软件设计的整个过程流畅清晰地描述出来，而且真知灼见不
断涌现于其中。下面随便列举一二：<br />
? 软件的设计和开发，不要囫囵吞在一块，最好要分成两个单独的过程——设计过程和开发过程：
传统的软件工程理论，是对整个软件设计开发的过程化研究，而更侧重编程测试和项目规划部分，并且把设计和开发混在一起。而现在人机交互理论，实际上是把软
件设计这部分提出来，是对软件设计的过程化分析，还借用了认知心理学和其他领域的成果。目前业界普遍认为：对商用软件来说，这两个阶段分开，有助于软件质
量的提高。<br />
? 应当以用户为中心去设计软件，而不是以某项新技术或者技术人员为中心去开发软件：
这一点是软件走出象牙塔，渗入人类生活和商业领域的必然后果。作者虽然是程序员出身，但对以程序员（技术的代表）为核心的软件开发的局限性有清醒的认识，
并指出这种方法再也不能适应开发软件产品的需要。基于用户的设计（ User-Centered Design ）是 90
年代以后被&#8220;炒&#8221;的最火的一个词。它实际上是说在软件设计过程中要围绕用户和商业活动来进行，是不是围绕技术和程序员来运行。<br />
? 决定软件成功与否的，不是一个软件有多少个功能，而是这些功能是否有用和好用。<br />
? 设计软件，重要的是设计用户行为： 作者所极力鼓吹的一个新的名词——交互设计（ Interaction Design ）的含义就是软件设计师设计的不是死的软件，不是静止的界面，而是活的行为，是用户和软件硬件环境之间的动态交互，并寻求动态的最优。<br />
需要指出的是：以上思想，在 1995
年本书初版时乃为革命，与今则为业界常识——起码是美国商用软件开发领域人所共奉的常识。现今但凡大一点的和软件开发有关的公司，其软件设计开发过程都按
作者所提出的思路改进过。从另一个角度讲，这更体现了 90 年代这场变革的影响之深远。<br />
在本书的第二部分， Alan Cooper 介绍了一大把新概念和新名词（众所周知， Alan Cooper
在业界有卖弄新名词的&#8220;不良&#8221;嗜好。业内人最爱开的玩笑之一就是传说在什么什么会议上 Alan Cooper
又发明了一个新的英文词。当然能够在计算机业内成为这种玩笑的对象本身就说明这个人很有影响力。）这些新名词，由于是独此一家，别无分号，读者读来需要一
定的辨别力。需要记住的是：虽然这些名词比较新奇，但其含义和基本思路应该是容易接受的。<br />
与前两部分比，本书的第三部分就完全是实用性的了，有诸多实际的设计案例和讨论，而且主要是基于现有图形用户界面的格局。<br />
由于本书的这种结构——由抽象理念入手，到具体的设计方法和案例，使得它适合各类读者阅读。软件公司的领导者可以通过前两部分了解软件行业的最新思
潮，并以此为指导思想来改进自己公司内部的软件开发流程。软件开发人员，可以学习书中介绍的具体的方法，更可以从更实际的案例讨论中获得启发。对学生来
说，除了学习编程等&#8220;硬&#8221;技术外，通过读书了解一下软件行业&#8220;软&#8221;的思想，拓展眼界，受益将会不浅。<br />
国内软件行业经过多年发展已经初具规模，当然在发展的过程中也遇到诸多问题。目前的一个共识是中国软件业和外国比，最大的劣势并不是在具体某项技术或
者编程方面。中国的勤奋而又有天分的程序员，可以获得美国业界的编程大奖。由此可见单打独斗中国人是可以的。但项目一大起来，中国软件业的固有劣势就显现
出来了。中国的传统弱项主要是在软件工程和软件过程等方面。而现在西方软件行业又进了一步，在软件工程的基础上搞出了人机交互理论，又引发了一次革命。我
们目前对这场革命的了解还是很肤浅，人机交互领域在国内的科研、教学和应用都还在起步阶段。这就很有些旧的差距没有弥补上，新的差距又产生了的危险。这本
书现在被介绍到国内来，将有助于我们填补这方面的差距。此其时也！</p>
<p>叶展<br />
人机交互分析师<br />
2005 年 7 月于美国芝加哥</p>
<p>　　叶展，清华大学自动化系本科毕业，后赴美留学，先后取得伊州理工学院（ Illinois Institute of
Technology）的计算机硕士学位和卡内基美隆大学（Carnegie Mellon
University）的人机交互（Human-Computer
Interaction）硕士学位，现在美国BCS管理和IT咨询顾问公司任职。叶展目前主要的研究和工作领域是人机交互理论在游戏设计中的应用、人机界
面设计与评测、以及软件开发流程设计和管理。是这些领域有一定影响的专家，并应邀在包括CHI等一系列重要国际会议上发表了论文和演讲。</p>
<p>译 者 序<br />
今天，人类不仅在认识世界，也在创造着新世界。软件作为人类所创造的最复杂的人工制品（ artifact ）之一 ，
已不仅仅是人类智慧和工具的延伸，而在某种程度上作为虚拟世界新法则的执行者和实施者统治着我们。诺贝尔物理学奖获得者费曼曾经以这种方式描述过人类创造
新事物的过程：我们创造新事物，而被创造的新事物按照某种规则又创造新的事物，突然某一瞬间，不同于人类灵魂的事物出现了：它与人类灵魂迥然不同，或许还
有着恶意，威胁着人类。一个智者以这种玄想的方式展现了对人类创造物的恐惧。<br />
今天的软件人工制品会以这种方式工作吗？是否会威胁到我们的人类？作为软件业的一名从业人员，译者深知以 0 或者 1
为工作基础的计算机所有智慧来自于设计师和程序员的智慧，本身不具有恶意。然而，现实的情况是 &#8220;
受不正确的设计观念影响开发的软件已经开始威胁到大众用户 &#8221; ，技术派论者甚至以 &#8220; 计算机盲 &#8221; 通常称这些和计算机工作者一样富有智慧的人们。<br />
请尊重你的用户！ Alan Cooper
，这位在图形用户界面领域驰骋数十年的大师给出了如此的忠告。大师的忠告是中肯而辛辣的，技术不能高高在上，而应该植根于土壤，软件工人们不能脱离为人民
服务的宗旨，否则就要被革命了。新技术经济的沉沦也许指示着新的机遇：为大众用户服务，采取全新的目标导向设计方法。<br />
这种方法关注用户的目标；认真地研究实际用户和潜在用户，定义具体的原型用户 ( 人物角色 ， persona) ；使用人物角色作为脚本提纲 (scenarios) 的主要人物；人物角色作为定义交互产品功能、行为和形式的主要工具；遵循行为设计的原理。<br />
在系统模型方面，作者精彩地辨析了程序员的实现模型和用户的心智模型之间的差异，指出程序员通常为了容易实现的私利牺牲用户利益，用实现模型取代用户
的心智模型，从而产生了认知方面的鸿沟，因此在交互设计领域有必要区分设计和编程的责任。在用户分析方面，将用户分为新手用户、中间用户和专家用户三类
， 提出了没有用户愿意永远做新手用户，只有少数用户才会成为专家用户，因此大多数用户都是永久的中间用户，设计应该为中间用户优化的精辟论解。<br />
在行为和形式设计方面，作者深刻地揭示了一些现象背后隐藏的本质。首先从行为立场出发，定义了软件姿态的概念，将软件分为独占、暂时、精灵和辅助四种
姿态。不同姿态的软件对应不同的用户类型，如独占式应用的用户是永久的中间用户，应该在使用整个屏幕的情况下优化独占姿态的应用；而暂时姿态应用应该简
单、清晰而切中要点，保持在一个窗口和视图内。在用户心理层次，作者深刻地揭示了流状态 ：&#8220; 深深的完全沉思状态 &#8221; ，经常产生 &#8220; 轻微的欢娱
&#8221;
，能够让你忘记时间的流逝。因此，软件交互应该促进和加强流状态，而不是打断或者干扰流状态。为了创建高效的软件，作者提出了附加工作的概念，分析了附加
工作产生的原因，指出只有消除附加工作，用户才会效率更高。在这种背景下，作者也详细地分析了图形用户界面的导航问题，以及如何消除导航中出现的附加工
作。另外，作者指出要想开发效能高和用户使用起来会愉悦的软件，软件必须能够体贴和足够聪明。也正是从这个角度出发，作者详细地讨论了如何改善数据检索和
数据输入，使其体贴和足够聪明。<br />
在讨论如何为不同用户设计时，作者指出有两个概念在根据不同的经验水平将用户的需求进行分类方面特别有用：命令向量和工作集。命令向量是允许用户向程
序发起指令的特殊技术：下拉菜单、弹出菜单和工具条控件都是命令向量的例子。好的用户界面提供多种命令向量，这种冗余性让不同技能水平的用户和不同偏好的
用户根据自己的意愿和能力向程序发起命令。因为每个用户都在无意识地记忆经常使用的命令，持久的中间用户记住了命令和功能的适度子集：工作集。虽然严格的
说没有一个标准的工作集可以覆盖所有用户的需求，但是用户和使用模式的研究和建模可以产生一个较小的功能子集。这个最小工作集可以通过目标导向的设计方法
确定：利用脚本提纲来发现你的人物角色所需求的功能。这些需求直接转化成最小工作集的内容。<br />
作者也详细地阐述了视觉界面设计的一些基本原理，并在具体的背景下讨论了这些视觉界面设计原理的应用。如视觉界面必须：<br />
? 避免视觉噪音 (visual noise) 和杂乱 (clutter) ；<br />
? 使用对比 (contrast) ，相似性（ similarity ）与分层 (layering) 来区分和组织元素；<br />
? 在每一个组织层次提供视觉结构和流；<br />
? 使用紧凑、一致而场景合适的图像；<br />
? 全面而有目的地结合风格和功能。<br />
在对主流的三类界面范例：实现为中心（ implementation-centric ）、隐喻 (metaphoric) 和习惯用法
(idiomatic) 分析的基础上，作者独特而精辟地指出隐喻的限制，强调了习惯用法的力量，深刻地指出 &#8220;
所有的习惯用法都需要学习，而好的习惯用法只需要学一次 &#8221; 。<br />
另外，作者凭借渊博的知识和丰富的产业界经验，深刻全面地揭示和阐述了各种交互细节的本质、演化和蕴含的发展机遇，如直接操作 (direct
manipulation) 、选择、拖放 (drag and drop)
。在图形用户界面发展的历史背景下，作者高屋建瓴地详细讨论了各种控件和它们的行为。<br />
在译者学习和翻译这本书的过程中，深深地感受和体会到作者的大师风范，以及卓尔不群的见解和深刻的思想，并且在具体的科研实践中受益。相信任何一个读者只要用心读这本书，都会有同样的感受，并有丰富的收获。<br />
译者要感谢参与本书出版过程中的朱沭红编辑、孙学瑛编辑、 蒋芳 女士，感谢她们的耐心、信任和协作。</p>
<p>詹剑锋 ( jfzhan@ncic.ac.cn ) 、张知非<br />
2005 年 3 月 1 日</p>
<p>第一篇 了解你的用户<br />
第一部分 弥合差距<br />
1 目标导向设计<br />
2 实现模型和心智模型<br />
3 新手、专家和中间用户<br />
4 理解用户：定性研究<br />
5 用户建模：人物角色和目标<br />
6 脚本提纲：将目标转换为设计<br />
7 综合好的设计：原理和模式<br />
第二篇 设计行为和形式<br />
第二部分<br />
8 软件姿态<br />
9 和谐与流<br />
10 消除附加工作<br />
11 导航和调整<br />
12 理解撤销<br />
13 重新思考&#8220; Files &#8221;和&#8220; Save &#8221;<br />
第三部分 提供高效能和愉悦<br />
14 设计体贴的软件<br />
15 设计智能的软件<br />
16 改进数据检索<br />
17 改进数据输入<br />
18 为不同的需要进行设计<br />
第四部分 应用视觉设计原理<br />
19 外观设计<br />
20 隐喻、习惯用法和启示<br />
第三篇 交互细节<br />
第五部分 鼠标和操作<br />
21 直接操作和定点设备<br />
22 选 择 327<br />
23 拖 放 336<br />
24 操作控件、对象和连接<br />
第六部分 控件及其行为<br />
25 窗口行为<br />
26 使用控件<br />
27 菜单：教学向量<br />
28 使用菜单<br />
29 使用工具条和工具提示<br />
30 使用对话框<br />
31 对话框礼节<br />
32 创建更好的控件<br />
第七部分 与用户的交流<br />
33 消除错误<br />
34 通知和确认<br />
35 与用户的其他交流方式<br />
36 安装过程<br />
第八部分 超越桌面的设计<br />
37 Web 设计<br />
38 嵌入式系统的设计</p>
</div>
<img src ="http://www.blogjava.net/bourn/aggbug/146350.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-19 09:57 <a href="http://www.blogjava.net/bourn/articles/146350.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Code Engine使用手册V1.3</title><link>http://www.blogjava.net/bourn/articles/143997.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Mon, 10 Sep 2007 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/143997.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/143997.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/143997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/143997.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/143997.html</trackback:ping><description><![CDATA[<p style="text-align: center;" align="center"><strong><span style="font-size: 14pt;">Version 1.3</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><strong><span><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span></strong><strong><span style="font-family: 宋体;">基本组成：</span></strong></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">运行入口</span>CodeEngineRunner<span style="font-family: 宋体;">的</span>main<span style="font-family: 宋体;">（）；里面注册所有的</span>Generator<span style="font-family: 宋体;">；主要有：</span>IbatisGenerator<span style="font-family: 宋体;">，</span>ControllerGenerator<span style="font-family: 宋体;">，</span>JSPGenerator<span style="font-family: 宋体;">三个；任意一个可以单独运行多次；</span></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>b)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">代码结构：</span>*Generator,<span style="font-family: 宋体;">用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">和</span>sqlmap<span style="font-family: 宋体;">，</span>controller<span style="font-family: 宋体;">等文件，在生成之后为了保持系统的完整性，通常会调用一些</span>Modifier<span style="font-family: 宋体;">去修改配置文件；由于每个</span>Generator<span style="font-family: 宋体;">会单独再次访问配置文件，所以可以单独和重复生成；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>c)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">主要的配置文件有</span>2<span style="font-family: 宋体;">个，位于</span>code_engine<span style="font-family: 宋体;">目录下，分别为：</span>code-engine-config.xml<span style="font-family: 宋体;">，</span>code-engine-gears.xml<span style="font-family: 宋体;">，但在实际使用中，我们经常要配置的是</span>code-engine-gears.xml<span style="font-family: 宋体;">，前者一般在项目开始的时候设定，后者用来生成和修改</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">和</span>sqlmap, controller<span style="font-family: 宋体;">，</span>jsp<span style="font-family: 宋体;">和相关的一些配置文件；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>d)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">模板文件位于</span>template<span style="font-family: 宋体;">文件夹下面；可以任意添加和调用；语法为</span>freemarker<span style="font-family: 宋体;">，但是，通常只需参照其他模板文件，一般都可以写出新模板；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>e)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">每次运行</span>codeengine<span style="font-family: 宋体;">都会在</span>backup<span style="font-family: 宋体;">目录下面生成备份文件，以备再次生成和修改；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>f)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">生成日志在</span>logs<span style="font-family: 宋体;">目录下；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>g)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span>Framework<span style="font-family: 宋体;">目录是框架目录，可重用部分，在生成新项目时候拷贝用；</span></p>
<p style="margin-left: 42pt; text-align: left; text-indent: -21pt;" align="left"><span><span>h)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span>Reference<span style="font-family: 宋体;">目录是一些开发组件，主要是写</span>js<span style="font-family: 宋体;">组件；</span></p>
<p><span>2.<strong> code-engine-config.xml
</strong></span><strong><span style="font-family: 宋体;">配置简介</span></strong><span style="font-family: 宋体;">：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?xml
version="1.0" encoding="UTF-8"?&gt;</span></p>
<p>&lt;codeEngineConfiguration&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;context&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&nbsp;&lt;distDir
path="D:"wiczone"trunk"wiczone" java="src"
web="war"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="D:"test"trunk"project"
java="src" web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="build" java="src"
web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;templateDir path="template"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;i18nSupport&gt;true&lt;/i18nSupport&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;database
classPath="lib"mysql-connector-java-3.1.7-bin.jar"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;driverClass&gt;org.gjt.mm.mysql.Driver&lt;/driverClass&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;url&gt;jdbc:mysql://localhost:3306/wiczone&lt;/url&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;username&gt;root&lt;/username&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;password&gt;root&lt;/password&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/database&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;package base="biz.wic" app="application"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;package base="biz.web"
app="framework"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;domain&gt;domain&lt;/domain&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;controller&gt;web&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;manager&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;service&gt;service&lt;/service&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/package&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;web layoutComponent="tiles"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;WEB-INF"applicationContext-manager.xml&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;lucene&gt;WEB-INF"applicationContext-lucene.xml&lt;/lucene&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;servlet&gt;WEB-INF"action-servlet.xml&lt;/servlet&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;security&gt;WEB-INF"applicationContext-acegi.xml&lt;/security&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;sqlMapConfig&gt;WEB-INF"sql-map-config.xml&lt;/sqlMapConfig&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;messages&gt;WEB-INF"classes"messages.properties&lt;/messages&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;WEB-INF"defs&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;jdbc&gt;WEB-INF"jdbc.properties&lt;/jdbc&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/web&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/context&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>IMPORTANT NOTES:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>1.in most cases, we no necessary to modify the &lt;context/&gt; part,
since we have already set done;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>2.each of controller/jsp can be re-created alternatively.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>3.please becareful that metadata's character case.</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>4.the basis rule is:</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>if not existed we will created;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>if already existed we may overwrited;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p>&lt;/codeEngineConfiguration&gt;</p>
<p style="margin-left: 39pt; text-indent: -18pt;">1）&nbsp;<span style="font-family: 宋体;">如上所示，</span>&lt; database &gt; <span style="font-family: 宋体;">用于配置数据库的连接，注意要保证</span>driver<span style="font-family: 宋体;">能访问到；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">2）&nbsp;&lt;Package&gt;<span style="font-family: 宋体;">负责生成各种代码使用，</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">3）&nbsp;&lt;web&gt;<span style="font-family: 宋体;">用于指定一些配置文件；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">4）&nbsp;<span style="font-family: 宋体;">以上文件通常在项目开始的时候设定；</span></p>
<p>&lt;context&gt;<span style="font-family: 宋体;">详解</span></p>
<p style="margin-left: 21pt; text-indent: 21pt;">a<span style="font-family: 宋体;">）</span><span>&lt;distDir
path="build" java="src" web="war"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;distDir path="D:"dist_project" java="src"
web="war"/&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;templateDir path="template"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;i18nSupport&gt;true&lt;/i18nSupport&gt;</span></p>
<p>distDir@path<span style="font-family: 宋体;">指目标项目的路径，&#8216;</span>build<span style="font-family: 宋体;">&#8217;是相对路径；</span> @java<span style="font-family: 宋体;">指</span>java source code<span style="font-family: 宋体;">的根目录；</span></p>
<p>@web<span style="font-family: 宋体;">指</span>web application<span style="font-family: 宋体;">的根目录；</span></p>
<p>templateDir@path<span style="font-family: 宋体;">指</span>freemarker template<span style="font-family: 宋体;">所在的目录，这里设定的是</span>$Code_Engin$"template; <span style="font-family: 宋体;">此目录下放置用于生成</span>controller<span style="font-family: 宋体;">和</span>jsp<span style="font-family: 宋体;">的模板文件（以</span>ftl<span style="font-family: 宋体;">为文件后缀）；</span></p>
<p>template /lib/<span style="font-family: 宋体;">下面放置的一个</span>common.ftl<span style="font-family: 宋体;">为通用的</span>functions<span style="font-family: 宋体;">，已经用</span>auto imports<span style="font-family: 宋体;">引入，要调用</span>common.ftl<span style="font-family: 宋体;">的</span>function<span style="font-family: 宋体;">，通常类似：</span><span>&lt;@ce.dosth param=paramObj
/&gt;, ce</span><span style="font-family: 宋体;">是</span>namespace<span style="font-family: 宋体;">，用于限定引用；具体代码见（</span>BaseGenerator.java<span style="font-family: 宋体;">）</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">5）&nbsp;i18nSupport<span style="font-family: 宋体;">是指定</span>jsp<span style="font-family: 宋体;">是否支持多语言；一般设定为支持的；</span></p>
<p><span>&lt;package base="biz.wic"
app="application"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&lt;domain&gt;domain&lt;/domain&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;controller&gt;web&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;manager&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;service&gt;service&lt;/service&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/package&gt;</span></p>
<p><span style="font-family: 宋体;">用于设定</span>java code<span style="font-family: 宋体;">的</span>package<span style="font-family: 宋体;">；</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&nbsp;&lt;web
layoutComponent="tiles"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;manager&gt;WEB-INF"applicationContext-manager.xml&lt;/manager&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;servlet&gt;WEB-INF"jbcc-servlet.xml&lt;/servlet&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;security&gt;WEB-INF"applicationContext-acegi.xml&lt;/security&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;sqlMapConfig&gt;WEB-INF"sql-map-config.xml&lt;/sqlMapConfig&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;messages&gt;WEB-INF"classes"messages.properties&lt;/messages&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;WEB-INF"defs&lt;/tiles&gt;</span></p>
<p style="margin-left: 39pt; text-indent: -18pt;">6）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/web&gt;</p>
<p>3.<strong>code-engine-gears.xml</strong><strong><span style="font-family: 宋体;">配置详解：</span></strong></p>
<p><span>&lt;?xml version="1.0"
encoding="UTF-8"?&gt;</span></p>
<p>&lt;gears&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>Generate model, related sqlmap manager file via abator, in most case we
don't need modify the abator-config.xml;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>just add the following model node will work;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>and this model node can create more than one;&nbsp;model name should be unique;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>default extends is : biz.web.framework.domain.BaseEntity</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;model name="city_model" table="city"
domain="City" usingLucene="false"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>extends="biz.web.framework.domain.BaseEntity" keyProperty="id"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>Create *Controller and *MgrController, modify layout component like
Tiles of Sitemesh;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>modify action-servlet.xml, applicationContext-*.xml</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>defaultMethods@keyProperty default to "id"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;controller name="City" springBeanDef="true"
template="controller.ftl"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;managers&gt;CityMgr&lt;/managers&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services
support="MailService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="index" style="form"
view="list_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="listAll" style="ajax" /&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="list" style="ajax" /&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="get" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&nbsp;using the option
[extends] to generated Mgr controller,</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>overwrite default to true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>method view default to</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;controller name="CityMgr" springBeanDef="true"
template="controller_mgr.ftl"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends="City"
overwrite="true"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services support="CompassService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="manager" style="form"
view="list_mgr_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="update" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="create" style="form" view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="save" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="edit" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="delete" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!-- overwrite default to true;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>jsp name attribute used for jsp file name, and also used for tiles
definition</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;jsp name="list_mgr_city" refController="CityMgr"
template="list_mgr_jsp.ftl" overwrite="false"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;main_layout_4&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;jsp name="edit_city" refController="CityMgr"
template="edit_jsp.ftl" overwrite="false"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tinyMCE&gt;content&lt;/tinyMCE&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_4&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;jsp name="detail_recommend"
refController="City" template="detail_jsp.ftl"
overwrite="false"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tinyMCE&gt;content&lt;/tinyMCE&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_1&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;/jsp&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--overwrite default to true;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;jsp name="list_city" refController="City"
template="list_jsp.ftl" overwrite="false"&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;tiles&gt;main_layout_2&lt;/tiles&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;/jsp&gt;--&gt;</span></p>
<p>&lt;/gears&gt;</p>
<p>1<span style="font-family: 宋体;">）</span>&lt;model&gt; &lt;controller&gt;&lt;jsp&gt; <span style="font-family: 宋体;">等节点用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">，</span>controller<span style="font-family: 宋体;">和</span>jsp<span style="font-family: 宋体;">，可配置</span>0-n<span style="font-family: 宋体;">个；次序随意</span>; <span style="font-family: 宋体;">且每个节点都有可选属性</span> overwrite <span style="font-family: 宋体;">（</span>true<span style="font-family: 宋体;">、</span>false<span style="font-family: 宋体;">）；</span></p>
<p>overwrite<span style="font-family: 宋体;">指定当目标</span>controller<span style="font-family: 宋体;">文件存在时，是否要覆写该文件，否则就生成</span>.generated<span style="font-family: 宋体;">为后缀的文件；</span>overwrite<span style="font-family: 宋体;">属性是可选的，默认为</span>true<span style="font-family: 宋体;">；</span></p>
<p>2<span style="font-family: 宋体;">）</span><span>&lt;controller name="CityMgr"
springBeanDef="true" template="controller_mgr.ftl"</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extends="City"
overwrite="true"&gt;</span></p>
<p style="margin-left: 42pt;">&lt;managers&gt;CityMgr&lt;/managers&gt;</p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;!--&lt;services
support="CompassService"&gt;&lt;/services&gt;--&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;defaultMethods refModel="city_model"&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="manager" style="form"
view="list_mgr_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="update" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="create" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="save" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="edit" style="form"
view="edit_city"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;method name="delete" style="ajax"/&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;/defaultMethods&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/controller&gt;</span></p>
<p><span style="font-family: 宋体;">这个配置看上去有些复杂，是为了提供更好的灵活性；</span>name<span style="font-family: 宋体;">用于在</span>code engine<span style="font-family: 宋体;">中标识</span>controller<span style="font-family: 宋体;">，同时用于生成的</span>controller.java<span style="font-family: 宋体;">的命名；在配置文件中应该是唯一的；</span></p>
<p>springBeanDef<span style="font-family: 宋体;">用于指出是否在相关的配置文件中添加</span>spring bean<span style="font-family: 宋体;">的定义，比如</span>xxx-servlet.xml<span style="font-family: 宋体;">等；否则只是生成</span>controller<span style="font-family: 宋体;">的</span>java<span style="font-family: 宋体;">；</span></p>
<p>template<span style="font-family: 宋体;">指定</span>freemarker<span style="font-family: 宋体;">模板；</span></p>
<p>managers<span style="font-family: 宋体;">指定要注入</span>manager<span style="font-family: 宋体;">定义；如果有多个用逗号分割；可选；</span></p>
<p>services<span style="font-family: 宋体;">指定要注入</span>service<span style="font-family: 宋体;">定义；如果有多个用逗号分割；</span>@support<span style="font-family: 宋体;">用于指定</span>framework<span style="font-family: 宋体;">下的</span>common service<span style="font-family: 宋体;">，比如</span>mail<span style="font-family: 宋体;">，</span>compass<span style="font-family: 宋体;">等；可选；</span></p>
<p>defaultMethods<span style="font-family: 宋体;">里面用于指定生成的</span>controller<span style="font-family: 宋体;">里面的方法；</span>refModel <span style="font-family: 宋体;">指参照的</span>model<span style="font-family: 宋体;">定义，</span> method@name<span style="font-family: 宋体;">用于指定方法名，比如</span>list<span style="font-family: 宋体;">，而且</span>list<span style="font-family: 宋体;">方法是预定义写在模板里面的</span>; method@style<span style="font-family: 宋体;">指定代码风格，可选有</span>form<span style="font-family: 宋体;">，</span>ajax<span style="font-family: 宋体;">两种；这个风格会同时影响</span>cotroller<span style="font-family: 宋体;">部分和</span>jsp<span style="font-family: 宋体;">部分；</span></p>
<p>method@view<span style="font-family: 宋体;">指方法返回的</span>tiles<span style="font-family: 宋体;">定义视图，当然这个属性在</span>style<span style="font-family: 宋体;">是</span>form<span style="font-family: 宋体;">的时候有效；可选；</span></p>
<p>e<span style="font-family: 宋体;">）</span>
<span>&lt;jsp name="edit_user" refController="UserMgr"
template="edit_jsp.ftl" &gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tinyMCE&gt;Description&lt;/tinyMCE&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>&lt;tiles&gt;main_layout_1&lt;/tiles&gt;</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;
</span>&lt;/jsp&gt;</span></p>
<p>Jsp<span style="font-family: 宋体;">的</span>name<span style="font-family: 宋体;">用于生成的</span>jsp<span style="font-family: 宋体;">页面的文件名，同时还是</span>tiles<span style="font-family: 宋体;">的定义，在生成</span>controller<span style="font-family: 宋体;">时候也是有用的；</span></p>
<p>refController<span style="font-family: 宋体;">就是指明</span>jsp<span style="font-family: 宋体;">所参照的</span>controller<span style="font-family: 宋体;">定义；通过这个</span>refController<span style="font-family: 宋体;">，</span>jsp<span style="font-family: 宋体;">可以找到</span>default_methods<span style="font-family: 宋体;">的</span>style<span style="font-family: 宋体;">，</span>refModel<span style="font-family: 宋体;">等信息；</span></p>
<p>Template<span style="font-family: 宋体;">指明所使用的</span>freemarker<span style="font-family: 宋体;">模板；</span></p>
<p><span style="font-family: 宋体;">这里省略了</span>overwrite<span style="font-family: 宋体;">属性，</span>overwrite<span style="font-family: 宋体;">属性是可选的，默认为</span>true<span style="font-family: 宋体;">；</span></p>
<p>tinyMCE<span style="font-family: 宋体;">指定要加入</span>tinyMCE<span style="font-family: 宋体;">支持，同时，所管理的属性为&#8216;</span>Description<span style="font-family: 宋体;">&#8217;；</span> <span style="font-family: 宋体;">可选属性；</span></p>
<p>tiles<span style="font-family: 宋体;">属性定义了，此</span>jsp<span style="font-family: 宋体;">所</span>extend<span style="font-family: 宋体;">的</span>layout<span style="font-family: 宋体;">，可选属性；</span></p>
<p>f) </p>
<p><span>&lt;model name="city_model"
table="city" domain="City" usingLucene="false"</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>extends="biz.web.framework.domain.BaseEntity"
keyProperty="id"/&gt;</span></p>
<p><span style="font-family: 宋体;">用于生成</span>domain<span style="font-family: 宋体;">，</span>manager<span style="font-family: 宋体;">，和</span>sqlmap<span style="font-family: 宋体;">，可以配置多个；</span></p>
<p>luceneSupport<span style="font-family: 宋体;">可选，如为</span>true<span style="font-family: 宋体;">代表将在</span>domain<span style="font-family: 宋体;">和</span>manager<span style="font-family: 宋体;">以及配置文件中加入</span>lucene<span style="font-family: 宋体;">的支持；</span></p>
<p>4.<strong><span style="font-family: 宋体;">创建新项目</span></strong></p>
<p>A.<span style="font-family: 宋体;">从</span>codeEngineRunner<span style="font-family: 宋体;">开始执行</span>createNewProject<span style="font-family: 宋体;">（&#8220;</span>distProject<span style="font-family: 宋体;">&#8221;）；（将</span>copy<span style="font-family: 宋体;">必需的框架文件到目标目录，同时修改</span>jdbc.properties<span style="font-family: 宋体;">等文件，同时将初始化</span>abator-config.xml<span style="font-family: 宋体;">；）</span></p>
<p>B<span style="font-family: 宋体;">．分别用到了</span>JDBCPropertiesModifier<span style="font-family: 宋体;">和</span>CodeEngineInitModifier<span style="font-family: 宋体;">；</span></p>
<p>C<span style="font-family: 宋体;">．执行目标工程</span>project<span style="font-family: 宋体;">目录下的</span>initdb.bat;<span style="font-family: 宋体;">初始化数据库，加载初始系统表和数据；当然执行此步骤之前要先创建数据库；</span></p>
<p>D<span style="font-family: 宋体;">．利用</span>codeEngineRunner<span style="font-family: 宋体;">的从数据库表，生成相应的文件后，使用</span>project<span style="font-family: 宋体;">目录下</span>build.bat<span style="font-family: 宋体;">编译文件；</span></p>
<img src ="http://www.blogjava.net/bourn/aggbug/143997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-10 14:47 <a href="http://www.blogjava.net/bourn/articles/143997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用开源组件开发高性能(Scalability and High Performance)的网站_1</title><link>http://www.blogjava.net/bourn/articles/142712.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Tue, 04 Sep 2007 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/142712.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/142712.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/142712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/142712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/142712.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体;">利用开源组件开发高性能</span>(Scalability and High Performance)<span style="font-family: 宋体;">的网站</span></p>
<p style="margin-left: 18pt; text-indent: -18pt;"><span><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: 宋体;">方案：</span></p>
<p style="margin-left: 42pt; text-indent: -21pt;"><span><span>a)<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span>Load balancer +<span>reverse proxy server + server
cluster</span><span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">图一是整体的结构图；思路很清楚；这种的结构的网站系统可以提高系统的响应能力；</span></p>
<p><span><!--[if gte vml 1]>
<![endif]--></span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/images/blogjava_net/bourn/image002.jpg" height="438" width="553" />&nbsp; <span style="font-family: 宋体;">图一</span></p>
<p style="margin-left: 21pt;">b<span style="font-family: 宋体;">）细节问题：</span></p>
<p style="margin-left: 21pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i<span style="font-family: 宋体;">）</span>web server <span style="font-family: 宋体;">是否可以是非同质的</span>server<span style="font-family: 宋体;">，比如有的负责</span>mail<span style="font-family: 宋体;">，有的负责</span>web<span style="font-family: 宋体;">页面，</span></p>
<p style="margin-left: 42pt; text-indent: 10.5pt;"><span style="font-family: 宋体;">有的负责文件上传；</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ii)<span style="font-family: 宋体;">用户的</span>session<span style="font-family: 宋体;">信息如何在不同的</span>server<span style="font-family: 宋体;">之间同步；</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iii<span style="font-family: 宋体;">）如果使用数据库集群的话，则有的</span>dbserver<span style="font-family: 宋体;">只负责读数据，有的则读写都做；</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">如何实现；</span>Replaication <span style="font-family: 宋体;">在</span>mysql<span style="font-family: 宋体;">中的支持正在研究；</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c<span style="font-family: 宋体;">）加入</span>reverse proxy server; <span style="font-family: 宋体;">图二显示了如何在架构中加入</span>reverse proxy server<span style="font-family: 宋体;">；</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">这里选择的</span>proxy server<span style="font-family: 宋体;">是</span>squid <span style="font-family: 宋体;">（</span>http://<span style="font-size: 10pt;">www.squid-cache.org</span><span style="font-family: 宋体;">），（至于为什么选它，</span></p>
<p style="margin-left: 15pt; text-indent: 31.5pt;"><span style="font-family: 宋体;">因为很多人都用它；本人奉行拿来主义）；</span>squid<span style="font-family: 宋体;">用来</span>cache<span style="font-family: 宋体;">静态的文件，</span>js<span style="font-family: 宋体;">，</span>image<span style="font-family: 宋体;">，</span></p>
<p style="margin-left: 15pt; text-indent: 31.5pt;">css<span style="font-family: 宋体;">等；</span>squid<span style="font-family: 宋体;">可以和</span>tomcat<span style="font-family: 宋体;">，</span>apache<span style="font-family: 宋体;">等集成；</span></p>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/bourn/image006.jpg" height="437" width="554" />
<p><span><!--[if gte vml 1]>
<![endif]--></span></p>
<p><span style="font-family: 宋体;">图二</span></p>
<p style="margin-left: 21pt;">d<span style="font-family: 宋体;">）谁来做</span>load balancer<span style="font-family: 宋体;">呢，如果你使用</span>linux<span style="font-family: 宋体;">操作系统的话，那么一定要试试</span><span style="font-size: 10pt;">Linux
Virtual Server</span><span style="font-size: 10pt; font-family: 宋体;">（</span><span style="font-size: 10pt;"><a href="http://www.linuxvirtualserver.org/">www.linuxvirtualserver.org/</a>&nbsp;http://zh.linuxvirtualserver.org/ </span><span style="font-size: 10pt; font-family: 宋体;">）</span><span style="font-size: 10pt;">, </span><span style="font-size: 10pt; font-family: 宋体;">我国的章文嵩博士主持的开源项目，</span>TelTel<span style="font-family: 宋体;">的首席科学家；</span></p>
<p style="margin-left: 21pt;">IBM <span style="font-family: 宋体;">的介绍资料：</span></p>
<p style="margin-left: 21pt;"><a href="http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part1/index.html">http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part1/index.html</a></p>
<p style="margin-left: 21pt;"><a href="http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part2/index.html">http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part2/index.html</a></p>
<p style="margin-left: 21pt;"><a href="http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part3/index.html">http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part3/index.html</a></p>
<p style="margin-left: 21pt;"><a href="http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part4/index.html">http://www-128.ibm.com/developerworks/cn/linux/cluster/lvs/part4/index.html</a></p>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/bourn/image008.jpg" height="493" width="554" />
<p><span><!--[if gte vml 1]>
<![endif]--></span></p>
<p><span style="font-family: 宋体;">图三</span></p>
<img src ="http://www.blogjava.net/bourn/aggbug/142712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-04 18:00 <a href="http://www.blogjava.net/bourn/articles/142712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源框架的选型</title><link>http://www.blogjava.net/bourn/articles/142111.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Sun, 02 Sep 2007 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/142111.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/142111.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/142111.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/142111.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/142111.html</trackback:ping><description><![CDATA[<span style="font-family: 宋体;">如果你想用开源框架来开发</span>web<span style="font-family: 宋体;">项目，选择一套适用的组件是很关键的；</span>
<p><span style="font-family: 宋体;">不光要考虑开发的简单，还要考虑日后的升级；</span></p>
<p><span style="font-family: 宋体;">甚至足够充分的文档资料支持；还有现有团队的技术能力；以及项目时间等；</span></p>
<p style="margin-left: 31.5pt; text-indent: -31.5pt;">MVC<span style="font-family: 宋体;">：第一要素我个人觉得是要简单，因为在这个部分的中的代码量，通常相对后端是很多的；一个容易上手，并且大家都熟悉并且不讨厌；</span></p>
<p style="margin-left: 31.5pt; text-indent: -31.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SpringMVC<span style="font-family: 宋体;">，我个人觉得是很完备的</span>mvc<span style="font-family: 宋体;">，有着很強的灵活性，但正是这种灵活性，让很多人无所适从；</span></p>
<p style="margin-left: 31.5pt; text-indent: -31.5pt;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struts 1
</span><span style="font-family: 宋体;">标签很糟糕；</span>form<span style="font-family: 宋体;">对象很别扭，繁琐的配置；</span></p>
<p style="margin-left: 31.5pt; text-indent: -31.5pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Struts2 <span style="font-family: 宋体;">没有用过，如果他还有</span>form<span style="font-family: 宋体;">我就不打算用；</span></p>
<p style="margin-left: 31.5pt;"><span style="font-family: 宋体;">学习</span>springside<span style="font-family: 宋体;">（以前）使用</span>Spring <span style="font-family: 宋体;">的</span>MultiActionController<span style="font-family: 宋体;">，减少了很多没有必要的配置；在一个</span>controller<span style="font-family: 宋体;">里面可以写多个</span>Action<span style="font-family: 宋体;">；</span>MultiActionController<span style="font-family: 宋体;">还可以很灵活的从</span>request<span style="font-family: 宋体;">中绑定</span>Domain<span style="font-family: 宋体;">对象，非常的方便；</span></p>
<p style="margin-left: 31.5pt;"><span>MultiActionController
</span><span style="font-family: 宋体;">加</span> Controller<span style="font-family: 宋体;">可以满足全部的需要；</span></p>
<p style="margin-left: 31.5pt;">JSP<span style="font-family: 宋体;">部分使用</span>spring form tag<span style="font-family: 宋体;">；</span></p>
<p>Tiles <span style="font-family: 宋体;">和</span> sitemesh<span style="font-family: 宋体;">；</span> <span style="font-family: 宋体;">考虑到使用</span>Ajax<span style="font-family: 宋体;">，而</span>sitemesh<span style="font-family: 宋体;">是利用</span>filter<span style="font-family: 宋体;">来修饰；选择</span>Tiles<span style="font-family: 宋体;">；</span></p>
<p>ORM<span style="font-family: 宋体;">用</span>ibatis,<span style="font-family: 宋体;">当前最实用，简单的</span>ORM<span style="font-family: 宋体;">；而且可以自动生成，又容易理解；何乐而不为；</span></p>
<p>FullTextSearch<span style="font-family: 宋体;">：</span> compass + lucene<span style="font-family: 宋体;">；</span></p>
<p>Others<span style="font-family: 宋体;">：</span>ActiveMQ + ApacheCXF</p>
<p><span>Form/Ajax Request &gt; Controller &gt;
Manager/Service &gt; GenericDao</span></p>
<p><span style="font-family: 宋体;">其他辅助工具：</span></p>
<p>EMS for mysql<span style="font-family: 宋体;">；</span></p>
<p>SVN as version control<span style="font-family: 宋体;">；</span></p>
<p>DB/web server<span style="font-family: 宋体;">：</span>mysql/resin</p>
<img src ="http://www.blogjava.net/bourn/aggbug/142111.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-09-02 19:23 <a href="http://www.blogjava.net/bourn/articles/142111.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于SVN服务器</title><link>http://www.blogjava.net/bourn/articles/141552.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141552.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141552.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141552.html</trackback:ping><description><![CDATA[<p>网上找不到国内的svn主机服务，这个市场好像是空白的； <br>
现有的收费的都是国外的，而且要国际信用卡才能支付，很麻烦的；速度也不敢保证； <br>
偶然发现这个：javaforge免费的svn主机服务； <br>
虽然速度很慢，但是很方便，马上就可以用； <br>
1.首先去<a href="http://www.javaforge.com/%E6%B3%A8" target="_blank">http://www.javaforge.com/注</a>册并激活你的帐号；注意注册的账号和密码也就是svn的 <br>
&nbsp; 账号； <br>
2.由项目里面的人把你加进去；（现在有我和文光） <br>
3.svn的访问URL：<a href="http://svn.javaforge.com/svn/wiczone/%EF%BC%9B" target="_blank">http://svn.javaforge.com/svn/wiczone/；</a> <br>
大家可以通过TortoiseSVN去连，如果是在公司的话，注意设置TortoiseSVN的代理服务器选项； <br>
4.用在javaforge注册的账号登录，即可； </p>
<p>关于速度问题； <br>
我想在大多数情况下，我们不是在get <br>
all，如果只是java， jsp， <br>
xml等的话，还是可以忍受的；同时更新几个文件大约1分钟左右（我在公司测的）； <br>
如果get <br>
all的话，可以选择一个空闲的时间去得，或者由某个人得一下，想办法减少重复工作； <br>
或者大家有没有什么好建议？ ：） </p>
<p>最新进展： <a href="http://www.coollittlethings.com/svn/wiczone/" target="_blank">http://www.coollittlethings.com/svn/wiczone/</a>
<br>
私有的，免费的，快的； <br>
步骤：1.注册和激活； </p>
<p>2.访问<a href="http://svn.coollittlethings.com/project_detail.php?name=wiczone" target="_blank">http://svn.coollittlethings.com/project_detail.php?name=wiczone</a>
<br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 申请加入此项目； <br>
&nbsp; &nbsp; &nbsp; 3.通知我把申请者加入，即可； </p>
<p>&nbsp;</p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:09 <a href="http://www.blogjava.net/bourn/articles/141552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做网站最难的是什么？</title><link>http://www.blogjava.net/bourn/articles/141551.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141551.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141551.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141551.html</trackback:ping><description><![CDATA[<p><br></p>
<p>做网站最难的是定位。 </p>
<p>当定好位，剩下的事情再苦再难对站长来说也是快乐。 </p>
<p>当一个人有做事的信心和能力，却不知道要做什么时是最痛苦的。 </p>
<p>当一个剑客找不到人PK的时候是最孤独的。 </p>
<p>当一个站长无法确定一个网站定位的时候是最彷徨的。 </p>
<p>站长失败的两大原因： 1 定位错误 &nbsp;2 缺乏坚持
</p>
<p>有一个经常被引用的故事： </p>
<p>一个人挖井，10年先后挖了10眼井，没有一眼挖出水来。有好多眼井，在快要挖出水的时候，他动摇了，放弃了，他认为里永远不会挖出水，于是又去开挖一眼新井，就这样10年过去了... <br>
另一个人，一眼井坚持挖了10年，终于挖出了如泉水般的、清冽甘甜的井水， <br>
他成功了！ </p>
<p>上面的故事被很多成功者引用，以证明坚持的重要性。 </p>
<p>但问题是，如果这个地方真的挖不出水呢？或者你根本不可能坚持到挖出水的那天，你为什么不去寻找一个地下蕴涵着丰富水资源的地方呢？ </p>
<p>还有，当你终于选择了一个水位非常高、水质非常好的地方，但别人，那些更具实力的挖井大户也看中了这个地方，在你的旁边以比你更快的速度打了一眼深井，你怎么办？ <br>
所以刚刚起步的网络创业者，你第一要定好位。第二要确定这是大网站顾及不到的地方。你要确定你不仅能率先在这里打出水，而且能牢牢占据这个地方！ </p>
<p>你看好在线点播、看好B2B、C2B、B2C，但你看到排成长队、腰缠万贯、虎视耽耽的那些人了吗？你冷静的想一下你能挤进去吗？以为有千八百万很了不起吗，但有人可以上亿烧钱，你和他玩，玩的起吗？强者和强者最后的竞争是实力的竞争、是资本的较量。 <br>
我们要玩的是弱者和强者的游戏，是用弱者之强对强者之弱。强中有弱，弱中有强，这是颠仆不破的真理！强能转为弱，弱能化为强，这是永恒的运动规律！这些暂且不提，再回到网站的定位上。 </p>
<p>网络创业者的定位是否正确，基本上就决定了他的事业能否得到长远发展。 </p>
<p>网络创业的机会还非常非常多，关键是有没有抓住这些机会的眼光！ </p>
<p>还是用打井做比喻，你可以聘请专业的勘探队伍帮你寻找最佳位置。你还可以接着别人半途而废的井继续挖，但关键还是眼光要好，眼光好则定位准确，定位准确，网站发展会形成良性循环，所有的努力都将促进网站的快速发展。定位不准确，则事倍功半，最后徒劳无功。 </p>
<p>一开始的定位很小，小可以变成大， </p>
<p>一开始的定位很大，大可能变成小。 </p>
<p>所以我觉得特色很重要，而且不易模仿的特色其实才能算是真正的特色，因为在中国很多好东西，从一开始就是在模仿；模仿就是在学习别人的定位，而非自己的，只有自己设立的目标或特色，在长时间的努力坚持后，才形成自己真正的特色；才是网站长久发展的根本；</p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:08 <a href="http://www.blogjava.net/bourn/articles/141551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 Selenium 测试 Ajax 项目</title><link>http://www.blogjava.net/bourn/articles/141549.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141549.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141549.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141549.html</trackback:ping><description><![CDATA[<p><br></p>
<p>&nbsp;Selenium <br>
是一个由ThoughtWorks做的专门为web应用所做的非常有效的功能测试工具。Selenium <br>
的 tests <br>
直接在浏览器里跑，就像用户真的在操作一样。Selenium <br>
可运行 Windows, Linux, 和 Macintosh
的各种浏览器， 如 <br>
Internet Explorer, Mozilla 和 Firefox。 <br>
....... </p>
<p>访问链接： <br>
<a href="http://forum.springside.org.cn/viewthread.php?tid=195&amp;extra=page%3D1" target="_blank">http://forum.springside.org.cn/viewthread.php?tid=195&amp;extra=page%3D1</a>
</p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:06 <a href="http://www.blogjava.net/bourn/articles/141549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中文问题</title><link>http://www.blogjava.net/bourn/articles/141546.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141546.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141546.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141546.html</trackback:ping><description><![CDATA[<p>
</p>
<p>之前一直以为我们搞定了中文，所以一直没有怀疑我们的配置，今天和立国发现一个问题： <br>
就是用ajax的方式去创建一个记录，然后用jsp的方式去取数据，出现乱码； <br>
但是用ajax的方式取此记录，正常； <br>
后来发现，我们提交数据的方式，不管是ajax的，还是form表单提交，所使用的编码通通没有指定！！，虽然我们在页面上加上了&lt;%@
<br>
page contentType="text/html;charset=UTF-8" language="java" <br>
%&gt;，但这一句主要是负责response的数据显示； <br>
查了资料后才发现需要加上：&lt;%@
page &nbsp;pageEncoding="utf-8" <br>
%&gt;； <br>
而之前我们都没有指定request的charset，所以按照servlet标准，大多数web <br>
server（Resin，Tomcat）默认按照iso-8859-1来处理，而我们的数据库是utf-8的，所以放到数据库中的数据并不是utf-8的；所以用jsp显示时候出错；但用ajax的方式为什么没出错，还没有搞明白； <br>
解决方案： <br>
1.ajax方式 <br>
#1：prototype.js
[line707]contentType: <br>
'application/x-www-form-urlencoded;charset=UTF-8', <br>
#2：BaseController
[line135] response.setCharacterEncoding("UTF-8"); <br>
以上两行保证了ajax请求和相应的方式一致，并都是utf8； <br>
2.form表单方式； <br>
#3：在jsp加上：&lt;%@ page
&nbsp;pageEncoding="utf-8" %&gt;； <br>
#4：和&lt;%@ page
contentType="text/html;charset=utf-8" language="java" <br>
%&gt; <br>
3.我在web。xml中加了一个encodefilter，保证了当请求中没有指定charset的时候，使用utf-8方式，所以以上#1和#3处的指定charset是可选的！! <br>
请大家注意更新以上3个文件；prototype.js,BaseController <br>
.java, web.xml</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>同意以上所述，更新3个文件：prototype.js, <br>
BaseController.java, web.xml ，顶。</p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:04 <a href="http://www.blogjava.net/bourn/articles/141546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin下debug的问题</title><link>http://www.blogjava.net/bourn/articles/141545.html</link><dc:creator>段氏</dc:creator><author>段氏</author><pubDate>Thu, 30 Aug 2007 15:02:00 GMT</pubDate><guid>http://www.blogjava.net/bourn/articles/141545.html</guid><wfw:comment>http://www.blogjava.net/bourn/comments/141545.html</wfw:comment><comments>http://www.blogjava.net/bourn/articles/141545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bourn/comments/commentRss/141545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bourn/services/trackbacks/141545.html</trackback:ping><description><![CDATA[<p>关于在Resin下debug的问题，也很简单，首先将为httpd.exe建立一个快捷方式，然后右键属性，在D:\resin-pro-3.0.18\httpd.exe <br>
后面添加 -Xdebug
-Xnoagent -Djava.compiler=NONE <br>
-Xrunjdwp:transport=dt_socket,address=1183,suspend=n,server=y <br>
语句，启动resin后，就可发现第一行就会有提示的；</p>
<p>我发现直接按照以上的配置resin还有问题，就是无法加载applicationContext_manager.xml;
<br>
我费了很大劲才搞明白，是resin用自己的xmlparser所以不识别spring2.0的xml <br>
schema 配置；已经找到解决办法： <br>
1.将&lt;web-app id="/wiczone"
document-directory="你自己的wiczone war </p>
<p>目录G:/IdeaProjects/wiczone/trunk/wiczone/war"/&gt; 改为： <br>
&lt;web-app id="/wiczone" <br>
document-directory="D:/wiczone/trunk/wiczone/war"&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- xml --&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;system-property
javax.xml.parsers.DocumentBuilderFactory= <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;"org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"/&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&lt;system-property javax.xml.parsers.SAXParserFactory= <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;"org.apache.xerces.jaxp.SAXParserFactoryImpl"/&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;!-- &nbsp;xslt --&gt; <br>
&nbsp; &nbsp; &nbsp; &nbsp; &lt;system-property
javax.xml.transform.TransformerFactory= <br>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp;"org.apache.xalan.processor.TransformerFactoryImpl"/&gt; <br>
&nbsp; &nbsp; &nbsp; &lt;/web-app&gt;; <br>
2.得最新web-inf\lib下的jar包；多加了一个xml解析器； <br>
另外，\trunk\web <br>
server\resin下面有resin服务器，和resin配置文件； </p>
<br> <img src ="http://www.blogjava.net/bourn/aggbug/141545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bourn/" target="_blank">段氏</a> 2007-08-30 23:02 <a href="http://www.blogjava.net/bourn/articles/141545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>