Apache Tapestry - Mimari
Tapestry, Java'nın mevcut özelliklerini olabildiğince kullanmaya çalışır. Örneğin, tüm Goblen sayfaları sadece POJO'lardır. Uygulamayı yazmak için herhangi bir özel arabirimi veya temel sınıfı zorlamaz. Bunun yerine, özellikler sağlamak için Annotation (bir Java sınıfının işlevselliğini genişletmek için hafif bir seçenek) kullanır. Savaşta test edilmiştirJava Servlet APIve bir Servlet Filtresi olarak uygulanır. Web uygulamasına yeni bir boyut sağlar ve programlama oldukça Basit, Esnek, Anlaşılır ve Sağlamdır.
İş akışı
Bir duvar halısı sayfası istendiğinde gerçekleşen eylem sırasını tartışalım.
Step 1 - Java Servletsayfa talebini alır. Bu Java Servlet, gelen istek goblenlere iletilecek şekilde yapılandırılmıştır. Yapılandırma,web.xmlaşağıdaki programda belirtildiği gibi. Filtre ve Filtre Haritalama etiketi, tüm isteği Goblen Filtresine yönlendirir .
<!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 - Tapestry Filter arar HttpServletRequestHandler Onun tarafından hizmet Service() yöntem.
Step 3 - HttpServletRequestHandler istek ve yanıtı şurada depolar: RequestGlobals. Ayrıca, isteği ve yanıtı bir İstek ve Yanıt nesnesi olarak sarar ve bunu RequestHandler'a gönderir.
Step 4 - RequestHandler üstüne bir soyutlamadır HttpServletRequestServlet API'si. Goblenin göze çarpan özelliklerinden bazıları,RequestHandlerBölüm. Goblenin özelliği, RequestHandler'da bir filtre yazılarak genişletilebilir. RequestHandler, aşağıdakileri içeren birkaç yerleşik filtre sağlar:
CheckForUpdates Filter- Canlı sınıf yeniden yüklemesinden sorumlu. Bu filtre, java sınıflarını değişiklikler için kontrol eder ve uygulamayı gerektiği gibi günceller.
Localization Filter - Kullanıcının yerini belirleyin ve uygulama için yerelleştirme desteği sağlayın.
StaticFiles Filter- Statik isteği tanımlayın ve işlemi iptal edin. İşlem durdurulduğunda, Java Servlet kontrolü ele alır ve isteği işler.
Error Filter - Yakalanmayan istisnayı yakalar ve istisna raporu sayfasını sunar.
RequestHandler ayrıca RequestQlobals'daki isteği ve yanıtı değiştirir ve saklar ve MasterDispatcher hizmetini çağırır.
Step 5 - MasterDispatcherbelirli bir sipariş birkaç dağıtım memurunu çağırarak sayfayı oluşturmaktan sorumludur. MasterDispatcher tarafından çağrılan dört ana dağıtıcı aşağıdaki gibidir -
RootPath Dispatcher - İsteğin kök yolunu "/" tanır ve Başlangıç sayfasıyla aynı şekilde işler.
Asset Dispatcher - URL kalıbını / varlıkları / kontrol ederek varlık (Java varlıkları) talebini tanıdı ve istenen varlıkları bayt akışları olarak gönderir.
PageRender Dispatcher- Goblen işlemlerinin toplu işlemleri, PageRender Dispatcher ve bir sonraki sevkıyatçı Component Dispatcher'da yapılır. Bu görev dağıtıcı, bu isteğin belirli sayfasını ve etkinleştirme bağlamını tanır (ek bilgi). Daha sonra o belirli sayfayı işler ve müşteriye gönderir. Örneğin, istek url'si / product / 12123434 ise, sevk görevlisi product / 12123434 adında herhangi bir sınıfın mevcut olup olmadığını kontrol edecektir. Bulunursa ürün / 12123434 sınıfını çağırır, yanıtı oluşturur ve istemciye gönderir. Değilse, ürün sınıfını kontrol eder. Bulunursa, 121234434 ekstra bilgi içeren ürün sınıfını çağırır, yanıtı oluşturur ve istemciye gönderir. Bu ekstra bilgiye Aktivasyon Bağlamı denir. Sınıf bulunmazsa, isteği Bileşen Dağıtıcısına iletir.
Component Dispatcher- Bileşen Dağıtıcı, sayfanın URL'sini - / <sınıf_adı> / <bileşen_kimliği>: <etkinlik_türü> / <etkinleştirme_ bağlamı> kalıbıyla eşleştirir. Örneğin, / product / grid: sort / asc ürün sınıfını, ızgara bileşenini, sortevent türünü ve artan etkinleştirme bağlamını temsil eder. Burada olay_türü isteğe bağlıdır ve hiçbiri sağlanmazsa, varsayılan olay türü eylemi tetiklenir. Genellikle, bileşen dağıtıcısının yanıtı, istemciye bir yeniden yönlendirme göndermektir. Çoğunlukla, yeniden yönlendirme, sonraki istekte PageRender Dispatcher ile eşleşecek ve müşteriye uygun yanıt gönderilecektir.