Arazzo Apache - Architettura

Tapestry cerca di utilizzare il più possibile le funzionalità disponibili di Java. Ad esempio, tutte le pagine di Tapestry sono semplicemente POJO. Non impone alcuna interfaccia personalizzata o classe base per scrivere l'applicazione. Utilizza invece Annotation (un'opzione leggera per estendere la funzionalità di una classe Java) per fornire funzionalità. Si basa su test di battagliaJava Servlet APIed è implementato come un filtro servlet. Fornisce una nuova dimensione all'applicazione web e la programmazione è abbastanza semplice, flessibile, comprensibile e robusta.

Flusso di lavoro

Parliamo della sequenza di azioni che si verificano quando viene richiesta una pagina di arazzo.

Step 1 - Il Java Servletriceve la richiesta della pagina. Questo Java Servlet è configurato in modo tale che la richiesta in arrivo verrà inoltrata a tapestry. La configurazione viene eseguita inweb.xmlcome specificato nel programma seguente. Il tag Filter and Filter Mapping reindirizza tutte le richieste 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 - Il Tapestry Filter chiama il HttpServletRequestHandler Servizio da parte sua Service() metodo.

Step 3 - HttpServletRequestHandler memorizza la richiesta e la risposta in RequestGlobals. Inoltre racchiude la richiesta e la risposta come oggetto Request and Response e la invia a RequestHandler.

Step 4 - Il RequestHandler è un'astrazione sopra HttpServletRequestdi Servlet API. Alcune delle caratteristiche salienti dell'arazzo sono realizzate inRequestHandlersezione. La caratteristica dell'arazzo può essere estesa scrivendo un filtro in RequestHandler. RequestHandler fornisce diversi filtri incorporati, che includono:

  • CheckForUpdates Filter- Responsabile del ricaricamento della classe dal vivo. Questo filtro controlla le classi java per le modifiche e aggiorna l'applicazione secondo necessità.

  • Localization Filter - Identificare la posizione dell'utente e fornire supporto per la localizzazione dell'applicazione.

  • StaticFiles Filter- Identifica la richiesta statica e interrompe il processo. Una volta interrotto il processo, Java Servlet assume il controllo ed elabora la richiesta.

  • Error Filter - Cattura l'eccezione non rilevata e presenta la pagina del rapporto sull'eccezione.

RequestHandler modifica e archivia anche la richiesta e la risposta in RequestQlobals e richiama il servizio MasterDispatcher.

Step 5 - Il MasterDispatcherè responsabile del rendering della pagina chiamando diversi spedizionieri è un ordine specifico. I quattro dispatcher principali chiamati da MasterDispatcher sono i seguenti:

  • RootPath Dispatcher - Riconosce il percorso di root "/" della richiesta e rende lo stesso della pagina iniziale.

  • Asset Dispatcher - Ha riconosciuto la richiesta dell'asset (asset Java) controllando il pattern URL / assets / e invia gli asset richiesti come flussi di byte.

  • PageRender Dispatcher- La maggior parte delle operazioni di tappezzeria vengono eseguite in PageRender Dispatcher e nel successivo Component Dispatcher. Questo dispatcher riconosce la pagina specifica di quella richiesta e il suo contesto di attivazione (informazioni aggiuntive). Quindi esegue il rendering di quella particolare pagina e la invia al client. Ad esempio, se l'URL della richiesta è / product / 12123434, il dispatcher controllerà se è disponibile una classe con nome product / 12123434. Se trovato, chiama la classe product / 12123434, genera la risposta e la invia al client. In caso contrario, verifica la classe di prodotto. Se trovato, chiama la classe di prodotto con informazioni aggiuntive 121234434, genera la risposta e la invia al client. Queste informazioni aggiuntive sono chiamate Contesto di attivazione. Se non viene trovata alcuna classe, inoltra semplicemente la richiesta a Component Dispatcher.

  • Component Dispatcher- Component Dispatcher corrisponde all'URL della pagina con il pattern - / <class_name> / <component_id>: <event_type> / <activation_context>. Ad esempio, / product / grid: sort / asc rappresenta la classe di prodotto, il componente della griglia, il tipo di evento sortevent e il contesto di attivazione asc. In questo caso, event_type è facoltativo e se non ne viene fornito nessuno, verrà attivata l'azione predefinita del tipo di evento. Di solito, la risposta del dispatcher del componente è inviare un reindirizzamento al client. Per lo più, il reindirizzamento corrisponderà a PageRender Dispatcher nella richiesta successiva e la risposta corretta verrà inviata al client.