<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>lococode</title>
    <description>停车坐爱枫林晚，银盔银甲亮银枪！</description>
    <link>http://lococode.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Tapestry 5 的一些优缺点及设想</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/224980" style="color:red;">http://lococode.javaeye.com/blog/224980</a>&nbsp;
          发表时间: 2008年08月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本来这篇应该叫做：Maven Tapestry Spring Hibernate 整合开发（四）&nbsp; 但后来想了想好像不太合适，但也就作为前面三篇文章的补充吧。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于自身的懒惰，这个系列一直没能顺畅连续的进行下去，这里先表示歉意。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        这个系列其实重点是放在Tapestry 5 上的，这里重点介绍一下T5。在这期间我也用这些开源框架写了个网站（找到合适的时间会发布出来滴） 。<br />
<br />
        T5 现在的版本已经是5.0.13 了，从5.0.6到现在可能比较重大和明显的改变就是对ajax的支持，5.0.13 之前也有ajax的支持，但一直都有问题，主要是对浏览器兼容的问题，比如firefox下没问题，但在ie下就会出现各种各样的问题，现在的版本也还是有些问题的，比如：当在组件中使用</p>
<pre name="code" class="java">@IncludeJavaScriptLibrary ({&quot;&quot;}) </pre>
<p>或者</p>
<p>&nbsp;</p>
<pre name="code" class="java">@IncludeStylesheet({&quot;&quot;})</pre>
<p>&nbsp;当此组件是作为zone的block中使用时，将会出现找不到 js 或者 css的问题，这也是T5 本身的问题。</p>
<p>还有，对同时更新多块的支持还未实现等。</p>
<p>&nbsp;</p>
<p>还有一点比较关键的是，T5的入门确实门槛高了点，有很多东西不是一下子能搞得清楚，当然这对于高手来说可能不成问题，而且还会很兴奋，但对于一个开发团队来说，如果突然接受这样的开发框架，可就有点招架不住了。</p>
<p>比如，默认的事件名，事件间的调用顺序和调用逻辑，页面构造的逻辑，什么是组件？为什么要这样实现组件？ 怎样实现一个简单的级联菜单，树形菜单等？当有这么多问题弄到一起来时，问题就大了。我之前带的一个项目都使用T5 ，那时还是5.0.4。 到现在很多程序员还对T5的机制一知半解，或者完全只知道copy例子。所以对于新的项目团队在准备选择T5时还是要慎重为好。</p>
<p>&nbsp;</p>
<p>话反过来说呢，T5是给聪明勤奋的程序员准备的，锻炼脑力啊（^_^）。聪明而又勤奋的程序员拿到这样的开发框架怎么办？看不懂？不会？ 那怎么可能，不懂也要弄死T，直到爽为止。从代码看起，只要有点java功底，svn checkout t5-trunk 会代码，同时 mvn t5-demo ，demo 有了，源代码有了，不就是小小的java嘛。（哈哈，说胡话，java不小）。</p>
<p>&nbsp;</p>
<p>：P 说了这么多，都是废话啊，怎么没看到一点介绍实质性的东西呢，那，实质性的东西来了。看了这么久，也弄了这么久了，发现T5欠缺的就是到现在还没有稳定的版本，以及其本身的组件太少，虽然有一个什么<a href="http://87.193.218.134:8080/t5components/index.html" title="t5components"> t5components</a>
 ,但是还是缺很多常用的一些，如我上面提到的，而且其是按照T5的更新速度来更新的。 </p>
<p>&nbsp;</p>
<p>问：是否有人愿意一起把T5的一些常用的组件实现出来，并确立一个版本为基础版本，让T5变的悦来越好用。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/224980#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 06 Aug 2008 13:36:07 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/224980</link>
        <guid>http://lococode.javaeye.com/blog/224980</guid>
      </item>
      <item>
        <title>安全幻想曲2008-转载</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/176600" style="color:red;">http://lococode.javaeye.com/blog/176600</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.cnbeta.com/topic.php?topicid=157"></a><strong><p><br />来源:Ph4nt0m Security Team</p></strong><p><br />我见过的大多数安全人员，都对技术有着一种狂热，甚至是一种偏执。这种情绪在做安全研究员的时候是非常有好处的，因为作为研究员，可能要偏执考虑到一些极端的情况。这种钻研精神，是光靠勤奋所无法达到的。但是在甲方做安全的话，可能更多时候需要的就不是狂热，而是掌握平衡的艺术。在商业利益与安全性发生冲突时，如何处理好这个平衡，是一个关键。<br /></p><p>举一个简单的例子来说，眼下最流行的XSS攻击，其修补方案从总体上来说，大致可以分为escape output和filter input两种。对于狂热的安全人员来说，当然是恨不得把网站全部弄成静态的，输出都采用escape output，全部输出纯文本，就天下太平了。然而现实与理想总是有差别的，首道难关就是网站肯定会有些富文本的需求。<br /><br />&nbsp;&nbsp;&nbsp; 当安全和需求相抵触时，一定是安全给商业需求让路。这里要避免一个误区，就是安全应该是为需求而服务的，而不是成为需求的障碍。其实这个观点大多数人都心知肚明，但是在实际操作起来的时候往往会事与愿违。<br /><br />&nbsp;&nbsp;&nbsp; 再回到富文本上来，当需求决定需要有富文本输出的时候，狂热的安全人员（下称为狂战士吧）就只好退而求其次，要求对富文本做filter input，对其他没有富文本的地方做escape output。接下来问题来了，对于程序员来说，富文本往往采用了一些第三方的，或者是基于第三方的富文本编辑器，还有的是自己实现了一个。而这些富文本 编辑器，往往在考虑xss defense的时候有所欠缺。这时候采用什么样的策略来做filter input，就成为了新的问题。<br /><br />&nbsp;&nbsp;&nbsp; 第一个难关就是程序员会拉上商业，一起来和狂战士PK，说filter input很容易误杀客户的正常操作，还会影响到性能。当然这小小的难关还难不倒狂战士。狂战士往往会轻蔑的一笑，然后把风险推到商业上，说出了问题让他 背黑锅之类。这种狠话一放出来，商业往往就会退缩了，毕竟狂战士这么个狠角色是摆在那里的。所以最后会决定让程序员去整filter。<br /><br />&nbsp;&nbsp;&nbsp; 于是程序员简单写了个基于正则的blacklist，并且禁用了部分标签，比如script。狂战士这时候又蹦了出来，对程序员指手画脚，要求禁用 style，因为这玩意太难控制了，黑客有几百种利用style的方式；狂战士还说，基于正则的匹配这个魔法等级太低了，要换个高级魔法，比如个语法分析 器，类似html purify这种，还要有log analysis和realtime monitor功能。<br /><br />&nbsp;&nbsp;&nbsp; 一般到了这个时候，程序员对狂战士的忍耐已经差不多到极限了，因为甲方网站很少以安全为主要考核因素，没人会认为一个视频网站或者是交友网站的安全需要做 的比FBI更好，因为没那么大的成本投入。于是程序员说要释放这么个高级魔法需要一个团的程序员配合，还需要召唤很长时间才能放出来，所以狂战士的这个非 常牛B的魔法无法完成。而一般在这个时候，程序员往往会用啥性能和稳定性之类的因素来忽悠狂战士，说这种魔法一般有一定概率会反噬，没整好就把自己整残 了。<br /><br />&nbsp;&nbsp;&nbsp; 狂战士无奈之下，只好同意程序员实现一部分的魔法，filter部分过滤完整有效就行了。做好这个之后，狂战士还让程序员去对没有富文本需求的地方使用 escape output。程序员这时候对狂战士已经忍无可忍了，因为由于以前从来没有注意过xss这方面的问题，所以需要escape的地方是以&ldquo;千&rdquo;或者是&ldquo;万&rdquo; 为单位的，多如牛毛。于是程序员开始消极怠工，并且开始诉苦。这条路走不通了，狂战士只好开始寻求更好的方案。<br /><br />&nbsp;&nbsp;&nbsp; 后来狂战士回家睡了一觉，在梦中有仙人传授武艺，于是马上想到了新的办法。第一招是filter output，不过这个扯淡的方法根本属于yy，因为对服务器压力太大。第二招是使用WAF，就是web application firewall，开个虚拟补丁，这样程序员不补也能搞定web漏洞。不过这样就依赖于WAF的规则了，而且治标不治本。看来昨晚那个仙人估计是灶君一类 低级的小神，尽出馊点子。看来狂战士还得继续和程序员PK下去了。<br /><br />&nbsp;&nbsp;&nbsp; 可以见到，那些牛圈里的狂战士常认为是&ldquo;奇技淫巧&rdquo;的XSS问题里，有这么多头疼的问题。简单的问题变得越来越复杂。<br /><br />&nbsp;&nbsp;&nbsp; 安全是一个持续的过程（process）。既然是过程，就会有第一步、第二步 ... 第N步，有一个持续的概念在里面，不能今天整了，明天就不管了。今天的安全并不代表明天的安全，新的技术和应用在不断发展，就会不断带来新的问题。经常看 到一个升级反而把漏洞升级出来的例子。所以安全是一个持续的对抗过程，hacking与anti-hacking的过程，广义来说，更是一个弱化风险的过 程。<br /><br />&nbsp;&nbsp;&nbsp; 很多BOSS往往都会这么问狂战士：我上了这个720安全卫士是不是桌面安全就不用管了？我上了这个卖红茶IPS是不是就能挡住所有刺客入侵了？ 狂战士这时候很无奈的说：不行，还是有很多trojan和rootkit可以bypass主动防御，很多shellcode和0day可以anti IPS。 于是BOSS很生气的说： 那我花这么多钱买这个做啥？ 狂战士一般会忽悠他说：上了这个可以解决90%的攻击。 于是BOSS会很不满意，让狂战士出技术分析报告，一定要有充分的理由才行，狂战士往往要面对这种烦恼。<br /><br />&nbsp;&nbsp;&nbsp; 其实BOSS的这种观点是一种急功近利的想法，没有认识到安全是一个过程，并且是一个持续改进的过程。不是买个box就能解决问题的。没有100%的安 全，有漏洞的地方太多了。经常有魔法师用木桶原理来阐述安全问题，但其实很多时候，连木板在哪里，到底那块木板才是短板，都没有一个很清晰的认识，因为很 多时候根本无法量化，所以狂战士的工作经常陷入误区。板子太多了，系统、网络、用户、应用、数据、桌面......<br /><br />&nbsp;&nbsp;&nbsp; 放眼看去，全是短板，每块板子都能让刺客或盗贼轻松的进来，偷走核心数据或者弄摊网站然后扬长而去。或者各种短板互相组合，让问题变得更加扑朔迷离。<br /><br />&nbsp;&nbsp;&nbsp; 前面说的WAF就是一种比较功利的做法，虽然厂商经常会蹦出来说这玩意是需要有专人维护的，也是一个持续的过程。但实际上很多购买WAF的用户都没有好好 的去做这个过程。其实WAF、IPS最大的软肋不是在没人跟进上，而是在于其是串联的网络上的，特别是开了虚拟补丁的阻断模式的时候。这对于高可用性的应 用来说，绝对是无法忍受的。没人敢背这个误杀的黑锅。要是因此导致了PV下降，可能老板就要喊到办公室去喝茶了。不过WAF也不是完全没用，如果能够用好 的话，对于网站还是还是很有帮助的，至少在monitor和攻击流量分析上起着积极的意义。不过前提是用好。<br /><br />&nbsp;&nbsp;&nbsp; 刚才说了安全是一个过程(Process)，其实有人跟进这个过程还不够，下面还要重点说说深度防御的思想。经常看到YY小说的作者在写到黑客攻防的时 候，说到XXX在xx分钟内就突破了N道防火墙，N大于100；变形金刚里也这么有这种场景。其实这纯粹是扯淡，没事整那么多防火墙做什么，无端影响了可 用性。不过YY作者深度防御的理念还是正确的，只是他不知道那玩意不应该单纯叫防火墙，要想表达这个思想，可以整个专业名词，比如：多层防御体系。这样装 B就可以装的比较像样了。举例来说，可以在应用层校验用户输入数据，DB层面检查每条sql，操作系统上细分权限，服务最少化，网络上防御arp spoof，加密传输通道，做好ACL&hellip;类似措施还有很多，防御的方案交叉层叠起来，就能起来一个比较好的保护效果。<br /><br />&nbsp;&nbsp;&nbsp; 不过偏偏还有不识趣的，比如前面的很多程序员都会说，我都已经做了filter input，还要escape output做啥。狂战士一般听到后会有想要狂化的冲动。按耐住狂化，告诉程序员，说filter input可能会做不干净，会被bypass，毕竟如果遇到一个手执绝世0day(bypass filter)的9级刺客，什么牛B的防御魔法都挡不住，所以能escape output的地方，最好escape掉，这样最干净。可是即便是这样做好了，还是有些会有很难处理和发现的地方，比如在DOM里的XSS，比如在JS里 面一些写的很BT的地方，等。这些只能靠肉眼去看了。PK还得进行下去。<br /><br />&nbsp;&nbsp;&nbsp; 但是程序员还是不能很好的理解，他们跑出来说：我这里做了完善的access control，只有管理员才看的到，这里就算有注射有跨站就随他去了，不需要修复。想偷这种懒的人其实不在少数。这种想法违背了深度防御的思想。先姑且 不论如果管理员密码泄露，或者管理员是个内鬼的情况。如果刺客通过注射拿到了管理员密码，或者是直接通过XSS和CSRF来对后台进行注射，那么前面的 access control就完全没作用了。<br /><br />&nbsp;&nbsp;&nbsp; 在一定程度上，是可以容忍风险的存在的，但是从长期来看，这种做法是非常不可取的。比如有的管理员会说防火墙只允许80端口，那么RPC漏洞或开其他端口 的应用漏洞是否就可以不补了。也许一时来说是没什么问题，但是如果放置不管将导致没有人来维护漏洞，也许哪天的防火墙策略变更，或者来自内部系统的威胁， 都有可能导致当时看起来无害的漏洞被利用。而这种做法的一个后果往往是难以检查原因，就是说咋死的都不知道。所以这又回到了开始的话题：安全是一个持续的 过程。<br /><br />&nbsp;&nbsp;&nbsp; 在灌输完深度防御的思想给程序员以后，狂战士又被另外一种程序员打击到崩溃了。面对满目都是红色的扫描报告，他们说:我这个xxx ftp没漏洞，除非狂战士可以证明黑客能搞进来拿到shell。一般狂战士听到这种要求，狂化的概率在80%以上。首先，不是只有能拿到shell的才叫 漏洞。一个dos可能会造成业务的中断，一个infomation leak可能会为后续攻击带来便利，等等。<br /><br />&nbsp;&nbsp;&nbsp; 面对scan report以及CVE查询出来的漏洞，大部分都是没有现成的exp能够利用的，而且要利用漏洞可能有各种苛刻的条件，比如要求本地交互shell啊，或 者要求有帐户之类。而更多的时候，漏洞根本连细节的都没有，只有一个漏洞公告里一个简单的划分critical，标红。就算有exp，可能还要考虑到 exp的稳定性和成功率、语言版本啥的，打过去也不一定能成功。更何况狂战士无法处心积虑了为了POC给程序员看，而花费大量的精力来追求一个可能没有结 果的漏洞。<br /><br />&nbsp;&nbsp;&nbsp; 但是无法POC不代表就没有风险了。我们的目标是要保证一个系统长期的在任何情况下都能安全运行，机密数据不会外泄，业务不会中断。所以这种程序员犯的错 误就是偷换了概念，把威胁范围缩小了，用个体来代替全局。很多时候威胁可能来自内部，可能来自误操作，可能来自其他的风险。要说服这种程序员很辛苦，只能 够靠长期的&ldquo;忽悠&rdquo;，来慢慢感化他们，要是运气好还能做出一两个POC来震撼下他们，刘震撼(ZhenHan.Liu)就是为此而生的。佛曰：我不下地狱 谁下地狱。<br /><br />&nbsp;&nbsp;&nbsp; 作为一个优秀的狂战士，往往要有相当程度的mission impossible的修为。很多时候，需要为浏览器漏洞、操作系统漏洞擦屁股，不然最后吃亏的还是自己的用户。面对钓鱼和诈骗，很多时候那些认为web 安全是&ldquo;奇技淫巧&rdquo;狂战士们认为解决方案是impossible的，认为no patch for stupid。比如phishing，诚然，如果有一个一劳永逸的方案，那么这种完美魔法要是放出来了绝对可以获得圣阶魔导师的称号。但是YY归YY，现 实归现实。狂战士们很头疼这种问题，但是却不得不去面对它。<br /><br />&nbsp;&nbsp;&nbsp; 魔法最终还是放出来了，可惜不完美。目前anti-phishing的魔法，有整到浏览器里内置对抗的(IE7/8)，也有浏览器toolbar、扩展 的，有在IM里做过滤的，还有穷举malicious sites的，更有发动人民战争来维护一个blacklist的，其难度和成本从低到高什么都有，不过基本都无法一次性解决问题。比较有创意的魔法属于 yahoo发明的sign seal，基于认证机器的原理来识别真实网站，不过这个方法的缺陷在于需要长期教育用户，实际使用效果不一定好。yahoo还整了个domainkey技 术来在邮件里对抗phishing，不过这个缺陷更明显，需要邮件服务商支持。yahoo的狂战士挺有想法的，就是太理想化了一点。<br /><br />&nbsp;&nbsp;&nbsp; 说到安全世界的另外一股强大力量不能不提教廷，这个宗教从精神上统治了安全世界，一群群红衣主教们整出来了一堆标准、规范比如BS7799之类来帮助狂战 士们更好的忽悠他们的BOSS。其实标准是死的，主教们的出发点是好的，不过这些标准啥的就和秘籍差不多，狂战士们以为他们读明白了，其实很少人真正读懂 了。那玩意如果拿来忽悠BOSS们确实是一套套的，但用在实处则有一个本地化的过程。必须要把标准之类的东西和实际情况结合起来，不然就只能停留在忽悠的 层面上。<br /><br />&nbsp;&nbsp;&nbsp; 最能体现问题的出在编码规范上。可能有N个权威的机构都出了他们自己的code规范，或者某些狂战士佣兵团（安全公司）也自己整了套。不过在具体使用的时 候，很多狂战士都是拿了一套去用在所有的公司身上，其实这样的结果就是到最后没有程序员遵守用那玩意，因为在实际情况中往往不好用。每个公司都有自己的体 系、环境和编码习惯。系统的designer和architect只要不是小白一般都或多或少的会考虑点安全风险，规范只有本地化以后才能很好的用起来， 不然绝对会水土不服。所以要是再遇到什么安全公司拿标准、规范来忽悠的时候，狂战士们就要睁亮了眼睛了！<br /><br />&nbsp;&nbsp;&nbsp; 胡侃瞎吹了这么多其实也没说到重点，不过重点已经不是本文要讲的事情了，想要讲的东西还有很多，也许以后会陆续写出来。狂战士是份很好的职业，希望有更多的狂战士甚至是半兽人朋友能够加入我所在的狂战士佣兵团！<br /><br /><a href="http://www.ph4nt0m.org-a.googlepages.com/pstzine_0x01" target="_blank">http://www.ph4nt0m.org-a.googlepages.com/pstzine_0x01</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/176600#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 09:10:27 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/176600</link>
        <guid>http://lococode.javaeye.com/blog/176600</guid>
      </item>
      <item>
        <title>Maven Tapestry Spring Hibernate 整合开发（三） </title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/137713" style="color:red;">http://lococode.javaeye.com/blog/137713</a>&nbsp;
          发表时间: 2007年11月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="2" face="Tahoma">首先抱歉，几篇文章中间的间隔如此之久，一方面工作太忙，一方面也是自己开始偷懒，闲暇之余总是偷懒说自己需要休息一下，可每次总都是休息。<br />
本来这篇文章想说说 使用Maven2 的maven2-xdoclet2-plugin 插件怎么配置生成 hibernate 的 hbm 文件的，在annotation大行其道的时候，我决定省略这一篇了。（有疑问者，可在此处发消息，^_^）。<br />
</font>
<p><font size="2" face="Tahoma">这里说 T5 （T5.0.6） 。 T5.0.6 前几天刚刚释放出来，一只在用 5.0.5 ， 6 的SNAPSHOT版本一直没有关注， </font><font size="2" face="Tahoma">发现 Howard Lewis Ship真的是个喜欢变化的人。</font>参见：<a href="http://tapestry.apache.org/tapestry5/release-notes.html">tapestry.apache.org/tapestry5/release-notes.html。</a></p>
<p>这里列举集成配置以及些常用的组件用法，有些说教，或者过于简单，也许对有些人比较用户。</p>
<p>   1.与spring集成</p>
<p> 修改 web.xml 中的<br />
</p>
<p> </p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>     <span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>app</span><span class="tag"><!--</span--><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>     <span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>org.apache.tapestry.TapestryFilter</span><span class="tag"><!--</span--><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span> <span class="tag"><!--</span--><span class="tag-name">filter</span><span class="tag">&gt;</span><span>  </span></span></span></li>
</ol>
</div>
<p> </p>
<p>为：</p>
<p> </p>
<div class="code_title">xml 代码
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>  </span></span></li>
    <li class=""><span>    <span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>financeReport</span><span class="tag"><!--</span--><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class="alt"><span>    <span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>org.apache.tapestry.spring.TapestrySpringFilter</span><span class="tag"><!--</span--><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>  </span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">filter</span><span class="tag">&gt;</span><span>  </span></span></span></li>
</ol>
</div>
<div align="left"><br />
2. Select<br />
<br />
你可以建立你的  SelectTest.tml文件 <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">select</span><span> </span><span class="attribute">t:id</span><span>=</span><span class="attribute-value">&quot;id3&quot;</span><span> </span><span class="attribute">t:name</span><span>=</span><span class="attribute-value">&quot;name3&quot;</span><span> </span><span class="attribute">t:type</span><span>=</span><span class="attribute-value">&quot;select&quot;</span><span>                   </span><span class="attribute">model</span><span>=</span><span class="attribute-value">&quot;genericSelectModel&quot;</span><span> </span><span class="attribute">encoder</span><span>=</span><span class="attribute-value">&quot;genericValueEncoder&quot;</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;someBean&quot;</span><span class="tag">/&gt;</span><span>  </span></span></li>
</ol>
</div>
<div class="code_title">SelectTest.java 可如下<br />
java 代码</div>
<div class="dp-highlighter">
<div class="bar"> </div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="annotation">@Persist</span><span>  </span></span></li>
    <li class=""><span><span class="keyword">private</span><span> Customer _someBean;  </span></span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span><span class="annotation">@Inject</span><span>  </span></span></li>
    <li class="alt"><span><span class="keyword">private</span><span> PropertyAccess propertyAccess;  </span></span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span><span class="keyword">public</span><span> Customer getSomeBean() {  </span></span></li>
    <li class=""><span>    <span class="keyword">return</span><span> _someBean;  </span></span></li>
    <li class="alt"><span>}  </span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setSomeBean(Customer _someBean) {  </span></span></li>
    <li class=""><span>    <span class="keyword">this</span><span>._someBean = _someBean;  </span></span></li>
    <li class="alt"><span>}  </span></li>
    <li class=""><span><span class="comment">//for Select,</span><span>  </span></span></li>
    <li class="alt"><span><span class="keyword">public</span><span> SelectModel getGenericSelectModel() {  </span></span></li>
    <li class=""><span>    <span class="keyword">return</span><span> </span><span class="keyword">new</span><span> GenericSelectionModel<customer>(getBeanList(), propertyAccess, </customer></span><span class="string">&quot;name&quot;</span><span>);  </span></span></li>
    <li class="alt"><span>}  </span></li>
    <li class=""><span>  </span></li>
    <li class="alt"><span><span class="comment">//for select</span><span>  </span></span></li>
    <li class=""><span><span class="keyword">public</span><span> ValueEncoder<customer> getGenericValueEncoder() {  </customer></span></span></li>
    <li class="alt"><span>    <span class="keyword">return</span><span> </span><span class="keyword">new</span><span> GenericValueEncoder<customer>(getBeanList(), propertyAccess, </customer></span><span class="string">&quot;id&quot;</span><span>);  </span></span></li>
    <li class=""><span>}  </span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span><span class="keyword">public</span><span> List<customer> getBeanList() {  </customer></span></span></li>
    <li class="alt"><span>    _beanList = <span class="keyword">new</span><span> ArrayList<customer>();  </customer></span></span></li>
    <li class=""><span>    <span class="keyword">for</span><span> (</span><span class="keyword">int</span><span> i = </span><span class="number">0</span><span>; i &lt; </span><span class="number">10</span><span>; i++) {  </span></span></li>
    <li class="alt"><span>        Customer c = <span class="keyword">new</span><span> Customer();  </span></span></li>
    <li class=""><span>        c.setName(<span class="string">&quot;Customer Name&quot;</span><span> + i);  </span></span></li>
    <li class="alt"><span>        c.setCode(<span class="string">&quot;Code&quot;</span><span> + i);  </span></span></li>
    <li class=""><span>        c.setId(<span class="string">&quot;&quot;</span><span> + i);  </span></span></li>
    <li class="alt"><span>        _beanList.add(c);  </span></li>
    <li class=""><span>    }  </span></li>
    <li class="alt"><span>    <span class="keyword">return</span><span> _beanList;  </span></span></li>
    <li class=""><span>}  </span></li>
    <li class="alt"><span>  </span></li>
    <li class=""><span><span class="keyword">public</span><span> </span><span class="keyword">void</span><span> setBeanList(List<customer> _beanList) {  </customer></span></span></li>
    <li class="alt"><span>    <span class="keyword">this</span><span>._beanList = _beanList;  </span></span></li>
    <li class=""><span>}  </span></li>
</ol>
</div>
GenericValueEncoder 和GenericSelectionModel 的实现方式也比较简单，可以参见<br />
<a href="http://wiki.apache.org/tapestry/Tapestry5SelectObject">wiki.apache.org/tapestry/Tapestry5SelectObject</a></div>
<br />
最后，几点注意的地方：<br />
a) 5.0.6 的日志模块已经换成： SLF4J(Simple         Logging Facade for Java) <a href="http://www.slf4j.org">www.slf4j.org</a><br />
b) 模板文件后缀换作 .tml(Tapestry Markup Language) <br />
c) 模板文件放到web的根目录中，而不是 WEB-INF中。<br />
</div>
<p> </p>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/137713#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 Nov 2007 00:54:01 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/137713</link>
        <guid>http://lococode.javaeye.com/blog/137713</guid>
      </item>
      <item>
        <title>ajax 技术（jsonrpc buffalo） 与tapestry（5）的简单快速集成使用</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/69527" style="color:red;">http://lococode.javaeye.com/blog/69527</a>&nbsp;
          发表时间: 2007年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp; 前几天在项目中需要用到一些ajax 的东西，之前也有用过dwr ，这次想看看其他也些ajax的技术，有什么不同和特殊之处，于是就看了看&nbsp; jsonrpc 和buffalo ，用起来，突然发现，他们的使用方法，基本上差不多。这里以一个例子做简单的介绍，希望对一些朋友能有所帮助，同时也是对我之前的两篇关于tapestry以及maven的文章的补充（当然，那一系列的文章我还会继续写的）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个实例是使用tapstry + spring 以及 maven的（同时提供依赖关系，可以不使用maven运行此实例，关于maven的使用，如果有疑问，也可以在此询问我，^_^），这里会同时提供一个war 包，可以直接放入 tomcat 或者jetty容器中直接运行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个例子很简单，客户端发送一个字符串到服务器，然后服务器会返回一个包装后的字符串，并且由客户端处理，显示，这个例子中同时使用 jsonrpc buffalo ajax的技术做演示。实现同时，的效果。<br />
<br />
&nbsp;&nbsp;&nbsp; 先说明依赖关系，<br />
&nbsp;&nbsp;&nbsp; jsonrpc 依赖 jsonrpc-1.0.jar 文件，以及一个 js文件（jsonrpc.js） <br />
&nbsp;&nbsp;&nbsp; buffalo 依赖buffalo-2.0-alpha4.jar 文件，以及一个 js文件(buffalo.js)<br />
&nbsp; 同时这连个 ajax 都依赖 prototype（prototype.js）<br />
<br />
&nbsp; 配置buffalo:<br />
&nbsp;&nbsp; 建立标准的 spring bean 的xml配置文件<br />
&nbsp;&nbsp; </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:aop</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/aop&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=&quot;http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop.xsd&nbsp;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;buffaloConfigBean&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;net.buffalo.service.BuffaloServiceConfigurer&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;services&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">entry</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">entry</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot; 中的 helloWorld 指的是 spring bean id， entry key 中的 helloworld&nbsp;指的是，客户端js中需要使用的名称</span></p>
<span class="attribute-value">
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;END_POINT=</span><span class="string">&quot;bfapp&quot;</span><span>; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="keyword">var</span><span>&nbsp;buffalo&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Buffalo(END_POINT); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="keyword">function</span><span>&nbsp;buffaloHello()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//var&nbsp;pp&nbsp;=&nbsp;$F(&quot;myname&quot;); </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;pp&nbsp;=&nbsp;'lococode!'; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;one </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;buffalo.remoteCall(</span><span class="string">&quot;helloWorld.sayHelloWorld&quot;</span><span>,[pp],&nbsp;</span><span class="keyword">function</span><span>(reply)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;buffalo&nbsp;ajax&nbsp;replay&nbsp;one:&quot;</span><span>&nbsp;+&nbsp;reply.getResult()); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//two </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;buffalo.remoteCall(</span><span class="string">&quot;helloWorld.sayHelloWorld&quot;</span><span>,[pp],&nbsp;helloCallBack); &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//call&nbsp;back&nbsp;function </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;helloCallBack(reply){ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;buffalo&nbsp;ajax&nbsp;replay&nbsp;two:&quot;</span><span>&nbsp;+&nbsp;reply.getResult()); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;remoteCall 方法中的第一个参数中的helloWord 就是刚刚配置中的 entry key</p>
<p>&nbsp;同时需要 web.xml中配置一个sevlet</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments"><!-- buffalo need --></span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>bfapp</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;net.buffalo.web.servlet.ApplicationServlet &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>bfapp</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/bfapp/*</span><span class="tag"><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>对于jsonrpc 配置基本上和 buffalo 相同，但是由于 jsonrpc 本身没有提供 和spring的配置集成，所以这个示例提供一个集成代码：</p>
<p>故配置文件如下：</p>
<p>jsonrpc.xml</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:aop</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/aop&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=&quot;http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop.xsd&nbsp;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;jsonrpcServiceConfigurer&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.jsonrpc.service.spring.JsonrpcServiceConfigurer&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;services&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">entry</span><span>&nbsp;</span><span class="attribute">key</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ref</span><span>&nbsp;</span><span class="attribute">bean</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">entry</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- ... add other jsonrpc bean ref spring bean here --></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">map</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-c">
    <li class="alt"><span><span>jsonrpc&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JSONRpcClient(</span><span class="string">&quot;/JSON-RPC&quot;</span><span>); &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">function</span><span>&nbsp;jsonrpcHello() &nbsp;&nbsp;</span> </li>
    <li class=""><span>{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//var&nbsp;pp&nbsp;=&nbsp;$F(&quot;myname&quot;); </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;pp&nbsp;=&nbsp;</span><span class="string">&quot;lococode!&quot;</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;result&nbsp;=&nbsp;jsonrpc.helloWorld.sayHelloWorld(pp); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span class="string">&quot;jsonrpc&nbsp;ajax&nbsp;replay:&quot;</span><span>&nbsp;+&nbsp;result); &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>js调用方法有所区别。</p>
<p>web.xml的配置多了一个listener</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments"><!-- jsonrpc need --></span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.jsonrpc.service.RegistServiceToJsonrpcBridgeListener &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">listener-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">listener</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.metaparadigm.jsonrpc.JSONRPCServlet &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.metaparadigm.jsonrpc.JSONRPCServlet &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.metaparadigm.jsonrpc.JSONRPCServlet &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/JSON-RPC</span><span class="tag"><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">servlet-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>同时需要注意，在 <font face="Arial">applicationContext.xml 需要导入 jsonrpc.xml 和buffalo.xml</font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/beans&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xmlns:aop</span><span>=</span><span class="attribute-value">&quot;http://www.springframework.org/schema/aop&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=&quot;http://www.springframework.org/schema/beans&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;http://www.springframework.org/schema/aop&nbsp;http://www.springframework.org/schema/aop/spring-aop.xsd&nbsp;&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- buffalo need --></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">import</span><span>&nbsp;</span><span class="attribute">resource</span><span>=</span><span class="attribute-value">&quot;buffalo.xml&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- jsonrpc need --></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">import</span><span>&nbsp;</span><span class="attribute">resource</span><span>=</span><span class="attribute-value">&quot;jsonrpc.xml&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;musicLibrary&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.example.myapp.musiclib.services.MusicLibraryImpl&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">scope</span><span>=</span><span class="attribute-value">&quot;session&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- for ajax --></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;helloWorld&quot;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.example.myapp.musiclib.spring.HelloWorldImpl&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag"><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span>jsonrpcUtil.js </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>至此，两个ajax就可以同时跑起来了。当然一个项目中用一种技术就够了，这里只是做一个例子参考。</p>
<p>jsonrpc 会在速度上会具有一些优势。</p>
</span>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/69527#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 10 Apr 2007 11:11:00 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/69527</link>
        <guid>http://lococode.javaeye.com/blog/69527</guid>
      </item>
      <item>
        <title>Maven Tapestry Spring Hibernate 整合开发（二） 小试牛刀</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/68517" style="color:red;">http://lococode.javaeye.com/blog/68517</a>&nbsp;
          发表时间: 2007年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">maven 的基本属性，请参看其帮助文档，或者参看网络上一些专门介绍maven的文章。</font></p>
<p>一下从一个tepestry 的例子开始：</p>
<p>打开 <a href="http://tapestry.apache.org/tapestry5/tapestry-simple/index.html">tapestry.apache.org/tapestry5/tapestry-simple/index.html</a></p>
<p>找到：</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>mvn&nbsp;archetype:create&nbsp;-DarchetypeGroupId=org.apache.tapestry&nbsp;-DarchetypeArtifactId=tapestry-simple&nbsp;-DarchetypeVersion=</span><span class="number">5.0</span><span>.</span><span class="number">2</span><span>&nbsp;-DgroupId=org.example&nbsp;-DartifactId=myapp&nbsp;-DpackageName=org.example.myapp&nbsp;-Dversion=</span><span class="number">1.0</span><span>.</span><span class="number">0</span><span>-SNAPSHOT&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>复制下来，打开一个cmd 放入其中 ，转到 您 平常使用 eclipse 或者其他工具开发时使用的工作目录</p>
<p>&nbsp;如： </p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>cd&nbsp;E:\JavaProjects&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>&nbsp;然后执行 上段mvn命令：</p>
<p><img src="http://lococode.javaeye.com/upload/picture/pic/2741/0eb0836c-469f-4f8a-ab4a-84d2675250c4.jpg " alt="" /></p>
<p>当出现&nbsp; build successful 时表示你的第一个 tapestry 使用maven建立的项目已经成功了。</p>
<p>如果想使用 eclipse 查看此项目，打开eclipse-&gt;import project.....如下图的操作：</p>
<p><img src="http://lococode.javaeye.com/upload/picture/pic/2740/b78a4d00-6675-4789-a5c4-869d981fcf57.jpg " alt="" /></p>
<p>&nbsp;</p>
<p><img src="http://lococode.javaeye.com/upload/picture/pic/2737/77538036-3c6f-443e-804f-f4ba7781ca28.jpg " alt="" /></p>
<p><img src="http://lococode.javaeye.com/upload/picture/pic/2738/2c349364-71df-4181-829d-073c47e76fa5.jpg " alt="" /></p>
<p>&nbsp;</p>
<p>导入项目后，可以看到其项目结构如下：</p>
<p>&nbsp;</p>
<p><img src="http://lococode.javaeye.com/upload/picture/pic/2739/df1662d8-32a8-4726-8096-a723d30ae6dd.jpg" alt="" /></p>
<p>&nbsp;</p>
<p>呵呵恭喜，您的第一个maven 项目成功了。 （嘿嘿，如果 你没看到 Maven2 Dependencies 的结构也没关系，估计是你的eclipse maven插件没有安装，安装一下就ok了,当然，不安装也没任何关系。）</p>
<p>这里将了，如何在别人做好的基础上，创建一个 maven项目，下面将会将如何在本地创建自己的maven 项目。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/68517#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Apr 2007 10:15:04 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/68517</link>
        <guid>http://lococode.javaeye.com/blog/68517</guid>
      </item>
      <item>
        <title>Maven Tapestry Spring Hibernate 整合开发（一）</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/68509" style="color:red;">http://lococode.javaeye.com/blog/68509</a>&nbsp;
          发表时间: 2007年04月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下随便写写，自己最近捣弄的东西。maven，其实tapestry+spring + hibernate网站上都有一大堆整合的教程。但对于maven可能还是有很多人比较陌生，这里主要介绍一些 maven的使用。以及使用maven 进行 tapestry +spring+hibernate 开发，这里所说的tapestry 指的是tapestry 5 （当然可能还没有出现稳定版本，但我比较看好她），hibernate 也指的的是 3 以上版本。大多数教程都是说，如何使用 ant和xdoclet结合从java生成 hbm 文件，但我这里会介绍，使用maven 如何从java生成 hbm文件。包括使用 java 5 的一些新属性。（以前使用ant的时候，如果使用的java5的annotation时，会无法生成hbm文件。）</div>
<div>
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.下载maven 安装包：<a href="http://maven.apache.org/download.html">maven.apache.org/download.html</a></pre>
<blockquote>
<pre>&nbsp;2.解压压缩包，放入任何一个您想安置maven的地方。</pre>
<div>&nbsp;&nbsp; 3。设置环境变量 MAVEN_HOME 指向manen的安装目录，如：<br />
</div>
<div>xml 代码</div>
<div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="attribute">MAVEN_HOME</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">D</span><span>:\Programs\maven-2.0.4&nbsp;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
</div>
<div>&nbsp;同时设置 path ： </div>
<div>xml 代码</div>
<div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="attribute">path</span><span>&nbsp;=&nbsp;%path%;%MAVEN_HOME%\bin;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
</div>
<div>&nbsp;&nbsp;&nbsp; 需要注意的是，maven 运行需要 JAVA_HOME 目录，所以 在使用maven前，请确认 JAVA_HOME 已经设置，设置方法同 设置 MAVEN_HOME的方法一致。<br />
参考下面的一些设置图示：</div>
<div></div>
<div></div>
<div><img src="http://lococode.javaeye.com/upload/picture/pic/2745/28e2472e-d9db-469f-9deb-df79c970e82e.jpg " alt="" /></div>
<div></div>
<div><img src="http://lococode.javaeye.com/upload/picture/pic/2744/27562b1c-d3ab-4393-9c98-569aba2c4cc7.jpg" alt="" /></div>
<div><img src="http://lococode.javaeye.com/upload/picture/pic/2743/5d5ab22e-b7bc-4d55-8f38-05a7ceb8a9f4.jpg " alt="" /></div>
<div></div>
<div></div>
<div><img src="http://lococode.javaeye.com/upload/picture/pic/2742/249159d0-faa7-44da-83e6-bd3a5959785c.jpg" alt="" /></div>
<div><hr size="2" width="100%" />
</div>
<div>以上步骤完成后，打开一个cmd窗口，输入： </div>
<div>java 代码</div>
<div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>mvn&nbsp;--version&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
</div>
<div><img src="http://lococode.javaeye.com/upload/picture/pic/2746/25e4197a-57c7-4eed-bc5c-a29c3e434b3b.jpg" alt="" /></div>
<div></div>
<div>看到以上显示 maven version 那么就表示你的maven已经安装成功。就可以使用maven为你的项目做一些事情了。</div>
</blockquote></div>
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/68509#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Apr 2007 09:34:38 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/68509</link>
        <guid>http://lococode.javaeye.com/blog/68509</guid>
      </item>
      <item>
        <title>丢弃MyEclipse</title>
        <author>lococode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lococode.javaeye.com">lococode</a>&nbsp;
          链接：<a href="http://lococode.javaeye.com/blog/65593" style="color:red;">http://lococode.javaeye.com/blog/65593</a>&nbsp;
          发表时间: 2007年03月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于myEclipse集成了很多有用的插件，使很多java开发者喜欢使用。但使用久了，就发现其太消耗资源。<br />
这里提供几个办法，解决对一些不使用myelipse但能实现其同样功能的办法：<br />
代替，web发布的以及调试的功能。<br />
1。使用 Jetty JettyLaunche，这个插件很常用。<br />
简单配置见下图：<br />
<img src="http://lh6.google.com/image/guchen.han/RgdTg6ivLHI/AAAAAAAAAB4/IxFHfgReRgg/XML%20Reload%20Dependencies.jpg?imgmax=800" alt="" /><br />
局限性：需要使用jetty<br />
<br />
2。使用jetty.xml,以下以jetty6为例：<br />
<img src="http://lh6.google.com/image/guchen.han/RgdTg6ivLFI/AAAAAAAAABo/yTkG_QmpuS0/XML%20Reload%20Dependencies%201.jpg?imgmax=720" alt="" /><br />
<img src="http://lh6.google.com/image/guchen.han/RgdTg6ivLGI/AAAAAAAAABw/HMamPnxPOpw/XML%20Reload%20Dependencies%202.jpg?imgmax=720" alt="" /><br />
用到的jetty.xml 配置可以放置到任何位置。我这里在项目的 src/test/resources/jetty6中，jetty.xml 同时需要一realm.properties文件，内容如下：<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>#&nbsp;&nbsp;</span></span></li>
    <li class=""><span>#&nbsp;This&nbsp;file&nbsp;defines&nbsp;users&nbsp;passwords&nbsp;and&nbsp;roles&nbsp;<span class="keyword">for</span><span>&nbsp;a&nbsp;HashUserRealm&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>#&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;The&nbsp;format&nbsp;is&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;&nbsp;:&nbsp;[,&nbsp;...]&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;Passwords&nbsp;may&nbsp;be&nbsp;clear&nbsp;text,&nbsp;obfuscated&nbsp;or&nbsp;checksummed.&nbsp;&nbsp;The&nbsp;<span class="keyword">class</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>#&nbsp;org.mortbay.util.Password&nbsp;should&nbsp;be&nbsp;used&nbsp;to&nbsp;generate&nbsp;obfuscated&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;passwords&nbsp;or&nbsp;password&nbsp;checksums&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;If&nbsp;DIGEST&nbsp;Authentication&nbsp;is&nbsp;used,&nbsp;the&nbsp;password&nbsp;must&nbsp;be&nbsp;in&nbsp;a&nbsp;recoverable&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;format,&nbsp;either&nbsp;plain&nbsp;text&nbsp;or&nbsp;OBF:.&nbsp;&nbsp;</span></li>
    <li class="alt"><span>#&nbsp;&nbsp;</span></li>
    <li class=""><span>jetty:&nbsp;MD5:164c88b302622e17050af52c89945d44,user&nbsp;&nbsp;</span></li>
    <li class="alt"><span>admin:&nbsp;CRYPT:ad1ks..kc.1Ug,server-administrator,content-administrator,admin&nbsp;&nbsp;</span></li>
    <li class=""><span>other:&nbsp;OBF:1xmk1w261u9r1w1c1xmq&nbsp;&nbsp;</span></li>
    <li class="alt"><span>plain:&nbsp;plain&nbsp;&nbsp;</span></li>
    <li class=""><span>user:&nbsp;password&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>#&nbsp;This&nbsp;entry&nbsp;is&nbsp;<span class="keyword">for</span><span>&nbsp;digest&nbsp;auth.&nbsp;&nbsp;The&nbsp;credential&nbsp;is&nbsp;a&nbsp;MD5&nbsp;hash&nbsp;of&nbsp;username:realmname:password&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>digest:&nbsp;MD5:6e120743ad67abfbc385bc2bb754e297&nbsp;&nbsp;</span></li>
</ol>
</div>
<username>
<password><rolename><br />
jetty.xml的内容如下，请根据自己项目的情况做修改：<br />
<configure class="org.mortbay.jetty.Server"> </configure></rolename></password>
</username>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag"><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&quot;-//Mort&nbsp;Bay&nbsp;Consulting//DTD&nbsp;Configure//EN&quot;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&quot;http://jetty.mortbay.org/configure_1_2.dtd&quot;<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Configure</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.Server&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;ThreadPool&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">New</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.thread.BoundedThreadPool&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;minThreads&quot;</span><span class="tag">&gt;</span><span>10</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;lowThreads&quot;</span><span class="tag">&gt;</span><span>25</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;maxThreads&quot;</span><span class="tag">&gt;</span><span>250</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">New</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;connectors&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Array</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.Connector&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">New</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.bio.SocketConnector&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;port&quot;</span><span class="tag">&gt;</span><span>8080</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;maxIdleTime&quot;</span><span class="tag">&gt;</span><span>50000</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">New</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Array</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;handlers&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Array</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.Handler&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">New</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.webapp.WebAppContext&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;contextPath&quot;</span><span class="tag">&gt;</span><span>/</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;war&quot;</span><span class="tag">&gt;</span><span>src/main/webapp</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Get</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;SessionHandler&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;SessionManager&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">New</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.servlet.HashSessionManager&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Get</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">New</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Array</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!-- =========================================================== --></span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!-- Configure Realms                                            --></span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!-- =========================================================== --></span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;UserRealms&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Array</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.security.UserRealm&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">New</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.mortbay.jetty.security.HashUserRealm&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;name&quot;</span><span class="tag">&gt;</span><span>Test&nbsp;Realm</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;config&quot;</span><span class="tag">&gt;</span><span>src/test/resources/jetty6/realm.properties</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">New</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Item</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Array</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;stopAtShutdown&quot;</span><span class="tag">&gt;</span><span>true</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comments"><!-- ensure/prevent Server: header being sent to browsers        --></span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">Set</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;sendServerVersion&quot;</span><span class="tag">&gt;</span><span>true</span><span class="tag"><!--</span--><span class="tag-name">Set</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag"><!--</span--><span class="tag-name">Configure</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
同时需要把jetty6种的一些jar包加入项目中，jar包如下图：<br />
<img src="http://lh5.google.com/image/guchen.han/RgeFTqivLII/AAAAAAAAACA/wx4fZol3MX0/XML%20Reload%20Dependencies%203.jpg" alt="" /><br />
<br />
我喜欢第二种方法。但也是局限在jetty下，不过在开发过程中，使用jetty还是不错的。<br />
<br />
<br />
可以使用Aptana Web Development 代替myeclipse 中的 js css，html等编辑器。
          <br/>
          <span style="color:red;">
            <a href="http://lococode.javaeye.com/blog/65593#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Mar 2007 16:27:34 +0800</pubDate>
        <link>http://lococode.javaeye.com/blog/65593</link>
        <guid>http://lococode.javaeye.com/blog/65593</guid>
      </item>
  </channel>
</rss>