(A19)Tapestry Core :Request Processing

本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
请求处理
理解请求处理管道是非常重要的,因为这是 Tapestry 的一个主要扩展点。
大量的早期处理阶段是可扩展的管道( pipelines )形式。
Tapestry 过滤器
所有引入的请求都由配置在应用的 web.xml 里的 TapestryFilter 发起。
TapestryFilter 负责一系列的启动和初始化功能。
当他收到一个请求时, TapestryFilter 获得 HttpServletRequestHandler 服务并且调用它的 service() 方法。
HttpServletRequestHandler 管道
这个管道执行请求的初始化处理。它可以通过贡献一个 HttpServletRequestFilter HttpServletRequestHandler 服务的配置里被扩展。
Tapestry 不用贡献任何过滤器到这个它自己的管道中。
管道终结器做两件事:
1.        它存储请求和响应到 RequestGlobals 服务里。这是个存储每个线程或每个请求信息的线程服务
2.        它包裹这个请求和响应作为一个 RequestResponse ,然后传递他们到 RequestHandler 管道里。
RequestHandler 管道
这个管道大部分的扩展涉及请求发生。 Request 表现为一个 HttpServletRequest 之上的抽象;这是支持非 servlet 应用必需的,比如像 portlet 应用。在 Tapestry 内的其他代码与服务要求获得请求中的信息 , 如查询参数,该信息从 Request(Response) 对象中被获得。
这个管道包括许多内建的过滤器。
1.        CheckForUpdates 负责类和模版的重载。
2.        Localization 确定用户的本地化。 .
3.        StaticFiles 为静态文件(存在于 web 上下文内的文件)和中断请求检查 URLs ,这样 servlet 容器可以正常的处理请求。
4.        ErrorFilterTapestry 底层捕获未捕获的异常并且呈现这个异常的报告页面。它调用 alias:RequestExceptionHandler 服务负责初始化和呈现 core/ExceptionReport 页面。
终结器为这个管道存储 RequestResponseRequestGlobals 内,然后 MasterDispatcher 服务决定如何处理这个请求(如果它是,确实是,一个 Tapestry 请求)。
MasterDispatcher 服务
MasterDispatcher 服务是一个链的指挥 , 聚集在一起 ( 在一个特定的顺序 ),Dispatcher 对象 . 每个 Dispatcher 建立认识和处理特定种类的 URL.
l RootPath
在别处( elsewhere Configuring Tapestry )讨论的时候,请求的上下文 root 将替换为加工过的像呈现请求对应 ”start” 页面一样。
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特性(将不使用正常的请求逻辑)被执行。
来自于组件动作请求的响应是典型的,但不是普遍的,用来发送一个重定向给客户端;重定向的 URL 是一个页面呈现 URL 用来显示响应给事件。这在页面导航 (page navigation.) 里有详细说明。
RequestGlobals 服务
RequestGlobals 服务拥有每一个线程的生命周期,因此,对于每个线程,这意味着每个线程里存在一个独立的实例。这两个处理器管道的终结器存储一对请求 / 响应到 RequestGlobals 服务里。
Request 服务
Request 服务是一个 RequestGlobals 服务请求性质的影子。就是说,任何在这个服务上调用的方法都被委派给存储在 RequestGlobals 内的请求对象。
这个服务是容易访问的,通过使用对象关联 alias:Request 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值