浏览 2530 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-18
本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf
请求处理
理解请求处理管道是非常重要的,因为这是Tapestry的一个主要扩展点。
Tapestry 过滤器
TapestryFilter负责一系列的启动和初始化功能。
HttpServletRequestHandler 管道
Tapestry不用贡献任何过滤器到这个它自己的管道中。
管道终结器做两件事:
RequestHandler 管道
这个管道大部分的扩展涉及请求发生。Request表现为一个HttpServletRequest之上的抽象;这是支持非servlet应用必需的,比如像portlet应用。在Tapestry内的其他代码与服务要求获得请求中的信息,如查询参数,该信息从Request(或Response)对象中被获得。
这个管道包括许多内建的过滤器。
1. CheckForUpdates负责类和模版的重载。
2. Localization 确定用户的本地化。.
3. StaticFiles为静态文件(存在于web上下文内的文件)和中断请求检查URLs,这样servlet容器可以正常的处理请求。
4. ErrorFilter从Tapestry底层捕获未捕获的异常并且呈现这个异常的报告页面。它调用alias:RequestExceptionHandler服务负责初始化和呈现core/ExceptionReport页面。
MasterDispatcher 服务
该MasterDispatcher服务是一个链的指挥,聚集在一起(在一个特定的顺序),几Dispatcher对象. 每个Dispatcher建立认识和处理特定种类的URL.
lRootPath
l Asset
请求用”/assets”关联存储在classpath上,在Tapestry JARs(或者在组件库的JAR内)内的asset resources(asset资源)。请求文件的内容将被抽取下来给客户端浏览器。
l PageRender
页面呈现请求是呈现一个特殊页面的请求。这样的请求可以在路径上包括附加的元素,它将被加工为活动的上下文(通常来说,这是一些相关的实体对象的主键),允许页面重建状态这需要它成功的呈现自身。
事件处理器方法对于活动的事件应该返回一个值;这个值被加工为和从组件动作请求返回值相同; 通常这将导致重定向到另一页. 这样,活动事件可以在页级别进行简单的验证 ("用户能看到这一页?") .
页面呈现由页面的逻辑名加上路径元素组成的URLs给活动的上下文。调度器在这剥离他们的路径直到找到一个已知的页面名。这样,”/mypage/27”将首先寻找名为”mypage/27”的页面,然后寻找页面名为”mypage”的页面。假设第二次查找是成功的,这个页面将被激活使用上下文”27”,如果没有逻辑页面名可以被确定,控制交给下一个调度器。
l ComponentAction
组件动作调度器被用来触发组件内的事件。
URL标识页面名后面是一系列的组件id(从页面到特定的组件的路径),接下来是被组件触发的事件名。其余路径元素作为事件的上下文 (目前不适用活动页)。 例如,"/griddemo.FOO.BAR/3"将查找页面”griddemo”,然后是组件”FOO.BAR”,然后触发一个事件指定名为”action”(默认的事件类型,在URL中省略),使用上下文”3”。
如果页面被怀疑有一个活动的上下文,它被提供一个附加的参数在link上。
万一事件类型不是默认的,”action”将出现在嵌套的组件id和事件上下文之间,前面加上冒号。例如:"/example/foo.bar:magic/99"将触发一个”magic”类型事件。这在Tapestry框架中不是常用的,但可能更常用来做为Ajax特性(将不使用正常的请求逻辑)被执行。
RequestGlobals 服务
RequestGlobals服务拥有每一个线程的生命周期,因此,对于每个线程,这意味着每个线程里存在一个独立的实例。这两个处理器管道的终结器存储一对请求/响应到RequestGlobals服务里。
Request 服务
Request服务是一个RequestGlobals服务请求性质的影子。就是说,任何在这个服务上调用的方法都被委派给存储在RequestGlobals内的请求对象。
这个服务是容易访问的,通过使用对象关联 alias:Request。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |