﻿<?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-小程序员之歌-文章分类-Tapestry</title><link>http://www.blogjava.net/tbest/category/31041.html</link><description>java先（我应该为它写点什么了！）</description><language>zh-cn</language><lastBuildDate>Fri, 25 Apr 2008 22:46:13 GMT</lastBuildDate><pubDate>Fri, 25 Apr 2008 22:46:13 GMT</pubDate><ttl>60</ttl><item><title>Tapestry的service（来自javaeye）</title><link>http://www.blogjava.net/tbest/articles/196038.html</link><dc:creator>liujg</dc:creator><author>liujg</author><pubDate>Fri, 25 Apr 2008 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/tbest/articles/196038.html</guid><wfw:comment>http://www.blogjava.net/tbest/comments/196038.html</wfw:comment><comments>http://www.blogjava.net/tbest/articles/196038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tbest/comments/commentRss/196038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tbest/services/trackbacks/196038.html</trackback:ping><description><![CDATA[<h3><a href="http://flierlh.javaeye.com/blog/120253"><span class="hilite1">Tapestry</span>的service</a></h3>
<strong>关键字</strong>: <span class="hilite1">Tapestry</span>
<div class="blog_content">
<p style="margin: 0cm 0cm 0pt"><span>这是</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>框架的核心部分。</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>框架面向组件的开发方式，使得我们不再操心</span><span><font face="Times New Roman">Servlet</font></span><span>底层细节和</span><span><font face="Times New Roman">URL</font></span><span>中质询参数的结构。</span></p>
<p style="margin: 0cm 0cm 0pt"></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>用于</span><span><font face="Times New Roman">Servlet</font></span><span>的底层对象</span></p>
<p style="margin: 0cm 0cm 0pt"></p>
<p style="margin: 0cm 0cm 0pt"><span>为了更好地理解</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>的</span><span><font face="Times New Roman">service</font></span><span>运作过程，我们首先需要熟悉一下</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span> service</font></span><span>中常用的核心对象。</span></p>
<p style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><font face="Times New Roman"><span><span>1.<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span><span>IRequestCycle</span></font><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>该对象用于控制一个单一的请求周期。一旦客户段浏览器发出请求，</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>将做以下处理。</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>通过</span><span><font face="Times New Roman">IEngineService</font></span><span>对象响应</span><span><font face="Times New Roman">URL</font></span><span>；</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>决定响应页面；</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>释放所有资源。</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>在这个过程中，</span><span><font face="Times New Roman">IRequestCycle</font></span><span>对象还会处理：</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>异常操作；</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>加载页面模板；</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>跟踪页面属性的变化并储存页面状态；</span></p>
<p style="margin: 0cm 0cm 0pt 18pt"><span>缓存页面对象。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">2</font></span><span>．</span><span><font face="Times New Roman">IRageRecorder</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>该对象用于观察一个页面及该页面</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>属性（页面属性和组件属性）的变化，在请求周期内储存页面状态，并在下一个请求周期到来之前，将页面已经发生变化的状态回复到初始值。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>通过实现</span><span><font face="Times New Roman">IRageRecorder</font></span><span>接口，可以自定义页面状态持久化策略，可以将页面状态存储内存，客户端</span><span><font face="Times New Roman">cookies</font></span><span>文件系统或数据库中。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">3</font></span><span>．</span><span><font face="Times New Roman">IPageSource</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>通过页面规范从缓存池中加载页面对象，如果</span><span><font face="Times New Roman">IPageSource</font></span><span>对象在缓存池中找不到页面对象，或者加载的对象不可用，那么</span><span><font face="Times New Roman">IPageLoader</font></span><span>对象的实例就会创建页面对象的实例</span><span><font face="Times New Roman">(</font></span><span>包括页面所调用的组件</span><span><font face="Times New Roman">)</font></span><span>。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">4</font></span><span>．</span><span><font face="Times New Roman">IPageLoader</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>创建页面对象的实例。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">5</font></span><span>．</span><span><font face="Times New Roman">IEngine</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="hilite1">Tapestry</span></font></span><span>应用程序的核心对象的生命周期与</span><span><font face="Times New Roman">HttpSession</font></span><span>相同，每个单一客户端拥有自己的</span><span><font face="Times New Roman">engine</font></span><span>对象。</span><span><font face="Times New Roman">Engine</font></span><span>对象用于向页面和组件提供</span><span><font face="Times New Roman"><span class="hilite1">Tapestry</span></font></span><span>的核心</span><span><font face="Times New Roman">service.</font></span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">6.IEngineService</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="hilite1">Tapestry</span> </font></span><span>的核心</span><span><font face="Times New Roman">service</font></span><span>通过</span><span><font face="Times New Roman">IEngine</font></span><span>对象相页面和组件提供</span><span><font face="Times New Roman">Service.service</font></span><span>的作用是构建</span><span><font face="Times New Roman">URL</font></span><span>编码以响应请求，或解析请求中包含的</span><span><font face="Times New Roman">URL</font></span><span>。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">7</font></span><span>．</span><span><font face="Times New Roman">WebRequest</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span>包含了当前请求的所有信息。这个对象本质上是对</span><span><font face="Times New Roman">HttpServletRequest</font></span><span>的封装。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">8</font></span><span>．</span><span><font face="Times New Roman">WebResponse</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>控制客户端响应，并创建输出流。这个对象本质上是对</span><span><font face="Times New Roman">HttpServiceResponse</font></span><span>的封装。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">9</font></span><span>．</span><span><font face="Times New Roman">WebContext</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span><span><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span></span><span>对</span><span><font face="Times New Roman">ServletContext</font></span><span>的封装。</span></p>
<p style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman">10</font></span><span>．</span><span><font face="Times New Roman">WebSession</font></span><span>对象</span></p>
<p style="margin: 0cm 0cm 0pt"><span>对</span><span><font face="Times New Roman">HttpSession</font></span><span>的封装。</span></p>
<br />
原文地址：http://flierlh.javaeye.com/blog/120253<br />
</div>
<img src ="http://www.blogjava.net/tbest/aggbug/196038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tbest/" target="_blank">liujg</a> 2008-04-25 18:35 <a href="http://www.blogjava.net/tbest/articles/196038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>