Tapestry教程

Tapestry 架构

Tapestry 尝试尽可能多地使用 Java 的可用功能。例如,所有 Tapestry 页面都只是 POJO。它不强制任何自定义接口或基类来编写应用程序。相反,它使用 Annotation(一种用于扩展 Java 类功能的轻量级选项)来提供特性。它基于久经考验的 Java Servlet API,并作为 Servlet 过滤器实现。它为 Web 应用程序提供了一个新的维度,并且编程非常简单、灵活、易于理解和健壮。

工作流程

让我们讨论在请求挂毯页面时发生的操作顺序。
Workflow
步骤 1- Java Servlet 接收页面请求。这个 Java Servlet 的配置方式使得传入的请求将被转发到挂毯。配置在 web.xml 中完成,如以下程序中所指定。过滤器和过滤器映射标签将所有请求重定向到 Tapestry 过滤器
<!DOCTYPE web-app public "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
   "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
   <display-name>My Tapestry Application</display-name> 
   <context-param> 
      <param-name>tapestry.app-package</param-name> 
      <param-value>org.example.myapp</param-value> 
   </context-param> 
   <filter> 
      <filter-name>app</filter-name> 
      <filter-class>org.apache.tapestry5.TapestryFilter</filter-class> 
   </filter> 
   <filter-mapping> 
      <filter-name>app</filter-name> 
      <url-pattern>/*</url-pattern> 
   </filter-mapping> 
</web-app> 
步骤 2- Tapestry Filter 通过其 Service() 方法调用 HttpServletRequestHandler 服务。
Step 3- HttpServletRequestHandler 存储请求和响应 in RequestGlobals。它还将请求和响应包装为一个请求和响应对象,并将其发送给 RequestHandler。
步骤 4- RequestHandler 是在 Servlet API 的 HttpServletRequest 之上的抽象。挂毯的一些显着特征在 RequestHandler 部分完成。可以通过在 RequestHandler 中编写过滤器来扩展挂毯的特性。 RequestHandler 提供了几个内置过滤器,其中包括-
CheckForUpdates Filter-负责实时类重新加载。此过滤器检查 Java 类的更改并根据需要更新应用程序。 本地化过滤器-识别用户的位置并为应用程序提供本地化支持。 StaticFiles Filter-识别静态请求并中止进程。进程中止后,Java Servlet 将控制并处理请求。 错误过滤器-捕获未捕获的异常并显示异常报告页面。
RequestHandler 还会修改并存储 RequestQlobals 中的请求和响应,并调用 MasterDispatcher 服务。
步骤 5- MasterDispatcher 负责通过调用多个调度程序来呈现页面,这是一个特定的顺序。 MasterDispatcher 调用的四个主要调度器如下-
RootPath Dispatcher-它识别请求的根路径"/"并呈现与起始页相同的内容。 Asset Dispatcher-它通过检查 url 模式/assets/识别资产(Java 资产)请求,并将请求的资产作为字节流发送。 PageRender Dispatcher-大部分挂毯操作在 PageRender Dispatcher 和下一个 Dispatcher Component Dispatcher 中完成。该调度程序识别该请求的特定页面及其激活上下文(额外信息)。然后呈现该特定页面并将其发送给客户端。例如,如果请求 url 是/product/12123434,调度程序将检查是否有名称为 product/12123434 的类可用。如果找到,它会调用 product/12123434 类,生成响应并将其发送给客户端。如果不是,它会检查产品类别。如果找到,它会调用带有额外信息 121234434 的产品类,生成响应并将其发送给客户端。这个额外的信息称为激活上下文。如果没有找到类,它只是将请求转发给组件调度程序。 Component Dispatcher-Component Dispatcher 将页面的 URL 与模式匹配-/<class_name>/<component_id>:<event_type>/。例如,/product/grid:sort/asc 表示产品类、网格组件、sortevent 类型和 asc 激活上下文。这里, event_type 是可选的,如果没有提供,将触发默认的事件类型操作。通常,组件调度器的响应是向客户端发送重定向。大多数情况下,重定向将在下一个请求中匹配 PageRender Dispatcher,并将正确的响应发送到客户端。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4