Apache Tapestry 架构
Tapestry 尝试尽可能多地使用 Java 的可用特性。例如,所有 Tapestry 页面都是简单的 POJO。它不强制任何自定义接口或基类来编写应用程序。相反,它使用 Annotation(扩展 Java 类功能的轻量级选项)来提供特性。它基于经过实战考验 Java Servlet API 并被实现为 Servlet 过滤器。它为 Web 应用程序提供了一个新的维度,并且编程非常简单、灵活、易于理解和健壮。
Workflow
让我们讨论当请求挂毯页面时发生的动作顺序。
步骤 1 : The Java 小服务程序 接收页面请求。这个 Java Servlet 的配置方式是传入的请求将被转发到 Tapestry。配置在 web.xml 如以下程序中指定的那样。过滤器和过滤器映射标签将所有请求重定向到 挂毯过滤器 .
<!DOCTYPE web-app PUBLIC "-// 太阳微系统公司 "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 : The 挂毯过滤器 调用 HttpServletRequestHandler 由其服务 服务() method.
步骤 3 : HttpServletRequestHandler 将请求和响应存储在 请求全局 .它还将请求和响应包装为 Request 和 Response 对象,并将其发送到 RequestHandler。
步骤 4 : The 请求处理程序 是之上的抽象 HttpServlet请求 Servlet API。挂毯的一些显着特征是在 请求处理程序 部分。 Tapestry 的特性可以通过在 RequestHandler 中编写一个过滤器来扩展。 RequestHandler 提供了几个内置的过滤器,包括:
-
CheckForUpdates 过滤器 : 负责直播类的重载。此过滤器检查 Java 类的更改并根据需要更新应用程序。
-
定位过滤器 : 识别用户所在位置,为应用提供本地化支持。
-
静态文件过滤器 : 识别静态请求并中止进程。一旦进程中止,Java Servlet 就会控制并处理请求。
-
错误过滤器 : 捕获未捕获的异常并呈现异常报告页面。
RequestHandler 还将请求和响应修改并存储在 RequestQlobals 中,并调用 MasterDispatcher 服务。
步骤 5 : The 主调度员 负责通过调用几个dispatcher来渲染页面是一个特定的顺序。 MasterDispatcher调用的四大调度器如下:
-
RootPath 调度程序 : 识别请求的根路径“/”,并渲染为与起始页相同。
-
资产调度员 : 它通过检查url模式/assets/来识别资产(Java资产)请求,并将请求的资产作为字节流发送。
-
PageRender 调度程序 : 大部分挂毯操作都是在PageRender Dispatcher和下一个Dispatcher Component Dispatcher中完成的。该调度程序识别该请求的特定页面及其激活上下文(额外信息)。然后它呈现该特定页面并将其发送给客户端。例如,如果请求 url 是 /product/12123434,调度程序将检查是否有任何名称为 product/12123434 的类可用。如果找到,它会调用 product/12123434 类,生成响应并将其发送给客户端。如果不是,它会检查产品类别。如果找到,它会调用带有额外信息 121234434 的产品类,生成响应并将其发送给客户端。这个额外的信息称为激活上下文。如果没有找到类,它只是将请求转发给 Component Dispatcher。
-
组件调度器 : Component Dispatcher 将页面的 URL 与模式匹配 - /
/ : / 。例如,/product/grid:sort/asc 表示产品类、网格组件、排序事件类型和 asc 激活上下文。这里, event_type 是可选的,如果没有提供,默认的事件类型动作将被触发。通常,组件调度器的响应是向客户端发送重定向。大多数情况下,重定向将在下一个请求中匹配 PageRender Dispatcher,并将正确的响应发送到客户端。