📜  Apache Tapestry-体系结构

📅  最后修改于: 2020-10-27 03:00:40             🧑  作者: Mango


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

工作流程

让我们讨论在请求挂毯页面时发生的操作顺序。

工作流程

步骤1Java Servlet接收页面请求。该Java Servlet的配置方式是将传入请求转发到Tapestry。如以下程序中所指定,在web.xml中完成配置。 Filter和Filter Mapping标记将所有请求重定向到Tapestry Filter

 
   My Tapestry Application 
    
      tapestry.app-package 
      org.example.myapp 
    
    
      app 
      org.apache.tapestry5.TapestryFilter 
    
    
      app 
      /* 
    
 

步骤2Tapestry筛选器通过其Service()方法调用HttpServletRequestHandler服务。

步骤3HttpServletRequestHandler将请求和响应存储在RequestGlobals中。它还将请求和响应包装为请求和响应对象,并将其发送到RequestHandler。

步骤4RequestHandler是Servlet API的HttpServletRequest之上的抽象。挂毯的一些重要功能是在RequestHandler部分完成的。挂毯的功能可以通过在RequestHandler中编写过滤器来扩展。 RequestHandler提供了几个内置过滤器,其中包括-

  • CheckForUpdates筛选器-负责实时类的重新加载。此过滤器检查java类的更改,并根据需要更新应用程序。

  • 本地化过滤器-标识用户的位置并为应用程序提供本地化支持。

  • StaticFiles筛选器-确定静态请求并中止该过程。一旦流程中止,Java Servlet将控制并处理请求。

  • 错误过滤器-捕获未捕获的异常并显示异常报告页面。

RequestHandler还将修改请求和响应并将其存储在RequestQlobals中,并调用MasterDispatcher服务。

步骤5MasterDispatcher负责通过调用多个调度程序来渲染页面。 MasterDispatcher调用的四个主要调度程序如下-

  • RootPath Dispatcher-识别请求的根路径“ /”,并将其呈现为“开始”页面。

  • Asset Dispatcher-通过检查url模式/ assets /识别了资产(Java资产)请求,并将请求的资产作为字节流发送。

  • PageRender Dispatcher-大部分挂毯操作在PageRender Dispatcher和下一个分派器Component Dispatcher中完成。该调度程序识别该请求的特定页面及其激活上下文(其他信息)。然后,它将呈现该特定页面并将其发送给客户端。例如,如果请求url为/ product / 12123434,则调度程序将检查名称为product / 12123434的任何类是否可用。如果找到,它将调用product / 12123434类,生成响应并将其发送给客户端。如果不是,则检查产品类别。如果找到,它将调用带有附加信息的产品类121234434,生成响应并将其发送给客户端。此额外信息称为激活上下文。如果未找到任何类,则仅将请求转发到组件分派器。

  • 组件分派器-组件分派器将页面的URL与以下模式匹配-/ / / 。例如,/ product / grid:sort / asc表示产品类,网格组件,sortevent类型和asc激活上下文。这里,event_type是可选的,如果未提供,则将触发默认事件类型操作。通常,组件分派器的响应是将重定向发送到客户端。通常,重定向将在下一个请求中与PageRender Dispatcher匹配,并且适当的响应将发送到客户端。