??xml version="1.0" encoding="utf-8" standalone="yes"?>懂色av一区二区三区免费看,嫩草在线播放,亚洲欧美综合http://www.aygfsteel.com/qixiangnj/category/23165.html<strong>生命不息Q拼搏不止?lt;/strong>zh-cnFri, 08 Jun 2007 14:16:00 GMTFri, 08 Jun 2007 14:16:00 GMT60【文摘】?AppFuse 的七个理?/title><link>http://www.aygfsteel.com/qixiangnj/archive/2007/06/08/122857.html</link><dc:creator>Thomas</dc:creator><author>Thomas</author><pubDate>Fri, 08 Jun 2007 06:57:00 GMT</pubDate><guid>http://www.aygfsteel.com/qixiangnj/archive/2007/06/08/122857.html</guid><wfw:comment>http://www.aygfsteel.com/qixiangnj/comments/122857.html</wfw:comment><comments>http://www.aygfsteel.com/qixiangnj/archive/2007/06/08/122857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/qixiangnj/comments/commentRss/122857.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/qixiangnj/services/trackbacks/122857.html</trackback:ping><description><![CDATA[原文地址Qhttp://www.ibm.com/developerworks/cn/java/j-appfuse/<br><br>AppFuse 是一个开放源码的目和应用程序,它用了?Java q_上构建的开放源码工h帮助我们快速而高效地开?Web 应用E序。从核心上来_AppFuse 是一个项目骨ӞcM于通过向导创徏?Web 目?IDE 所创徏的东ѝ当我们使用 AppFuse 创徏一个项目时Q它会提C我们将使用开放源码框Ӟ然后才创建项目。它使用 Ant 来驱动测试、代码生成、编译和部v。它提供了目录和包结构,以及开发基?Java 语言?Web 应用E序所需要的库?br><br><br> <p>AppFuse 提供了很多应用程序需要的一些特性,包括Q?/p> <ul> <li>认证和授?/li> <li>用户理</li> <li>Remember MeQ这会保存您的登录信息,q样׃用每ơ都再进行登录了Q?/li> <li>密码提醒</li> <li>登记和注?/li> <li>SSL 转换</li> <li>E-mail</li> <li>URL 重写</li> <li>皮肤</li> <li>面修饰</li> <li>模板化布局</li> <li>文g上蝲</li> </ul> <strong><a name="fig1"><strong><br>典型?AppFuse 应用E序<br><img alt="" src="http://www.aygfsteel.com/images/blogjava_net/qixiangnj/23163/r_appfuse_application.gif" align="left" height="480" width="502"><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></strong></a></strong><a name="1"><span id="wmqeeuq" class="atitle">理由 1Q测?br></span>AppFuse 的文档展CZ如何试应用E序?em>所?/em> 层次。它从数据库层开始入手,使用?DbUnitQ请参看 </a><a >参考资?/a>Q在q行试之前提前使用数据来填充自q数据库。在数据讉KQDAOQ层Q它使用?Spring ?<code>AbstractTransactionalDataSourceSpringContextTests</code> c(是的Q这的确是一个类的名字!Q来允许单地加蝲 Spring 上下文文件。另外,q个cd每个 <code>testXXX()</code> Ҏ装了一个事务,q当试Ҏ存在时进行回滚。这U特性得测?DAO 逻辑变得非常单,q且不会Ҏ据库中的数据造成影响?br><br>在服务层QjMock Q请参看 <a >参考资?/a>Q用来编写那些可以消?DAO 依赖?em>真正</em> 单元试。这允许q行验证业务逻辑正确的快速测试;我们不用担心底层的持久性逻辑?br><br>?Web 层,试会验证操作(Struts/WebWorkQ、控ӞSpring MVCQ、页面(TapestryQ和理 beanQJSFQ如我们所期望的一栯行工作。Spring ?spring-mock.jar 可以非常有用地用来测试所有这些框Ӟ因ؓ它包含了一?Servlet API 的仿真实现。如果没有这个有用的库,那么试 AppFuse ? Web 框架׃变得非常困难?br><br>UI 通常是开?Web 应用E序q程中最为困隄一部分。它也是֮最l常抱怨的地方 —? q既是由于它q不是非常完,也是׃它的工作方式与我们期望的q不一栗另外,没有什么会比在客户面前作演C的q程中看到看到异常堆栈更p糕的了Q您? 应用E序可能会非常可怕,但是客户可能会要求您做到十分完美。永q不要让q种事情发生。Canoo WebTest 可以?UI q行试。它使用? HtmlUnit 来遍历测?UIQ验证所有的元素都存在,q可以填充表单的域,甚至可以验证一个假想的启用 Ajax ?UI 与我们预期的工作方式一栗(有关 WebTest ?HTMLUnit 的链接请参看 <a >参考资?/a>。)<br><br>Zq一步简?Web 的测试,CargoQ请参看 <a >参考资?/a>Q对 Tomcat 的启动和停止Q分别在q行 WebTest 试之前和之后)q行了自动化?br><br><br><a name="2"><span id="wmqeeuq" class="atitle">理由 2Q集?br></span></a> <ul> <li><strong>~译、报告和代码生成Q?/strong>Ant、Ant Contrib Tasks、Checkstyle、EMMA、Java2Html、PMD ?Rename Packages</li> <li><strong>试框架Q?/strong>DbUnit、Dumbster、jMock、JUnit ?Canoo WebTest</li> <li><strong>数据库驱动程序:</strong>MySQL ?PostgreSQL</li> <li><strong>持久性框Ӟ</strong>Hibernate ?iBATIS</li> <li><strong>IoC 框架Q?/strong>Spring</li> <li><strong>Web 框架Q?/strong>JSF、Spring MVC、Struts、Tapestry ?WebWork</li> <li><strong>Web 服务Q?/strong>XFire</li> <li><strong>Web 工具Q?/strong>Clickstream、Display Tag、DWR、JSTL、SiteMesh、Struts Menu ?URL Rewrite Filter</li> <li><strong>SecurityQ?/strong>Acegi Security</li> <li><strong>JavaScript ?CSSQ?/strong>Scriptaculous、Prototype ?Mike Stenhouse ?CSS Framework</li> </ul> <br><a name="3"><span id="wmqeeuq" class="atitle">理由 3Q自动化<br><br><br></span></a><a name="4"><span id="wmqeeuq" class="atitle">理由 4Q安全特性和可扩展?br></span>Acegi Security ?J2EE 安全模型中曾l出现过的最好模型。它让我们可以实现很多有用的Ҏ,q些Ҏ在 Servlet API 的安全模型中都不存在Q认证、授权、角色保护方法、Remember Me、密码加密、SSL 切换、用户切换和注销。它让我们还可以用戯书存储到 XML 文g、数据库、LDAP 或单点登录系l(例如 Yale ?Central Authentication Service (CAS) 或?SiteMinderQ中?br><br><br></a><a name="5"><span id="wmqeeuq" class="atitle">理由 5Q?AppGen 生成代码<br></span></a> <p>AppFuse 中提供了一个基?Ant ?XDoclet 的代码生成工P名叫 <em>AppGen</em>。默认情况下Q常见的 DAO 和管理器都可以允许我们对M普通老式 Java 对象QPOJOQ进?CRUD 操作Q但是在 Web 层上q样做有些困难。AppGen 有几个特性可以用来执行以下Q务:</p> <ul> <li>Q?Middlegen ?Hibernate 工具Q从数据库表中生?POJO</li> <li>?POJO 生成 UI</li> <li>?DAO、管理器、操?控制器和 UI 生成试</li> </ul> <br><a name="6"><span id="wmqeeuq" class="atitle">理由 6Q文?br><br><br></span></a><a name="7"><span id="wmqeeuq" class="atitle">理由 7Q社?br><br><br></span></a> <p><a name="resources"><span id="wmqeeuq" class="atitle">参考资?</span></a></p> <strong>学习</strong><br> <ul> <li>您可以参阅本文在 developerWorks 全球站点上的 <a target="_blank">英文原文</a> ?br><br></li> <li> <a >AppFuse</a>Q该目的主c? <br><br></li> <li> <a >AppFuse Demos</a>Q查看演C和视频? <br><br></li> <li> <a >Struts 2 ?JSF</a>Q了解ؓ什么要这些技术放C起工作? <br><br></li> <li> <a >Sun ?J2EE 目目录l构指南</a>QAppFuse 非常接近于这些指南? <br><br></li> <li> <a >Maven ?Standard Directory Layout</a>QAppFuse 2.0 {换到q个目录l构上? <br><br></li> <li><a >AppFuse 快速入门指?/a>Q快速入门ƈ使用 AppFuse? <br><br></li> <li><a >AppFuse 教程</a>Q深入学习更多有关?AppFuse 的知识? <br><br></li> <li> <a >Apache Axis 集成</a>Q如何将 Apache Axis 集成到自q AppFuse 目中? <br><br></li> <li>Java.net 目状态:h?2005 q?<a >1 ?/a>?a >2 ?/a> ?<a >3 ?/a> 的动态。还可以查看 <a >java.net 上的最佳项?</a>? <br><br></li> </ul> <br><strong>获得产品和技?/strong><br> <ul> <li> <a >AppFuse on java.net</a>Q下载不同风味的 AppFuse? <br><br></li> <li> <a >WebWork</a>Q了解这个易于用的 Web 框架? <br><br></li> <li> <a >DbUnit</a>Q查看更多有?JUnit 扩展的内宏V? <br><br></li> <li> <a >jMock</a>Q创建动态仿真对象来化真正的单元试? <br><br></li> <li> <a >Canoo WebTest</a>Q自动化 Web 应用E序?UI 试? <br><br></li> <li> <a >HtmlUnit</a>QWebTest 的优U JavaScript 支持背后的基? <br><br></li> <li> <a >Cargo</a>Q自动启动和停止容器? <br><br></li> <li> <a >Greenbox</a>Q一U代码生成框架? <br><br></li> </ul> <br><strong>讨论</strong><br> <ul> <li> <a >AppFuse 论坛</a>Q与同行开发h员交技巧?/li> </ul> <br><br> <p><a name="author"><span id="wmqeeuq" class="atitle">关于作?/span></a></p> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tbody> <tr> <td colspan="3"><img src="http://www.ibm.com/i/c.gif" alt="" height="5" width="100%"></td> </tr> <tr align="left" valign="top"> <td> <p><img src="http://www.ibm.com/developerworks/i/p-mraible.jpg" alt="" align="left" height="80" width="64"></p> </td> <td><img src="http://www.ibm.com/i/c.gif" alt="" height="5" width="4"></td> <td width="100%"> <p>Matt Raible 居住在美国科|拉多州的丹佛,他在那里?Spring ?Web 框架?<a >Virtuas Open Source Solutions</a> 的实践先驱。他在开放源码领域具有丰富的l验Q是q个领域的专家。他在这个领域中既是用户Q又是一名开发h员。Matt ?<a >SourceBeat Publishing</a> ?<em><a >Spring Live</a></em> 的作者。他qؓ Apress 的书c?<em><a >Pro JSP Third Edition</a></em> 作出了很大的贡献。他是很多开放源码会议的U极倡导者,包括 ApacheCon、MySQL User's Conference ?OSCONQ同时他q是 <a >http://raibledesigns.com</a> 上一名非常活跃的博客。Raible 的大部分生活都被计算机所包围了,管他是在连电都没有?Montana 长大的。当不工作的时候时Q他L试图让妻?Julie 成ؓ世界上最q福的女人,或者与他们的孩?Abbie ?Jack 一L耍?/p> </td> </tr> </tbody> </table> <a name="7"><br></a><a name="6"></a> <img src ="http://www.aygfsteel.com/qixiangnj/aggbug/122857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/qixiangnj/" target="_blank">Thomas</a> 2007-06-08 14:57 <a href="http://www.aygfsteel.com/qixiangnj/archive/2007/06/08/122857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">տ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͷ</a>| <a href="http://" target="_blank">˫</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank">人</a>| <a href="http://" target="_blank">ν</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ̨</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӱ</a>| <a href="http://" target="_blank">¦</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ī</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">־</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">崲</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>