Apache Tapisserie - Architektur

Tapestry versucht, die verfügbaren Funktionen von Java so weit wie möglich zu nutzen. Zum Beispiel sind alle Tapisserieseiten einfach POJOs. Es werden keine benutzerdefinierten Schnittstellen oder Basisklassen zum Schreiben der Anwendung erzwungen. Stattdessen wird Annotation (eine einfache Option zum Erweitern der Funktionalität einer Java-Klasse) verwendet, um Funktionen bereitzustellen. Es basiert auf kampferprobtenJava Servlet APIund ist als Servlet-Filter implementiert. Es bietet der Webanwendung eine neue Dimension und die Programmierung ist recht einfach, flexibel, verständlich und robust.

Arbeitsablauf

Lassen Sie uns die Abfolge der Aktionen diskutieren, die stattfinden, wenn eine Tapisserieseite angefordert wird.

Step 1 - Die Java Servletempfängt die Seitenanforderung. Dieses Java-Servlet ist so konfiguriert, dass die eingehende Anforderung an Tapisserie weitergeleitet wird. Die Konfiguration erfolgt in derweb.xmlwie im folgenden Programm angegeben. Filter und Filter Mapping-Tag leiten alle Anforderungen an Tapestry Filter weiter .

<!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 - Die Tapestry Filter ruft die HttpServletRequestHandler Service von seiner Service() Methode.

Step 3 - - HttpServletRequestHandler speichert die Anfrage und Antwort in RequestGlobals. Außerdem wird die Anforderung und Antwort als Anforderungs- und Antwortobjekt verpackt und an den RequestHandler gesendet.

Step 4 - Die RequestHandler ist eine Abstraktion über HttpServletRequestder Servlet-API. Einige der herausragenden Merkmale des Wandteppichs sind in ausgeführtRequestHandlerSektion. Die Funktion von Tapisserie kann durch Schreiben eines Filters in RequestHandler erweitert werden. RequestHandler bietet mehrere integrierte Filter, darunter:

  • CheckForUpdates Filter- Verantwortlich für das Nachladen der Live-Klasse. Dieser Filter überprüft die Java-Klassen auf Änderungen und aktualisiert die Anwendung nach Bedarf.

  • Localization Filter - Identifizieren Sie den Standort des Benutzers und bieten Sie Lokalisierungsunterstützung für die Anwendung.

  • StaticFiles Filter- Identifizieren Sie die statische Anforderung und brechen Sie den Prozess ab. Sobald der Prozess abgebrochen wurde, übernimmt Java Servlet die Kontrolle und verarbeitet die Anforderung.

  • Error Filter - Fängt die nicht erfasste Ausnahme ab und zeigt die Seite mit dem Ausnahmebericht an.

Der RequestHandler ändert und speichert auch die Anforderung und Antwort im RequestQlobals und ruft den MasterDispatcher-Dienst auf.

Step 5 - Die MasterDispatcherist verantwortlich für das Rendern der Seite durch Aufrufen mehrerer Dispatcher ist eine bestimmte Bestellung. Die vier von MasterDispatcher aufgerufenen Hauptverteiler lauten wie folgt:

  • RootPath Dispatcher - Es erkennt den Stammpfad "/" der Anforderung und rendert den gleichen wie die Startseite.

  • Asset Dispatcher - Die Anforderung des Assets (Java-Assets) wurde durch Überprüfen des URL-Musters / Assets / erkannt und die angeforderten Assets als Byte-Streams gesendet.

  • PageRender Dispatcher- Ein Großteil der Tapisserieoperationen wird im PageRender Dispatcher und im nächsten Dispatcher Component Dispatcher ausgeführt. Dieser Dispatcher erkennt die bestimmte Seite dieser Anforderung und ihren Aktivierungskontext (zusätzliche Informationen). Anschließend wird diese bestimmte Seite gerendert und an den Client gesendet. Wenn die Anforderungs-URL beispielsweise / product / 12123434 lautet, prüft der Dispatcher, ob eine Klasse mit dem Namen product / 12123434 verfügbar ist. Wenn es gefunden wird, ruft es die Klasse product / 12123434 auf, generiert die Antwort und sendet sie an den Client. Wenn nicht, wird nach Produktklassen gesucht. Wenn es gefunden wird, ruft es die Produktklasse mit zusätzlichen Informationen 121234434 auf, generiert die Antwort und sendet sie an den Client. Diese zusätzlichen Informationen werden als Aktivierungskontext bezeichnet. Wenn keine Klasse gefunden wird, wird die Anforderung einfach an Component Dispatcher weitergeleitet.

  • Component Dispatcher- Component Dispatcher stimmt die URL der Seite mit dem Muster überein - / <Klassenname> / <Komponenten-ID>: <Ereignistyp> / <Aktivierungskontext>. Beispiel: / product / grid: sort / asc repräsentiert die Produktklasse, die Grid-Komponente, den Sortevent-Typ und den ASC-Aktivierungskontext. Hier ist event_type optional. Wenn keine angegeben ist, wird die Standardaktion für den Ereignistyp ausgelöst. Normalerweise besteht die Antwort des Komponenten-Dispatchers darin, eine Umleitung an den Client zu senden. Meistens stimmt die Umleitung bei der nächsten Anforderung mit dem PageRender Dispatcher überein, und die richtige Antwort wird an den Client gesendet.