Tapiz Apache - Arquitectura

Tapestry intenta utilizar las funciones disponibles de Java tanto como sea posible. Por ejemplo, todas las páginas de Tapestry son simplemente POJO. No impone ninguna interfaz personalizada o clase base para escribir la aplicación. En su lugar, utiliza Anotación (una opción ligera para ampliar la funcionalidad de una clase Java) para proporcionar funciones. Se basa en pruebas de batallaJava Servlet APIy se implementa como un filtro de servlet. Proporciona una nueva dimensión a la aplicación web y la programación es bastante simple, flexible, comprensible y robusta.

Flujo de trabajo

Analicemos la secuencia de acción que tiene lugar cuando se solicita una página de tapiz.

Step 1 - el Java Servletrecibe la solicitud de la página. Este Servlet de Java está configurado de tal manera que la solicitud entrante se reenviará a tapiz. La configuración se realiza en elweb.xmlcomo se especifica en el siguiente programa. La etiqueta Filter and Filter Mapping redirige todas las solicitudes a Tapestry Filter .

<!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>

Step 2 - el Tapestry Filter llama al HttpServletRequestHandler Servicio por su Service() método.

Step 3 - HttpServletRequestHandler almacena la solicitud y la respuesta en RequestGlobals. También envuelve la solicitud y la respuesta como un objeto de solicitud y respuesta y lo envía al RequestHandler.

Step 4 - el RequestHandler es una abstracción encima de HttpServletRequestde la API de Servlet. Algunas de las características más destacadas del tapiz se realizan enRequestHandlersección. La función de tapiz se puede ampliar escribiendo un filtro en RequestHandler. RequestHandler proporciona varios filtros integrados, que incluyen:

  • CheckForUpdates Filter- Responsable de recarga de clases en vivo. Este filtro comprueba si hay cambios en las clases de Java y actualiza la aplicación según sea necesario.

  • Localization Filter - Identificar la ubicación del usuario y brindar soporte de localización para la aplicación.

  • StaticFiles Filter- Identifica la solicitud estática y aborta el proceso. Una vez que se aborta el proceso, Java Servlet toma el control y procesa la solicitud.

  • Error Filter - Detecta la excepción no detectada y presenta la página del informe de excepción.

RequestHandler también modifica y almacena la solicitud y la respuesta en RequestQlobal e invoca el servicio MasterDispatcher.

Step 5 - el MasterDispatcheres responsable de renderizar la página llamando a varios despachadores es un pedido específico. Los cuatro despachadores principales llamados por MasterDispatcher son los siguientes:

  • RootPath Dispatcher - Reconoce la ruta raíz “/” de la solicitud y la representa como la página de inicio.

  • Asset Dispatcher - Reconoció la solicitud de activos (activos de Java) al verificar el patrón de URL / activos / y envía los activos solicitados como flujos de bytes.

  • PageRender Dispatcher- La mayor parte de las operaciones de tapiz se realizan en PageRender Dispatcher y en el siguiente despachador Component Dispatcher. Este despachador reconoce la página particular de esa solicitud y su contexto de activación (información adicional). Luego procesa esa página en particular y la envía al cliente. Por ejemplo, si la URL de solicitud es / product / 12123434, el despachador verificará si hay alguna clase con el nombre product / 12123434 disponible. Si lo encuentra, llama a la clase product / 12123434, genera la respuesta y la envía al cliente. Si no es así, verifica la clase de producto. Si lo encuentra, llama a la clase de producto con información adicional 121234434, genera la respuesta y la envía al cliente. Esta información adicional se denomina contexto de activación. Si no se encuentra ninguna clase, simplemente reenvía la solicitud a Component Dispatcher.

  • Component Dispatcher- Component Dispatcher hace coincidir la URL de la página con el patrón - / <class_name> / <component_id>: <event_type> / <activation_context>. Por ejemplo, / product / grid: sort / asc representa la clase de producto, el componente de la cuadrícula, el tipo de evento y el contexto de activación de asc. Aquí, event_type es opcional y si no se proporciona ninguno, se activará la acción de tipo de evento predeterminada. Por lo general, la respuesta del despachador de componentes es enviar una redirección al cliente. En su mayoría, la redirección coincidirá con PageRender Dispatcher en la próxima solicitud y se enviará la respuesta adecuada al cliente.