﻿<?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-欢迎来到davy的java世界-随笔分类-体会</title><link>http://www.blogjava.net/happydavy/category/3389.html</link><description>爱生活,爱java</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:04:18 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:04:18 GMT</pubDate><ttl>60</ttl><item><title>什么是Tapestry?</title><link>http://www.blogjava.net/happydavy/archive/2005/12/15/24051.html</link><dc:creator> 我的java天地</dc:creator><author> 我的java天地</author><pubDate>Thu, 15 Dec 2005 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/happydavy/archive/2005/12/15/24051.html</guid><wfw:comment>http://www.blogjava.net/happydavy/comments/24051.html</wfw:comment><comments>http://www.blogjava.net/happydavy/archive/2005/12/15/24051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happydavy/comments/commentRss/24051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happydavy/services/trackbacks/24051.html</trackback:ping><description><![CDATA[<H2>&nbsp;</H2>
<P>Tapestry是一个使用Java语言编写的开源框架，用于创建动态的、健壮的、高灵活性的web应用程序。Tapestry框架构筑在标准的Java Servlet API之上，因此它能够很好地兼容任何servlet容器或者应用服务。</P>
<P>Tapestry将一个web应用程序分离为一组页面，而每个页面又由多个组件组成。这就提供了一个协调一致的结构，使得Tapestry框架能够专注于任何一个关键细节，例如：URL解析和派遣、持久化状态储存在客户端还是储存在服务器端、用户输入效验、本地化或国际化、和异常报告。对 Tapestry应用程序的开发包括：使用普通的HTML标签创建HTML模板，然后使用XML描述文件（可选）将这些模板与少量的java代码结合在一起。在Tapestry中，创建你的应用程序是通过使用对象、方法以及对象的属性－－－而并非由URLs和查询参数。Tapestry带来了真正的 Java Web应用程序OOP编程。</P>
<P>Tapestry能够非常容易地创建新组件，就如同以常规的步骤来构建应用程序一样。而官方提供了超过五十种组件，这些组件包括各种各样简单的输出组件，以及非常复杂的表格组件和树型目录组件。</P>
<P>Tapestry能够构建，从小型的应用程序到各种大型团队开发的几百个独立页面的大型应用程序。Tapestry能够非常容易地与各种底层框架结合，包括J2EE、Hivemind和Spring。</P>
<P>Tapestry发布于Apache Software Licence 2.0。</P>
<H2><A name=Tapestry框架介绍-Tapestry的哲理></A>Tapestry的哲理</H2>
<P>Tapestry由以下四种关键原则组成：</P>
<UL>
<LI>简单 － 应用程序并非像火箭科学那么复杂。</LI>
<LI>一致性 － 怎样操作页面，怎样操作组件。在小应用程序中怎样操作，那么在大型应用程序中就怎样操作。不同的开发者会在相识问题上找到相似的解决方案。</LI>
<LI>效率 － 应用程序是可以被升级的。</LI>
<LI>良好的反馈信息 － 当发生错误或者异常的时候，Tapestry框架本身的运作并不会发生异常；实际上，Tapestry框架会提供非常有用的错误诊断信息。</LI></UL>
<P>这四种原则共同组成了一个宗旨：最简单的选择，就是最正确的选择。越早选择Tapestry框架，那么就越早避免许多麻烦。</P>
<P>我们发现面向组件式web开发是实现这些原则的最好途径。围绕着组件来组织框架和你的应用程序，让框架来替你实现那些令人厌烦的底层代码。你只需要写少量的代码，写一些简单的代码，有时候你甚至不需要写代码。Tapestry让你轻松。</P>
<H2><A name=Tapestry框架介绍-Tapestry4.0></A>Tapestry 4.0</H2>
<P>Tapestry4.0增加了许多新特性以便提高你的工作效率：</P>
<UL>
<LI>&nbsp;4.0中新的DTDs配置更加简化。</LI>
<LI>在HTML中与在XML配置文件中绑定参数的方式被协调一致，都使用相同的绑定前缀。</LI>
<LI>"Friendly"URLs（就是说，URLs中携带更多路径信息和更少的查询参数信息）已经被集成。这使得你可以将应用程序分别放在多个文件夹中而减少混乱，并且可以通过这种方式提高J2EE项目发布的安全性。</LI>
<LI>监听方法更加简单和灵活；URL中的监听参数会自动映射到监听方法的参数，并且监听方法可以返回页面名称或者页面实例来激活页面。</LI>
<LI>组件参数不必在担心"direction"设置。</LI>
<LI>除了每个页面和每个组件的消息策略之外，应用程序现在拥有一个全局的消息策略。消息不再从组件消息策略中寻找，而是从应用程序策略中查询。</LI>
<LI>完全支持对JSR-168 Portlets的开发。</LI>
<LI>Tapestry 4.0比Tapestry3.0减少了对反射和OGNL的使用；一部分原因是使用了许多新绑定前缀，大部分原因是改变了参数的实现方式。</LI>
<LI>Hivemind的services和Spring的beans能够直接被页面和组件类注入。</LI>
<LI>Tapestry 4.0提供了对JDK 1.5 annotation的支持（但是Tapestry本身是运作于JDK 1.3）。</LI>
<LI>Tapestry 4.0引进了一个全新的更健壮的用户输入效验子系统。感谢Paul！</LI>
<LI>现在能够在错误报告里面，用横线精确地标明文件中发生错误的代码行。</LI>
<LI>Forms现在能够被取消，避过客户端效验逻辑，并触发指定的服务器端监听方法。</LI>
<LI>你不再局限于Global对象和Visit对象；只要你愿意，可以使用任意多的application状态对象。</LI>
<LI>由于Hivemind构筑与Tapestry底层，意味着你可以容易地按照自己的需要修改Tapestry的实现。</LI>
<LI>页面属性现在能够被持久化于客户端中，就如同在session中一样。</LI>
<LI>组件和组件参数现在可以被标识为"deprecated"。组件参数可以拥有别名（当重新命名一个参数时使用）。</LI></UL>
<P>可以列举出无数Tapestry 4.0的变化。总之，所有的变化都是令人震撼的，减少了开发者的java代码，减少了模板的复杂性，简化（或者除去）了XML文件。</P>
<H2><A name=Tapestry框架介绍-现状></A>现状</H2>
<P>Tapestry 4.0的开发工作仍在全力进行中。文档从以前旧的DocBook形式转变到新的Forrest形式，剔除了许多临时性间隔。指南中新的Quick Start章节已经被撰写。</P>
<P>Tapestry 4.0已经接近最终的beta周期；新特性将会被延续到Tapestry 4.1，并会继续逐步完善文档和修正bug。最终版本的Tapestry 4.0预计（不保证）会在2005年十月推出。</P>
<H2><A name=Tapestry框架介绍-从4.0beta12升级></A>从4.0-beta-12升级</H2>
<P>作为<SPAN class=nobr><A title="Visit page outside Confluence" href="http://issues.apache.org/jira/browse/TAPESTRY-620" rel=nofollow>TAPESTRY-620<SUP><IMG class=rendericon height=7 alt="" src="http://www.javaeye.com/images/icons/linkext7.gif" width=7 align=absMiddle border=0></SUP></A></SPAN>修正的一部分：将当前的IRquestCycle作为可注入的service，简化Tapestry中的一些接口，取消IRequestCycle参数。这可能要求对一些地方的代码实现作适当调整。</P>
<H2><A name=Tapestry框架介绍-从4.0beta10升级></A>从4.0-beta-10升级</H2>
<P>在beta-10和之后的版本中，对于asset service，friendly URLs的配置改变了。在你的hivemind.xml中，将&lt;asset-encoder id="asset" path="/assets/"/&gt; 改为&lt;asset-encoder id="asset" path="/assets"/&gt;（注意斜杠已经被去掉）。</P>
<H2><A name=Tapestry框架介绍-从Tapestry3.0升级></A>从Tapestry 3.0升级</H2>
<P>Tapestry 4.0具有很多新特性，考虑到向后兼容性，有些地方做了限制。具体细节以后会发布，但是至少：</P>
<UL>
<LI>Tapestry3.0 页面和组件规范仍然保留。</LI>
<LI>页面和组件的模板没有改变。</LI></UL>
<P>升级的时候，你将遇到下列问题：</P>
<UL>
<LI>引擎service的定义已经完全改变，可以参看IEngineService API。</LI>
<LI>BaseEngine的子类通过override来操作异常的方式已经改变。现在可以通过新的Hivemind services来重构默认的配置。</LI>
<LI>direction参数的"custom"已经不再使用。定义一个参数总是会生成对应的property。</LI>
<LI>参数都不会再通过<EM>parameterName</EM>绑定property，取而代之的是你必须使用getBinding()方法。</LI>
<LI>page loader和specification delegate的关系已经改变，现在delegate提供的specifications会被loader缓存（在3.0中，由delegate来负责缓存）。</LI>
<LI>Tapestry不再需要Jakarta commons-lang library支持，这意味着不能再使用EnumPropertySelectionModel类（然而，你可以很容易地从Tapestry 3.0中拷贝到源代码）。</LI></UL><img src ="http://www.blogjava.net/happydavy/aggbug/24051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happydavy/" target="_blank"> 我的java天地</a> 2005-12-15 15:12 <a href="http://www.blogjava.net/happydavy/archive/2005/12/15/24051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> String 这个特殊的对象</title><link>http://www.blogjava.net/happydavy/archive/2005/09/16/13138.html</link><dc:creator> 我的java天地</dc:creator><author> 我的java天地</author><pubDate>Fri, 16 Sep 2005 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/happydavy/archive/2005/09/16/13138.html</guid><wfw:comment>http://www.blogjava.net/happydavy/comments/13138.html</wfw:comment><comments>http://www.blogjava.net/happydavy/archive/2005/09/16/13138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/happydavy/comments/commentRss/13138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/happydavy/services/trackbacks/13138.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 大家先来看看一段奇怪的程序： public class TestString { public static void main(String[] args) { String s1 = "Monday"; String s2 = "Monday"; } } 这个程序真是简单啊！可是有什么问题呢？ 1. 来自 String 的忧虑 上面这段程序中，到底有几个...&nbsp;&nbsp;<a href='http://www.blogjava.net/happydavy/archive/2005/09/16/13138.html'>阅读全文</a><img src ="http://www.blogjava.net/happydavy/aggbug/13138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/happydavy/" target="_blank"> 我的java天地</a> 2005-09-16 10:44 <a href="http://www.blogjava.net/happydavy/archive/2005/09/16/13138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>